Search This Blog

Showing posts with label ALV. Show all posts
Showing posts with label ALV. Show all posts

Saturday, February 13, 2021

Data Fetch From Multiple Tables in ABAP

 

Here is a simple example for fetching data from multiple tables for the beginners.

 Note*  To perform selection from multiple tables, check for the common fields preferably key fields are required to establish the relationship.

Check this sample code. Here I'm fetching the data from two tables

REPORT ztest.


TYPESBEGIN OF ty_mara ,   " STRUCTURE FOR MARA TABLE
     matnr TYPE mara-matnr,  " MATERIAL NO.
     ersda TYPE mara-ersda" CREATION DATE
     ernam TYPE mara-ernam" CREATED BY P
  END OF ty_mara.


TYPESBEGIN OF ty_marc" STRUCTURE FOR MARC TABLE
  matnr TYPE marc-matnr,
  werks TYPE marc-werks" PLANT
  pstat TYPE marc-pstat" Maintenance status
  END OF ty_marc.

TYPES BEGIN OF ty_makt,  " STRUCTURE FOR MAKT TABLE
  matnr TYPE makt-matnr,
  spras TYPE makt-spras,   " LANGUAGE
  maktx TYPE makt-maktx,   " MATERIAL DESCRIPTION
  END OF ty_makt.

TYPESBEGIN OF ty_final,  " FINAL STRUCTURE
  matnr TYPE mara-matnr,
  spras TYPE makt-spras,
  maktx TYPE makt-maktx,
  werks TYPE marc-werks,
  pstat TYPE marc-pstat,
  ersda TYPE mara-ersda,
  ernam TYPE mara-ernam,

  END OF ty_final.

DATAitab1 TYPE TABLE OF ty_mara WITH HEADER LINEwa1 TYPE ty_mara.
DATAitab2 TYPE TABLE OF ty_marc WITH HEADER LINEwa2 TYPE ty_marc.
DATAitab3 TYPE TABLE OF ty_makt WITH HEADER LINEwa3 TYPE ty_makt.
DATAitab4 TYPE TABLE OF ty_final WITH HEADER LINEwa4 TYPE ty_final.

SELECTION-SCREENBEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERSp_matnr TYPE mara-matnr OBLIGATORY.

SELECTION-SCREENEND OF BLOCK b1.

START-OF-SELECTION.

  PERFORM get_data.
  PERFORM process_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data.

  SELECT matnr ersda ernam FROM mara INTO TABLE itab1 WHERE matnr p_matnr.

  IF sy-subrc 0.
    SELECT matnr werks pstat FROM marc INTO TABLE itab2 FOR ALL ENTRIES IN itab1 WHERE matnr itab1-matnr.
  ENDIF.

  IF sy-subrc 0.
    SELECT  matnr spras maktx FROM makt INTO TABLE itab3 FOR ALL ENTRIES IN itab1 WHERE matnr itab1-matnr.
  ENDIF.

ENDFORM.                    " GET_DATA



*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM process_data .
  LOOP AT itab3 INTO wa3.
    wa4-matnr wa3-matnr.
    wa4-spras wa3-spras.
    wa4-maktx wa3-maktx.



    READ TABLE itab2 INTO wa2 WITH KEY matnr wa3-matnr.
    wa4-werks  wa2-werks.
    wa4-pstat  wa2-pstat.


    READ TABLE itab1 INTO wa1 WITH KEY matnr wa3-matnr.
    wa4-ersda wa1-ersda.
    wa4-ernam wa1-ernam.


    APPEND wa4 TO itab4.


    CLEAR WA1.
    CLEAR WA2.
    CLEAR WA3.
    CLEAR WA4.

  ENDLOOP.

  PERFORM DISPLAy_DATA.
ENDFORM.                    " PROCESS_DATA



*&---------------------------------------------------------------------*
*&      Form  DISPLAy_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form DISPLAy_DATA .
LOOP AT ITAB4 INTO WA4.

  WRITE:/ WA4-MATNR20 WA4-ERSDA40 WA4-ERNAM60 WA4-SPRAS80 WA4-PSTAT.

  ENDLOOP.
endform.                    " DISPLAy_DATA

Interactive Report ALV

 

Simple Example for the ALV Interactive report using user_command.


Step1: Data decelerations.

Step2: Get the data from MARA.

Step3: Build field catalog.

Step4: Display ALV.

Step5: Implement user command.



REPORT ztest.
TABLES mara.
TYPE-POOLSslis.

TYPESBEGIN OF ty_mara,

         matnr TYPE mara-matnr,
         ersda TYPE mara-ersda,
         ernam TYPE mara-ernam,
       END OF ty_mara.

DATAitab TYPE TABLE OF ty_mara.
DATAit_fieldcat TYPE slis_t_fieldcat_alv,
      wa_fcat     TYPE slis_fieldcat_alv.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONSs_matnr FOR mara-matnr OBLIGATORY.
SELECTION-SCREENEND OF BLOCK b1.

START-OF-SELECTION.

  PERFORM get_data.

  PERFORM display_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .

  SELECT matnr ersda ernam FROM mara INTO TABLE itab WHERE matnr IN s_matnr.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_data .

  PERFORM create_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      sy-repid
*     I_CALLBACK_PF_STATUS_SET          = ' '
      i_callback_user_command 'INT_ALV1'
      it_fieldcat             it_fieldcat
      i_default               'X'
      i_save                  'I'
    TABLES
      t_outtab                itab[]
    EXCEPTIONS
      program_error           1
      OTHERS                  2.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_fieldcat .

  wa_fcat-fieldname 'MATNR'.
  wa_fcat-tabname 'ITAB'.
  wa_fcat-seltext_m 'MAT. NO.'.
  APPEND wa_fcat TO it_fieldcat.
  CLEAR wa_fcat.

  wa_fcat-fieldname 'ERSDA'.
  wa_fcat-tabname 'ITAB'.
  wa_fcat-seltext_m 'DATE'.
  APPEND wa_fcat TO it_fieldcat.
  CLEAR wa_fcat.

  wa_fcat-fieldname 'ERNAM'.
  wa_fcat-tabname 'ITAB'.
  wa_fcat-seltext_m 'PERSON NAME '.
  APPEND wa_fcat TO it_fieldcat.
  CLEAR wa_fcat.


ENDFORM.                    " CREATE_FIELDCAT

FORM int_alv1 USING s_comm TYPE sy-ucomm
                    sfield TYPE slis_selfield.

  MESSAGE i000(zmsgWITH sfield-value.
ENDFORM.

Pages