Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Dynamic Internal table

Former Member
0 Kudos

Hello Friends,

In my selection screen I have input field S_TAB for the table name as select options.

I want to create an internal table Dynamically with the stricture of the table from the selection scree when I loop it.

For eg : the internal table should be ITAB.

Loop at S_TAB.

now S_TAB has the vale MARA.

I want to have ITAB the same structure as MARA with header line, SImilarly so on.

endloop.

If possible please suggest without field symbols as I am not vary familar with it..

Please suggest.

Ster

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

As per my experience with internal tables, while creating the dynamic internal table one must use field symbols.

Without field symbols it is not possible to create a dynamic internal table. As during runtime, we will come to know about number of rows or columns, it is always good to use field symbols which are given as a boon to SAP.

For your understanding I can provide you an example program so that you can understand field symbols easily.


REPORT  Zdynamic_table
        NO STANDARD PAGE HEADING
        LINE-SIZE 1023
        LINE-COUNT 35(3)
        MESSAGE-ID zrtc.
TYPE-POOLS : slis.
************************************************************************
*                               TABLES
************************************************************************
*{
TABLES: lfm1,
        bkpf.
*}
************************************************************************
*                            GLOBAL TYPES
*                    naming convention: "T_name"
************************************************************************
*{

TYPES: BEGIN OF t_lfb1,
        lifnr     TYPE lfb1-lifnr,      "Vendor
        mindk     TYPE lfb1-mindk,      "Minority indicator
        cerdt     TYPE lfb1-cerdt,      "Certification date
       END OF t_lfb1,

       BEGIN OF t_lfa1,
        lifnr     TYPE lfa1-lifnr,      "Vendor
        name1     TYPE lfa1-name1,      "Vendor name
       END OF t_lfa1,

       BEGIN OF t_t059t_dis,
        mtext(50) TYPE c        ,      "Text
        count(10) TYPE c        ,      "count
       END OF t_t059t_dis,

       BEGIN OF t_t059t,
        mindk     TYPE t059t-mindk,    "Minority Indicators
        mtext     TYPE t059t-mtext,    "Text
        mark(1)   TYPE c          ,
        count(10) TYPE c          ,    "count
       END OF t_t059t,

       BEGIN OF t_bsak,
        bukrs TYPE bsak-bukrs    ,    "Company Code
        lifnr TYPE bsak-lifnr    ,    "Vendor
        umsks TYPE bsak-umsks    ,    "Transaction Type
        umskz TYPE bsak-umskz    ,    "Indicator
        augdt TYPE bsak-augdt    ,    "Clearing Date
        augbl TYPE bsak-augbl    ,    "Document Number
        zuonr TYPE bsak-zuonr    ,    "assignment Number
        gjahr TYPE bsak-gjahr    ,    "Fiscal Year
        belnr TYPE bsak-belnr    ,    "Accounting Document Number
        buzei TYPE bsak-buzei    ,    "Number of Line Item
        budat TYPE bsak-budat    ,    "Posting Date
        blart TYPE bsak-blart    ,    "Document Type
        shkzg TYPE bsak-shkzg    ,    "Debit/Credit Indicator
        wrbtr TYPE bsak-wrbtr    ,    "Amount
       END OF t_bsak,

       BEGIN OF t_bsik,
        bukrs TYPE bsik-bukrs    ,    "Company Code
        lifnr TYPE bsik-lifnr    ,    "Vendor
        umsks TYPE bsik-umsks    ,    "Transaction Type
        umskz TYPE bsik-umskz    ,    "Indiacator
        augdt TYPE bsik-augdt    ,    "Clearing Date
        augbl TYPE bsik-augbl    ,    "Document Number
        zuonr TYPE bsik-zuonr    ,    "Assignment Number
        gjahr TYPE bsik-gjahr    ,    "Fiscal Year
        belnr TYPE bsik-belnr    ,    "Accounting Document Number
        buzei TYPE bsik-buzei    ,    "Number of Line Item
        budat TYPE bsik-budat    ,    "Posting Date
        blart TYPE bsik-blart    ,    "Document Type
        shkzg TYPE bsik-shkzg    ,    "Debit/Credit Indicator
        wrbtr TYPE bsik-wrbtr    ,    "Amount
       END OF t_bsik,

       BEGIN OF t_det,
        fieldname(20) TYPE c,
        fieldval(20)  TYPE c,
       END OF t_det.
*}
************************************************************************
*                           GLOBAL CONSTANTS
*                    naming convention: "c_name"
************************************************************************
*{
CONSTANTS : c_doc_typ_re(2)   TYPE c              VALUE 'RE'
, "Document type
            c_doc_typ_kr(2)   TYPE c              VALUE 'KR'
, "Document type
*begin of defect
            c_doc_typ_kz(2)   TYPE c              VALUE 'KZ'
, "Document type
            c_doc_typ_kn(2)   TYPE c              VALUE 'KN'
, "Document type
*end of defect
            c_credit          TYPE bsid-shkzg     VALUE 'H'
, "Credit indicator
            c_f_top_of_page   TYPE slis_formname  VALUE 'F_TOP_OF_PAGE'
, "top fo page
            c_space           TYPE c              VALUE space
, "space
            c_cr(4)           TYPE c              VALUE '_CR'
,
            c_ncr(4)          TYPE c              VALUE '_NCR'
,
            c_vendor(6)       TYPE c              VALUE 'VENDOR'
,
            c_name(6)         TYPE c              VALUE 'NAME'
,
            c_credt(20)       TYPE c              VALUE
'CERTIFICATION_DATE', "Certfication Date
            c_null            TYPE sy-datum       VALUE '00000000'
,
            c_1(1)            TYPE c              VALUE '1'
,
            c_bukrs(4)        TYPE c              VALUE '200'
,
*  Begin of Defect 40862
            c_user_command    TYPE slis_formname  VALUE 'USER_COMMAND'
,
            c_25              TYPE char2          VALUE '25'
,
            c_35              TYPE char2          VALUE '35'
,
            c_55              TYPE char2          VALUE '55'
,
            c_s               TYPE char1          VALUE 'S'
,
            c_usd             TYPE char3          VALUE 'USD'
,
            c_20              TYPE char2          VALUE '20'
,
            c_dash            TYPE char1          VALUE '-'
,
            c_value           TYPE char5          VALUE 'VALUE'
,
            c_columntext      TYPE char10         VALUE 'COLUMNTEXT'
,
            c_30              TYPE char2          VALUE '30'
,
            c_ic1             TYPE char4          VALUE '&IC1'
,
            c_p               TYPE char1          VALUE 'P'
,
            c_16              TYPE char2          VALUE '16'
,
*  End of Defect 40862
            c_x(1)            TYPE c              VALUE 'X'
.



*}
************************************************************************
*                     GLOBAL ELEMENTARY VARIABLES
*                     naming convention: "g_name"
************************************************************************
*{
DATA : g_wrbtr              TYPE bsak-wrbtr ,  " Amount
       g_sum                TYPE bsak-wrbtr ,  " Sum of amount
       g_sum_ncr(16)        TYPE c          ,  " Sum of amount
       g_sum_cr(16)         TYPE c          ,  " Sum of amount
       g_count(10)          TYPE c          ,  "Count
       g_flag(1)            TYPE c          .  "Flag
*}
************************************************************************
*                           GLOBAL STRUCTURES
*                     naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1_s         TYPE t_lfb1                , "Structure for user
defined type
       i_lfa1_s         TYPE t_lfa1                , "Structure for user
defined type
       i_fldlayout_s    TYPE slis_layout_alv       , "Structure for
layout of ALV
       i_header_alv_s   TYPE slis_listheader       , "Structure for
Header
       i_t_fieldcat_s   TYPE slis_t_fieldcat_alv   , "Structure for
fieldcat.
       i_fieldcat_s     LIKE LINE OF i_t_fieldcat_s, "Structure for
fieldcat.
       i_t059t_s        TYPE t_t059t               , "Structure user
defined type
       i_t059t_fnl_s    TYPE t_t059t               , "Structure user
defined type
       i_fcat_s         TYPE lvc_s_fcat            ,
       i_final_s        TYPE t_bsak                , "Structure user
defined type
       i_t059t_dis_s    TYPE t_t059t_dis           , "Structure user
defined type
       i_budat_s        TYPE fagl_range_budat      ,
       i_lvc_t_fcat_s   TYPE lvc_s_fcat,
       i_lvc_s_layo_s   TYPE lvc_s_layo,
       i_lvc_t_detm_s   TYPE lvc_s_detm,
       i_lvc_s_deta_s   TYPE lvc_s_deta.
*}
************************************************************************
*                        GLOBAL INTERNAL TABLES
*                      naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1         TYPE TABLE OF t_lfb1      , "Internal table for
user defined type
       i_lfa1         TYPE TABLE OF t_lfa1      , "Internal table for
user defined type
       i_t059t        TYPE TABLE OF t_t059t     , "Internal table for
user defined type
       i_t059t_dis    TYPE TABLE OF t_t059t_dis ,
       i_t059t_fnl    TYPE TABLE OF t_t059t     , "Internal table for
user defined type
       i_fieldcat     TYPE slis_t_fieldcat_alv  , "Internal table for
fieldcat.
       i_events       TYPE slis_t_event        , "Internal table for
event
       i_header_alv   TYPE slis_t_listheader    , "Internal table for
header
       i_fcat         TYPE TABLE OF lvc_s_fcat  , "Field cat. of dynamic
table
       i_sel_rows     TYPE REF TO data          , "For creating dynamic
table
       i_new_line     TYPE REF TO data          ,
       i_bsak         TYPE TABLE OF t_bsak      , "Internal table for
user defined type
       i_bsik         TYPE TABLE OF t_bsik      , "Internal table for
user defined type
       i_final        TYPE TABLE OF t_bsak      , "Internal table for
user defined type
       i_lvc_t_fcat   TYPE TABLE OF lvc_s_fcat,
       i_lvc_t_detm   TYPE TABLE OF lvc_s_detm,
       i_lvc_s_deta   TYPE TABLE OF lvc_s_deta.
