ALV事件-开窗,另外有COLLECT汇总用法
\&——————————————————————————————————-*
*& Report ZPP009
*&——————————————————————————————————-*
*&
*&——————————————————————————————————-**
REPORT zpp009.
TABLES : aufk , afpo,afko ,jest.
DATA : BEGIN OF gs_Out ,
dwerk LIKE afpo-dwerk,
aufnr LIKE afpo-aufnr,
dauat LIKE afpo-dauat,
matnr LIKE afpo-matnr,
maktx LIKE makt-maktx,
psmng LIKE afpo-psmng,
wemng LIKE afpo-wemng,
lgort LIKE afpo-lgort,
gstrp LIKE afko-gstrp,
gltrp LIKE afko-gltrp,
erdat LIKE aufk-erdat,
erfzeit LIKE aufk-erfzeit,
ernam LIKE aufk-ernam,
dispo LIKE afko-dispo,
fevor LIKE afko-fevor,
txt LIKE t024f-txt,
ablad LIKE afpo-ablad,
arbpl LIKE crhd-arbpl,
matnr2 LIKE resb-matnr,
maktx2 LIKE makt-maktx,
charg LIKE resb-charg,
bdmng LIKE resb-bdmng,
meins LIKE resb-meins,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
mark,
END OF gs_out .
DATA : gt_out LIKE TABLE OF gs_out .
DATA: gs_Out2 LIKE gs_out .
DATA: gt_out2 LIKE TABLE OF gs_out .
DATA: lt_out LIKE TABLE OF gs_out .
DATA: ls_out LIKE gs_out .
DATA: gt_fieldcat TYPE lvc_t_fcat .
DATA: gs_fieldcat TYPE lvc_s_fcat .
DATA: gs_layout TYPE lvc_s_layo .
DATA: g_fm_name TYPE rs38l_fnam.
DATA: gw_options TYPE ssfcompop,
gw_control TYPE ssfctrlop.
SELECT-OPTIONS: s_dwerk FOR afpo-dwerk,
s_matnr FOR afpo-matnr,
s_AUFNR FOR aufk-aufnr ,
s_dauat FOR afpo-dauat,
s_dispo FOR afko-dispo,
s_fevor FOR afko-fevor,
s_gstrp FOR afko-gstrp,
s_erdat FOR aufk-erdat,
s_ernam FOR aufk-ernam ,
s_inact FOR jest-inact.
START-OF-SELECTION .
SELECT
dwerk “ LIKE afpo-dwerk,
a~aufnr “ LIKE afpo-aufnr,
dauat “ LIKE afpo-dauat,
b~matnr “ LIKE afpo-matnr,
c~maktx “ LIKE makt-maktx,
psmng “ LIKE afpo-psmng,
wemng “ LIKE afpo-wemng,
b~lgort “ LIKE afpo-lgort,
d~gstrp “ LIKE afko-gstrp,
gltrp “ LIKE afko-gltrp,
erdat “ LIKE aufk-erdat,
erfzeit “LIKE aufk-erfzeit,
ernam “ LIKE aufk-ernam,
dispo “ LIKE afko-dispo,
d~fevor “ LIKE afko-fevor,
txt “ LIKE t024f-txt,
b~ablad
f~arbpl “ LIKE afpo-ablad,
h~matnr AS matnr2
i~maktx AS maktx2
h~charg
h~bdmng
h~meins
INTO CORRESPONDING FIELDS OF TABLE gt\_out
FROM aufk AS a
JOIN afpo AS b ON a~aufnr = b~aufnr
JOIN makt AS c ON b~matnr = c~matnr
JOIN afko AS d ON d~aufnr = a~aufnr
JOIN afvc AS e ON e~aufpl = d~aufpl
JOIN crhd AS f ON f~objid = e~arbid
JOIN t024f AS g ON g~fevor = d~fevor
JOIN resb AS h ON h~aufnr = b~aufnr
JOIN makt AS i ON h~matnr = i~matnr
JOIN jest AS j ON a~objnr = j~objnr
WHERE a~aufnr IN s\_aufnr
AND j~stat = 'I0002'
AND j~inact IN s\_inact
AND dwerk IN s\_dwerk
AND b~matnr IN s\_matnr
AND dauat IN s\_dauat
AND dispo IN s\_dispo
AND d~fevor IN s\_fevor
AND gstrp IN s\_gstrp
AND erdat IN s\_erdat
AND ernam IN s\_ernam
AND e~aplzl = '1'
AND g~werks = '1000'
AND h~shkzg = 'H'.
“dn10 dmin **字段增加
“**第一步
DATA: BEGIN OF gs_resb,
aufnr LIKE resb-aufnr,
shkzg LIKE resb-shkzg,
meins LIKE resb-meins,
xloek LIKE resb-xloek,
bdmng LIKE resb-bdmng,
matnr LIKE resb-matnr,
charg LIKE resb-charg,
cuobj_bm LIKE mch1-cuobj_bm,
objek LIKE ausp-objek,
atinn LIKE ausp-atinn,
klart LIKE ausp-klart, “ 023
atwrt LIKE ausp-atwrt,
atwrt2 LIKE ausp-atwrt,
END OF gs\_resb .
DATA : gt_resb LIKE TABLE OF gs_resb .
“**第二步,第三步
DATA: BEGIN OF gs_ausp,
objek LIKE ausp-objek,
atinn LIKE ausp-atinn,
klart LIKE ausp-klart, “ 023
atwrt LIKE ausp-atwrt,
END OF gs_ausp .
DATA : lv_atinn LIKE ausp-atinn .
\ LOOP AT gt_out INTO gs_out .*
CALL FUNCTION ‘CONVERSION_EXIT_ATINN_INPUT’
EXPORTING
input = ‘Z_BATCH_21’
IMPORTING
output = lv_atinn.
SELECT
aufnr “like resb-aufnr ,
shkzg “like resb-shkzg,
meins“ like resb-meins,
xloek “like resb-xloek,
bdmng “like resb-bdmng,
a~matnr “like resb-matnr,
a~charg “like resb-charg,
cuobj_bm “ MCH1-CUOBJ_BM
objek “like ausp-objek,
atinn “like ausp-atinn,
klart “like ausp-klart, “ 023
atwrt “like ausp-atwrt ,
INTO TABLE gt_resb
FROM resb AS a
JOIN mch1 AS b ON a~matnr = b~matnr AND a~charg = b~charg
JOIN ausp AS c ON b~cuobj_bm = c~objek
WHERE a~shkzg = ‘H’ AND a~meins = ‘KG’ AND a~xloek EQ ‘’ AND a~bdmng <> 0
AND c~atinn = lv_atinn AND c~klart = ‘023’ .
\ENDLOOP .*
DATA:BEGIN OF ls_resb ,
aufnr LIKE aufk-aufnr,
bdmng LIKE resb-bdmng,
atwrt2 TYPE p DECIMALS 6,
END OF ls_resb .
DATA : lt_resb LIKE TABLE OF ls_resb .
LOOP AT gt_resb INTO gs_resb .
MOVE-CORRESPONDING gs_resb TO ls_resb .
COLLECT ls_resb INTO lt_resb .
CLEAR: gs_resb ,ls_resb .
ENDLOOP .
DATA : ls_resb2 LIKE ls_resb .
DATA : lt_resb2 LIKE TABLE OF ls_resb .
LOOP AT gt_resb INTO gs_resb .
READ TABLE lt_resb INTO ls_resb WITH KEY aufnr = gs_resb-aufnr .
IF sy-subrc EQ 0 .
gs_resb-atwrt2 = gs_resb-bdmng * gs_resb-atwrt / ls_resb-bdmng .
MOVE-CORRESPONDING gs_resb TO ls_resb2 .
COLLECT ls_resb2 INTO lt_resb2 .
ENDIF .
ENDLOOP .
gt_Out2 = gt_out .
SORT gt_out2 BY aufnr .
DELETE ADJACENT DUPLICATES FROM gt_out2 COMPARING aufnr .
PERFORM frm_display_data.
FORM frm_display_data .
DATA: ls_grid_settings TYPE lvc_s_glay .
DATA : lt_events TYPE slis_t_event.
DATA: ls_variant TYPE disvariant.
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
append_field: ‘DWERK’ ‘工厂’ .
gs_fieldcat-fieldname = ‘AUFNR’.
gs_fieldcat-coltext = ‘生产订单’.
gs_fieldcat-ref_table = ‘AFKO’.
gs_fieldcat-ref_field = ‘AUFNR’.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
append_field: ‘DAUAT’ ‘订单类型’ .
gs_fieldcat-fieldname = ‘MATNR’.
gs_fieldcat-coltext = ‘物料代码’.
gs_fieldcat-ref_table = ‘MSEG’.
gs_fieldcat-ref_field = ‘MATNR’.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
append_field: ‘MAKTX’ ‘物料描述’ .
append_field: ‘PSMNG’ ‘订单计划数量’ .
append_field: ‘WEMNG’ ‘已入库数量’ .
append_field: ‘LGORT’ ‘收货地点’ .
append_field: ‘GSTRP’ ‘订单开始日期’ .
append_field: ‘GLTRP’ ‘订单结束日期’ .
append_field: ‘ERDAT’ ‘创建日期’ .
append_field: ‘ERNAM’ ‘创建账号’ .
append_field: ‘DISPO’ ‘MRP控制者’ .
gs_fieldcat-fieldname = ‘KUNNR’.
gs_fieldcat-coltext = ‘客户编码’.
gs_fieldcat-ref_table = ‘KNA1’.
gs_fieldcat-ref_field = ‘KUNNR’.
gs_fieldcat-edit = ‘X’ .
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
gs_fieldcat-fieldname = ‘NAME1’.
gs_fieldcat-coltext = ‘客户名称’.
gs_fieldcat-ref_table = ‘KNA1’.
gs_fieldcat-ref_field = ‘NAME1’.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
append_field: ‘FEVOR’ ‘生产调度员’ .
append_field: ‘TXT’ ‘生产车间’ .
append_field: ‘ABLAD’ ‘客户批次号’ .
append_field: ‘ARBPL ‘ ‘生产工序’ .
gs_layout-box_fname = ‘MARK’.
gs_layout-cwidth_opt = ‘X’. “**列宽自适应
gs_layout-zebra = ‘X’. “**斑马线
ls_grid_settings-edt_cll_cb = abap_true.
\ ls_grid_settings-edt_cll_cb = ‘X’.*
ls_variant-report = sy-repid.
APPEND VALUE #( name = ‘CALLER_EXIT’
form = ‘SET_HANDLER’
) TO lt_events.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = ‘FRM_STATUS_SET’
i_callback_user_command = ‘FRM_USER_COMMAND’
**
* I_GRID_SETTINGS =
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_save = ‘A’
i_grid_settings = ls_grid_settings
it_events = lt_events
is_variant = ls_variant
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_out2
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here*
ENDIF.
ENDFORM .
FORM frm_status_set USING ut_extab TYPE slis_t_extab.
SET PF-STATUS ‘PF_001’.
ENDFORM.
FORM frm_user_command USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
IF sy-ucomm EQ ‘CHK’ .
PERFORM cell_check .
us_selfield-refresh = ‘X’.
ENDIF .
IF sy-ucomm EQ ‘PRINT’ OR sy-ucomm EQ ‘PRINT2’ .
IF sy\-ucomm EQ 'PRINT' .
CALL FUNCTION 'SSF\_FUNCTION\_MODULE\_NAME'
EXPORTING
formname = 'ZSFPP009'
IMPORTING
fm\_name = g\_fm\_name
EXCEPTIONS
no\_form = 1
no\_function\_module = 2
OTHERS = 3.
ELSE .
CALL FUNCTION 'SSF\_FUNCTION\_MODULE\_NAME'
EXPORTING
formname = 'ZSFPP009B'
IMPORTING
fm\_name = g\_fm\_name
EXCEPTIONS
no\_form = 1
no\_function\_module = 2
OTHERS = 3.
ENDIF .
gw\_options\-tdnewid = 'X'. *"New Spool*
gw\_options\-tdimmed = 'X'.
gw\_options\-tddelete = 'X'. *"Delete Spool After Print*
gw\_options\-tdfinal = 'X'.
gw\_options\-tdiexit = 'X'. *"Exit after printing in print preview*
gw\_options\-tddest = 'LP01'.
\ gw_control-no_dialog = ‘X’.
gw_control-preview = ‘X’.
gw_control-no_open = ‘X’.
gw_control-no_close = ‘X’.
CALL FUNCTION ‘SSF_OPEN’ “*打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ‘’
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
LOOP AT gt\_out2 INTO gs\_out2 WHERE mark EQ 'X' .
LOOP AT gt\_out INTO gs\_out WHERE aufnr = gs\_out2\-aufnr.
APPEND gs\_out TO lt\_out .
ENDLOOP .
CALL FUNCTION g\_fm\_name
EXPORTING
control\_parameters = gw\_control
output\_options = gw\_options
\ is_bkpf = gs_bkpf
* IMPORTING
* job_output_info = l_end
* job_output_options = l_start
TABLES
it_out = lt_out
* it_bkpf = lt_bkpf*
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR: lt_out[] .
ENDLOOP .
CALL FUNCTION 'SSF\_CLOSE'
EXCEPTIONS
formatting\_error = 1
internal\_error = 2
send\_error = 3
OTHERS = 4.
ENDIF.
ENDFORM .
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
on_data_change FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING
er_data_changed.
PRIVATE SECTION.
METHODS:
set_zwcl
IMPORTING
ps_good TYPE lvc_s_modi
pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD on_data_change.
DATA:
ls_good TYPE lvc_s_modi.
LOOP AT er\_data\_changed\->mt\_good\_cells INTO ls\_good.
CASE ls\_good\-fieldname.
WHEN 'KUNNR'.
set\_zwcl(
EXPORTING
ps\_good = ls\_good
pr\_data\_changed = er\_data\_changed ).
ENDCASE.
ENDLOOP.
ENDMETHOD.
METHOD set_zwcl.
DATA: lv_kunnr TYPE kna1-kunnr .
DATA: lv_name1 TYPE kna1-name1 .
pr\_data\_changed\->get\_cell\_value(
EXPORTING
i\_row\_id = ps\_good\-row\_id
i\_fieldname = ps\_good\-fieldname
IMPORTING
e\_value = lv\_kunnr ).
pr\_data\_changed\->get\_cell\_value(
EXPORTING
i\_row\_id = ps\_good\-row\_id
i\_fieldname = 'KUNNR'
IMPORTING
e\_value = lv\_kunnr ).
\ if lv_zjhhk <> 0.*
\ lv_zwcl = lv_zsjhk / lv_zjhhk * 100.*
\ endif.*
SELECT SINGLE name1 INTO lv\_name1 FROM kna1 WHERE kunnr = lv\_kunnr .
pr\_data\_changed\->modify\_cell(
EXPORTING
i\_fieldname = 'NAME1'
i\_row\_id = ps\_good\-row\_id
i\_value = lv\_name1 ).
ENDMETHOD.
ENDCLASS.
FORM set_handler USING p_grid TYPE slis_data_caller_exit.
DATA:
lr_event_receiver TYPE REF TO lcl_event_receiver,
lr_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = lr_grid.
CREATE OBJECT lr_event_receiver.
SET HANDLER: lr_event_receiver->on_data_change FOR lr_grid.
ENDFORM.
\&——————————————————————————————————-*
*& Form cell_check
*&——————————————————————————————————-*
*& text
*&——————————————————————————————————-*
*& —> p1 text
*& <— p2 text
*&——————————————————————————————————-**
FORM cell_check .
DATA: I TYPE I .
I = 6 .
ENDFORM.
还没有评论,来说两句吧...