转换为: REPORT z_barry_test_fieldsymols . TYPE-POOLS: slis. TABLES: mseg,mkpf. DATA: gd_fieldcat TYPE slis_t_fieldcat_alv. DATA: sla TYPE slis_layout_alv , ivariant LIKE disvariant, i_repid LIKE sy-repid , i_excluding TYPE slis_t_extab. TYPES: BEGIN OF ty_sum , werks LIKE mseg-werks , matnr LIKE mseg-matnr , lgort LIKE mseg-lgort , bwart LIKE mseg-bwart , menge LIKE mseg-menge , END OF ty_sum. DATA : itab TYPE STANDARD TABLE OF ty_sum WITH HEADER LINE . DATA : hs_sum TYPE HASHED TABLE OF ty_sum WITH UNIQUE KEY werks matnr lgort bwart WITH HEADER LINE . DATA : itab_sum TYPE STANDARD TABLE OF ty_sum WITH HEADER LINE . DATA: BEGIN OF itab_out OCCURS 0, werks LIKE mseg-werks , matnr LIKE mseg-matnr , lgort LIKE mseg-lgort , menge01 TYPE i , menge02 TYPE i , menge03 TYPE i , menge04 TYPE i , menge05 TYPE i , menge06 TYPE i , menge07 TYPE i , menge08 TYPE i , menge09 TYPE i , menge10 TYPE i , menge11 TYPE i , menge12 TYPE i , menge13 TYPE i , menge14 TYPE i , menge15 TYPE i , menge16 TYPE i , menge17 TYPE i , menge18 TYPE i , menge19 TYPE i , menge20 TYPE i , menge21 TYPE i , menge22 TYPE i , menge23 TYPE i , menge24 TYPE i , menge25 TYPE i , menge26 TYPE i , line_sum TYPE i , END OF itab_out. TYPES: BEGIN OF ty_bwart , bwart LIKE mseg-bwart , END OF ty_bwart. DATA : hs_bwart TYPE HASHED TABLE OF ty_bwart WITH UNIQUE KEY bwart WITH HEADER LINE . DATA : itab_bwart TYPE STANDARD TABLE OF ty_bwart WITH HEADER LINE . FIELD-SYMBOLS: <f_fs1> , <f_fs2>. DATA: max_count TYPE i . SELECT-OPTIONS: s_mblnr FOR mseg-mblnr , s_budat FOR mkpf-budat . PARAMETERS: p_sum AS CHECKBOX . START-OF-SELECTION. PERFORM getdata. PERFORM fixdata. IF p_sum = 'X'. PERFORM outdata. ELSE. PERFORM outdata2. ENDIF. *&---------------------------------------------------------------------* *& Form GETDATA *&---------------------------------------------------------------------* FORM getdata. SELECT werks matnr lgort bwart menge INTO TABLE itab FROM mkpf INNER JOIN mseg ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr WHERE mkpf~mblnr IN s_mblnr AND mkpf~budat IN s_budat . ENDFORM. " GETDATA *&---------------------------------------------------------------------* *& Form FIXDATA *&---------------------------------------------------------------------* FORM fixdata. DATA: index LIKE sy-tabix . LOOP AT itab. hs_sum = itab. COLLECT hs_sum. hs_bwart = itab-bwart . COLLECT hs_bwart. ENDLOOP. SORT hs_bwart. itab_bwart[] = hs_bwart[]. itab_sum[] = hs_sum[]. LOOP AT itab_sum. itab_out-werks = itab_sum-werks . itab_out-matnr = itab_sum-matnr . itab_out-lgort = itab_sum-lgort . READ TABLE itab_bwart WITH KEY bwart = itab_sum-bwart . index = sy-tabix + 3. ASSIGN COMPONENT index OF STRUCTURE itab_out TO <f_fs1>. <f_fs1> = itab_sum-menge. itab_out-line_sum = itab_sum-menge. COLLECT itab_out. CLEAR itab_out. ENDLOOP. ENDFORM. " FIXDATA *&---------------------------------------------------------------------* *& Form outdata *&---------------------------------------------------------------------* FORM outdata. PERFORM fieldcat_init . sla-colwidth_optimize = 'X'. sla-zebra = 'X'. i_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = i_repid it_fieldcat = gd_fieldcat[] i_save = 'A' is_variant = ivariant is_layout = sla it_excluding = i_excluding i_callback_user_command = 'USER_COMMAND' TABLES t_outtab = itab_sum EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. " outdata *---------------------------------------------------------------------* * FORM fieldcat_init * *---------------------------------------------------------------------* FORM fieldcat_init . PERFORM frm_catlg_set USING: 'WERKS' 'WERKS' 'X' , 'MATNR' 'MATNR' 'X' , 'LGORT' 'LGORT' 'X' , 'BWART' 'BWART' 'X' , 'MENGE' 'MENGE' '' . ENDFORM. "fieldcat_init *---------------------------------------------------------------------* * FORM frm_catlg_set * *---------------------------------------------------------------------* FORM frm_catlg_set USING p_field p_text p_key. DATA: ls_fieldcat TYPE slis_fieldcat_alv. ls_fieldcat-fieldname = p_field. ls_fieldcat-seltext_l = p_text. ls_fieldcat-key = p_key. IF p_field = 'LINE_SUM'. ls_fieldcat-emphasize = 'C700'. ENDIF. APPEND ls_fieldcat TO gd_fieldcat . CLEAR ls_fieldcat . ENDFORM. "frm_catlg_set *&--------------------------------------------------------------------* *& Form user_command *&--------------------------------------------------------------------* FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. READ TABLE itab INDEX rs_selfield-tabindex. CASE r_ucomm. WHEN '&IC1'. "双击 WHEN 'EXIT'. LEAVE PROGRAM. ENDCASE. rs_selfield-refresh = 'X'. "自动刷新 ENDFORM. "user_com *---------------------------------------------------------------------* * FORM outdata2 * *---------------------------------------------------------------------* FORM outdata2. PERFORM fieldcat_init2 . sla-colwidth_optimize = 'X'. sla-zebra = 'X'. i_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = i_repid it_fieldcat = gd_fieldcat[] i_save = 'A' is_variant = ivariant is_layout = sla it_excluding = i_excluding i_callback_user_command = 'USER_COMMAND' TABLES t_outtab = itab_out EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. " outdata *---------------------------------------------------------------------* * FORM fieldcat_init2 * *---------------------------------------------------------------------* FORM fieldcat_init2 . DATA: c(2) TYPE n , txt(20) TYPE c . PERFORM frm_catlg_set USING: 'WERKS' 'WERKS' 'X' , 'MATNR' 'MATNR' 'X' , 'LGORT' 'LGORT' 'X' . LOOP AT hs_bwart . c = c + 1. CONCATENATE 'MENGE' c INTO txt. PERFORM frm_catlg_set USING: txt hs_bwart-bwart '' . ENDLOOP. PERFORM frm_catlg_set USING: 'LINE_SUM' 'SUM' '' . ENDFORM. "fieldcat_init 使用指针动态生成内表的方法: REPORT z_barry_test_fieldsymols . TYPE-POOLS: slis. TABLES: mseg,mkpf. DATA: gd_fieldcat TYPE slis_t_fieldcat_alv. DATA: sla TYPE slis_layout_alv , ivariant LIKE disvariant, i_repid LIKE sy-repid , i_excluding TYPE slis_t_extab. TYPES: BEGIN OF ty_sum , werks LIKE mseg-werks , matnr LIKE mseg-matnr , lgort LIKE mseg-lgort , bwart LIKE mseg-bwart , menge LIKE mseg-menge , END OF ty_sum. DATA : itab TYPE STANDARD TABLE OF ty_sum WITH HEADER LINE . DATA : hs_sum TYPE HASHED TABLE OF ty_sum WITH UNIQUE KEY werks matnr lgort bwart WITH HEADER LINE . DATA : itab_sum TYPE STANDARD TABLE OF ty_sum WITH HEADER LINE . TYPES: BEGIN OF ty_bwart , bwart LIKE mseg-bwart , END OF ty_bwart. DATA : hs_bwart TYPE HASHED TABLE OF ty_bwart WITH UNIQUE KEY bwart WITH HEADER LINE . DATA : itab_bwart TYPE STANDARD TABLE OF ty_bwart WITH HEADER LINE . FIELD-SYMBOLS: <f_fs1> , <f_out> TYPE STANDARD TABLE , <f_out_wa> . DATA: max_count TYPE i , dy_out TYPE REF TO data , dy_out_wa TYPE REF TO data, xfc TYPE lvc_s_fcat, ifc TYPE lvc_t_fcat. DATA: c(2) TYPE n , txt(20) TYPE c . SELECT-OPTIONS: s_mblnr FOR mseg-mblnr , s_budat FOR mkpf-budat . PARAMETERS: p_sum AS CHECKBOX . START-OF-SELECTION. PERFORM getdata. PERFORM fixdata. IF p_sum = 'X'. PERFORM outdata. ELSE. PERFORM outdata2. ENDIF. *&---------------------------------------------------------------------* *& Form GETDATA *&---------------------------------------------------------------------* FORM getdata. SELECT werks matnr lgort bwart menge INTO TABLE itab FROM mkpf INNER JOIN mseg ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr WHERE mkpf~mblnr IN s_mblnr AND mkpf~budat IN s_budat . ENDFORM. " GETDATA *&---------------------------------------------------------------------* *& Form FIXDATA *&---------------------------------------------------------------------* FORM fixdata. DATA: index LIKE sy-tabix . LOOP AT itab. hs_sum = itab. COLLECT hs_sum. hs_bwart = itab-bwart . COLLECT hs_bwart. ENDLOOP. SORT hs_bwart. itab_bwart[] = hs_bwart[]. itab_sum[] = hs_sum[]. PERFORM creat_itab_out. LOOP AT itab_sum. ASSIGN COMPONENT 'WERKS' OF STRUCTURE <f_out_wa> TO <f_fs1>. <f_fs1> = itab_sum-werks. ASSIGN COMPONENT 'MATNR' OF STRUCTURE <f_out_wa> TO <f_fs1>. <f_fs1> = itab_sum-matnr. ASSIGN COMPONENT 'LGORT' OF STRUCTURE <f_out_wa> TO <f_fs1>. <f_fs1> = itab_sum-lgort. READ TABLE itab_bwart WITH KEY bwart = itab_sum-bwart . index = sy-tabix + 3. ASSIGN COMPONENT index OF STRUCTURE <f_out_wa> TO <f_fs1>. <f_fs1> = itab_sum-menge. ASSIGN COMPONENT 'LINE_SUM' OF STRUCTURE <f_out_wa> TO <f_fs1>. <f_fs1> = itab_sum-menge. COLLECT <f_out_wa> INTO <f_out> . CLEAR <f_out_wa>. ENDLOOP. ENDFORM. " FIXDATA *&---------------------------------------------------------------------* *& Form outdata *&---------------------------------------------------------------------* FORM outdata. PERFORM fieldcat_init . sla-colwidth_optimize = 'X'. sla-zebra = 'X'. i_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = i_repid it_fieldcat = gd_fieldcat[] i_save = 'A' is_variant = ivariant is_layout = sla it_excluding = i_excluding * i_callback_user_command = 'USER_COMMAND' TABLES t_outtab = itab_sum EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. " outdata *---------------------------------------------------------------------* * FORM fieldcat_init * *---------------------------------------------------------------------* FORM fieldcat_init . PERFORM frm_catlg_set USING: 'WERKS' 'WERKS' 'X' , 'MATNR' 'MATNR' 'X' , 'LGORT' 'LGORT' 'X' , 'BWART' 'BWART' '' , 'MENGE' 'MENGE' '' . ENDFORM. "fieldcat_init *---------------------------------------------------------------------* * FORM frm_catlg_set * *---------------------------------------------------------------------* FORM frm_catlg_set USING p_field p_text p_key. DATA: ls_fieldcat TYPE slis_fieldcat_alv. ls_fieldcat-fieldname = p_field. ls_fieldcat-seltext_l = p_text. ls_fieldcat-key = p_key. IF p_field = 'LINE_SUM'. ls_fieldcat-emphasize = 'C700'. ENDIF. APPEND ls_fieldcat TO gd_fieldcat . CLEAR ls_fieldcat . ENDFORM. "frm_catlg_set *&--------------------------------------------------------------------* *& Form user_command *&--------------------------------------------------------------------* *FORM user_command USING r_ucomm LIKE sy-ucomm * rs_selfield TYPE slis_selfield. * READ TABLE itab INDEX rs_selfield-tabindex. * CASE r_ucomm. * WHEN '&IC1'. "双击 * * WHEN 'EXIT'. * LEAVE PROGRAM. * ENDCASE. ** rs_selfield-refresh = 'X'. "自动刷新 *ENDFORM. "user_com *---------------------------------------------------------------------* * FORM outdata2 * *---------------------------------------------------------------------* FORM outdata2. PERFORM fieldcat_init2 . sla-colwidth_optimize = 'X'. sla-zebra = 'X'. i_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = i_repid it_fieldcat = gd_fieldcat[] i_save = 'A' is_variant = ivariant is_layout = sla it_excluding = i_excluding TABLES t_outtab = <f_out> EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. " outdata *---------------------------------------------------------------------* * FORM fieldcat_init2 * *---------------------------------------------------------------------* FORM fieldcat_init2 . CLEAR c . PERFORM frm_catlg_set USING: 'WERKS' 'WERKS' 'X' , 'MATNR' 'MATNR' 'X' , 'LGORT' 'LGORT' 'X' . LOOP AT hs_bwart . c = c + 1. CONCATENATE 'MENGE' c INTO txt. PERFORM frm_catlg_set USING: txt hs_bwart-bwart '' . ENDLOOP. PERFORM frm_catlg_set USING: 'LINE_SUM' 'SUM' '' . ENDFORM. "fieldcat_init *---------------------------------------------------------------------* * FORM creat_itab_out * *---------------------------------------------------------------------* FORM creat_itab_out. CLEAR c. PERFORM build_itab_stru USING: 'WERKS' 'MSEG' 'WERKS' , 'MATNR' 'MSEG' 'MATNR' , 'LGORT' 'MSEG' 'LGORT' . LOOP AT hs_bwart. c = c + 1. CONCATENATE 'MENGE' c INTO txt. PERFORM build_itab_stru USING: txt 'MSEG' 'MENGE' . ENDLOOP. PERFORM build_itab_stru USING: 'LINE_SUM' 'MSEG' 'MENGE' . CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = ifc IMPORTING ep_table = dy_out. ASSIGN dy_out->* TO <f_out>. CREATE DATA dy_out_wa LIKE LINE OF <f_out>. ASSIGN dy_out_wa->* TO <f_out_wa>. ENDFORM. *---------------------------------------------------------------------* * FORM build_itab_stru * *---------------------------------------------------------------------* FORM build_itab_stru USING fdname ref_t ref_f. xfc-fieldname = fdname . xfc-ref_table = ref_t. xfc-ref_field = ref_f. APPEND xfc TO ifc. ENDFORM. |
联系客服