*}
************************************************************************
*                            FIELD-SYMBOLS
*                      naming convention: "<FS_>name"
************************************************************************
*{
FIELD-SYMBOLS : <fs_table>    TYPE STANDARD TABLE,  "For dynamic table
                <fs_line>     TYPE ANY           ,  "For row of dynamic
table
                <fs_field>    TYPE ANY           .  "For field of
dynamic table
*}
************************************************************************
*                       PARAMETERS & SELECT-OPTIONS
*                  aming convention: "p_name" & "s_name"
************************************************************************
*{
SELECTION-SCREEN BEGIN OF BLOCK  b1 WITH FRAME TITLE text-001.
PARAMETERS     : p_bukrs TYPE lfb1-bukrs OBLIGATORY DEFAULT c_bukrs."
'200' .

SELECT-OPTIONS : s_lifnr FOR lfm1-lifnr                ,
                 s_budat FOR bkpf-budat.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK  b2 WITH FRAME TITLE text-001.

PARAMETERS:  p_crt  RADIOBUTTON GROUP rad1            ,
             p_ncrt RADIOBUTTON GROUP rad1            ,
             p_all  RADIOBUTTON GROUP rad1 DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK b2.
*}
************************************************************************
*                       AT SELECTION-SCREEN ON <Field>
************************************************************************
*{
AT SELECTION-SCREEN ON p_bukrs.
* Validating Company Code
  PERFORM f_validate_company_code.

AT SELECTION-SCREEN ON s_lifnr.
* Validating Vendor
  PERFORM f_validate_vendor.
*}
************************************************************************
*                            START-OF-SELECTION
************************************************************************
*{
START-OF-SELECTION.

* Getting data from lfb1
  PERFORM f_get_lfb1.

  CHECK NOT i_lfb1[] IS INITIAL.

* Getting data from lfa1
  PERFORM f_get_lfa1.

* Getting data from bsak
  PERFORM f_get_bsak.

* Getting data from bsik
  PERFORM f_get_bsik.
*}
************************************************************************
*                           END-OF-SELECTION
************************************************************************
*{
END-OF-SELECTION.

  IF NOT i_final[] IS INITIAL.

*   Getting all fields of dynamic table
    PERFORM f_get_mandk.

*   Creating dyanmic table
    PERFORM f_create_dynamic_table.

*   Creating Dynamic table and filling data to dynamic table table
    PERFORM f_fill_output.

*   For displaying output
    PERFORM f_display.
  ELSE.

    MESSAGE s105(zrtc).                          " WITH 'No data found
for this selection criteria.'(008).
  ENDIF.
*}
************************************************************************
*                                FORMS
*                    naming convention: "f_name"
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  validate_company_code
*&---------------------------------------------------------------------*
*       Validating company code
*----------------------------------------------------------------------*

FORM f_validate_company_code .

  DATA : l_t001 TYPE t001-bukrs.
  CLEAR l_t001.
  SELECT bukrs
    INTO l_t001
    FROM t001
    UP TO 1 ROWS
   WHERE bukrs EQ p_bukrs.
  ENDSELECT.

  IF sy-subrc NE 0.
    MESSAGE e043.           " WITH 'Invalid Company Code'(003).
*-- This is to get rid of Extended check.
    IF l_t001 IS INITIAL.
      CLEAR l_t001.
    ENDIF.
  ENDIF.
ENDFORM.                    " validate_company_code
*&---------------------------------------------------------------------*
*&      Form  validate_vendor
*&---------------------------------------------------------------------*
*       Validating Vendor
*----------------------------------------------------------------------*
FORM f_validate_vendor .

  DATA : l_lfa1 TYPE lfa1-lifnr.
  CLEAR l_lfa1.

  IF NOT  s_lifnr[] IS INITIAL.

    SELECT lifnr
      INTO l_lfa1
      FROM lfa1
      UP TO 1 ROWS
     WHERE lifnr IN s_lifnr.
    ENDSELECT.
    IF sy-subrc NE 0.
      MESSAGE e118.                    "WITH 'Invalid Vendor
Number.'(010).
*-- This is to get rid of Extended check.
      IF l_lfa1 IS INITIAL.
        CLEAR l_lfa1.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " validate_vendor
*---------------------------------------------------------------------*
*      Form  f_get_lfb1
*---------------------------------------------------------------------*
*     Getting data from table lfb1 into into internal table
*     according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfb1 .

  REFRESH i_lfb1.

  SELECT lifnr
         mindk
         cerdt
    INTO TABLE i_lfb1
    FROM lfb1
   WHERE lifnr IN s_lifnr
     AND bukrs EQ p_bukrs
     AND mindk NE c_space.
  IF sy-subrc EQ 0.
    SORT i_lfb1 BY lifnr.
  ENDIF.

ENDFORM.                    " f_get_lfb1
*&---------------------------------------------------------------------*
*&      Form  f_get_lfa1
*&---------------------------------------------------------------------*
*       Getting vendor name from table lfa1 into internal table
*       according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfa1 .

  REFRESH i_lfa1.

  IF NOT i_lfb1 IS INITIAL.

    SELECT lifnr
           name1
      INTO TABLE i_lfa1
      FROM lfa1
       FOR ALL  ENTRIES IN i_lfb1
     WHERE lifnr EQ i_lfb1-lifnr.
    IF sy-subrc EQ 0.
      SORT i_lfa1 BY lifnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " f_get_lfa1
*&---------------------------------------------------------------------*
*&      Form  f_get_bsak
*&---------------------------------------------------------------------*
*        Getting document no from table bsak into internal table
*        according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsak .

  REFRESH: i_bsak.         "Defect 40862
  IF NOT i_lfb1 IS INITIAL.
*defect added document types
    SELECT bukrs
           lifnr
           umsks
           umskz
           augdt
           augbl
           zuonr
           gjahr
           belnr
           buzei
           budat
           blart
           shkzg
           wrbtr
      FROM bsak
      INTO TABLE i_bsak
       FOR ALL ENTRIES IN i_lfb1
     WHERE lifnr EQ i_lfb1-lifnr
       AND bukrs EQ p_bukrs
       AND budat IN s_budat
       AND ( blart EQ c_doc_typ_re
        OR   blart EQ c_doc_typ_kr
        OR   blart EQ c_doc_typ_kn
        OR   blart EQ c_doc_typ_kz ).

*end of document types
    APPEND LINES OF i_bsak TO i_final.
  ENDIF.

ENDFORM.                    " f_get_bsak
*&---------------------------------------------------------------------*
*&      Form  f_get_bsik
*&---------------------------------------------------------------------*
*      Getting data from table bsik into internal table
*      according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsik .

  REFRESH: i_bsik.    "Defect 40862
  IF NOT i_lfb1 IS INITIAL.
*defect added document types
    SELECT bukrs
           lifnr
           umsks
           umskz
           augdt
           augbl
           zuonr
           gjahr
           belnr
           buzei
           budat
           blart
           shkzg
           wrbtr
     FROM  bsik
     INTO TABLE i_bsik
      FOR ALL ENTRIES IN i_lfb1
    WHERE lifnr EQ i_lfb1-lifnr
      AND bukrs EQ p_bukrs
      AND budat IN s_budat
      AND ( blart EQ c_doc_typ_re
       OR   blart EQ c_doc_typ_kr
        OR   blart EQ c_doc_typ_kn
        OR   blart EQ c_doc_typ_kz ).
*defect ended document types
    APPEND LINES OF i_bsik TO i_final.
  ENDIF.

ENDFORM.                    " f_get_bsik
*&---------------------------------------------------------------------*
*&      Form  f_fill_output
*&---------------------------------------------------------------------*
*    Creating dynamic table , getting data and  filling that data to
*    dynamic table for display according to the condition
*----------------------------------------------------------------------*
FORM f_fill_output .

  DATA : l_cert_dt TYPE c LENGTH 10,
         l_lifnr TYPE lfa1-lifnr.

  CLEAR:  g_wrbtr   ,
          g_sum     .

* Sorting tables by vendor
  SORT : i_t059t_fnl BY mindk,
         i_final BY lifnr belnr buzei.

* Calculating the amount and filling that data into dynamic table
  LOOP AT i_final INTO i_final_s.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = i_final_s-lifnr
      IMPORTING
        output = l_lifnr.

    AT NEW lifnr.
      CLEAR : g_sum.
    ENDAT.

*   Making Amount negative if credit
    IF i_final_s-shkzg EQ  c_credit.
*      g_wrbtr = i_final_s-wrbtr * -1.
      g_wrbtr = i_final_s-wrbtr.

    ELSE.
*      g_wrbtr = i_final_s-wrbtr.
      g_wrbtr = i_final_s-wrbtr * -1.

    ENDIF.

    g_sum = g_sum + g_wrbtr.

    AT END OF lifnr.
*     Filling data into Dynamic table according to the condition .
      CLEAR i_lfb1_s.
      READ TABLE i_lfb1 INTO i_lfb1_s WITH KEY lifnr = i_final_s-lifnr
                                               BINARY SEARCH.
      IF sy-subrc EQ 0.

        CREATE DATA i_new_line LIKE LINE OF <fs_table>.
        ASSIGN i_new_line->* TO <fs_line>.

        ASSIGN COMPONENT c_vendor OF STRUCTURE <fs_line> TO <fs_field>.
        <fs_field> = l_lifnr.
        CLEAR i_lfa1_s.
        READ TABLE i_lfa1 INTO i_lfa1_s WITH KEY lifnr = i_final_s-lifnr
                                                 BINARY SEARCH.
        IF sy-subrc EQ 0.
          ASSIGN COMPONENT c_name OF STRUCTURE <fs_line> TO <fs_field>.
          <fs_field> =  i_lfa1_s-name1.

          ASSIGN COMPONENT c_credt OF STRUCTURE <fs_line> TO <fs_field>.
          WRITE : i_lfb1_s-cerdt TO l_cert_dt DD/MM/YYYY,
                  i_lfb1_s-cerdt  TO i_lfb1_s-cerdt.
          IF i_lfb1_s-cerdt EQ c_null.
            <fs_field> =  c_space.
          ELSE.
            <fs_field> =  l_cert_dt.
          ENDIF.           " if sy-subrc eq 0(READ TABLE i_lfa1)

