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' )

 ( col_pos = 6 fieldname = 'MAKTX' seltext_l = 'MATERIAL DESCRIPTION' ) ).


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

Popular posts from this blog

Custom entity/Action dialog in RAP using Unmanaged scenario

New syntax for append- VALUE (new syntax 7.4+) in ABAP

Read statement new syntax in ABAP. (7.4+).