Dynamic output in sap abap report

How to Create dynamic column in output of sap abap alv report :

Using field symbol, abap consultant can create the dynamic output column, means based on your conditions the number of columns in the output are created and display.




Code :

REPORT ZDEMO_DYNAMIC_ALV_OUTPUT1.

tables ekkoekpo.


data gt_ekko type STANDARD TABLE OF ekko,  "po header
       gs_ekko type ekko,
       gt_ekpo type STANDARD TABLE OF ekpo"po item
       gs_ekpo type ekpo.

"varaibles
data gv_ebelp type ekpo-ebelp,       "for
       gv_max_ebelp type ekpo-ebelp.   "to select max number of items in data

"for dynamic table
FIELD-SYMBOLS <DYN_TABLE> TYPE STANDARD TABLE,  "for dynamic table
                <DYN_WA>,
                <FS1>.

* Create the dynamic internal table
data NEW_TABLE TYPE REF TO DATA,
       NEW_LINE  TYPE REF TO DATA.


DATA:  FIELDNAME(20)   TYPE C,
       FIELDVALUE(60)  TYPE C.


DATAIT_FLDCAT  TYPE LVC_T_FCAT,
      WA_FLDCAT  TYPE LVC_S_FCAT,
      GS_LAYOUT1 TYPE LVC_S_LAYO.                "slis_layout_alv,


SELECTION-SCREEN begin of block b1 WITH FRAME TITLE text-001.
 select-OPTIONS s_ebeln for ekko-ebeln,
                  s_aedat for ekko-AEDAT,
                  s_bsart for ekko-bsart.
SELECTION-SCREEN end of BLOCK b1.

START-OF-SELECTION.
     perform get_data.
     PERFORM BUILD_DYNAMIC_TABLE.
     perform build_data.
     perform alv_display.

end-of-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .


"select header data
  select from ekko into CORRESPONDING FIELDS OF TABLE gt_ekko
  WHERE ebeln in s_ebeln
    and aedat in s_aedat
    and bsart in s_bsart.

"select line item
   if gt_ekko[] is NOT INITIAL.
   select from ekpo into CORRESPONDING FIELDS OF TABLE gt_ekpo
   FOR ALL ENTRIES IN gt_ekko WHERE ebeln gt_ekko-ebeln.

   sort gt_ekpo DESCENDING by ebelp.

   clear gs_ekpo.

   read TABLE gt_ekpo into gs_ekpo INDEX 1.
   GV_MAX_EBELP gs_ekpo-ebelp.

   sort gt_ekpo by ebeln ebelp.

   endif.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BUILD_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_DYNAMIC_TABLE .

  CLEAR WA_FLDCAT.
  WA_FLDCAT-FIELDNAME 'EBELN'.
  WA_FLDCAT-COLTEXT   'PO No.'.
  WA_FLDCAT-DATATYPE  'CHAR'.
  WA_FLDCAT-OUTPUTLEN  '10'.
  WA_FLDCAT-EMPHASIZE  'C5'.
  APPEND WA_FLDCAT TO IT_FLDCAT.

  gv_ebelp 10.

  DO.

  CLEAR WA_FLDCAT.
  CONCATENATE GV_EBELP '_MATNR' INTO WA_FLDCAT-FIELDNAME.
  CONCATENATE 'Material Code_' gv_ebelp into WA_FLDCAT-COLTEXT.
  WA_FLDCAT-DATATYPE  'CHAR'.
  WA_FLDCAT-OUTPUTLEN  '18'.
  WA_FLDCAT-NO_ZERO  'X'.
  APPEND WA_FLDCAT TO IT_FLDCAT.

  CLEAR WA_FLDCAT.
  CONCATENATE GV_EBELP '_TXZ01' INTO WA_FLDCAT-FIELDNAME.
  WA_FLDCAT-COLTEXT   'Description'.
  WA_FLDCAT-DATATYPE  'CHAR'.
  WA_FLDCAT-OUTPUTLEN  '40'.
  APPEND WA_FLDCAT TO IT_FLDCAT.

  CLEAR WA_FLDCAT.
  CONCATENATE GV_EBELP '_MENGE' INTO WA_FLDCAT-FIELDNAME.
  WA_FLDCAT-COLTEXT   'Quantity'.
  WA_FLDCAT-DATATYPE  'CURR'.
  APPEND WA_FLDCAT TO IT_FLDCAT.

  CLEAR WA_FLDCAT.
  CONCATENATE GV_EBELP '_NETWR' INTO WA_FLDCAT-FIELDNAME.
  WA_FLDCAT-COLTEXT   'Amount'.
  WA_FLDCAT-DATATYPE  'CURR'.
  APPEND WA_FLDCAT TO IT_FLDCAT.

  if gv_ebelp GV_MAX_EBELP.
     exit.
  else.
     gv_ebelp gv_ebelp + 10.
  endif.

  enddo.

CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
  EXPORTING
*    I_STYLE_TABLE             =
    IT_FIELDCATALOG           =  IT_FLDCAT
*    I_LENGTH_IN_BYTE          =
  IMPORTING
    EP_TABLE                  NEW_TABLE
*    E_STYLE_FNAME             =
  EXCEPTIONS
    GENERATE_SUBPOOL_DIR_FULL 1
    OTHERS                    2
        .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

  ASSIGN NEW_TABLE->TO <DYN_TABLE>.

* Create dynamic work area and assign to FS
  CREATE DATA NEW_LINE LIKE LINE OF <DYN_TABLE>.
  ASSIGN NEW_LINE->TO <DYN_WA>.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BUILD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_DATA .

    sort gt_ekko by ebeln.
    sort gt_ekpo by ebeln ebelp.

    loop at gt_ekko into gs_ekko.

    clear <dyn_wa>.

    clear FIELDNAMEFIELDVALUE.
    FIELDNAME  'EBELN'.
    FIELDVALUE gs_ekko-ebeln.
    CONDENSE FIELDVALUE.
    ASSIGN COMPONENT FIELDNAME OF STRUCTURE <DYN_WA> TO <FS1>.
    <FS1> FIELDVALUE.

    loop at gt_ekpo into gs_ekpo WHERE ebeln gs_ekko-ebeln.

    clear FIELDNAMEFIELDVALUE.
    CONCATENATE gs_ekpo-ebelp '_MATNR' into FIELDNAME.
    FIELDVALUE gs_ekpo-matnr.
    CONDENSE FIELDVALUE.
    ASSIGN COMPONENT FIELDNAME OF STRUCTURE <DYN_WA> TO <FS1>.
    <FS1> FIELDVALUE.

    clear FIELDNAMEFIELDVALUE.
    CONCATENATE gs_ekpo-ebelp '_TXZ01' into FIELDNAME.
    FIELDVALUE gs_ekpo-TXZ01.
    CONDENSE FIELDVALUE.
    ASSIGN COMPONENT FIELDNAME OF STRUCTURE <DYN_WA> TO <FS1>.
    <FS1> FIELDVALUE.

    clear FIELDNAMEFIELDVALUE.
    CONCATENATE gs_ekpo-ebelp '_MENGE' into FIELDNAME.
    FIELDVALUE gs_ekpo-menge.
    CONDENSE FIELDVALUE.
    ASSIGN COMPONENT FIELDNAME OF STRUCTURE <DYN_WA> TO <FS1>.
    <FS1> FIELDVALUE.

    clear FIELDNAMEFIELDVALUE.
    CONCATENATE gs_ekpo-ebelp '_NETWR' into FIELDNAME.
    FIELDVALUE gs_ekpo-netwr.
    CONDENSE FIELDVALUE.
    ASSIGN COMPONENT FIELDNAME OF STRUCTURE <DYN_WA> TO <FS1>.
    <FS1> FIELDVALUE.


    clear gs_ekpo.
    endloop.

     append <DYN_WA> to <DYN_TABLE>.

    clear gs_ekko.
    endloop.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ALV_DISPLAY .

 GS_LAYOUT1-COL_OPT   'X'.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       SY-REPID
      IS_LAYOUT_LVC            GS_LAYOUT1
      IT_FIELDCAT_LVC          IT_FLDCAT[]
*     I_GRID_SETTINGS          = gs_grid
*     IT_EVENTS                = lt_evts[]
*      IT_EVENTS          = I_EVENTS
      I_DEFAULT                'X'
      I_SAVE                   'A'
*      IS_VARIANT               = GS_VARIANT1
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      T_OUTTAB                 <DYN_TABLE>
    EXCEPTIONS
      PROGRAM_ERROR            1
      OTHERS                   2.

  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


ENDFORM.









Post a Comment

0 Comments

Total Pageviews