*         Filling data according to minority indicator
          PERFORM f_fill_amt_ind.

        ENDIF .        " if sy-subrc eq 0 (READ TABLE i_lfb1)

        CLEAR: i_final_s   ,
               i_lfa1_s    ,
               g_wrbtr     ,
               i_lfb1_s    .
      ENDIF.
    ENDAT.
  ENDLOOP.
ENDFORM.                    " f_fill_output
*&---------------------------------------------------------------------*
*&      Form  Display
*&---------------------------------------------------------------------*
*       For display the ALV Report
*----------------------------------------------------------------------*
FORM f_display .

  DATA : lw_repid LIKE sy-repid,
         l_slis_exit_by_user TYPE slis_exit_by_user.

  lw_repid = sy-repid.

* Creating field cat. for ALV
  PERFORM populate_fldcat_alv.

* Creating Layout.
  PERFORM populate_layout.

* Creating Event
  PERFORM f_get_events.

* Creating Top Of Page
  PERFORM f_top_of_page.

*  Call Function for ALV GRID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = lw_repid
      it_fieldcat             = i_fieldcat
      is_layout               = i_fldlayout_s
      it_events               = i_events
      i_callback_user_command = c_user_command     "Defect 40862
    IMPORTING
      es_exit_caused_by_user  = l_slis_exit_by_user
    TABLES
      t_outtab                = <fs_table>
    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.

  IF  l_slis_exit_by_user EQ c_x.
    LEAVE LIST-PROCESSING .
  ENDIF.
  UNASSIGN:<fs_field>,<fs_line>.

ENDFORM.                    " Display
*&---------------------------------------------------------------------*
*&      Form  populate_fldcat
*&---------------------------------------------------------------------*
*       Filling fieldcat for dynamic table
*----------------------------------------------------------------------*
FORM populate_fldcat .

  REFRESH i_fcat.
  CLEAR: i_t059t_s,
         i_fcat_s.

  i_fcat_s-key             = c_x.
  i_fcat_s-fieldname       = c_vendor.
  i_fcat_s-outputlen       = c_25.       "Defect 40862

  APPEND i_fcat_s TO i_fcat .
  CLEAR: i_fcat_s .

  i_fcat_s-key             = c_x.
  i_fcat_s-fieldname       = c_name.
  i_fcat_s-outputlen       = c_25.       "Defect 40862

  APPEND i_fcat_s TO i_fcat .
  CLEAR: i_fcat_s .

  i_fcat_s-key             = c_x.
  i_fcat_s-fieldname       = c_credt.
  i_fcat_s-outputlen       = c_35.       "Defect 40862

  APPEND i_fcat_s TO i_fcat .
  CLEAR: i_fcat_s .

  CLEAR i_t059t_fnl_s.

  LOOP AT i_t059t_fnl INTO i_t059t_fnl_s.

    CLEAR i_fcat_s.

    CLEAR i_t059t_s.
    i_fcat_s-key            = c_x.
    i_fcat_s-fieldname      = i_t059t_fnl_s-mtext.
    i_fcat_s-outputlen      = c_55.        "Defect 40862

    APPEND i_fcat_s TO i_fcat .
    CLEAR: i_fcat_s ,
           i_t059t_fnl_s,
           i_t059t_fnl_s.
  ENDLOOP.
ENDFORM.                    " populate_fldcat
*&---------------------------------------------------------------------*
*&      Form  populate_layout
*&---------------------------------------------------------------------*
*      Filling layout
*----------------------------------------------------------------------*
FORM populate_layout .

  i_fldlayout_s-zebra            = c_x         .
  i_fldlayout_s-window_titlebar  = 'Purchasing from Minority
Vendors'(014).
  i_fldlayout_s-get_selinfos     = c_x        .
  i_fldlayout_s-expand_all       = c_space          .     "Defect 40862
  i_fldlayout_s-no_scrolling     = c_x.

ENDFORM.                    " populate_layout
*&---------------------------------------------------------------------*
*&      Form  f_get_events
*&---------------------------------------------------------------------*
*       For Event
*----------------------------------------------------------------------*
FORM f_get_events .

  DATA: ls_event TYPE slis_alv_event.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = i_events.

  READ TABLE i_events WITH KEY name = slis_ev_top_of_page
                           INTO ls_event.
  IF sy-subrc EQ 0.
    MOVE c_f_top_of_page TO ls_event-form.
    MODIFY  i_events FROM ls_event INDEX  sy-tabix.
  ENDIF.
ENDFORM.                    " f_get_events
*&---------------------------------------------------------------------*
*&      Form  f_top_of_page
*&---------------------------------------------------------------------*
*       For top of page
*----------------------------------------------------------------------*
FORM f_top_of_page .

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = i_header_alv.

  PERFORM f_fill_header.

ENDFORM.                    " f_top_of_page
*&---------------------------------------------------------------------*
*&      Form  f_fill_header
*&---------------------------------------------------------------------*
*       Filling data for Top Of Page
*----------------------------------------------------------------------*
FORM f_fill_header .
  DATA : l_date_low    TYPE c LENGTH 10,
         l_date_high   TYPE c LENGTH 20,
         l_sum_cr(20)  TYPE c,
         l_sum_cr_tmp  TYPE p DECIMALS 2,
         l_sum_ncr_tmp TYPE p DECIMALS 2,
         l_sum_ncr(20) TYPE c,
         l_total(20)   TYPE c.

  IF g_flag EQ c_space.

    LOOP AT s_budat INTO i_budat_s.
      i_header_alv_s-typ = c_s.         "Defect 40862

      WRITE : i_budat_s-low  TO l_date_low MM/DD/YYYY ,
              i_budat_s-high TO l_date_high MM/DD/YYYY.
      CONCATENATE text-019 l_date_low c_dash l_date_high INTO
i_header_alv_s-info
                                                   SEPARATED BY c_space.
      APPEND i_header_alv_s TO i_header_alv.
      CLEAR:i_header_alv_s.
    ENDLOOP.

    IF p_crt EQ c_x
    OR p_all EQ c_x.
      i_header_alv_s-typ = c_s.           "Defect 40862
      MOVE g_sum_cr TO l_sum_cr_tmp.
      WRITE l_sum_cr_tmp TO l_sum_cr CURRENCY c_usd.
"Defect 40862
      CONCATENATE  text-004 c_usd l_sum_cr INTO i_header_alv_s-info
"Defect 40862
                                                     SEPARATED BY
c_space.
      APPEND i_header_alv_s TO i_header_alv.
      CLEAR:i_header_alv_s.
    ENDIF.

    IF p_ncrt EQ c_x
    OR p_all  EQ c_x.
      i_header_alv_s-typ = c_s.          "Defect 40862
      MOVE g_sum_ncr TO l_sum_ncr_tmp.
      WRITE l_sum_ncr_tmp TO l_sum_ncr CURRENCY c_usd.
"Defect 40862
      CONCATENATE  text-002 c_usd l_sum_ncr INTO i_header_alv_s-info
"Defect 40862
                                                     SEPARATED BY
c_space.
      APPEND i_header_alv_s TO i_header_alv.
      CLEAR:i_header_alv_s.
    ENDIF.

    l_total = g_sum_cr + g_sum_ncr.
    i_header_alv_s-typ = c_s.         "Defect 40862
    MOVE  l_total TO l_sum_ncr_tmp.
    WRITE  l_sum_ncr_tmp TO l_total CURRENCY c_usd.
"Defect 40862
    CONCATENATE  text-020 c_usd l_total INTO i_header_alv_s-info
"Defect 40862
                                               SEPARATED BY c_space.
    APPEND i_header_alv_s TO i_header_alv.
    CLEAR:i_header_alv_s.

    g_flag = c_x.
    CLEAR:i_header_alv_s.

  ENDIF.
ENDFORM.                    " f_fill_header
*&---------------------------------------------------------------------*
*&      Form  f_fill_amt_ind
*&---------------------------------------------------------------------*
*       Filling data into dynamic table according to indicator and
*       also calculating sum of all amount of certified/non-certified
*----------------------------------------------------------------------*
FORM f_fill_amt_ind .

  DATA: w_mindk(40) TYPE c.

  MOVE i_lfb1_s-mindk TO w_mindk.
  CASE i_lfb1_s-mindk.

    WHEN w_mindk.
*   For Certified .
      IF  i_lfb1_s-cerdt NE c_null.
        IF p_crt EQ c_x OR p_all EQ c_x.
          CLEAR i_t059t_fnl_s.
          READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
                                                             mark  =
c_x.
          IF sy-subrc EQ  0.
            ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
            MOVE g_sum TO <fs_field> .
            INSERT <fs_line> INTO TABLE <fs_table>.
*           Calculating sum of Certified .
            g_sum_cr = g_sum_cr + g_sum .
          ENDIF.           " IF sy-subrc eq  0(READ TABLE i_t059t_fnl)
        ENDIF.
      ELSE.
*       For Non-Certified.
        IF p_ncrt EQ c_x OR p_all EQ c_x.
          CLEAR i_t059t_fnl_s.
          READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
                                                             mark  =
c_space.
          IF sy-subrc EQ  0.
            ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
            MOVE g_sum TO <fs_field> .

            INSERT <fs_line> INTO TABLE <fs_table>.
*           Calculating sum of Non-Certified .
            g_sum_ncr = g_sum_ncr + g_sum .
          ENDIF  .                        " IF sy-subrc eq  0(READ TABLE
i_t059t_fnl)
        ENDIF.
      ENDIF.
  ENDCASE.
  UNASSIGN:<fs_line>.

