PROGRAM: Display sales and material details in block mode
Steps:
Step 1: Create structures and internal tables
Step 2: Design selection screen
Step 3: Fetch sales data and material data
Step 4: Display sales data in one block and material data in another block
TYPES : BEGIN OF lty_sales,
vbeln TYPE vbak-vbeln,
erdat TYPE vbak-erdat,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
END OF lty_sales,
BEGIN OF lty_mat,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
maktx TYPE makt-maktx,
END OF lty_mat.
DATA : gt_sales TYPE STANDARD TABLE OF lty_sales,
gt_mat TYPE STANDARD TABLE OF lty_mat,
gs_mat TYPE lty_mat,
gs_sales TYPE lty_sales.
gt_fcat TYPE STANDARD TABLE OF slis_fieldcat_alv,
gt_fcat12 TYPE STANDARD TABLE OF slis_fieldcat_alv,
gs_fcat TYPE slis_fieldcat_alv.
gt_events TYPE STANDARD TABLE OF slis_alv_event,
gs_events TYPE slis_alv_event.
SELECTION-SCREEN BEGIN OF block b1 WITH FRAME TITLE text-001.
PARAMETER p_erdat TYPE vbak-erdat .
SELECTION-SCREEN END OF block b1.
START-OF-SELECTION.
PERFORM sales_fetch.
PERFORM mat_fetch.
end-of-selection.
PERFORM alv_dis.
FORM sales_fetch .
REFRESH gt_sales.
SELECT vbak~vbeln
vbak~erdat
vbap~posnr
vbap~matnr INTO TABLE gt_sales
FROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbeln
WHERE vbak~erdat = p_erdat.
IF sy-subrc = 0.
SORT gt_sales by vbeln posnr.
ENDIF.
ENDFORM.
FORM alv_dis .
DATA ls_layout TYPE slis_layout_alv.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = sy-repid.
CLEAR ls_layout.
ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize ='X'.
PERFORM fill_fcat.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = ls_layout
it_fieldcat = gt_fcat
i_tabname = 'GT_SALES'
it_events = gt_events
TABLES
t_outtab = gt_sales
EXCEPTIONS
PROGRAM_ERROR =1
MAXIMUM_OF_APPENDS_REACHED =2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = sy-repid.
CLEAR ls_layout.
ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize ='X'.
PERFORM fill_fcat.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = ls_layout
it_fieldcat = gt_fcat12
i_tabname = 'GT_MAT'
it_events = gt_events
TABLES
t_outtab = gt_mat
EXCEPTIONS
PROGRAM_ERROR =1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
EXCEPTIONS
PROGRAM_ERROR =1
OTHERS = 2.
ENDFORM.
FORM fill_fcat .
REFRESH gt_fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = 'VBELN'.
gs_fcat-col_pos = '1'.
gs_fcat-tabname = 'GT_SALES'.
gs_fcat-seltext_s = 'Sales No'.
APPEND gs_fcat to gt_fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = 'ERDAT'.
gs_fcat-col_pos = '2'.
gs_fcat-tabname = 'GT_SALES'.
gs_fcat-seltext_s = 'Date'.
APPEND gs_fcat to gt_fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = 'POSNR'.
gs_fcat-col_pos = '3'.
gs_fcat-tabname = 'GT_SALES'.
gs_fcat-seltext_s = 'Item No'.
APPEND gs_fcat to gt_fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = 'MATNR'.
gs_fcat-col_pos = '4'.
gs_fcat-tabname = 'GT_SALES'.
gs_fcat-seltext_s = 'Material No'.
APPEND gs_fcat to gt_fcat.
REFRESH gt_fcat12.
CLEAR gs_fcat.
gs_fcat-fieldname ='MATNR'.
gs_fcat-col_pos = '1'.
gs_fcat-tabname = 'GT_MAT'.
gs_fcat-seltext_s = 'Material No'.
APPEND gs_fcat to gt_fcat12.
CLEAR gs_fcat.
gs_fcat-fieldname ='ERSDA'.
gs_fcat-col_pos = '2'.
gs_fcat-tabname = 'GT_MAT'.
gs_fcat-seltext_s = 'Date'.
APPEND gs_fcat to gt_fcat12.
CLEAR gs_fcat.
gs_fcat-fieldname ='MAKTX'.
gs_fcat-col_pos = '3'.
gs_fcat-tabname = 'GT_MAT'.
gs_fcat-seltext_s = 'Material Des'.
APPEND gs_fcat to gt_fcat12.
ENDFORM. " FILL_FCAT
FORM material_fetch .
IF gt_sales is not INITIAL.
refresh gt_mat.
SELECT mara~matnr mara~ersda makt~maktx INTO TABLE gt_mat
FROM mara INNER JOIN makt ON mara~matnr = makt~matnr
FOR ALL ENTRIES IN gt_sales
WHERE mara~matnr = gt_sales-matnr and makt~spras = 'E'.
IF sy-subrc = 0.
SORT gt_mat by matnr.
ENDIF.
ENDIF.
ENDFORM.
Input: