Monday, March 4, 2019


Create Dynamic Internal Table & Dynamic FIELD CATALOG



Introduction:
This document explains how to create dynamic internal table based on records and how to create filed catalog  in a simple Object Oriented  ALV report output.



Input Screen:





Output Screen:






Source Code:

--------------------------------------------------------------*
*& Report ZOODEM1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZOODEM1.

TABLES BKPF,BSEG.

TYPESBEGIN OF TS_BKPF,
         BELNR 
TYPE BKPF-BELNR,
         BUKRS 
TYPE BKPF-BUKRS,
         GJAHR 
TYPE BKPF-GJAHR,
         BLART 
TYPE BKPF-BLART,
         BLDAT 
TYPE BKPF-BLDAT,
         BUDAT 
TYPE BKPF-BUDAT,
       
END OF TS_BKPF.

TYPESBEGIN OF TS_BSEG,
         BELNR 
TYPE BSEG-BELNR,
         BUKRS 
TYPE BSEG-BUKRS,
         GJAHR 
TYPE BSEG-GJAHR,
         BUZEI 
TYPE BSEG-BUZEI,
         DMBTR 
TYPE BSEG-DMBTR,
       
END OF TS_BSEG.
DATA:LV_FIELD TYPE CHAR40.

DATA GT_BKPF TYPE TABLE OF TS_BKPF,
       GT_BSEG 
TYPE TABLE OF TS_BSEG.
FIELD-SYMBOLS <FT_BKPF>   TYPE STANDARD TABLE,
                <FS_BKPF>   
TYPE TS_BKPF,
                <FT_BSEG>   
LIKE BSEG,
                <FS_BSEG>   
TYPE TS_BSEG,
                <FT_FINAL>  
TYPE STANDARD TABLE,
                <FS_FINAL> 
.

DATA ITAB_FCAT  TYPE  LVC_T_FCAT.
DATA FCAT LIKE LINE OF ITAB_FCAT.
DATA  O_GRID    TYPE REF TO CL_GUI_ALV_GRID,
       C_ALV1    
TYPE REF TO CL_GUI_ALV_GRID,
       C_CONT1   
TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATAFS_DATA   TYPE REF TO DATA,
      DYN_LINE  
TYPE REF TO DATA,
      DYN_LINE1 
TYPE REF TO DATA.
FIELD-SYMBOLS<FS_TAB>   TYPE STANDARD TABLE,
               <FS_TAB1>  
TYPE STANDARD TABLE,
               <FS_WA>    
TYPE ANY,
               <FS_WA1>   
TYPE ANY.
DATA GJAHR1  TYPE GJAHR,
       GJAHR   
TYPE GJAHR,
       MONT    
TYPE VTBBEWE-ATAGE,
       MONT1   
TYPE MONTH,
       MONT2   
TYPE MONTH,
       DATE1   
TYPE SY-DATUM,
       DATE2   
TYPE SY-DATUM,
       DATE3   
TYPE SY-DATUM,
       LV_NAME 
TYPE T247-KTX.
SELECTION-SCREEN BEGIN OF BLOCK WITH FRAME TITLE TEXT-001.
PARAMETERS P_BUKRS TYPE BKPF-BUKRS.
SELECT-OPTIONS S_BLDAT FOR BKPF-BLDAT.
SELECTION-SCREEN END OF BLOCK B.

DATAGJAHR-LOW  TYPE GJAHR,
      GJAHR
-HIGH TYPE GJAHR.

GJAHR
-LOW S_BLDAT-LOW+0(4).
GJAHR
-HIGH S_BLDAT-HIGH+0(4).
CONCATENATE GJAHR-LOW'0101'  INTO DATE1.
CONCATENATE GJAHR-HIGH'1201' INTO DATE2.

PERFORM FETCH.
PERFORM DATA.
CALL SCREEN 100.
**&---------------------------------------------------------------------*
**& Module STATUS_0100 OUTPUT
**&---------------------------------------------------------------------*
**&
**&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  
SET PF-STATUS 'ZSTAT'.

  
CREATE OBJECT C_CONT1
    
EXPORTING
      CONTAINER_NAME              
'CC'
    
EXCEPTIONS
      CNTL_ERROR                  
1
      CNTL_SYSTEM_ERROR           
2
      CREATE_ERROR                
3
      LIFETIME_ERROR              
4
      LIFETIME_DYNPRO_DYNPRO_LINK 
5
      
OTHERS                      6.
  
IF SY-SUBRC <> 0.
  
ENDIF.

  
CREATE OBJECT C_ALV1
    
EXPORTING
      I_PARENT          
C_CONT1
    
EXCEPTIONS
      ERROR_CNTL_CREATE 
1
      ERROR_CNTL_INIT   
2
      ERROR_CNTL_LINK   
3
      ERROR_DP_CREATE   
4
      
OTHERS            5.
  
IF SY-SUBRC <> 0.
  
ENDIF.

  
CALL METHOD C_ALV1->SET_TABLE_FOR_FIRST_DISPLAY
    
CHANGING
      IT_OUTTAB                     
<FS_TAB>
      IT_FIELDCATALOG               
ITAB_FCAT
    
EXCEPTIONS
      INVALID_PARAMETER_COMBINATION 
1
      PROGRAM_ERROR                 
2
      TOO_MANY_LINES                
3
      
OTHERS                        4.
  
