Hi Experts,
I have a requirement to have 2 ALV Grid Display in one screen and a button.
I have created the screens using se51. Followed the guide here SAP ABAP 4 Tutorial: Two ALV Grids in Single Screen using OOPs
I succeeded in creating the 2 alv grid in one screen, but my requirement is when I run my program Both ALV will be shown but only ALV1 will have data first and when I click a button ALV2 will be populated.
How can I populate my ALV2 when I press a button?
Here is my code:
DATA: BEGIN OF intern OCCURS 0.
INCLUDE STRUCTURE alsmex_tabline.
DATA: END OF intern.
DATA: BEGIN OF intern1 OCCURS 0.
INCLUDE STRUCTURE alsmex_tabline.
DATA: END OF intern1.
DATA: BEGIN OF it_upload OCCURS 0,
rmcdsnum TYPE string,
ebeln TYPE string,
ebelp TYPE string,
matnr TYPE string,
mixcode TYPE string,
vol TYPE string,
END OF it_upload.
DATA: wa_upload LIKE it_upload.
DATA: tind(4) TYPE n.
DATA: lne(2) TYPE n.
DATA: zwfeld(30).
FIELD-SYMBOLS: <fs1>.
DATA: BEGIN OF fieldnames OCCURS 3,
title(60),
zline(2) TYPE n,
END OF fieldnames.
DATA: BEGIN OF data_tab OCCURS 0,
value_0001(50),
value_0002(50),
value_0003(50),
value_0004(50),
value_0005(50),
value_0006(50),
value_0007(50),
value_0008(50),
value_0009(50),
value_0010(50),
value_0011(50),
value_0012(50),
value_0013(50).
DATA: END OF data_tab.
DATA: wa_fieldnames LIKE fieldnames.
DATA: wa_datatab LIKE data_tab.
TYPES: BEGIN OF ty_data,
chk(1) TYPE c,
rmcdsnum TYPE string,
ebeln TYPE string,
ebelp TYPE string,
matnr TYPE string,
mixcode TYPE string,
vol TYPE string,
END OF ty_data,
BEGIN OF ty_recco,
rmcdsnum TYPE string,
ebeln LIKE ekbe-ebeln,
ebelp LIKE ekbe-ebelp,
type(1) TYPE c,
message TYPE BAPI_MSG,
END OF ty_recco.
DATA: wa_data TYPE ty_data,
wa_recco TYPE ty_recco,
it_data TYPE STANDARD TABLE OF ty_data,
it_recco TYPE STANDARD TABLE OF ty_recco.
"Field Catalog structure and Tables
DATA: wa_fcat_data TYPE lvc_s_fcat,
wa_fcat_recco TYPE lvc_s_fcat,
it_fcat_data TYPE STANDARD TABLE OF lvc_s_fcat,
it_fcat_recco TYPE STANDARD TABLE OF lvc_s_fcat.
DATA: "Object for Custom Container
ob_custom1 TYPE REF TO cl_gui_custom_container,
ob_custom2 TYPE REF TO cl_gui_custom_container,
"Object for GRIDs
ob_grid1 TYPE REF TO cl_gui_alv_grid,
ob_grid2 TYPE REF TO cl_gui_alv_grid.
PARAMETERS: p_file LIKE rlgrap-filename MEMORY ID M01,
begcol TYPE i DEFAULT 1 NO-DISPLAY,
begrow TYPE i DEFAULT 1 NO-DISPLAY,
endcol TYPE i DEFAULT 100 NO-DISPLAY,
endrow TYPE i DEFAULT 32000 NO-DISPLAY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
mask = '*.xls'
static = 'X'
CHANGING
file_name = p_file.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = begcol
i_begin_row = begrow
i_end_col = endcol
i_end_row = endrow
TABLES
intern = intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
WRITE:/ 'Upload Error ', SY-SUBRC.
ENDIF.
FORM get_exceldata.
LOOP AT intern.
intern1 = intern.
CLEAR intern1-row.
APPEND intern1.
ENDLOOP.
"Get Header of excel file
SORT intern BY row col.
LOOP AT intern.
fieldnames-title = intern-value.
fieldnames-zline = sy-tabix.
APPEND fieldnames.
AT END OF row.
EXIT.
ENDAT.
ENDLOOP.
"Get values of excel
SORT intern BY row col.
LOOP AT intern.
IF intern-row = 1.
CONTINUE.
ENDIF.
tind = intern-col.
CONCATENATE 'DATA_TAB-VALUE_' tind INTO zwfeld.
ASSIGN (zwfeld) TO <fs1>.
<fs1> = intern-value.
AT END OF row.
APPEND data_tab.
CLEAR data_tab.
ENDAT.
ENDLOOP.
"Put value into itab with header
CLEAR: zwfeld, <fs1>.
LOOP AT data_tab INTO wa_datatab.
READ TABLE fieldnames INTO wa_fieldnames WITH KEY Title = 'RMCDS'.
IF sy-subrc EQ 0.
lne = wa_fieldnames-zline.
CONCATENATE 'wa_datatab-value_00' lne INTO zwfeld.
ASSIGN (zwfeld) TO <fs1>.
it_upload-rmcdsnum = <fs1>.
ELSE.
MESSAGE 'Cannot find column STO in the file' TYPE 'E'.
ENDIF.
READ TABLE fieldnames INTO wa_fieldnames WITH KEY Title = 'STO'.
IF sy-subrc EQ 0.
lne = wa_fieldnames-zline.
CONCATENATE 'wa_datatab-value_00' lne INTO zwfeld.
ASSIGN (zwfeld) TO <fs1>.
it_upload-ebeln = <fs1>.
ELSE.
MESSAGE 'Cannot find column STO in the file' TYPE 'E'.
ENDIF.
READ TABLE fieldnames INTO wa_fieldnames WITH KEY Title = 'Line Item'.
IF sy-subrc EQ 0.
lne = wa_fieldnames-zline.
CONCATENATE 'wa_datatab-value_00' lne INTO zwfeld.
ASSIGN (zwfeld) TO <fs1>.
it_upload-ebelp = <fs1>.
ELSE.
MESSAGE 'Cannot find column Line Item in the excel file' TYPE 'E'.
ENDIF.
"Material Number
READ TABLE fieldnames INTO wa_fieldnames WITH KEY Title = 'Item Code'.
IF sy-subrc EQ 0.
lne = wa_fieldnames-zline.
CONCATENATE 'wa_datatab-value_00' lne INTO zwfeld.
ASSIGN (zwfeld) TO <fs1>.
it_upload-matnr = <fs1>.
ELSE.
MESSAGE 'Cannot find column Volume in the excel file' TYPE 'E'.
ENDIF.
READ TABLE fieldnames INTO wa_fieldnames WITH KEY Title = 'Mix Code'.
IF sy-subrc EQ 0.
lne = wa_fieldnames-zline.
CONCATENATE 'wa_datatab-value_00' lne INTO zwfeld.
ASSIGN (zwfeld) TO <fs1>.
it_upload-mixcode = <fs1>.
ELSE.
MESSAGE 'Cannot find column Volume in the excel file' TYPE 'E'.
ENDIF.
READ TABLE fieldnames INTO wa_fieldnames WITH KEY Title = 'Volume'.
IF sy-subrc EQ 0.
lne = wa_fieldnames-zline.
CONCATENATE 'wa_datatab-value_00' lne INTO zwfeld.
ASSIGN (zwfeld) TO <fs1>.
it_upload-vol = <fs1>.
ELSE.
MESSAGE 'Cannot find column Volume in the excel file' TYPE 'E'.
ENDIF.
APPEND it_upload.
ENDLOOP.
ENDFORM.
CLASS getrmcds DEFINITION.
PUBLIC SECTION.
METHODS: get_dataexcel, "Selection from EKKO
get_recco, "Selection from EKPO
fieldcat_exceldata, "Fieldcatalog for Header Table
fieldcat_recco. "Fieldcatalog for Item Table
ENDCLASS. "getrmcds DEFINITION
*
**----------------------------------------------------------------------*
** CLASS getrmcds IMPLEMENTATION
**----------------------------------------------------------------------*
**
**----------------------------------------------------------------------*
CLASS getrmcds IMPLEMENTATION.
METHOD get_dataexcel.
LOOP AT it_upload INTO wa_upload.
wa_data-rmcdsnum = wa_upload-rmcdsnum.
wa_data-ebeln = wa_upload-ebeln.
wa_data-ebelp = wa_upload-ebelp.
wa_data-matnr = wa_upload-matnr.
wa_data-mixcode = wa_upload-mixcode.
wa_data-vol = wa_upload-vol.
APPEND wa_data TO it_data.
ENDLOOP.
CALL METHOD: fieldcat_exceldata.
CALL METHOD: fieldcat_recco.
ENDMETHOD. "get_dataexcel
METHOD get_recco.
wa_recco-rmcdsnum = '123123'.
wa_recco-ebeln = '1111'.
wa_recco-ebelp = '0020'.
wa_recco-type = 'E'.
wa_recco-message = 'yesyeseyseys'.
APPEND wa_recco TO it_recco.
CALL METHOD: fieldcat_recco.
ENDMETHOD. "get_recco
METHOD fieldcat_exceldata.
CLEAR wa_fcat_data.
REFRESH it_fcat_data.
DATA: lv_col TYPE i VALUE 0.
lv_col = 1 + lv_col.
wa_fcat_data-col_pos = lv_col.
wa_fcat_data-fieldname = 'CHK'.
wa_fcat_data-tabname = 'IT_DATA'.
wa_fcat_data-checkbox = 'X'.
wa_fcat_data-edit = 'X'.
wa_fcat_data-col_opt = 'X'.
APPEND wa_fcat_data TO it_fcat_data.
CLEAR wa_fcat_data.
lv_col = 1 + lv_col.
wa_fcat_data-col_pos = lv_col.
wa_fcat_data-fieldname = 'RMCDSNUM'.
wa_fcat_data-tabname = 'IT_DATA'.
wa_fcat_data-reptext = 'RMCDS Number'.
wa_fcat_data-col_opt = 'X'.
APPEND wa_fcat_data TO it_fcat_data.
CLEAR wa_fcat_data.
lv_col = 1 + lv_col.
wa_fcat_data-col_pos = lv_col.
wa_fcat_data-fieldname = 'EBELN'.
wa_fcat_data-tabname = 'IT_DATA'.
wa_fcat_data-reptext = 'STO'.
wa_fcat_data-col_opt = 'X'.
APPEND wa_fcat_data TO it_fcat_data.
CLEAR wa_fcat_data.
lv_col = 1 + lv_col.
wa_fcat_data-col_pos = lv_col.
wa_fcat_data-fieldname = 'EBELP'.
wa_fcat_data-tabname = 'IT_DATA'.
wa_fcat_data-reptext = 'Line Item'.
wa_fcat_data-col_opt = 'X'.
APPEND wa_fcat_data TO it_fcat_data.
CLEAR wa_fcat_data.
lv_col = 1 + lv_col.
wa_fcat_data-col_pos = lv_col.
wa_fcat_data-fieldname = 'MATNR'.
wa_fcat_data-tabname = 'IT_DATA'.
wa_fcat_data-reptext = 'Item Code'.
wa_fcat_data-col_opt = 'X'.
APPEND wa_fcat_data TO it_fcat_data.
CLEAR wa_fcat_data.
lv_col = 1 + lv_col.
wa_fcat_data-col_pos = lv_col.
wa_fcat_data-fieldname = 'MIXCODE'.
wa_fcat_data-tabname = 'IT_DATA'.
wa_fcat_data-reptext = 'Mix Code'.
wa_fcat_data-col_opt = 'X'.
APPEND wa_fcat_data TO it_fcat_data.
CLEAR wa_fcat_data.
lv_col = 1 + lv_col.
wa_fcat_data-col_pos = lv_col.
wa_fcat_data-fieldname = 'VOL'.
wa_fcat_data-tabname = 'IT_DATA'.
wa_fcat_data-reptext = 'Vendr'.
wa_fcat_data-col_opt = 'X'.
APPEND wa_fcat_data TO it_fcat_data.
CLEAR wa_fcat_data.
ENDMETHOD. "fieldcat_exceldata
METHOD fieldcat_recco.
CLEAR wa_fcat_recco.
REFRESH it_fcat_recco.
DATA: lv_col TYPE i VALUE 0.
lv_col = 1 + lv_col.
wa_fcat_recco-col_pos = lv_col.
wa_fcat_recco-fieldname = 'RMCDSNUM'.
wa_fcat_recco-tabname = 'IT_RECCO'.
wa_fcat_recco-reptext = 'RMCDS Number'.
wa_fcat_recco-col_opt = 'X'.
APPEND wa_fcat_recco TO it_fcat_recco.
CLEAR wa_fcat_recco.
lv_col = 1 + lv_col.
wa_fcat_recco-col_pos = lv_col.
wa_fcat_recco-fieldname = 'EBELP'.
wa_fcat_recco-tabname = 'IT_RECCO'.
wa_fcat_recco-reptext = 'STO'.
wa_fcat_recco-col_opt = 'X'.
APPEND wa_fcat_recco TO it_fcat_recco.
CLEAR wa_fcat_recco.
lv_col = 1 + lv_col.
wa_fcat_recco-col_pos = lv_col.
wa_fcat_recco-fieldname = 'EBELN'.
wa_fcat_recco-tabname = 'IT_RECCO'.
wa_fcat_recco-reptext = 'Line Item'.
wa_fcat_recco-col_opt = 'X'.
APPEND wa_fcat_recco TO it_fcat_recco.
CLEAR wa_fcat_recco.
lv_col = 1 + lv_col.
wa_fcat_recco-col_pos = lv_col.
wa_fcat_recco-fieldname = 'TYPE'.
wa_fcat_recco-tabname = 'IT_RECCO'.
wa_fcat_recco-reptext = 'Type'.
wa_fcat_recco-col_opt = 'X'.
APPEND wa_fcat_recco TO it_fcat_recco.
CLEAR wa_fcat_recco.
lv_col = 1 + lv_col.
wa_fcat_recco-col_pos = lv_col.
wa_fcat_recco-fieldname = 'MESSAGE'.
wa_fcat_recco-tabname = 'IT_RECCO'.
wa_fcat_recco-reptext = 'Message'.
wa_fcat_recco-col_opt = 'X'.
APPEND wa_fcat_recco TO it_fcat_recco.
CLEAR wa_fcat_recco.
ENDMETHOD. "fieldcat_recco
ENDCLASS. "getrmcds IMPLEMENTATION
END-OF-SELECTION.
PERFORM get_exceldata.
DATA: getrmcds TYPE REF TO getrmcds.
CREATE OBJECT getrmcds.
CALL METHOD: getrmcds->get_dataexcel.
CALL METHOD: getrmcds->get_recco.
CALL SCREEN 0900.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0900 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0900 INPUT.
IF sy-ucomm = 'BACK'
OR sy-ucomm = 'EXIT'
OR sy-ucomm = 'CANCEL'.
FREE: ob_grid1, ob_grid2, ob_custom1, ob_custom2.
REFRESH: it_data, it_recco.
LEAVE TO SCREEN 0.
ENDIF.
* IF sy-ucomm = 'SIMULATE'.
* CALL METHOD: getrmcds->get_recco.
* CALL SCREEN 0900.
* ENDIF.
ENDMODULE. " USER_COMMAND_0900 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0900 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0900 OUTPUT.
SET PF-STATUS 'ZSTANDARD'.
* SET TITLEBAR 'TITLE_9000'.
"Object creation for custom container 1 exporting the name
CREATE OBJECT ob_custom1
EXPORTING
container_name = 'CONTAINER1'.
"Object creation for custom container 2 exporting the name
CREATE OBJECT ob_custom2
EXPORTING
container_name = 'CONTAINER2'.
"Object creation for ALV Grid 1 exporting the parent container 1
"It means container 1 contains ALV grid 1 - header table
CREATE OBJECT ob_grid1
EXPORTING
i_parent = ob_custom1.
"Object creation for ALV Grid 2 exporting the parent container 2
"It means container 2 contains ALV grid 2 - item table
CREATE OBJECT ob_grid2
EXPORTING
i_parent = ob_custom2.
*Calling the method to display the output table in ALV Grid 1.
*Here field catalog and output table are passed by changing parameter.
*Header table is passed here.
CALL METHOD ob_grid1->set_table_for_first_display
CHANGING
it_fieldcatalog = it_fcat_data
it_outtab = it_data.
*Calling the method to display the output table in ALV Grid 2.
*Here field catalog and output table are passed by changing parameter.
*Item table is passed here.
CALL METHOD ob_grid2->set_table_for_first_display
CHANGING
it_fieldcatalog = it_fcat_recco
it_outtab = it_recco.
ENDMODULE. " STATUS_0900 OUTPUT