ENDFORM.                    " f_fill_amt_ind
*&---------------------------------------------------------------------*
*&      Form  get_mandk
*&---------------------------------------------------------------------*
*       Getting data from table t059t into internal table for getting
*       field of dynamic table
*----------------------------------------------------------------------*
FORM f_get_mandk .

  REFRESH i_t059t.

  SELECT mindk
         mtext
    FROM t059t
    INTO TABLE i_t059t
   WHERE spras EQ sy-langu.
  IF sy-subrc EQ 0.
*   Getting  fields of dynamic table
    PERFORM f_fill_final_table.
  ENDIF.
ENDFORM.                    " get_mandk
*&---------------------------------------------------------------------*
*&      Form  f_cerate_dynamic_table
*&---------------------------------------------------------------------*
*       Making field cat. and creating dynamic table
*----------------------------------------------------------------------*
FORM f_create_dynamic_table .

* Filling field cat. for dynamic table
  PERFORM populate_fldcat.

* For Creating dynamic table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      i_style_table             = c_x
      it_fieldcatalog           = i_fcat
    IMPORTING
      ep_table                  = i_sel_rows
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.

  ASSIGN i_sel_rows->* TO <fs_table>.

ENDFORM.                    " f_cerate_dynamic_table
*&---------------------------------------------------------------------*
*&      Form  f_fill_final_table
*&---------------------------------------------------------------------*
*      Getting  fields of dynamic table
*----------------------------------------------------------------------*
FORM f_fill_final_table .

  DATA: l_text(50) TYPE c.

  g_count = c_1.

  REFRESH i_t059t_fnl.
  LOOP AT i_t059t INTO i_t059t_s.

    CONCATENATE  i_t059t_s-mtext c_cr INTO l_text.
    CONDENSE l_text NO-GAPS.
    TRANSLATE l_text TO UPPER CASE.
    MOVE:  g_count TO i_t059t_fnl_s-count ,
         i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
         l_text          TO i_t059t_fnl_s-mtext,
         c_x             TO i_t059t_fnl_s-mark.
    APPEND i_t059t_fnl_s TO i_t059t_fnl.

    CLEAR : i_t059t_fnl_s,
            l_text.
    CONCATENATE i_t059t_s-mtext  ' (Certified)'(011) INTO l_text.
    MOVE :  g_count        TO i_t059t_dis_s-count ,
            l_text         TO i_t059t_dis_s-mtext.
    APPEND i_t059t_dis_s   TO i_t059t_dis.

    CLEAR : l_text.

    g_count = g_count + 1.
    CONCATENATE  i_t059t_s-mtext c_ncr INTO l_text.
    CONDENSE l_text NO-GAPS.
    TRANSLATE l_text TO UPPER CASE.
    MOVE: g_count        TO i_t059t_fnl_s-count ,
         i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
         l_text          TO i_t059t_fnl_s-mtext,
         c_space         TO i_t059t_fnl_s-mark.
    CLEAR l_text.
    APPEND i_t059t_fnl_s TO i_t059t_fnl.

    CLEAR: i_t059t_fnl_s.

    CONCATENATE i_t059t_s-mtext ' (Non-Certified)'(009) INTO l_text.
    MOVE : g_count TO i_t059t_dis_s-count ,
          l_text TO i_t059t_dis_s-mtext.
    APPEND i_t059t_dis_s TO i_t059t_dis.
    g_count = g_count + 1.
    CLEAR : l_text,
            i_t059t_s.
  ENDLOOP.
ENDFORM.                    " f_fill_final_table
*&---------------------------------------------------------------------*
*&      Form  populate_fldcat_alv
*&---------------------------------------------------------------------*
*       Creating field cat.for ALV GRID
*&---------------------------------------------------------------------*
FORM populate_fldcat_alv .
  REFRESH i_fieldcat.
  CLEAR: i_t059t_s,
        i_fieldcat_s.

  i_fieldcat_s-key             = c_x.
  i_fieldcat_s-fieldname       = c_vendor.
  i_fieldcat_s-seltext_l       = text-005.
  i_fieldcat_s-outputlen       = c_25.         "Defect 40862

  APPEND i_fieldcat_s TO i_fieldcat .
  CLEAR: i_fieldcat_s .

  i_fieldcat_s-key             = c_x.
  i_fieldcat_s-fieldname       = c_name.
  i_fieldcat_s-seltext_l       = text-006.
  i_fieldcat_s-outputlen       = c_25.        "Defect 40862

  APPEND i_fieldcat_s TO i_fieldcat .
  CLEAR: i_fieldcat_s .

  i_fieldcat_s-key             = c_x.
  i_fieldcat_s-fieldname       = c_credt.
  i_fieldcat_s-seltext_l       = text-007.
  i_fieldcat_s-outputlen       = c_35.        "Defect 40862

  APPEND i_fieldcat_s TO i_fieldcat.
  CLEAR: i_fieldcat_s .

  CLEAR i_t059t_dis_s.
  LOOP AT i_t059t_dis INTO i_t059t_dis_s.

    READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY count =
i_t059t_dis_s-count.

    IF sy-subrc EQ 0.
      CLEAR i_fieldcat_s.

      CLEAR i_t059t_s.
      CONCATENATE i_t059t_fnl_s-mindk i_t059t_dis_s-mtext INTO
i_t059t_dis_s-mtext
                                                          SEPARATED BY
c_space.
      i_fieldcat_s-key           = c_x.
      i_fieldcat_s-fieldname     = i_t059t_fnl_s-mtext.
      i_fieldcat_s-seltext_l     = i_t059t_dis_s-mtext.
      i_fieldcat_s-do_sum        = c_x.
      i_fieldcat_s-outputlen     = c_16.         "Defect 40862
      i_fieldcat_s-inttype       = c_p.          "Defect 40862

      APPEND i_fieldcat_s TO i_fieldcat.
      CLEAR: i_fieldcat_s ,
             i_t059t_dis_s.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " populate_fldcat_alv
*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*Routine for trapping double click event
*----------------------------------------------------------------------*
*      -->UCOMM      text
*      -->SELFIELD   text
*----------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm                 "#EC CALLED
      selfield      TYPE slis_selfield.
  CASE ucomm.

    WHEN c_ic1.                        "Defect 40862
      READ TABLE <fs_table> ASSIGNING <fs_line> INDEX selfield-tabindex.
      IF sy-subrc EQ 0.                "Defect 40862
        PERFORM f_get_popup.
      ENDIF.
  ENDCASE.
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  f_get_popup
*&---------------------------------------------------------------------*
*Routine to call popup screen
*----------------------------------------------------------------------*
FORM f_get_popup .
  REFRESH:i_lvc_t_detm,i_lvc_t_fcat,i_lvc_s_deta.
  CLEAR i_lvc_t_fcat_s.
  i_lvc_t_fcat_s-fieldname = c_columntext.  "Defect 40862
  i_lvc_t_fcat_s-key       = c_x.
  i_lvc_t_fcat_s-outputlen = c_30.          "Defect 40862
  i_lvc_t_fcat_s-seltext   = 'Group Description'(012).
  APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.
  CLEAR:i_lvc_t_fcat_s .

  i_lvc_t_fcat_s-fieldname = c_value.       "Defect 40862
  i_lvc_t_fcat_s-outputlen = c_20.          "Defect 40862
  i_lvc_t_fcat_s-seltext   = 'contents'(013).
  APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.

  i_lvc_s_layo_s-no_toolbar = c_x.

  PERFORM f_fill_detail.

  i_lvc_t_detm_s-detailtab = i_lvc_s_deta[].
  APPEND i_lvc_t_detm_s TO i_lvc_t_detm.

  CALL FUNCTION 'LVC_ITEM_DETAIL'
    EXPORTING
      it_fieldcatalog = i_lvc_t_fcat
      is_layout       = i_lvc_s_layo_s
    TABLES
      t_outtab        = i_lvc_t_detm.

ENDFORM.                    " f_get_popup
*&---------------------------------------------------------------------*
*&      Form  f_fill_detail
*&---------------------------------------------------------------------*
*Routine to populate details of the selected records
*----------------------------------------------------------------------*
FORM f_fill_detail .
  DATA: l_colname(30) TYPE c,
        l_index TYPE i.
  l_index = 1.

  LOOP AT i_fieldcat INTO i_fieldcat_s.
    l_colname = i_fieldcat_s-fieldname.
    i_lvc_t_detm_s-blockindex = l_index.

    ASSIGN COMPONENT l_colname OF STRUCTURE <fs_line> TO <fs_field>.
    IF <fs_field> IS NOT INITIAL.
      i_lvc_s_deta_s-columntext = i_fieldcat_s-fieldname.
      i_lvc_s_deta_s-value = <fs_field>.
      APPEND i_lvc_s_deta_s TO i_lvc_s_deta.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " f_fill_detail
****************************************** END ***********************

Code Formatted by: Alvaro Tejada Galindo on May 23, 2008 7:01 PM

3 REPLIES 3

Former Member
0 Kudos

Hello,

Do this:


PARAMETERS:
   dbtab TYPE c LENGTH 10,
   rows  TYPE i DEFAULT 100.


  DATA dref TYPE REF TO data.

  FIELD-SYMBOLS:
    <tab>   TYPE ANY TABLE,
    <wa>    TYPE ANY,
    <field> TYPE ANY.


  TRY.
      CREATE DATA dref
        TYPE STANDARD TABLE OF (dbtab) WITH NON-UNIQUE DEFAULT KEY.
      ASSIGN dref->* TO <tab>.

      SELECT *
             FROM (dbtab) UP TO rows ROWS
             INTO TABLE <tab>.

      LOOP AT <tab> ASSIGNING <wa>.
        DO.
          ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <field>.
          IF sy-subrc = 0.
            WRITE / <field>.
          ELSE.
            EXIT.
          ENDIF.
        ENDDO.
        ULINE.
      ENDLOOP.
    CATCH cx_sy_create_data_error.
      WRITE 'Wrong Database!'.
  ENDTRY.

Regards,

Former Member
0 Kudos

Hi,

As per my experience with internal tables, while creating the dynamic internal table one must use field symbols.

