ALV中动态内表+行转化为列
生活随笔
收集整理的這篇文章主要介紹了
ALV中动态内表+行转化为列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉換為:
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.
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.
總結
以上是生活随笔為你收集整理的ALV中动态内表+行转化为列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态内表 动态ALV显示
- 下一篇: ALV报表中处理双击行项目事件