ALV事件-开窗,另外有COLLECT汇总用法

曾经终败给现在 2023-02-09 11:56 16阅读 0赞

20200518194954956.png

\&——————————————————————————————————-* *& 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

  1. INTO CORRESPONDING FIELDS OF TABLE gt\_out
  2. FROM aufk AS a
  3. JOIN afpo AS b ON a~aufnr = b~aufnr
  4. JOIN makt AS c ON b~matnr = c~matnr
  5. JOIN afko AS d ON d~aufnr = a~aufnr
  6. JOIN afvc AS e ON e~aufpl = d~aufpl
  7. JOIN crhd AS f ON f~objid = e~arbid
  8. JOIN t024f AS g ON g~fevor = d~fevor
  9. JOIN resb AS h ON h~aufnr = b~aufnr
  10. JOIN makt AS i ON h~matnr = i~matnr
  11. JOIN jest AS j ON a~objnr = j~objnr
  12. WHERE a~aufnr IN s\_aufnr
  13. AND j~stat = 'I0002'
  14. AND j~inact IN s\_inact
  15. AND dwerk IN s\_dwerk
  16. AND b~matnr IN s\_matnr
  17. AND dauat IN s\_dauat
  18. AND dispo IN s\_dispo
  19. AND d~fevor IN s\_fevor
  20. AND gstrp IN s\_gstrp
  21. AND erdat IN s\_erdat
  22. AND ernam IN s\_ernam
  23. AND e~aplzl = '1'
  24. AND g~werks = '1000'
  25. 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,

  1. 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’ .

  1. IF sy\-ucomm EQ 'PRINT' .
  2. CALL FUNCTION 'SSF\_FUNCTION\_MODULE\_NAME'
  3. EXPORTING
  4. formname = 'ZSFPP009'
  5. IMPORTING
  6. fm\_name = g\_fm\_name
  7. EXCEPTIONS
  8. no\_form = 1
  9. no\_function\_module = 2
  10. OTHERS = 3.
  11. ELSE .
  12. CALL FUNCTION 'SSF\_FUNCTION\_MODULE\_NAME'
  13. EXPORTING
  14. formname = 'ZSFPP009B'
  15. IMPORTING
  16. fm\_name = g\_fm\_name
  17. EXCEPTIONS
  18. no\_form = 1
  19. no\_function\_module = 2
  20. OTHERS = 3.
  21. ENDIF .
  22. gw\_options\-tdnewid = 'X'. *"New Spool*
  23. gw\_options\-tdimmed = 'X'.
  24. gw\_options\-tddelete = 'X'. *"Delete Spool After Print*
  25. gw\_options\-tdfinal = 'X'.
  26. gw\_options\-tdiexit = 'X'. *"Exit after printing in print preview*
  27. 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.

  1. LOOP AT gt\_out2 INTO gs\_out2 WHERE mark EQ 'X' .
  2. LOOP AT gt\_out INTO gs\_out WHERE aufnr = gs\_out2\-aufnr.
  3. APPEND gs\_out TO lt\_out .
  4. ENDLOOP .
  5. CALL FUNCTION g\_fm\_name
  6. EXPORTING
  7. control\_parameters = gw\_control
  8. 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[] .

  1. ENDLOOP .
  2. CALL FUNCTION 'SSF\_CLOSE'
  3. EXCEPTIONS
  4. formatting\_error = 1
  5. internal\_error = 2
  6. send\_error = 3
  7. 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.

  1. LOOP AT er\_data\_changed\->mt\_good\_cells INTO ls\_good.
  2. CASE ls\_good\-fieldname.
  3. WHEN 'KUNNR'.
  4. set\_zwcl(
  5. EXPORTING
  6. ps\_good = ls\_good
  7. pr\_data\_changed = er\_data\_changed ).
  8. ENDCASE.
  9. ENDLOOP.

ENDMETHOD.

METHOD set_zwcl.
DATA: lv_kunnr TYPE kna1-kunnr .
DATA: lv_name1 TYPE kna1-name1 .

  1. pr\_data\_changed\->get\_cell\_value(
  2. EXPORTING
  3. i\_row\_id = ps\_good\-row\_id
  4. i\_fieldname = ps\_good\-fieldname
  5. IMPORTING
  6. e\_value = lv\_kunnr ).
  7. pr\_data\_changed\->get\_cell\_value(
  8. EXPORTING
  9. i\_row\_id = ps\_good\-row\_id
  10. i\_fieldname = 'KUNNR'
  11. IMPORTING
  12. e\_value = lv\_kunnr ).

\ if lv_zjhhk <> 0.*

\ lv_zwcl = lv_zsjhk / lv_zjhhk * 100.*

\ endif.*

  1. SELECT SINGLE name1 INTO lv\_name1 FROM kna1 WHERE kunnr = lv\_kunnr .
  2. pr\_data\_changed\->modify\_cell(
  3. EXPORTING
  4. i\_fieldname = 'NAME1'
  5. i\_row\_id = ps\_good\-row\_id
  6. 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 .

  1. I = 6 .

ENDFORM.

发表评论

表情:
评论列表 (有 0 条评论,16人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Collections的基本

    今天遇到了个情况,就是把集合中的时间数据,倒序排列并展示,我想到的办法是,先把时间转化成时间戳,然后在进行比较大小,但是这种方法比较麻烦,所以找到了这个collections,