Join multiple tables using new syntax and display in alv in ABAP
In this example I'm fetching data from 3 tables i.e. VBAK, VABP, MAKT without using joins.
Report
REPORT zab_rp_sale_order_new.
TABLES: vbak.
TYPES: BEGIN OF ls_final,
vbeln TYPE vbeln_va,
posnr TYPE posnr,
matnr TYPE matnr,
kwmeng TYPE kwmeng,
vrkme TYPE vrkme,
maktx TYPE maktx,
END OF ls_final.
DATA: lr_final TYPE ls_final,
lt_final TYPE TABLE OF ls_final.
DATA: lt_fieldcat TYPE slis_t_fieldcat_alv,
lr_layout TYPE slis_layout_alv.
SELECT-OPTIONS: s_erdat FOR vbak-erdat.
IF s_erdat IS INITIAL.
MESSAGE 'Data is not found' TYPE 'E'.
* LEAVE TO LIST-PROCESSING.
ELSE.
SELECT vbeln
FROM vbak
INTO TABLE @DATA(lt_vbak)
WHERE erdat IN @s_erdat.
IF lt_vbak IS NOT INITIAL.
SELECT vbeln,posnr,matnr,kwmeng,vrkme
FROM vbap
INTO TABLE @DATA(lt_vbap)
FOR ALL ENTRIES IN @lt_vbak
WHERE vbeln = @lt_vbak-vbeln.
IF lt_vbap IS NOT INITIAL.
DATA(lt_tmp_vbap) = lt_vbap.
SORT lt_tmp_vbap BY matnr.
DELETE ADJACENT DUPLICATES FROM lt_tmp_vbap COMPARING matnr.
SELECT matnr,maktx
FROM makt
INTO TABLE @DATA(lt_makt)
FOR ALL ENTRIES IN @lt_tmp_vbap
WHERE matnr = @lt_tmp_vbap-matnr
AND spras = @sy-langu.
ENDIF.
ENDIF.
LOOP AT lt_vbak INTO DATA(lr_vbak).
LOOP AT lt_vbap INTO DATA(lr_vbap) WHERE vbeln = lr_vbak-vbeln.
IF line_exists( lt_makt[ matnr = lr_vbap-matnr ] ).
DATA(lr_makt) = lt_makt[ matnr = lr_vbap-matnr ] .
lr_final = VALUE #( vbeln = lr_vbak-vbeln
posnr = lr_vbap-posnr
matnr = lr_vbap-matnr
kwmeng = lr_vbap-kwmeng
vrkme = lr_vbap-vrkme
maktx = lr_makt-maktx ).
APPEND lr_final TO lt_final.
DATA(lv_flag) = 'X'.
CLEAR: lr_final,lr_vbap,lr_makt.
ENDIF.
ENDLOOP.
IF lv_flag IS INITIAL.
lr_final = VALUE #( vbeln = lr_vbak-vbeln
posnr = lr_vbap-posnr
matnr = lr_vbap-matnr
kwmeng = lr_vbap-kwmeng
vrkme = lr_vbap-vrkme
maktx = lr_makt-maktx ).
APPEND lr_final TO lt_final.
CLEAR: lr_final.
ENDIF.
CLEAR: lv_flag.
ENDLOOP.
ENDIF.
lr_layout-colwidth_optimize = 'X'.
lt_fieldcat = VALUE #(
( col_pos = 1 fieldname = 'VBELN' seltext_l = 'SALE DOCUMENT' )
( col_pos = 2 fieldname = 'POSNR' seltext_l = 'SALE ITEM' )
( col_pos = 3 fieldname = 'MATNR' seltext_l = 'MATERIAL NUMBER' )
( col_pos = 4 fieldname = 'KWMENG' seltext_l = 'QUANTITY' )
( col_pos = 5 fieldname = 'VRKME' seltext_l = 'SALE UNIT' )
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = lr_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = lt_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
Input
Output
******************************Thank You***************************
Comments
Post a Comment