Without field symbols it is not possible to create a dynamic internal table. As during runtime, we will come to know about number of rows or columns, it is always good to use field symbols which are given as a boon to SAP.

For your understanding I can provide you an example program so that you can understand field symbols easily.


REPORT  Zdynamic_table
        NO STANDARD PAGE HEADING
        LINE-SIZE 1023
        LINE-COUNT 35(3)
        MESSAGE-ID zrtc.
TYPE-POOLS : slis.
************************************************************************
*                               TABLES
************************************************************************
*{
TABLES: lfm1,
        bkpf.
*}
************************************************************************
*                            GLOBAL TYPES
*                    naming convention: "T_name"
************************************************************************
*{

TYPES: BEGIN OF t_lfb1,
        lifnr     TYPE lfb1-lifnr,      "Vendor
        mindk     TYPE lfb1-mindk,      "Minority indicator
        cerdt     TYPE lfb1-cerdt,      "Certification date
       END OF t_lfb1,

       BEGIN OF t_lfa1,
        lifnr     TYPE lfa1-lifnr,      "Vendor
        name1     TYPE lfa1-name1,      "Vendor name
       END OF t_lfa1,

       BEGIN OF t_t059t_dis,
        mtext(50) TYPE c        ,      "Text
        count(10) TYPE c        ,      "count
       END OF t_t059t_dis,

       BEGIN OF t_t059t,
        mindk     TYPE t059t-mindk,    "Minority Indicators
        mtext     TYPE t059t-mtext,    "Text
        mark(1)   TYPE c          ,
        count(10) TYPE c          ,    "count
       END OF t_t059t,

       BEGIN OF t_bsak,
        bukrs TYPE bsak-bukrs    ,    "Company Code
        lifnr TYPE bsak-lifnr    ,    "Vendor
        umsks TYPE bsak-umsks    ,    "Transaction Type
        umskz TYPE bsak-umskz    ,    "Indicator
        augdt TYPE bsak-augdt    ,    "Clearing Date
        augbl TYPE bsak-augbl    ,    "Document Number
        zuonr TYPE bsak-zuonr    ,    "assignment Number
        gjahr TYPE bsak-gjahr    ,    "Fiscal Year
        belnr TYPE bsak-belnr    ,    "Accounting Document Number
        buzei TYPE bsak-buzei    ,    "Number of Line Item
        budat TYPE bsak-budat    ,    "Posting Date
        blart TYPE bsak-blart    ,    "Document Type
        shkzg TYPE bsak-shkzg    ,    "Debit/Credit Indicator
        wrbtr TYPE bsak-wrbtr    ,    "Amount
       END OF t_bsak,

       BEGIN OF t_bsik,
        bukrs TYPE bsik-bukrs    ,    "Company Code
        lifnr TYPE bsik-lifnr    ,    "Vendor
        umsks TYPE bsik-umsks    ,    "Transaction Type
        umskz TYPE bsik-umskz    ,    "Indiacator
        augdt TYPE bsik-augdt    ,    "Clearing Date
        augbl TYPE bsik-augbl    ,    "Document Number
        zuonr TYPE bsik-zuonr    ,    "Assignment Number
        gjahr TYPE bsik-gjahr    ,    "Fiscal Year
        belnr TYPE bsik-belnr    ,    "Accounting Document Number
        buzei TYPE bsik-buzei    ,    "Number of Line Item
        budat TYPE bsik-budat    ,    "Posting Date
        blart TYPE bsik-blart    ,    "Document Type
        shkzg TYPE bsik-shkzg    ,    "Debit/Credit Indicator
        wrbtr TYPE bsik-wrbtr    ,    "Amount
       END OF t_bsik,

       BEGIN OF t_det,
        fieldname(20) TYPE c,
        fieldval(20)  TYPE c,
       END OF t_det.
*}
************************************************************************
*                           GLOBAL CONSTANTS
*                    naming convention: "c_name"
************************************************************************
*{
CONSTANTS : c_doc_typ_re(2)   TYPE c              VALUE 'RE'
, "Document type
            c_doc_typ_kr(2)   TYPE c              VALUE 'KR'
, "Document type
*begin of defect
            c_doc_typ_kz(2)   TYPE c              VALUE 'KZ'
, "Document type
            c_doc_typ_kn(2)   TYPE c              VALUE 'KN'
, "Document type
*end of defect
            c_credit          TYPE bsid-shkzg     VALUE 'H'
, "Credit indicator
            c_f_top_of_page   TYPE slis_formname  VALUE 'F_TOP_OF_PAGE'
, "top fo page
            c_space           TYPE c              VALUE space
, "space
            c_cr(4)           TYPE c              VALUE '_CR'
,
            c_ncr(4)          TYPE c              VALUE '_NCR'
,
            c_vendor(6)       TYPE c              VALUE 'VENDOR'
,
            c_name(6)         TYPE c              VALUE 'NAME'
,
            c_credt(20)       TYPE c              VALUE
'CERTIFICATION_DATE', "Certfication Date
            c_null            TYPE sy-datum       VALUE '00000000'
,
            c_1(1)            TYPE c              VALUE '1'
,
            c_bukrs(4)        TYPE c              VALUE '200'
,
*  Begin of Defect 40862
            c_user_command    TYPE slis_formname  VALUE 'USER_COMMAND'
,
            c_25              TYPE char2          VALUE '25'
,
            c_35              TYPE char2          VALUE '35'
,
            c_55              TYPE char2          VALUE '55'
,
            c_s               TYPE char1          VALUE 'S'
,
            c_usd             TYPE char3          VALUE 'USD'
,
            c_20              TYPE char2          VALUE '20'
,
            c_dash            TYPE char1          VALUE '-'
,
            c_value           TYPE char5          VALUE 'VALUE'
,
            c_columntext      TYPE char10         VALUE 'COLUMNTEXT'
,
            c_30              TYPE char2          VALUE '30'
,
            c_ic1             TYPE char4          VALUE '&IC1'
,
            c_p               TYPE char1          VALUE 'P'
,
            c_16              TYPE char2          VALUE '16'
,
*  End of Defect 40862
            c_x(1)            TYPE c              VALUE 'X'
.



*}
************************************************************************
*                     GLOBAL ELEMENTARY VARIABLES
*                     naming convention: "g_name"
************************************************************************
*{
DATA : g_wrbtr              TYPE bsak-wrbtr ,  " Amount
       g_sum                TYPE bsak-wrbtr ,  " Sum of amount
       g_sum_ncr(16)        TYPE c          ,  " Sum of amount
       g_sum_cr(16)         TYPE c          ,  " Sum of amount
       g_count(10)          TYPE c          ,  "Count
       g_flag(1)            TYPE c          .  "Flag
*}
************************************************************************
*                           GLOBAL STRUCTURES
*                     naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1_s         TYPE t_lfb1                , "Structure for user
defined type
       i_lfa1_s         TYPE t_lfa1                , "Structure for user
defined type
       i_fldlayout_s    TYPE slis_layout_alv       , "Structure for
layout of ALV
       i_header_alv_s   TYPE slis_listheader       , "Structure for
Header
       i_t_fieldcat_s   TYPE slis_t_fieldcat_alv   , "Structure for
fieldcat.
       i_fieldcat_s     LIKE LINE OF i_t_fieldcat_s, "Structure for
fieldcat.
       i_t059t_s        TYPE t_t059t               , "Structure user
defined type
       i_t059t_fnl_s    TYPE t_t059t               , "Structure user
defined type
       i_fcat_s         TYPE lvc_s_fcat            ,
       i_final_s        TYPE t_bsak                , "Structure user
defined type
       i_t059t_dis_s    TYPE t_t059t_dis           , "Structure user
defined type
       i_budat_s        TYPE fagl_range_budat      ,
       i_lvc_t_fcat_s   TYPE lvc_s_fcat,
       i_lvc_s_layo_s   TYPE lvc_s_layo,
       i_lvc_t_detm_s   TYPE lvc_s_detm,
       i_lvc_s_deta_s   TYPE lvc_s_deta.
