ALV列(Column)换到行(Row) 之 列上限不固定篇
生活随笔
收集整理的這篇文章主要介紹了
ALV列(Column)换到行(Row) 之 列上限不固定篇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有時我們的ALV列數難以確定,如果采用列數上限固定的話,可能會很多(此時不能正確全部),或者很少(此時平白無故運行時多占用內存),所以比較好的方法是,使用Method?
cl_alv_table_create=>create_dynamic_table動態創建顯示用的內表,這樣的話,就不會受到列數限制了(ALV本身支持列數上限的情況除外)。
先看效果:
如果選中下方ALV的藍色部分字段,按下屏幕上的Change按鈕后(假設選中了Document Type列):
發現上圖中,行和列已經產生了變化。如果選擇Company Code和Fiscal Year的話,也是可以互換行列的。
=>也許有人覺得這個功能沒啥用,但實際現在很火的BI,就是提供了各種維度(Dimension)的數據統計,使傳統的report受到了巨大的沖擊。當然,我這里做的這樣的一個小功能,還是和BI的強大功能相去甚遠的,但是如果正好有類似的需求,又沒有上BI,那倒也不失為一種退而求其次的方法
具體實現代碼如下:
*&---------------------------------------------------------------------*
*&?Report??ZWHUR9000
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT??zwhur9001.
TYPES:?BEGIN?OF?typ_strc1,
?????????bukrs?TYPE?bukrs,
?????????hkont?TYPE?hkont,
?????????gjahr?TYPE?gjahr,
?????????blart?TYPE?blart,
?????????total?TYPE?tslvt12,
???????END?OF?typ_strc1,
???????BEGIN?OF?typ_hkont,
?????????hkont?TYPE?hkont,
???????END?OF?typ_hkont.
************************************************************************
*?DATA?DEFINATION
************************************************************************
DATA:?itab_strc1?TYPE?STANDARD?TABLE?OF?typ_strc1,
??????itab_hkont?TYPE?STANDARD?TABLE?OF?typ_hkont,
??????wa_strc1???TYPE?typ_strc1.
DATA:?gc_container1?TYPE?REF?TO?cl_gui_custom_container,????"Container1
??????gc_container2?TYPE?REF?TO?cl_gui_custom_container,????"Container2
??????gc_grid1??????TYPE?REF?TO?cl_gui_alv_grid,??????????"ALV?Object1
??????gc_grid2??????TYPE?REF?TO?cl_gui_alv_grid.??????????"ALV?Object2
DATA:?itab_fcat1?TYPE?lvc_t_fcat,
??????itab_fcat2?TYPE?lvc_t_fcat,
??????wa_fcat????TYPE?lvc_s_fcat.
FIELD-SYMBOLS:
??????<fs_itab>?TYPE?STANDARD?TABLE,
??????<fs_wa>???TYPE?ANY,
??????<fs_itab_field>?TYPE?STANDARD?TABLE,
??????<fs_wa_field>???TYPE?ANY.
************************************************************************
*?SELECTION?SCREEN
************************************************************************
SELECT-OPTIONS:?s_hkont?FOR?wa_strc1-hkont?NO?INTERVALS?OBLIGATORY.
************************************************************************
*?START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
??PERFORM?frm_get_bsis.
??PERFORM?frm_create_dyn_table.
??PERFORM?frm_cal_result.
??CALL?SCREEN?1001.
*&---------------------------------------------------------------------*
*&??????Form??FRM_GET_BSIS
*&---------------------------------------------------------------------*
*???????select?data?for?test
*----------------------------------------------------------------------*
FORM?frm_get_bsis?.
??DATA:?l_wa_hkont?TYPE?typ_hkont.
??SELECT?bukrs
?????????hkont
?????????gjahr
?????????blart
?????????dmbtr
????FROM?bsis
????INTO?TABLE?itab_strc1
???WHERE?hkont?IN?s_hkont.
??IF?sy-subrc?<>?0.
????MESSAGE?'No?data?found!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?LIST-PROCESSING.
??ELSE.
????SORT?itab_strc1?BY?bukrs
???????????????????????gjahr
???????????????????????blart
???????????????????????hkont.
??ENDIF.
??CLEAR?wa_strc1.
??LOOP?AT?itab_strc1?INTO?wa_strc1.
????READ?TABLE?itab_hkont?TRANSPORTING?NO?FIELDS?WITH?KEY?hkont?=?wa_strc1-hkont.
????IF?sy-subrc?<>?0.
??????l_wa_hkont-hkont?=?wa_strc1-hkont.
??????APPEND?l_wa_hkont?TO?itab_hkont.
????ENDIF.
????CLEAR?wa_strc1.
??ENDLOOP.
ENDFORM.????????????????????"?FRM_GET_BSIS
*&---------------------------------------------------------------------*
*&??????Form??FRM_CAL_RESULT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
FORM?frm_cal_result?.
??FIELD-SYMBOLS:<fs_item>?TYPE?ANY.
??DATA:?l_wrk_idx?TYPE?i.
*
??CLEAR?wa_strc1.
??LOOP?AT?itab_strc1?INTO?wa_strc1.
????ASSIGN?COMPONENT?'BUKRS'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-bukrs.
????ENDIF.
????ASSIGN?COMPONENT?'GJAHR'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-gjahr.
????ENDIF.
????ASSIGN?COMPONENT?'BLART'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-blart.
????ENDIF.
*???calculate?out?total?for?every?G/L
????READ?TABLE?itab_hkont?TRANSPORTING?NO?FIELDS?WITH?KEY?hkont?=?wa_strc1-hkont.
????l_wrk_idx?=?sy-tabix?+?3.
????ASSIGN?COMPONENT?l_wrk_idx?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-total.
????ENDIF.
????ASSIGN?COMPONENT?'TOTAL'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-total.
????ENDIF.
*???Sum
????COLLECT?<fs_wa>?INTO?<fs_itab>.
????CLEAR:<fs_wa>,
??????????wa_strc1.
??ENDLOOP.
ENDFORM.????????????????????"?FRM_CAL_RESULT
*&---------------------------------------------------------------------*
*&??????Module??STATUS_1001??OUTPUT
*&---------------------------------------------------------------------*
*???????Status
*----------------------------------------------------------------------*
MODULE?status_1001?OUTPUT.
??SET?PF-STATUS?'PF_1001'.
??SET?TITLEBAR??'TTL_1001'.
ENDMODULE.?????????????????"?STATUS_1001??OUTPUT
*&---------------------------------------------------------------------*
*&??????Module??EXIT_COMMAND??INPUT
*&---------------------------------------------------------------------*
*???????Exit?Command
*----------------------------------------------------------------------*
MODULE?exit_command?INPUT.
??LEAVE?TO?SCREEN?0.
ENDMODULE.?????????????????"?EXIT_COMMAND??INPUT
*&---------------------------------------------------------------------*
*&??????Module??DATA_DISPLAY??OUTPUT
*&---------------------------------------------------------------------*
*???????data?output
*----------------------------------------------------------------------*
MODULE?data_display?OUTPUT.
??PERFORM?frm_dis_alv1.
??PERFORM?frm_dis_alv2.
ENDMODULE.?????????????????"?DATA_DISPLAY??OUTPUT
*&---------------------------------------------------------------------*
*&??????Form??FRM_SET_FCAT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??????-->P_FNAME???Field?name
*??????-->P_TEXT_M??Middle?text
*??????-->P_TEXT_L??Long?text
*??????-->P_IS_KEY??flag:X=key
*??????-->P_LENGTH??output?length
*----------------------------------------------------------------------*
FORM?frm_set_fcat??USING????p_fname??TYPE?c
????????????????????????????p_text_m?TYPE?c
????????????????????????????p_text_l?TYPE?c
????????????????????????????p_is_key?TYPE?c
????????????????????????????p_length?TYPE?n
???????????????CHANGING?it_fcat?TYPE?lvc_t_fcat.
??CLEAR?wa_fcat.
??wa_fcat-fieldname?=?p_fname.
??wa_fcat-scrtext_m?=?p_text_m.
??wa_fcat-scrtext_l?=?p_text_l.
??wa_fcat-key???????=?p_is_key.
??wa_fcat-outputlen?=?p_length.
??APPEND?wa_fcat?TO?it_fcat.
ENDFORM.????????????????????"?FRM_SET_FCAT
*&---------------------------------------------------------------------*
*&??????Form??FRM_DIS_ALV1
*&---------------------------------------------------------------------*
*???????Grid1?output
*----------------------------------------------------------------------*
FORM?frm_dis_alv1?.
??DATA:?l_itab_sort?TYPE?lvc_t_sort,
????????l_wa_sort???TYPE?lvc_s_sort.
??l_wa_sort-fieldname?=?'BUKRS'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
??l_wa_sort-fieldname?=?'GJAHR'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
??l_wa_sort-fieldname?=?'BLART'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
??l_wa_sort-fieldname?=?'HKONT'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
*
??IF?gc_container1?IS?INITIAL.
????PERFORM?frm_set_fcat?USING?'BUKRS'
???????????????????????????????'Comp.Cd'
???????????????????????????????'Company?Code'
???????????????????????????????'X'
???????????????????????????????'4'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'GJAHR'
???????????????????????????????'Fis.Y'
???????????????????????????????'Fiscal?Year'
???????????????????????????????'X'
???????????????????????????????'4'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'BLART'
???????????????????????????????'Doc.T'
???????????????????????????????'Document?Type'
???????????????????????????????'X'
???????????????????????????????'4'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'HKONT'
???????????????????????????????'GL'
???????????????????????????????'G/L?Account'
???????????????????????????????'X'
???????????????????????????????'10'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'TOTAL'
???????????????????????????????'Total'
???????????????????????????????'Total?Amount'
???????????????????????????????''
???????????????????????????????'12'
???????????????????????CHANGING?itab_fcat1.
????CREATE?OBJECT?gc_container1
??????EXPORTING
????????container_name?=?'CUS_CTL1'.
????CREATE?OBJECT?gc_grid1
??????EXPORTING
????????i_parent?=?gc_container1.
????CALL?METHOD?gc_grid1->set_table_for_first_display
*????EXPORTING
*??????i_buffer_active???????????????=
*??????i_bypassing_buffer????????????=
*??????i_consistency_check???????????=
*??????i_structure_name??????????????=
*??????is_variant????????????????????=
*??????i_save????????????????????????=
*??????i_default?????????????????????=?'X'
*??????is_layout?????????????????????=
*??????is_print??????????????????????=
*??????it_special_groups?????????????=
*??????it_toolbar_excluding??????????=
*??????it_hyperlink??????????????????=
*??????it_alv_graphics???????????????=
*??????it_except_qinfo???????????????=
*??????ir_salv_adapter???????????????=
??????CHANGING
????????it_outtab?????????????????????=?itab_strc1
????????it_fieldcatalog???????????????=?itab_fcat1
????????it_sort???????????????????????=?l_itab_sort.
??ELSE.
????CALL?METHOD?gc_grid1->refresh_table_display.
??ENDIF.
ENDFORM.????????????????????"?FRM_DIS_ALV1
*&---------------------------------------------------------------------*
*&??????Form??FRM_DIS_ALV2
*&---------------------------------------------------------------------*
*???????Grid2?output
*----------------------------------------------------------------------*
FORM?frm_dis_alv2?.
??IF?gc_container2?IS?INITIAL.
????CREATE?OBJECT?gc_container2
??????EXPORTING
????????container_name?=?'CUS_CTL2'.
????CREATE?OBJECT?gc_grid2
??????EXPORTING
????????i_parent?=?gc_container2.
??ENDIF.
??CALL?METHOD?gc_grid2->set_table_for_first_display
*????EXPORTING
*????i_buffer_active???????????????=
*????i_bypassing_buffer????????????=
*????i_consistency_check???????????=
*????i_structure_name??????????????=
*????is_variant????????????????????=
*????i_save????????????????????????=
*????i_default?????????????????????=?'X'
*????is_layout?????????????????????=
*????is_print??????????????????????=
*????it_special_groups?????????????=
*????it_toolbar_excluding??????????=?l_itab_excl
*????it_hyperlink??????????????????=
*????it_alv_graphics???????????????=
*????it_except_qinfo???????????????=
*????ir_salv_adapter???????????????=
????CHANGING
??????it_outtab?????????????????????=?<fs_itab>
??????it_fieldcatalog???????????????=?itab_fcat2.
ENDFORM.????????????????????"?FRM_DIS_ALV2
*&---------------------------------------------------------------------*
*&??????Form??FRM_CREATE_DYN_TABLE
*&---------------------------------------------------------------------*
*???????Create?Dynamic?Internal?Table
*----------------------------------------------------------------------*
FORM?frm_create_dyn_table?.
??DATA:?l_wa_hkont??TYPE?typ_hkont,
????????l_idx(2)????TYPE?n,
????????l_fname(10)?TYPE?c.
??DATA:?l_itab_data?TYPE?REF?TO?data,
????????l_wa_data???TYPE?REF?TO?data.
*?Company?Code
??PERFORM?frm_set_fcat?USING?'BUKRS'
?????????????????????????????'Comp.Cd'
?????????????????????????????'Company?Code'
?????????????????????????????'X'
?????????????????????????????'4'
?????????????????????CHANGING?itab_fcat2.
*?Fiscal?Year
??PERFORM?frm_set_fcat?USING?'GJAHR'
?????????????????????????????'Fis.Y'
?????????????????????????????'Fiscal?Year'
?????????????????????????????'X'
?????????????????????????????'4'
?????????????????????CHANGING?itab_fcat2.
*?Document?Type
??PERFORM?frm_set_fcat?USING?'BLART'
?????????????????????????????'Doc.T'
?????????????????????????????'Document?Type'
?????????????????????????????'X'
?????????????????????????????'4'
?????????????????????CHANGING?itab_fcat2.
*?field?cat?for?every?G/L
??LOOP?AT?itab_hkont?INTO?l_wa_hkont.
????l_idx?=?sy-tabix.
????CONCATENATE?'HKONT'
????????????????l_idx
???????????INTO?l_fname.
????CLEAR?wa_fcat.
????wa_fcat-fieldname?=?l_fname.
????wa_fcat-scrtext_m?=?l_wa_hkont-hkont.
????wa_fcat-scrtext_l?=?l_wa_hkont-hkont.
????wa_fcat-key???????=?space.
????wa_fcat-outputlen?=?10.
****IMPORTANT********************************************
????wa_fcat-ref_field?=?'DMBTR'.??"
????wa_fcat-ref_table?=?'BSIS'.???"
*********************************************************
????APPEND?wa_fcat?TO?itab_fcat2.
??ENDLOOP.
*?Total
??CLEAR?wa_fcat.
??wa_fcat-fieldname?=?'TOTAL'.
??wa_fcat-scrtext_m?=?'Total'.
??wa_fcat-scrtext_l?=?'Total?Amount'.
??wa_fcat-key???????=?space.
??wa_fcat-outputlen?=?12.
****IMPORTANT********************************************
??wa_fcat-ref_field?=?'DMBTR'.??"
??wa_fcat-ref_table?=?'BSIS'.???"
*********************************************************
??APPEND?wa_fcat?TO?itab_fcat2.
*?itab?creation
??CALL?METHOD?cl_alv_table_create=>create_dynamic_table
????EXPORTING
??????it_fieldcatalog???????????=?itab_fcat2
????IMPORTING
??????ep_table??????????????????=?l_itab_data
????EXCEPTIONS
??????generate_subpool_dir_full?=?1
??????OTHERS????????????????????=?2.
??IF?sy-subrc?<>?0.
????MESSAGE?'Create?Table?failed!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?LIST-PROCESSING.
??ELSE.
????ASSIGN?l_itab_data->*?TO?<fs_itab>.
????CREATE?DATA?l_wa_data?LIKE?LINE?OF?<fs_itab>.
????ASSIGN?l_wa_data->*?TO?<fs_wa>.
??ENDIF.
ENDFORM.????????????????????"?FRM_CREATE_DYN_TABLE
*&---------------------------------------------------------------------*
*&??????Module??USER_COMMAND_1001??INPUT
*&---------------------------------------------------------------------*
*???????User?Command
*----------------------------------------------------------------------*
MODULE?user_command_1001?INPUT.
??CASE?sy-ucomm.
????WHEN?'CHG'.
??????PERFORM?frm_row_column.
????WHEN?OTHERS.
??ENDCASE.
ENDMODULE.?????????????????"?USER_COMMAND_1001??INPUT
*&---------------------------------------------------------------------*
*&??????Form??FRM_CREATE_ITAB_BY_FIELDNAME
*&---------------------------------------------------------------------*
*???????Create?Dynamic?Itab
*----------------------------------------------------------------------*
*??????-->iv_fieldname??text
*----------------------------------------------------------------------*
FORM?frm_create_itab_by_fieldname??USING??value(iv_fieldname)?TYPE?c.
??DATA:?l_itab_fcat?????TYPE?lvc_t_fcat,
????????l_wa_fcat???????TYPE?lvc_s_fcat.
??DATA:?l_itab_any??????TYPE?REF?TO?data,
????????l_wa_any????????TYPE?REF?TO?data.
??FIELD-SYMBOLS:
????????<fs_item1>??????TYPE?ANY,
????????<fs_item2>??????TYPE?ANY,
????????<fs_fcat>???????TYPE?lvc_s_fcat.
??CLEAR?l_wa_fcat.
??l_wa_fcat-fieldname?=?iv_fieldname.
??l_wa_fcat-ref_field?=?iv_fieldname.
??l_wa_fcat-ref_table?=?'BSIS'.
??APPEND?l_wa_fcat?TO?l_itab_fcat.
??CALL?METHOD?cl_alv_table_create=>create_dynamic_table
????EXPORTING
??????it_fieldcatalog?=?l_itab_fcat
????IMPORTING
??????ep_table????????=?l_itab_any.
??ASSIGN?l_itab_any->*?TO?<fs_itab_field>.
??CREATE?DATA?l_wa_any?LIKE?LINE?OF?<fs_itab_field>.
??ASSIGN?l_wa_any->*?TO?<fs_wa_field>.
*?fieldcat?setting?for?the?second?ALV
??REFRESH:?itab_fcat2.
??itab_fcat2?=?itab_fcat1.
*?delete?from?fieldcat?if?the?column?was?selected
??READ?TABLE?itab_fcat1?TRANSPORTING?NO?FIELDS?WITH?KEY?fieldname?=?iv_fieldname.
??DELETE?itab_fcat2?INDEX?sy-tabix.
*?get?all?items?for?selected?columns
??LOOP?AT?itab_strc1?INTO?wa_strc1.
????ASSIGN?COMPONENT?iv_fieldname?OF?STRUCTURE?wa_strc1?TO?<fs_item1>.
????ASSIGN?COMPONENT?iv_fieldname?OF?STRUCTURE?<fs_wa_field>?TO?<fs_item2>.
????<fs_item2>?=?<fs_item1>.
????COLLECT?<fs_wa_field>?INTO?<fs_itab_field>.
????CLEAR?<fs_wa_field>.
??ENDLOOP.
??LOOP?AT?<fs_itab_field>?ASSIGNING?<fs_wa_field>.
*???add?fieldcat?for?selected?row?=>?column
????CLEAR?wa_fcat.
????wa_fcat-fieldname?=?<fs_wa_field>.
????wa_fcat-scrtext_m?=?<fs_wa_field>.
????wa_fcat-scrtext_l?=?<fs_wa_field>.
????wa_fcat-key???????=?space.
????wa_fcat-outputlen?=?12.
????APPEND?wa_fcat?TO?itab_fcat2.
??ENDLOOP.
*?set?TOTAL?as?last?column
??CLEAR?wa_fcat.
??READ?TABLE?itab_fcat2?INTO?wa_fcat?WITH?KEY?fieldname?=?'TOTAL'.
??DELETE?itab_fcat2?WHERE?fieldname?=?'TOTAL'.
??APPEND?wa_fcat?TO?itab_fcat2.
??l_itab_fcat?=?itab_fcat2.
??LOOP?AT?l_itab_fcat?ASSIGNING?<fs_fcat>?FROM?4.
????<fs_fcat>-ref_table?=?'BSIS'.
????<fs_fcat>-ref_field?=?'DMBTR'.
??ENDLOOP.
??CALL?METHOD?cl_alv_table_create=>create_dynamic_table
????EXPORTING
??????it_fieldcatalog?=?l_itab_fcat
????IMPORTING
??????ep_table????????=?l_itab_any.
??ASSIGN?l_itab_any->*?TO?<fs_itab>.
??CREATE?DATA?l_wa_any?LIKE?LINE?OF?<fs_itab>.
??ASSIGN?l_wa_any->*?TO?<fs_wa>.
ENDFORM.????????????????????"?FRM_CREATE_ITAB_BY_FIELDNAME
*&---------------------------------------------------------------------*
*&??????Form??FRM_DATA_SET
*&---------------------------------------------------------------------*
*???????set?content?for?new?Dynamic?table
*----------------------------------------------------------------------*
*??????-->iv_fieldname??text
*----------------------------------------------------------------------*
FORM?frm_data_set?USING???value(iv_fieldname)?TYPE?c.
??FIELD-SYMBOLS:?<l_fs01>?TYPE?ANY,
?????????????????<l_fs_value>?TYPE?ANY.
??DATA:?l_wrk_idx?TYPE?i.
??LOOP?AT?itab_strc1?INTO?wa_strc1.
*???get?value?for?selected?column
????ASSIGN?COMPONENT?iv_fieldname?OF?STRUCTURE?wa_strc1?TO?<l_fs01>.
????MOVE-CORRESPONDING?wa_strc1?TO?<fs_wa>.
*???get?the?index?in?result?table
????READ?TABLE?<fs_itab_field>?WITH?KEY?(iv_fieldname)?=?<l_fs01>?TRANSPORTING?NO?FIELDS.
????l_wrk_idx?=?sy-tabix?+?3.
????ASSIGN?COMPONENT?l_wrk_idx?OF?STRUCTURE?<fs_wa>?TO?<l_fs_value>.
????<l_fs_value>?=?wa_strc1-total.
????ASSIGN?COMPONENT?'TOTAL'?OF?STRUCTURE?<fs_wa>?TO?<l_fs_value>.
????<l_fs_value>?=?wa_strc1-total.
????COLLECT?<fs_wa>?INTO?<fs_itab>.
????CLEAR:?<fs_wa>,
???????????wa_strc1.
??ENDLOOP.
ENDFORM.????????????????????"?FRM_DATA_SET
*&---------------------------------------------------------------------*
*&??????Form??FRM_ROW_COLUMN
*&---------------------------------------------------------------------*
*???????Row?to?Column
*----------------------------------------------------------------------*
FORM?frm_row_column?.
??DATA:?l_itab_selected?TYPE?lvc_t_col,
????????l_wa_selected???TYPE?lvc_s_col.
??CALL?METHOD?gc_grid2->get_selected_columns
????IMPORTING
??????et_index_columns?=?l_itab_selected.
*?check?columns?be?selected
??DESCRIBE?TABLE?l_itab_selected.
??IF?sy-tfill?>=?2
???OR?sy-tfill?=?0.
????MESSAGE?'Please?select?1?column!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?SCREEN.
??ENDIF.
??READ?TABLE?l_itab_selected?INTO?l_wa_selected?INDEX?1.
??IF??l_wa_selected-fieldname?<>?'BUKRS'
??AND?l_wa_selected-fieldname?<>?'GJAHR'
??AND?l_wa_selected-fieldname?<>?'BLART'
??AND?l_wa_selected-fieldname?<>?'HKONT'.
????MESSAGE?'Please?select?a?key?column?in?ALV!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?SCREEN.
??ENDIF.
??"FIELDNAME
??PERFORM?frm_create_itab_by_fieldname?USING?l_wa_selected-fieldname.
??"set?value?into?<fs_itab>
??PERFORM?frm_data_set?USING?l_wa_selected-fieldname.
ENDFORM.????????????????????"?FRM_ROW_COLUMN
先看效果:
如果選中下方ALV的藍色部分字段,按下屏幕上的Change按鈕后(假設選中了Document Type列):
發現上圖中,行和列已經產生了變化。如果選擇Company Code和Fiscal Year的話,也是可以互換行列的。
=>也許有人覺得這個功能沒啥用,但實際現在很火的BI,就是提供了各種維度(Dimension)的數據統計,使傳統的report受到了巨大的沖擊。當然,我這里做的這樣的一個小功能,還是和BI的強大功能相去甚遠的,但是如果正好有類似的需求,又沒有上BI,那倒也不失為一種退而求其次的方法
具體實現代碼如下:
*&---------------------------------------------------------------------*
*&?Report??ZWHUR9000
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT??zwhur9001.
TYPES:?BEGIN?OF?typ_strc1,
?????????bukrs?TYPE?bukrs,
?????????hkont?TYPE?hkont,
?????????gjahr?TYPE?gjahr,
?????????blart?TYPE?blart,
?????????total?TYPE?tslvt12,
???????END?OF?typ_strc1,
???????BEGIN?OF?typ_hkont,
?????????hkont?TYPE?hkont,
???????END?OF?typ_hkont.
************************************************************************
*?DATA?DEFINATION
************************************************************************
DATA:?itab_strc1?TYPE?STANDARD?TABLE?OF?typ_strc1,
??????itab_hkont?TYPE?STANDARD?TABLE?OF?typ_hkont,
??????wa_strc1???TYPE?typ_strc1.
DATA:?gc_container1?TYPE?REF?TO?cl_gui_custom_container,????"Container1
??????gc_container2?TYPE?REF?TO?cl_gui_custom_container,????"Container2
??????gc_grid1??????TYPE?REF?TO?cl_gui_alv_grid,??????????"ALV?Object1
??????gc_grid2??????TYPE?REF?TO?cl_gui_alv_grid.??????????"ALV?Object2
DATA:?itab_fcat1?TYPE?lvc_t_fcat,
??????itab_fcat2?TYPE?lvc_t_fcat,
??????wa_fcat????TYPE?lvc_s_fcat.
FIELD-SYMBOLS:
??????<fs_itab>?TYPE?STANDARD?TABLE,
??????<fs_wa>???TYPE?ANY,
??????<fs_itab_field>?TYPE?STANDARD?TABLE,
??????<fs_wa_field>???TYPE?ANY.
************************************************************************
*?SELECTION?SCREEN
************************************************************************
SELECT-OPTIONS:?s_hkont?FOR?wa_strc1-hkont?NO?INTERVALS?OBLIGATORY.
************************************************************************
*?START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
??PERFORM?frm_get_bsis.
??PERFORM?frm_create_dyn_table.
??PERFORM?frm_cal_result.
??CALL?SCREEN?1001.
*&---------------------------------------------------------------------*
*&??????Form??FRM_GET_BSIS
*&---------------------------------------------------------------------*
*???????select?data?for?test
*----------------------------------------------------------------------*
FORM?frm_get_bsis?.
??DATA:?l_wa_hkont?TYPE?typ_hkont.
??SELECT?bukrs
?????????hkont
?????????gjahr
?????????blart
?????????dmbtr
????FROM?bsis
????INTO?TABLE?itab_strc1
???WHERE?hkont?IN?s_hkont.
??IF?sy-subrc?<>?0.
????MESSAGE?'No?data?found!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?LIST-PROCESSING.
??ELSE.
????SORT?itab_strc1?BY?bukrs
???????????????????????gjahr
???????????????????????blart
???????????????????????hkont.
??ENDIF.
??CLEAR?wa_strc1.
??LOOP?AT?itab_strc1?INTO?wa_strc1.
????READ?TABLE?itab_hkont?TRANSPORTING?NO?FIELDS?WITH?KEY?hkont?=?wa_strc1-hkont.
????IF?sy-subrc?<>?0.
??????l_wa_hkont-hkont?=?wa_strc1-hkont.
??????APPEND?l_wa_hkont?TO?itab_hkont.
????ENDIF.
????CLEAR?wa_strc1.
??ENDLOOP.
ENDFORM.????????????????????"?FRM_GET_BSIS
*&---------------------------------------------------------------------*
*&??????Form??FRM_CAL_RESULT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
FORM?frm_cal_result?.
??FIELD-SYMBOLS:<fs_item>?TYPE?ANY.
??DATA:?l_wrk_idx?TYPE?i.
*
??CLEAR?wa_strc1.
??LOOP?AT?itab_strc1?INTO?wa_strc1.
????ASSIGN?COMPONENT?'BUKRS'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-bukrs.
????ENDIF.
????ASSIGN?COMPONENT?'GJAHR'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-gjahr.
????ENDIF.
????ASSIGN?COMPONENT?'BLART'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-blart.
????ENDIF.
*???calculate?out?total?for?every?G/L
????READ?TABLE?itab_hkont?TRANSPORTING?NO?FIELDS?WITH?KEY?hkont?=?wa_strc1-hkont.
????l_wrk_idx?=?sy-tabix?+?3.
????ASSIGN?COMPONENT?l_wrk_idx?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-total.
????ENDIF.
????ASSIGN?COMPONENT?'TOTAL'?OF?STRUCTURE?<fs_wa>?TO?<fs_item>.
????IF?sy-subrc?=?0.
??????<fs_item>?=?wa_strc1-total.
????ENDIF.
*???Sum
????COLLECT?<fs_wa>?INTO?<fs_itab>.
????CLEAR:<fs_wa>,
??????????wa_strc1.
??ENDLOOP.
ENDFORM.????????????????????"?FRM_CAL_RESULT
*&---------------------------------------------------------------------*
*&??????Module??STATUS_1001??OUTPUT
*&---------------------------------------------------------------------*
*???????Status
*----------------------------------------------------------------------*
MODULE?status_1001?OUTPUT.
??SET?PF-STATUS?'PF_1001'.
??SET?TITLEBAR??'TTL_1001'.
ENDMODULE.?????????????????"?STATUS_1001??OUTPUT
*&---------------------------------------------------------------------*
*&??????Module??EXIT_COMMAND??INPUT
*&---------------------------------------------------------------------*
*???????Exit?Command
*----------------------------------------------------------------------*
MODULE?exit_command?INPUT.
??LEAVE?TO?SCREEN?0.
ENDMODULE.?????????????????"?EXIT_COMMAND??INPUT
*&---------------------------------------------------------------------*
*&??????Module??DATA_DISPLAY??OUTPUT
*&---------------------------------------------------------------------*
*???????data?output
*----------------------------------------------------------------------*
MODULE?data_display?OUTPUT.
??PERFORM?frm_dis_alv1.
??PERFORM?frm_dis_alv2.
ENDMODULE.?????????????????"?DATA_DISPLAY??OUTPUT
*&---------------------------------------------------------------------*
*&??????Form??FRM_SET_FCAT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??????-->P_FNAME???Field?name
*??????-->P_TEXT_M??Middle?text
*??????-->P_TEXT_L??Long?text
*??????-->P_IS_KEY??flag:X=key
*??????-->P_LENGTH??output?length
*----------------------------------------------------------------------*
FORM?frm_set_fcat??USING????p_fname??TYPE?c
????????????????????????????p_text_m?TYPE?c
????????????????????????????p_text_l?TYPE?c
????????????????????????????p_is_key?TYPE?c
????????????????????????????p_length?TYPE?n
???????????????CHANGING?it_fcat?TYPE?lvc_t_fcat.
??CLEAR?wa_fcat.
??wa_fcat-fieldname?=?p_fname.
??wa_fcat-scrtext_m?=?p_text_m.
??wa_fcat-scrtext_l?=?p_text_l.
??wa_fcat-key???????=?p_is_key.
??wa_fcat-outputlen?=?p_length.
??APPEND?wa_fcat?TO?it_fcat.
ENDFORM.????????????????????"?FRM_SET_FCAT
*&---------------------------------------------------------------------*
*&??????Form??FRM_DIS_ALV1
*&---------------------------------------------------------------------*
*???????Grid1?output
*----------------------------------------------------------------------*
FORM?frm_dis_alv1?.
??DATA:?l_itab_sort?TYPE?lvc_t_sort,
????????l_wa_sort???TYPE?lvc_s_sort.
??l_wa_sort-fieldname?=?'BUKRS'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
??l_wa_sort-fieldname?=?'GJAHR'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
??l_wa_sort-fieldname?=?'BLART'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
??l_wa_sort-fieldname?=?'HKONT'.
??l_wa_sort-up????????=?'X'.
??APPEND?l_wa_sort?TO?l_itab_sort.
*
??IF?gc_container1?IS?INITIAL.
????PERFORM?frm_set_fcat?USING?'BUKRS'
???????????????????????????????'Comp.Cd'
???????????????????????????????'Company?Code'
???????????????????????????????'X'
???????????????????????????????'4'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'GJAHR'
???????????????????????????????'Fis.Y'
???????????????????????????????'Fiscal?Year'
???????????????????????????????'X'
???????????????????????????????'4'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'BLART'
???????????????????????????????'Doc.T'
???????????????????????????????'Document?Type'
???????????????????????????????'X'
???????????????????????????????'4'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'HKONT'
???????????????????????????????'GL'
???????????????????????????????'G/L?Account'
???????????????????????????????'X'
???????????????????????????????'10'
???????????????????????CHANGING?itab_fcat1.
????PERFORM?frm_set_fcat?USING?'TOTAL'
???????????????????????????????'Total'
???????????????????????????????'Total?Amount'
???????????????????????????????''
???????????????????????????????'12'
???????????????????????CHANGING?itab_fcat1.
????CREATE?OBJECT?gc_container1
??????EXPORTING
????????container_name?=?'CUS_CTL1'.
????CREATE?OBJECT?gc_grid1
??????EXPORTING
????????i_parent?=?gc_container1.
????CALL?METHOD?gc_grid1->set_table_for_first_display
*????EXPORTING
*??????i_buffer_active???????????????=
*??????i_bypassing_buffer????????????=
*??????i_consistency_check???????????=
*??????i_structure_name??????????????=
*??????is_variant????????????????????=
*??????i_save????????????????????????=
*??????i_default?????????????????????=?'X'
*??????is_layout?????????????????????=
*??????is_print??????????????????????=
*??????it_special_groups?????????????=
*??????it_toolbar_excluding??????????=
*??????it_hyperlink??????????????????=
*??????it_alv_graphics???????????????=
*??????it_except_qinfo???????????????=
*??????ir_salv_adapter???????????????=
??????CHANGING
????????it_outtab?????????????????????=?itab_strc1
????????it_fieldcatalog???????????????=?itab_fcat1
????????it_sort???????????????????????=?l_itab_sort.
??ELSE.
????CALL?METHOD?gc_grid1->refresh_table_display.
??ENDIF.
ENDFORM.????????????????????"?FRM_DIS_ALV1
*&---------------------------------------------------------------------*
*&??????Form??FRM_DIS_ALV2
*&---------------------------------------------------------------------*
*???????Grid2?output
*----------------------------------------------------------------------*
FORM?frm_dis_alv2?.
??IF?gc_container2?IS?INITIAL.
????CREATE?OBJECT?gc_container2
??????EXPORTING
????????container_name?=?'CUS_CTL2'.
????CREATE?OBJECT?gc_grid2
??????EXPORTING
????????i_parent?=?gc_container2.
??ENDIF.
??CALL?METHOD?gc_grid2->set_table_for_first_display
*????EXPORTING
*????i_buffer_active???????????????=
*????i_bypassing_buffer????????????=
*????i_consistency_check???????????=
*????i_structure_name??????????????=
*????is_variant????????????????????=
*????i_save????????????????????????=
*????i_default?????????????????????=?'X'
*????is_layout?????????????????????=
*????is_print??????????????????????=
*????it_special_groups?????????????=
*????it_toolbar_excluding??????????=?l_itab_excl
*????it_hyperlink??????????????????=
*????it_alv_graphics???????????????=
*????it_except_qinfo???????????????=
*????ir_salv_adapter???????????????=
????CHANGING
??????it_outtab?????????????????????=?<fs_itab>
??????it_fieldcatalog???????????????=?itab_fcat2.
ENDFORM.????????????????????"?FRM_DIS_ALV2
*&---------------------------------------------------------------------*
*&??????Form??FRM_CREATE_DYN_TABLE
*&---------------------------------------------------------------------*
*???????Create?Dynamic?Internal?Table
*----------------------------------------------------------------------*
FORM?frm_create_dyn_table?.
??DATA:?l_wa_hkont??TYPE?typ_hkont,
????????l_idx(2)????TYPE?n,
????????l_fname(10)?TYPE?c.
??DATA:?l_itab_data?TYPE?REF?TO?data,
????????l_wa_data???TYPE?REF?TO?data.
*?Company?Code
??PERFORM?frm_set_fcat?USING?'BUKRS'
?????????????????????????????'Comp.Cd'
?????????????????????????????'Company?Code'
?????????????????????????????'X'
?????????????????????????????'4'
?????????????????????CHANGING?itab_fcat2.
*?Fiscal?Year
??PERFORM?frm_set_fcat?USING?'GJAHR'
?????????????????????????????'Fis.Y'
?????????????????????????????'Fiscal?Year'
?????????????????????????????'X'
?????????????????????????????'4'
?????????????????????CHANGING?itab_fcat2.
*?Document?Type
??PERFORM?frm_set_fcat?USING?'BLART'
?????????????????????????????'Doc.T'
?????????????????????????????'Document?Type'
?????????????????????????????'X'
?????????????????????????????'4'
?????????????????????CHANGING?itab_fcat2.
*?field?cat?for?every?G/L
??LOOP?AT?itab_hkont?INTO?l_wa_hkont.
????l_idx?=?sy-tabix.
????CONCATENATE?'HKONT'
????????????????l_idx
???????????INTO?l_fname.
????CLEAR?wa_fcat.
????wa_fcat-fieldname?=?l_fname.
????wa_fcat-scrtext_m?=?l_wa_hkont-hkont.
????wa_fcat-scrtext_l?=?l_wa_hkont-hkont.
????wa_fcat-key???????=?space.
????wa_fcat-outputlen?=?10.
****IMPORTANT********************************************
????wa_fcat-ref_field?=?'DMBTR'.??"
????wa_fcat-ref_table?=?'BSIS'.???"
*********************************************************
????APPEND?wa_fcat?TO?itab_fcat2.
??ENDLOOP.
*?Total
??CLEAR?wa_fcat.
??wa_fcat-fieldname?=?'TOTAL'.
??wa_fcat-scrtext_m?=?'Total'.
??wa_fcat-scrtext_l?=?'Total?Amount'.
??wa_fcat-key???????=?space.
??wa_fcat-outputlen?=?12.
****IMPORTANT********************************************
??wa_fcat-ref_field?=?'DMBTR'.??"
??wa_fcat-ref_table?=?'BSIS'.???"
*********************************************************
??APPEND?wa_fcat?TO?itab_fcat2.
*?itab?creation
??CALL?METHOD?cl_alv_table_create=>create_dynamic_table
????EXPORTING
??????it_fieldcatalog???????????=?itab_fcat2
????IMPORTING
??????ep_table??????????????????=?l_itab_data
????EXCEPTIONS
??????generate_subpool_dir_full?=?1
??????OTHERS????????????????????=?2.
??IF?sy-subrc?<>?0.
????MESSAGE?'Create?Table?failed!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?LIST-PROCESSING.
??ELSE.
????ASSIGN?l_itab_data->*?TO?<fs_itab>.
????CREATE?DATA?l_wa_data?LIKE?LINE?OF?<fs_itab>.
????ASSIGN?l_wa_data->*?TO?<fs_wa>.
??ENDIF.
ENDFORM.????????????????????"?FRM_CREATE_DYN_TABLE
*&---------------------------------------------------------------------*
*&??????Module??USER_COMMAND_1001??INPUT
*&---------------------------------------------------------------------*
*???????User?Command
*----------------------------------------------------------------------*
MODULE?user_command_1001?INPUT.
??CASE?sy-ucomm.
????WHEN?'CHG'.
??????PERFORM?frm_row_column.
????WHEN?OTHERS.
??ENDCASE.
ENDMODULE.?????????????????"?USER_COMMAND_1001??INPUT
*&---------------------------------------------------------------------*
*&??????Form??FRM_CREATE_ITAB_BY_FIELDNAME
*&---------------------------------------------------------------------*
*???????Create?Dynamic?Itab
*----------------------------------------------------------------------*
*??????-->iv_fieldname??text
*----------------------------------------------------------------------*
FORM?frm_create_itab_by_fieldname??USING??value(iv_fieldname)?TYPE?c.
??DATA:?l_itab_fcat?????TYPE?lvc_t_fcat,
????????l_wa_fcat???????TYPE?lvc_s_fcat.
??DATA:?l_itab_any??????TYPE?REF?TO?data,
????????l_wa_any????????TYPE?REF?TO?data.
??FIELD-SYMBOLS:
????????<fs_item1>??????TYPE?ANY,
????????<fs_item2>??????TYPE?ANY,
????????<fs_fcat>???????TYPE?lvc_s_fcat.
??CLEAR?l_wa_fcat.
??l_wa_fcat-fieldname?=?iv_fieldname.
??l_wa_fcat-ref_field?=?iv_fieldname.
??l_wa_fcat-ref_table?=?'BSIS'.
??APPEND?l_wa_fcat?TO?l_itab_fcat.
??CALL?METHOD?cl_alv_table_create=>create_dynamic_table
????EXPORTING
??????it_fieldcatalog?=?l_itab_fcat
????IMPORTING
??????ep_table????????=?l_itab_any.
??ASSIGN?l_itab_any->*?TO?<fs_itab_field>.
??CREATE?DATA?l_wa_any?LIKE?LINE?OF?<fs_itab_field>.
??ASSIGN?l_wa_any->*?TO?<fs_wa_field>.
*?fieldcat?setting?for?the?second?ALV
??REFRESH:?itab_fcat2.
??itab_fcat2?=?itab_fcat1.
*?delete?from?fieldcat?if?the?column?was?selected
??READ?TABLE?itab_fcat1?TRANSPORTING?NO?FIELDS?WITH?KEY?fieldname?=?iv_fieldname.
??DELETE?itab_fcat2?INDEX?sy-tabix.
*?get?all?items?for?selected?columns
??LOOP?AT?itab_strc1?INTO?wa_strc1.
????ASSIGN?COMPONENT?iv_fieldname?OF?STRUCTURE?wa_strc1?TO?<fs_item1>.
????ASSIGN?COMPONENT?iv_fieldname?OF?STRUCTURE?<fs_wa_field>?TO?<fs_item2>.
????<fs_item2>?=?<fs_item1>.
????COLLECT?<fs_wa_field>?INTO?<fs_itab_field>.
????CLEAR?<fs_wa_field>.
??ENDLOOP.
??LOOP?AT?<fs_itab_field>?ASSIGNING?<fs_wa_field>.
*???add?fieldcat?for?selected?row?=>?column
????CLEAR?wa_fcat.
????wa_fcat-fieldname?=?<fs_wa_field>.
????wa_fcat-scrtext_m?=?<fs_wa_field>.
????wa_fcat-scrtext_l?=?<fs_wa_field>.
????wa_fcat-key???????=?space.
????wa_fcat-outputlen?=?12.
????APPEND?wa_fcat?TO?itab_fcat2.
??ENDLOOP.
*?set?TOTAL?as?last?column
??CLEAR?wa_fcat.
??READ?TABLE?itab_fcat2?INTO?wa_fcat?WITH?KEY?fieldname?=?'TOTAL'.
??DELETE?itab_fcat2?WHERE?fieldname?=?'TOTAL'.
??APPEND?wa_fcat?TO?itab_fcat2.
??l_itab_fcat?=?itab_fcat2.
??LOOP?AT?l_itab_fcat?ASSIGNING?<fs_fcat>?FROM?4.
????<fs_fcat>-ref_table?=?'BSIS'.
????<fs_fcat>-ref_field?=?'DMBTR'.
??ENDLOOP.
??CALL?METHOD?cl_alv_table_create=>create_dynamic_table
????EXPORTING
??????it_fieldcatalog?=?l_itab_fcat
????IMPORTING
??????ep_table????????=?l_itab_any.
??ASSIGN?l_itab_any->*?TO?<fs_itab>.
??CREATE?DATA?l_wa_any?LIKE?LINE?OF?<fs_itab>.
??ASSIGN?l_wa_any->*?TO?<fs_wa>.
ENDFORM.????????????????????"?FRM_CREATE_ITAB_BY_FIELDNAME
*&---------------------------------------------------------------------*
*&??????Form??FRM_DATA_SET
*&---------------------------------------------------------------------*
*???????set?content?for?new?Dynamic?table
*----------------------------------------------------------------------*
*??????-->iv_fieldname??text
*----------------------------------------------------------------------*
FORM?frm_data_set?USING???value(iv_fieldname)?TYPE?c.
??FIELD-SYMBOLS:?<l_fs01>?TYPE?ANY,
?????????????????<l_fs_value>?TYPE?ANY.
??DATA:?l_wrk_idx?TYPE?i.
??LOOP?AT?itab_strc1?INTO?wa_strc1.
*???get?value?for?selected?column
????ASSIGN?COMPONENT?iv_fieldname?OF?STRUCTURE?wa_strc1?TO?<l_fs01>.
????MOVE-CORRESPONDING?wa_strc1?TO?<fs_wa>.
*???get?the?index?in?result?table
????READ?TABLE?<fs_itab_field>?WITH?KEY?(iv_fieldname)?=?<l_fs01>?TRANSPORTING?NO?FIELDS.
????l_wrk_idx?=?sy-tabix?+?3.
????ASSIGN?COMPONENT?l_wrk_idx?OF?STRUCTURE?<fs_wa>?TO?<l_fs_value>.
????<l_fs_value>?=?wa_strc1-total.
????ASSIGN?COMPONENT?'TOTAL'?OF?STRUCTURE?<fs_wa>?TO?<l_fs_value>.
????<l_fs_value>?=?wa_strc1-total.
????COLLECT?<fs_wa>?INTO?<fs_itab>.
????CLEAR:?<fs_wa>,
???????????wa_strc1.
??ENDLOOP.
ENDFORM.????????????????????"?FRM_DATA_SET
*&---------------------------------------------------------------------*
*&??????Form??FRM_ROW_COLUMN
*&---------------------------------------------------------------------*
*???????Row?to?Column
*----------------------------------------------------------------------*
FORM?frm_row_column?.
??DATA:?l_itab_selected?TYPE?lvc_t_col,
????????l_wa_selected???TYPE?lvc_s_col.
??CALL?METHOD?gc_grid2->get_selected_columns
????IMPORTING
??????et_index_columns?=?l_itab_selected.
*?check?columns?be?selected
??DESCRIBE?TABLE?l_itab_selected.
??IF?sy-tfill?>=?2
???OR?sy-tfill?=?0.
????MESSAGE?'Please?select?1?column!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?SCREEN.
??ENDIF.
??READ?TABLE?l_itab_selected?INTO?l_wa_selected?INDEX?1.
??IF??l_wa_selected-fieldname?<>?'BUKRS'
??AND?l_wa_selected-fieldname?<>?'GJAHR'
??AND?l_wa_selected-fieldname?<>?'BLART'
??AND?l_wa_selected-fieldname?<>?'HKONT'.
????MESSAGE?'Please?select?a?key?column?in?ALV!'?TYPE?'S'?DISPLAY?LIKE?'E'.
????LEAVE?SCREEN.
??ENDIF.
??"FIELDNAME
??PERFORM?frm_create_itab_by_fieldname?USING?l_wa_selected-fieldname.
??"set?value?into?<fs_itab>
??PERFORM?frm_data_set?USING?l_wa_selected-fieldname.
ENDFORM.????????????????????"?FRM_ROW_COLUMN
總結
以上是生活随笔為你收集整理的ALV列(Column)换到行(Row) 之 列上限不固定篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态内表及动态ALV显示
- 下一篇: 使用动态内表——ALV输出