IF SY-SUBRC <> 0.
  
ENDIF.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  
CASE SY-UCOMM.
    
WHEN 'BACK'.
    
LEAVE TO SCREEN 0.
  
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FETCH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FETCH .
  
SELECT BELNR
         BUKRS
         GJAHR
         BLART
         BLDAT
         BUDAT 
FROM BKPF INTO TABLE GT_BKPF WHERE BUKRS P_BUKRS AND BLDAT IN S_BLDAT.

  
SORT GT_BKPF BY BUKRS BELNR GJAHR.
  
IF GT_BKPF IS NOT INITIAL.
    
SELECT BELNR
           BUKRS
           GJAHR
           BUZEI
           DMBTR 
FROM BSEG INTO TABLE GT_BSEG
           
FOR ALL ENTRIES IN GT_BKPF WHERE BUKRS GT_BKPF-BUKRS
                                        
AND   BELNR GT_BKPF-BELNR
                                        
AND   GJAHR GT_BKPF-GJAHR.
  
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM DATA .

  FCAT
-COL_POS FCAT-COL_POS + 1.
  FCAT
-FIELDNAME 'BUKRS'.
  FCAT
-SCRTEXT_L 'Company Code'.
  
APPEND FCAT TO ITAB_FCAT.

  FCAT
-COL_POS FCAT-COL_POS + 1.
  FCAT
-FIELDNAME 'BELNR'.
  FCAT
-SCRTEXT_L 'Document Number'.
  
APPEND FCAT TO ITAB_FCAT.

  FCAT
-COL_POS FCAT-COL_POS + 1.
  FCAT
-FIELDNAME 'GJAHR'.
  FCAT
-SCRTEXT_L 'Year'.
  
APPEND FCAT TO ITAB_FCAT.

  
SORT GT_BKPF BY BLDAT.
  
LOOP AT GT_BKPF ASSIGNING <FS_BKPF>.
    MONT2 
<FS_BKPF>-BLDAT+4(2).
    GJAHR 
<FS_BKPF>-BLDAT+0(4).
    
SELECT SINGLE KTX FROM T247 INTO LV_NAME WHERE MNR MONT2 AND SPRAS 'EN'.
    
CONCATENATE LV_NAME GJAHR INTO FCAT-FIELDNAME.
    
CONCATENATE LV_NAME GJAHR INTO FCAT-SCRTEXT_L.

    FCAT
-COL_POS FCAT-COL_POS + 1.
    
APPEND FCAT TO ITAB_FCAT.
  
ENDLOOP.
  
DELETE ADJACENT DUPLICATES FROM ITAB_FCAT.

  
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
    
EXPORTING
      IT_FIELDCATALOG 
ITAB_FCAT
    
IMPORTING
      EP_TABLE        
FS_DATA.

  
ASSIGN FS_DATA->TO <FS_TAB>.
  
CREATE DATA DYN_LINE LIKE LINE OF <FS_TAB>.
  
ASSIGN DYN_LINE->TO <FS_WA>.
  
SORT GT_BSEG BY BUKRS BELNR GJAHR.
  
SORT GT_BKPF BY BUKRS BELNR GJAHR.

  
LOOP AT GT_BSEG ASSIGNING <FS_BSEG>.

    
ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <FS_WA> TO <FS_FINAL>.
    <FS_FINAL> 
<FS_BSEG>-BUKRS.
    UNASSIGN <FS_FINAL>
.

    
ASSIGN COMPONENT 'BELNR' OF STRUCTURE <FS_WA> TO <FS_FINAL>.
    <FS_FINAL> 
<FS_BSEG>-BELNR.
    UNASSIGN <FS_FINAL>
.

    
ASSIGN COMPONENT 'GJAHR' OF STRUCTURE <FS_WA> TO <FS_FINAL>.
    <FS_FINAL> 
<FS_BSEG>-GJAHR.
    UNASSIGN <FS_FINAL>
.

    
READ TABLE GT_BKPF ASSIGNING <FS_BKPF> WITH  KEY BUKRS <FS_BSEG>-BUKRS BELNR <FS_BSEG>-BELNR GJAHR <FS_BSEG>-GJAHR.
    MONT2 
<FS_BKPF>-BLDAT+4(2).
    
SELECT SINGLE KTX FROM T247 INTO LV_NAME WHERE MNR MONT2 AND SPRAS 'EN'.
    
CONCATENATE LV_NAME <FS_BKPF>-GJAHR INTO LV_FIELD.
    
READ TABLE ITAB_FCAT INTO FCAT WITH KEY FIELDNAME LV_FIELD.
    
ASSIGN COMPONENT FCAT-FIELDNAME OF STRUCTURE <FS_WA> TO <FS_FINAL>.

    
IF FCAT-FIELDNAME NE 'BUKRS' AND FCAT-FIELDNAME NE 'BELNR' AND FCAT-FIELDNAME NE 'GJAHR'.

      <FS_FINAL> 
<FS_BSEG>-DMBTR + <FS_FINAL>.
      UNASSIGN <FS_FINAL>
.
    
ENDIF.

    
AT END OF BELNR.
      
APPEND <FS_WA> TO <FS_TAB>.
      
CLEAR<FS_WA>.
    
ENDAT.
  
ENDLOOP.



ENDFORM.

Create Dynamic Internal Table & Dynamic FIELD CATALOG Introduction: This document explains how to create dynamic internal table ...