*}
************************************************************************
*                        GLOBAL INTERNAL TABLES
*                      naming convention: "i_name"
************************************************************************
*{
DATA : i_lfb1         TYPE TABLE OF t_lfb1      , "Internal table for
user defined type
       i_lfa1         TYPE TABLE OF t_lfa1      , "Internal table for
user defined type
       i_t059t        TYPE TABLE OF t_t059t     , "Internal table for
user defined type
       i_t059t_dis    TYPE TABLE OF t_t059t_dis ,
       i_t059t_fnl    TYPE TABLE OF t_t059t     , "Internal table for
user defined type
       i_fieldcat     TYPE slis_t_fieldcat_alv  , "Internal table for
fieldcat.
       i_events       TYPE slis_t_event        , "Internal table for
event
       i_header_alv   TYPE slis_t_listheader    , "Internal table for
header
       i_fcat         TYPE TABLE OF lvc_s_fcat  , "Field cat. of dynamic
table
       i_sel_rows     TYPE REF TO data          , "For creating dynamic
table
       i_new_line     TYPE REF TO data          ,
       i_bsak         TYPE TABLE OF t_bsak      , "Internal table for
user defined type
       i_bsik         TYPE TABLE OF t_bsik      , "Internal table for
user defined type
       i_final        TYPE TABLE OF t_bsak      , "Internal table for
user defined type
       i_lvc_t_fcat   TYPE TABLE OF lvc_s_fcat,
       i_lvc_t_detm   TYPE TABLE OF lvc_s_detm,
       i_lvc_s_deta   TYPE TABLE OF lvc_s_deta.
*}
************************************************************************
*                            FIELD-SYMBOLS
*                      naming convention: "<FS_>name"
************************************************************************
*{
FIELD-SYMBOLS : <fs_table>    TYPE STANDARD TABLE,  "For dynamic table
                <fs_line>     TYPE ANY           ,  "For row of dynamic
table
                <fs_field>    TYPE ANY           .  "For field of
dynamic table
*}
************************************************************************
*                       PARAMETERS & SELECT-OPTIONS
*                  aming convention: "p_name" & "s_name"
************************************************************************
*{
SELECTION-SCREEN BEGIN OF BLOCK  b1 WITH FRAME TITLE text-001.
PARAMETERS     : p_bukrs TYPE lfb1-bukrs OBLIGATORY DEFAULT c_bukrs."
'200' .

SELECT-OPTIONS : s_lifnr FOR lfm1-lifnr                ,
                 s_budat FOR bkpf-budat.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK  b2 WITH FRAME TITLE text-001.

PARAMETERS:  p_crt  RADIOBUTTON GROUP rad1            ,
             p_ncrt RADIOBUTTON GROUP rad1            ,
             p_all  RADIOBUTTON GROUP rad1 DEFAULT 'X'.

SELECTION-SCREEN END OF BLOCK b2.
*}
************************************************************************
*                       AT SELECTION-SCREEN ON <Field>
************************************************************************
*{
AT SELECTION-SCREEN ON p_bukrs.
* Validating Company Code
  PERFORM f_validate_company_code.

AT SELECTION-SCREEN ON s_lifnr.
* Validating Vendor
  PERFORM f_validate_vendor.
*}
************************************************************************
*                            START-OF-SELECTION
************************************************************************
*{
START-OF-SELECTION.

* Getting data from lfb1
  PERFORM f_get_lfb1.

  CHECK NOT i_lfb1[] IS INITIAL.

* Getting data from lfa1
  PERFORM f_get_lfa1.

* Getting data from bsak
  PERFORM f_get_bsak.

* Getting data from bsik
  PERFORM f_get_bsik.
*}
************************************************************************
*                           END-OF-SELECTION
************************************************************************
*{
END-OF-SELECTION.

  IF NOT i_final[] IS INITIAL.

*   Getting all fields of dynamic table
    PERFORM f_get_mandk.

*   Creating dyanmic table
    PERFORM f_create_dynamic_table.

*   Creating Dynamic table and filling data to dynamic table table
    PERFORM f_fill_output.

*   For displaying output
    PERFORM f_display.
  ELSE.

    MESSAGE s105(zrtc).                          " WITH 'No data found
for this selection criteria.'(008).
  ENDIF.
*}
************************************************************************
*                                FORMS
*                    naming convention: "f_name"
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  validate_company_code
*&---------------------------------------------------------------------*
*       Validating company code
*----------------------------------------------------------------------*

FORM f_validate_company_code .

  DATA : l_t001 TYPE t001-bukrs.
  CLEAR l_t001.
  SELECT bukrs
    INTO l_t001
    FROM t001
    UP TO 1 ROWS
   WHERE bukrs EQ p_bukrs.
  ENDSELECT.

  IF sy-subrc NE 0.
    MESSAGE e043.           " WITH 'Invalid Company Code'(003).
*-- This is to get rid of Extended check.
    IF l_t001 IS INITIAL.
      CLEAR l_t001.
    ENDIF.
  ENDIF.
ENDFORM.                    " validate_company_code
*&---------------------------------------------------------------------*
*&      Form  validate_vendor
*&---------------------------------------------------------------------*
*       Validating Vendor
*----------------------------------------------------------------------*
FORM f_validate_vendor .

  DATA : l_lfa1 TYPE lfa1-lifnr.
  CLEAR l_lfa1.

  IF NOT  s_lifnr[] IS INITIAL.

    SELECT lifnr
      INTO l_lfa1
      FROM lfa1
      UP TO 1 ROWS
     WHERE lifnr IN s_lifnr.
    ENDSELECT.
    IF sy-subrc NE 0.
      MESSAGE e118.                    "WITH 'Invalid Vendor
Number.'(010).
*-- This is to get rid of Extended check.
      IF l_lfa1 IS INITIAL.
        CLEAR l_lfa1.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " validate_vendor
*---------------------------------------------------------------------*
*      Form  f_get_lfb1
*---------------------------------------------------------------------*
*     Getting data from table lfb1 into into internal table
*     according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfb1 .

  REFRESH i_lfb1.

  SELECT lifnr
         mindk
         cerdt
    INTO TABLE i_lfb1
    FROM lfb1
   WHERE lifnr IN s_lifnr
     AND bukrs EQ p_bukrs
     AND mindk NE c_space.
  IF sy-subrc EQ 0.
    SORT i_lfb1 BY lifnr.
  ENDIF.

ENDFORM.                    " f_get_lfb1
*&---------------------------------------------------------------------*
*&      Form  f_get_lfa1
*&---------------------------------------------------------------------*
*       Getting vendor name from table lfa1 into internal table
*       according to the condition
*----------------------------------------------------------------------*
FORM f_get_lfa1 .

  REFRESH i_lfa1.

  IF NOT i_lfb1 IS INITIAL.

    SELECT lifnr
           name1
      INTO TABLE i_lfa1
      FROM lfa1
       FOR ALL  ENTRIES IN i_lfb1
     WHERE lifnr EQ i_lfb1-lifnr.
    IF sy-subrc EQ 0.
      SORT i_lfa1 BY lifnr.
    ENDIF.
  ENDIF.

ENDFORM.                    " f_get_lfa1
*&---------------------------------------------------------------------*
*&      Form  f_get_bsak
*&---------------------------------------------------------------------*
*        Getting document no from table bsak into internal table
*        according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsak .

  REFRESH: i_bsak.         "Defect 40862
  IF NOT i_lfb1 IS INITIAL.
*defect added document types
    SELECT bukrs
           lifnr
           umsks
           umskz
           augdt
           augbl
           zuonr
           gjahr
           belnr
           buzei
           budat
           blart
           shkzg
           wrbtr
      FROM bsak
      INTO TABLE i_bsak
       FOR ALL ENTRIES IN i_lfb1
     WHERE lifnr EQ i_lfb1-lifnr
       AND bukrs EQ p_bukrs
       AND budat IN s_budat
       AND ( blart EQ c_doc_typ_re
        OR   blart EQ c_doc_typ_kr
        OR   blart EQ c_doc_typ_kn
        OR   blart EQ c_doc_typ_kz ).

*end of document types
    APPEND LINES OF i_bsak TO i_final.
  ENDIF.

ENDFORM.                    " f_get_bsak
*&---------------------------------------------------------------------*
*&      Form  f_get_bsik
*&---------------------------------------------------------------------*
*      Getting data from table bsik into internal table
*      according to the condition
*----------------------------------------------------------------------*
FORM f_get_bsik .

  REFRESH: i_bsik.    "Defect 40862
  IF NOT i_lfb1 IS INITIAL.
*defect added document types
    SELECT bukrs
           lifnr
           umsks
           umskz
           augdt
           augbl
           zuonr
           gjahr
           belnr
           buzei
           budat
           blart
           shkzg
           wrbtr
     FROM  bsik
     INTO TABLE i_bsik
      FOR ALL ENTRIES IN i_lfb1
    WHERE lifnr EQ i_lfb1-lifnr
      AND bukrs EQ p_bukrs
      AND budat IN s_budat
      AND ( blart EQ c_doc_typ_re
       OR   blart EQ c_doc_typ_kr
        OR   blart EQ c_doc_typ_kn
        OR   blart EQ c_doc_typ_kz ).
*defect ended document types
    APPEND LINES OF i_bsik TO i_final.
  ENDIF.

ENDFORM.                    " f_get_bsik
*&---------------------------------------------------------------------*
*&      Form  f_fill_output
*&---------------------------------------------------------------------*
*    Creating dynamic table , getting data and  filling that data to
*    dynamic table for display according to the condition
*----------------------------------------------------------------------*
FORM f_fill_output .

  DATA : l_cert_dt TYPE c LENGTH 10,
         l_lifnr TYPE lfa1-lifnr.

  CLEAR:  g_wrbtr   ,
          g_sum     .

* Sorting tables by vendor
  SORT : i_t059t_fnl BY mindk,
         i_final BY lifnr belnr buzei.

* Calculating the amount and filling that data into dynamic table
  LOOP AT i_final INTO i_final_s.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        input  = i_final_s-lifnr
      IMPORTING
        output = l_lifnr.

    AT NEW lifnr.
      CLEAR : g_sum.
    ENDAT.

*   Making Amount negative if credit
    IF i_final_s-shkzg EQ  c_credit.
*      g_wrbtr = i_final_s-wrbtr * -1.
      g_wrbtr = i_final_s-wrbtr.

    ELSE.
*      g_wrbtr = i_final_s-wrbtr.
      g_wrbtr = i_final_s-wrbtr * -1.

    ENDIF.

    g_sum = g_sum + g_wrbtr.

    AT END OF lifnr.
*     Filling data into Dynamic table according to the condition .
      CLEAR i_lfb1_s.
      READ TABLE i_lfb1 INTO i_lfb1_s WITH KEY lifnr = i_final_s-lifnr
                                               BINARY SEARCH.
      IF sy-subrc EQ 0.

        CREATE DATA i_new_line LIKE LINE OF <fs_table>.
        ASSIGN i_new_line->* TO <fs_line>.

        ASSIGN COMPONENT c_vendor OF STRUCTURE <fs_line> TO <fs_field>.
        <fs_field> = l_lifnr.
        CLEAR i_lfa1_s.
        READ TABLE i_lfa1 INTO i_lfa1_s WITH KEY lifnr = i_final_s-lifnr
                                                 BINARY SEARCH.
        IF sy-subrc EQ 0.
          ASSIGN COMPONENT c_name OF STRUCTURE <fs_line> TO <fs_field>.
          <fs_field> =  i_lfa1_s-name1.

          ASSIGN COMPONENT c_credt OF STRUCTURE <fs_line> TO <fs_field>.
          WRITE : i_lfb1_s-cerdt TO l_cert_dt DD/MM/YYYY,
                  i_lfb1_s-cerdt  TO i_lfb1_s-cerdt.
          IF i_lfb1_s-cerdt EQ c_null.
            <fs_field> =  c_space.
          ELSE.
            <fs_field> =  l_cert_dt.
          ENDIF.           " if sy-subrc eq 0(READ TABLE i_lfa1)

*         Filling data according to minority indicator
          PERFORM f_fill_amt_ind.

        ENDIF .        " if sy-subrc eq 0 (READ TABLE i_lfb1)

        CLEAR: i_final_s   ,
               i_lfa1_s    ,
               g_wrbtr     ,
               i_lfb1_s    .
      ENDIF.
    ENDAT.
  ENDLOOP.
ENDFORM.                    " f_fill_output
*&---------------------------------------------------------------------*
*&      Form  Display
*&---------------------------------------------------------------------*
*       For display the ALV Report
*----------------------------------------------------------------------*
FORM f_display .

  DATA : lw_repid LIKE sy-repid,
         l_slis_exit_by_user TYPE slis_exit_by_user.

  lw_repid = sy-repid.

* Creating field cat. for ALV
  PERFORM populate_fldcat_alv.

* Creating Layout.
  PERFORM populate_layout.

* Creating Event
  PERFORM f_get_events.

* Creating Top Of Page
  PERFORM f_top_of_page.

*  Call Function for ALV GRID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = lw_repid
      it_fieldcat             = i_fieldcat
      is_layout               = i_fldlayout_s
      it_events               = i_events
      i_callback_user_command = c_user_command     "Defect 40862
    IMPORTING
      es_exit_caused_by_user  = l_slis_exit_by_user
    TABLES
      t_outtab                = <fs_table>
    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.

  IF  l_slis_exit_by_user EQ c_x.
    LEAVE LIST-PROCESSING .
  ENDIF.
  UNASSIGN:<fs_field>,<fs_line>.

ENDFORM.                    " Display
*&---------------------------------------------------------------------*
*&      Form  populate_fldcat
*&---------------------------------------------------------------------*
*       Filling fieldcat for dynamic table
*----------------------------------------------------------------------*
FORM populate_fldcat .

  REFRESH i_fcat.
  CLEAR: i_t059t_s,
         i_fcat_s.

  i_fcat_s-key             = c_x.
  i_fcat_s-fieldname       = c_vendor.
  i_fcat_s-outputlen       = c_25.       "Defect 40862

  APPEND i_fcat_s TO i_fcat .
  CLEAR: i_fcat_s .

  i_fcat_s-key             = c_x.
  i_fcat_s-fieldname       = c_name.
  i_fcat_s-outputlen       = c_25.       "Defect 40862

  APPEND i_fcat_s TO i_fcat .
  CLEAR: i_fcat_s .

  i_fcat_s-key             = c_x.
  i_fcat_s-fieldname       = c_credt.
  i_fcat_s-outputlen       = c_35.       "Defect 40862

  APPEND i_fcat_s TO i_fcat .
  CLEAR: i_fcat_s .

  CLEAR i_t059t_fnl_s.

  LOOP AT i_t059t_fnl INTO i_t059t_fnl_s.

    CLEAR i_fcat_s.

    CLEAR i_t059t_s.
    i_fcat_s-key            = c_x.
    i_fcat_s-fieldname      = i_t059t_fnl_s-mtext.
    i_fcat_s-outputlen      = c_55.        "Defect 40862

    APPEND i_fcat_s TO i_fcat .
    CLEAR: i_fcat_s ,
           i_t059t_fnl_s,
           i_t059t_fnl_s.
  ENDLOOP.
ENDFORM.                    " populate_fldcat
*&---------------------------------------------------------------------*
*&      Form  populate_layout
*&---------------------------------------------------------------------*
*      Filling layout
*----------------------------------------------------------------------*
FORM populate_layout .

  i_fldlayout_s-zebra            = c_x         .
  i_fldlayout_s-window_titlebar  = 'Purchasing from Minority
Vendors'(014).
  i_fldlayout_s-get_selinfos     = c_x        .
  i_fldlayout_s-expand_all       = c_space          .     "Defect 40862
  i_fldlayout_s-no_scrolling     = c_x.

ENDFORM.                    " populate_layout
*&---------------------------------------------------------------------*
*&      Form  f_get_events
*&---------------------------------------------------------------------*
*       For Event
*----------------------------------------------------------------------*
FORM f_get_events .

  DATA: ls_event TYPE slis_alv_event.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = i_events.

  READ TABLE i_events WITH KEY name = slis_ev_top_of_page
                           INTO ls_event.
  IF sy-subrc EQ 0.
    MOVE c_f_top_of_page TO ls_event-form.
    MODIFY  i_events FROM ls_event INDEX  sy-tabix.
  ENDIF.
ENDFORM.                    " f_get_events
*&---------------------------------------------------------------------*
*&      Form  f_top_of_page
*&---------------------------------------------------------------------*
*       For top of page
*----------------------------------------------------------------------*
FORM f_top_of_page .

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = i_header_alv.

  PERFORM f_fill_header.

ENDFORM.                    " f_top_of_page
*&---------------------------------------------------------------------*
*&      Form  f_fill_header
*&---------------------------------------------------------------------*
*       Filling data for Top Of Page
*----------------------------------------------------------------------*
FORM f_fill_header .
  DATA : l_date_low    TYPE c LENGTH 10,
         l_date_high   TYPE c LENGTH 20,
         l_sum_cr(20)  TYPE c,
         l_sum_cr_tmp  TYPE p DECIMALS 2,
         l_sum_ncr_tmp TYPE p DECIMALS 2,
         l_sum_ncr(20) TYPE c,
         l_total(20)   TYPE c.

  IF g_flag EQ c_space.

    LOOP AT s_budat INTO i_budat_s.
      i_header_alv_s-typ = c_s.         "Defect 40862

      WRITE : i_budat_s-low  TO l_date_low MM/DD/YYYY ,
              i_budat_s-high TO l_date_high MM/DD/YYYY.
      CONCATENATE text-019 l_date_low c_dash l_date_high INTO
i_header_alv_s-info
                                                   SEPARATED BY c_space.
      APPEND i_header_alv_s TO i_header_alv.
      CLEAR:i_header_alv_s.
    ENDLOOP.

    IF p_crt EQ c_x
    OR p_all EQ c_x.
      i_header_alv_s-typ = c_s.           "Defect 40862
      MOVE g_sum_cr TO l_sum_cr_tmp.
      WRITE l_sum_cr_tmp TO l_sum_cr CURRENCY c_usd.
"Defect 40862
      CONCATENATE  text-004 c_usd l_sum_cr INTO i_header_alv_s-info
"Defect 40862
                                                     SEPARATED BY
c_space.
      APPEND i_header_alv_s TO i_header_alv.
      CLEAR:i_header_alv_s.
    ENDIF.

    IF p_ncrt EQ c_x
    OR p_all  EQ c_x.
      i_header_alv_s-typ = c_s.          "Defect 40862
      MOVE g_sum_ncr TO l_sum_ncr_tmp.
      WRITE l_sum_ncr_tmp TO l_sum_ncr CURRENCY c_usd.
"Defect 40862
      CONCATENATE  text-002 c_usd l_sum_ncr INTO i_header_alv_s-info
"Defect 40862
                                                     SEPARATED BY
c_space.
      APPEND i_header_alv_s TO i_header_alv.
      CLEAR:i_header_alv_s.
    ENDIF.

    l_total = g_sum_cr + g_sum_ncr.
    i_header_alv_s-typ = c_s.         "Defect 40862
    MOVE  l_total TO l_sum_ncr_tmp.
    WRITE  l_sum_ncr_tmp TO l_total CURRENCY c_usd.
"Defect 40862
    CONCATENATE  text-020 c_usd l_total INTO i_header_alv_s-info
"Defect 40862
                                               SEPARATED BY c_space.
    APPEND i_header_alv_s TO i_header_alv.
    CLEAR:i_header_alv_s.

    g_flag = c_x.
    CLEAR:i_header_alv_s.

  ENDIF.
ENDFORM.                    " f_fill_header
*&---------------------------------------------------------------------*
*&      Form  f_fill_amt_ind
*&---------------------------------------------------------------------*
*       Filling data into dynamic table according to indicator and
*       also calculating sum of all amount of certified/non-certified
*----------------------------------------------------------------------*
FORM f_fill_amt_ind .

  DATA: w_mindk(40) TYPE c.

  MOVE i_lfb1_s-mindk TO w_mindk.
  CASE i_lfb1_s-mindk.

    WHEN w_mindk.
*   For Certified .
      IF  i_lfb1_s-cerdt NE c_null.
        IF p_crt EQ c_x OR p_all EQ c_x.
          CLEAR i_t059t_fnl_s.
          READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
                                                             mark  =
c_x.
          IF sy-subrc EQ  0.
            ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
            MOVE g_sum TO <fs_field> .
            INSERT <fs_line> INTO TABLE <fs_table>.
*           Calculating sum of Certified .
            g_sum_cr = g_sum_cr + g_sum .
          ENDIF.           " IF sy-subrc eq  0(READ TABLE i_t059t_fnl)
        ENDIF.
      ELSE.
*       For Non-Certified.
        IF p_ncrt EQ c_x OR p_all EQ c_x.
          CLEAR i_t059t_fnl_s.
          READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY mindk =
i_lfb1_s-mindk
                                                             mark  =
c_space.
          IF sy-subrc EQ  0.
            ASSIGN COMPONENT i_t059t_fnl_s-mtext OF STRUCTURE <fs_line>
TO <fs_field>.
            MOVE g_sum TO <fs_field> .

            INSERT <fs_line> INTO TABLE <fs_table>.
*           Calculating sum of Non-Certified .
            g_sum_ncr = g_sum_ncr + g_sum .
          ENDIF  .                        " IF sy-subrc eq  0(READ TABLE
i_t059t_fnl)
        ENDIF.
      ENDIF.
  ENDCASE.
  UNASSIGN:<fs_line>.

ENDFORM.                    " f_fill_amt_ind
*&---------------------------------------------------------------------*
*&      Form  get_mandk
*&---------------------------------------------------------------------*
*       Getting data from table t059t into internal table for getting
*       field of dynamic table
*----------------------------------------------------------------------*
FORM f_get_mandk .

  REFRESH i_t059t.

  SELECT mindk
         mtext
    FROM t059t
    INTO TABLE i_t059t
   WHERE spras EQ sy-langu.
  IF sy-subrc EQ 0.
*   Getting  fields of dynamic table
    PERFORM f_fill_final_table.
  ENDIF.
ENDFORM.                    " get_mandk
*&---------------------------------------------------------------------*
*&      Form  f_cerate_dynamic_table
*&---------------------------------------------------------------------*
*       Making field cat. and creating dynamic table
*----------------------------------------------------------------------*
FORM f_create_dynamic_table .

* Filling field cat. for dynamic table
  PERFORM populate_fldcat.

* For Creating dynamic table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      i_style_table             = c_x
      it_fieldcatalog           = i_fcat
    IMPORTING
      ep_table                  = i_sel_rows
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.

  ASSIGN i_sel_rows->* TO <fs_table>.

ENDFORM.                    " f_cerate_dynamic_table
*&---------------------------------------------------------------------*
*&      Form  f_fill_final_table
*&---------------------------------------------------------------------*
*      Getting  fields of dynamic table
*----------------------------------------------------------------------*
FORM f_fill_final_table .

  DATA: l_text(50) TYPE c.

  g_count = c_1.

  REFRESH i_t059t_fnl.
  LOOP AT i_t059t INTO i_t059t_s.

    CONCATENATE  i_t059t_s-mtext c_cr INTO l_text.
    CONDENSE l_text NO-GAPS.
    TRANSLATE l_text TO UPPER CASE.
    MOVE:  g_count TO i_t059t_fnl_s-count ,
         i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
         l_text          TO i_t059t_fnl_s-mtext,
         c_x             TO i_t059t_fnl_s-mark.
    APPEND i_t059t_fnl_s TO i_t059t_fnl.

    CLEAR : i_t059t_fnl_s,
            l_text.
    CONCATENATE i_t059t_s-mtext  ' (Certified)'(011) INTO l_text.
    MOVE :  g_count        TO i_t059t_dis_s-count ,
            l_text         TO i_t059t_dis_s-mtext.
    APPEND i_t059t_dis_s   TO i_t059t_dis.

    CLEAR : l_text.

    g_count = g_count + 1.
    CONCATENATE  i_t059t_s-mtext c_ncr INTO l_text.
    CONDENSE l_text NO-GAPS.
    TRANSLATE l_text TO UPPER CASE.
    MOVE: g_count        TO i_t059t_fnl_s-count ,
         i_t059t_s-mindk TO i_t059t_fnl_s-mindk,
         l_text          TO i_t059t_fnl_s-mtext,
         c_space         TO i_t059t_fnl_s-mark.
    CLEAR l_text.
    APPEND i_t059t_fnl_s TO i_t059t_fnl.

    CLEAR: i_t059t_fnl_s.

    CONCATENATE i_t059t_s-mtext ' (Non-Certified)'(009) INTO l_text.
    MOVE : g_count TO i_t059t_dis_s-count ,
          l_text TO i_t059t_dis_s-mtext.
    APPEND i_t059t_dis_s TO i_t059t_dis.
    g_count = g_count + 1.
    CLEAR : l_text,
            i_t059t_s.
  ENDLOOP.
ENDFORM.                    " f_fill_final_table
*&---------------------------------------------------------------------*
*&      Form  populate_fldcat_alv
*&---------------------------------------------------------------------*
*       Creating field cat.for ALV GRID
*&---------------------------------------------------------------------*
FORM populate_fldcat_alv .
  REFRESH i_fieldcat.
  CLEAR: i_t059t_s,
        i_fieldcat_s.

  i_fieldcat_s-key             = c_x.
  i_fieldcat_s-fieldname       = c_vendor.
  i_fieldcat_s-seltext_l       = text-005.
  i_fieldcat_s-outputlen       = c_25.         "Defect 40862

  APPEND i_fieldcat_s TO i_fieldcat .
  CLEAR: i_fieldcat_s .

  i_fieldcat_s-key             = c_x.
  i_fieldcat_s-fieldname       = c_name.
  i_fieldcat_s-seltext_l       = text-006.
  i_fieldcat_s-outputlen       = c_25.        "Defect 40862

  APPEND i_fieldcat_s TO i_fieldcat .
  CLEAR: i_fieldcat_s .

  i_fieldcat_s-key             = c_x.
  i_fieldcat_s-fieldname       = c_credt.
  i_fieldcat_s-seltext_l       = text-007.
  i_fieldcat_s-outputlen       = c_35.        "Defect 40862

  APPEND i_fieldcat_s TO i_fieldcat.
  CLEAR: i_fieldcat_s .

  CLEAR i_t059t_dis_s.
  LOOP AT i_t059t_dis INTO i_t059t_dis_s.

    READ TABLE i_t059t_fnl INTO i_t059t_fnl_s WITH KEY count =
i_t059t_dis_s-count.

    IF sy-subrc EQ 0.
      CLEAR i_fieldcat_s.

      CLEAR i_t059t_s.
      CONCATENATE i_t059t_fnl_s-mindk i_t059t_dis_s-mtext INTO
i_t059t_dis_s-mtext
                                                          SEPARATED BY
c_space.
      i_fieldcat_s-key           = c_x.
      i_fieldcat_s-fieldname     = i_t059t_fnl_s-mtext.
      i_fieldcat_s-seltext_l     = i_t059t_dis_s-mtext.
      i_fieldcat_s-do_sum        = c_x.
      i_fieldcat_s-outputlen     = c_16.         "Defect 40862
      i_fieldcat_s-inttype       = c_p.          "Defect 40862

      APPEND i_fieldcat_s TO i_fieldcat.
      CLEAR: i_fieldcat_s ,
             i_t059t_dis_s.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " populate_fldcat_alv
*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*Routine for trapping double click event
*----------------------------------------------------------------------*
*      -->UCOMM      text
*      -->SELFIELD   text
*----------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm                 "#EC CALLED
      selfield      TYPE slis_selfield.
  CASE ucomm.

    WHEN c_ic1.                        "Defect 40862
      READ TABLE <fs_table> ASSIGNING <fs_line> INDEX selfield-tabindex.
      IF sy-subrc EQ 0.                "Defect 40862
        PERFORM f_get_popup.
      ENDIF.
  ENDCASE.
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  f_get_popup
*&---------------------------------------------------------------------*
*Routine to call popup screen
*----------------------------------------------------------------------*
FORM f_get_popup .
  REFRESH:i_lvc_t_detm,i_lvc_t_fcat,i_lvc_s_deta.
  CLEAR i_lvc_t_fcat_s.
  i_lvc_t_fcat_s-fieldname = c_columntext.  "Defect 40862
  i_lvc_t_fcat_s-key       = c_x.
  i_lvc_t_fcat_s-outputlen = c_30.          "Defect 40862
  i_lvc_t_fcat_s-seltext   = 'Group Description'(012).
  APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.
  CLEAR:i_lvc_t_fcat_s .

  i_lvc_t_fcat_s-fieldname = c_value.       "Defect 40862
  i_lvc_t_fcat_s-outputlen = c_20.          "Defect 40862
  i_lvc_t_fcat_s-seltext   = 'contents'(013).
  APPEND i_lvc_t_fcat_s TO i_lvc_t_fcat.

  i_lvc_s_layo_s-no_toolbar = c_x.

  PERFORM f_fill_detail.

  i_lvc_t_detm_s-detailtab = i_lvc_s_deta[].
  APPEND i_lvc_t_detm_s TO i_lvc_t_detm.

  CALL FUNCTION 'LVC_ITEM_DETAIL'
    EXPORTING
      it_fieldcatalog = i_lvc_t_fcat
      is_layout       = i_lvc_s_layo_s
    TABLES
      t_outtab        = i_lvc_t_detm.

ENDFORM.                    " f_get_popup
*&---------------------------------------------------------------------*
*&      Form  f_fill_detail
*&---------------------------------------------------------------------*
*Routine to populate details of the selected records
*----------------------------------------------------------------------*
FORM f_fill_detail .
  DATA: l_colname(30) TYPE c,
        l_index TYPE i.
  l_index = 1.

  LOOP AT i_fieldcat INTO i_fieldcat_s.
    l_colname = i_fieldcat_s-fieldname.
    i_lvc_t_detm_s-blockindex = l_index.

    ASSIGN COMPONENT l_colname OF STRUCTURE <fs_line> TO <fs_field>.
    IF <fs_field> IS NOT INITIAL.
      i_lvc_s_deta_s-columntext = i_fieldcat_s-fieldname.
      i_lvc_s_deta_s-value = <fs_field>.
      APPEND i_lvc_s_deta_s TO i_lvc_s_deta.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " f_fill_detail
****************************************** END ***********************

Code Formatted by: Alvaro Tejada Galindo on May 23, 2008 7:01 PM

Former Member
0 Kudos

Hi

Dynamic table means the only and best way is using field-symbols, bcoz it holds any data or structure.

Get the fieldcatalog of the given table using reuse_fieldcatalog_merge fm.

And create the table using method.

Example code.

DATA : i_table TYPE REF TO data,

fs_line TYPE REF TO data.

----


  • Field symbols

----


FIELD-SYMBOLS:

<i_output> TYPE STANDARD TABLE,

<fs_output>, " Used for Header line

<w_data>. " Used to assignment of

component

IF NOT i_fldcat[] IS INITIAL.

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = i_fldcat[]

IMPORTING

ep_table = i_table

EXCEPTIONS

generate_subpool_dir_full = 1

OTHERS = 2

.

IF sy-subrc <> 0.

ENDIF. " IF sy-subrc <> 0.

ASSIGN i_table->* TO <i_output>.

CREATE DATA fs_line LIKE LINE OF <i_output>.

ASSIGN fs_line->* TO <fs_output>.

ENDIF. " IF NOT i_fldcat[] IS INITIAL.

This is the way u need to workout for all the tables.

Venkat.