Tuesday, May 27, 2008

Sample BDC program for Material master creation in MM01


REPORT zgm_bdc_mm01 NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPES : BEGIN OF ty_mat,
        mbrsh(1) TYPE c,
        mtart(4) TYPE c,
        maktx(40) TYPE c,
        meins(3)  TYPE c,
        matkl(9) TYPE c,
        END OF ty_mat.

DATA: it_mat TYPE STANDARD TABLE OF ty_mat,
      wa_mat TYPE ty_mat.


DATA: it_bdcdata TYPE STANDARD TABLE OF bdcdata,
      wa_bdcdata TYPE bdcdata.

DATA: wa_opt TYPE ctu_params.

DATA : filename TYPE string.

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

PARAMETERS : p_file TYPE rlgrap-filename OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

wa_opt-nobinpt = 'X'.
wa_opt-updmode = 'A'.

*upload data form presentation server to internal table

 CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
      field_name    = ' '
    IMPORTING
      file_name     = p_file.


 START-OF-SELECTION.

  filename = p_file.

  IF filename IS NOT INITIAL.

CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    filename                      = filename
   filetype                      = 'ASC'
   has_field_separator           = 'X'
  TABLES
    data_tab                      = it_mat
* CHANGING
*   ISSCANPERFORMED               = ' '
 EXCEPTIONS
   file_open_error               = 1
   file_read_error               = 2
   no_batch                      = 3
   gui_refuse_filetransfer       = 4
   invalid_type                  = 5
   no_authority                  = 6
   unknown_error                 = 7
   bad_data_format               = 8
   header_not_allowed            = 9
   separator_not_allowed         = 10
   header_too_long               = 11
   unknown_dp_error              = 12
   access_denied                 = 13
   dp_out_of_memory              = 14
   disk_full                     = 15
   dp_timeout                    = 16
   OTHERS                        = 17
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDIF.

END-OF-SELECTION.

LOOP AT it_mat INTO wa_mat.

PERFORM bdc_dynpro      USING 'SAPLMGMM' '0060'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'RMMG1-MTART'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=ENTR'.
PERFORM bdc_field       USING 'RMMG1-MBRSH'
                               wa_mat-mbrsh.
PERFORM bdc_field       USING 'RMMG1-MTART'
                               wa_mat-mtart.
PERFORM bdc_dynpro      USING 'SAPLMGMM' '0070'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'MSICHTAUSW-DYTXT(02)'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=ENTR'.
PERFORM bdc_field       USING 'MSICHTAUSW-KZSEL(01)'
                              'X'.
PERFORM bdc_field       USING 'MSICHTAUSW-KZSEL(02)'
                              'X'.
PERFORM bdc_dynpro      USING 'SAPLMGMM' '4004'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '/00'.
PERFORM bdc_field       USING 'MAKT-MAKTX'
                              wa_mat-maktx.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'MARA-MATKL'.
PERFORM bdc_field       USING 'MARA-MEINS'
                              wa_mat-meins.
PERFORM bdc_field       USING 'MARA-MATKL'
                              wa_mat-matkl.
PERFORM bdc_field       USING 'MARA-MTPOS_MARA'
                              'NORM'.
PERFORM bdc_dynpro      USING 'SAPLMGMM' '4004'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '/00'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'MAKT-MAKTX'.
PERFORM bdc_field       USING 'MAKT-MAKTX'
                               wa_mat-maktx.
PERFORM bdc_dynpro      USING 'SAPLSPO1' '0300'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=YES'.

CALL TRANSACTION 'MM01' USING it_bdcdata OPTIONS FROM wa_opt.

CLEAR wa_mat.
REFRESH it_bdcdata.

ENDLOOP.

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR wa_bdcdata.
  wa_bdcdata-program  = program.
  wa_bdcdata-dynpro   = dynpro.
  wa_bdcdata-dynbegin = 'X'.
  APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
    CLEAR wa_bdcdata.
    wa_bdcdata-fnam = fnam.
    wa_bdcdata-fval = fval.
    APPEND wa_bdcdata TO it_bdcdata.
  ENDFORM.

Monday, April 14, 2008

Program to find exits and badi for a transaction

REPORT Z_USEREXITBADIFIND .
TABLES : TSTC,
TADIR,
MODSAPT,
MODACT,
TRDIR,
TFDIR,
ENLFDIR,
SXS_ATTRT ,
TSTCT.
DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA : FIELD1(30).
DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.
PARAMETERS : P_TCODE LIKE TSTC-TCODE,
P_PGMNA LIKE TSTC-PGMNA .

DATA WA_TADIR TYPE TADIR.
START-OF-SELECTION.
IF NOT P_TCODE IS INITIAL.
SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
ELSEIF NOT P_PGMNA IS INITIAL.
TSTC-PGMNA = P_PGMNA.
ENDIF.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'PROG'
AND OBJ_NAME = TSTC-PGMNA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
IF SY-SUBRC NE 0.
SELECT SINGLE * FROM TRDIR
WHERE NAME = TSTC-PGMNA.
IF TRDIR-SUBC EQ 'F'.
SELECT SINGLE * FROM TFDIR
WHERE PNAME = TSTC-PGMNA.
SELECT SINGLE * FROM ENLFDIR
WHERE FUNCNAME = TFDIR-FUNCNAME.
SELECT SINGLE * FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'FUGR'
AND OBJ_NAME EQ ENLFDIR-AREA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
ENDIF.
ENDIF.
SELECT * FROM TADIR INTO TABLE JTAB
WHERE PGMID = 'R3TR'
AND OBJECT IN ('SMOD', 'SXSD')
AND DEVCLASS = V_DEVCLASS.

SELECT SINGLE * FROM TSTCT
WHERE SPRSL EQ SY-LANGU
AND TCODE EQ P_TCODE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) P_TCODE,
45(50) TSTCT-TTEXT.
SKIP.
IF NOT JTAB[] IS INITIAL.
WRITE:/(105) SY-ULINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
* SORTING THE INTERNAL TABLE
SORT JTAB BY OBJECT.
DATA : WF_TXT(60) TYPE C,
WF_SMOD TYPE I ,
WF_BADI TYPE I ,
WF_OBJECT2(30) TYPE C.
CLEAR : WF_SMOD, WF_BADI , WF_OBJECT2.
*GET THE TOTAL SMOD.
LOOP AT JTAB INTO WA_TADIR.
AT FIRST.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 'Enhancement/ Business Add-in',
41 SY-VLINE ,
42 'Description',
105 SY-VLINE.
WRITE:/(105) SY-ULINE.
ENDAT.
CLEAR WF_TXT.
AT NEW OBJECT.
IF WA_TADIR-OBJECT = 'SMOD'.
WF_OBJECT2 = 'Enhancement' .
ELSEIF WA_TADIR-OBJECT = 'SXSD'.
WF_OBJECT2 = ' Business Add-in'.
ENDIF.
FORMAT COLOR COL_GROUP INTENSIFIED ON.
WRITE:/1 SY-VLINE,
2 WF_OBJECT2,
105 SY-VLINE.
ENDAT.
CASE WA_TADIR-OBJECT.
WHEN 'SMOD'.
WF_SMOD = WF_SMOD + 1.
SELECT SINGLE MODTEXT INTO WF_TXT
FROM MODSAPT
WHERE SPRSL = SY-LANGU
AND NAME = WA_TADIR-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WHEN 'SXSD'.

* FOR BADIS
WF_BADI = WF_BADI + 1 .
SELECT SINGLE TEXT INTO WF_TXT
FROM SXS_ATTRT
WHERE SPRSL = SY-LANGU
AND EXIT_NAME = WA_TADIR-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
ENDCASE.

WRITE:/1 SY-VLINE,
2 WA_TADIR-OBJ_NAME HOTSPOT ON,
41 SY-VLINE ,
42 WF_TXT,
105 SY-VLINE.
AT END OF OBJECT.
WRITE : /(105) SY-ULINE.
ENDAT.

ENDLOOP.
WRITE:/(105) SY-ULINE.


SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'No.of Exits:' , WF_SMOD.
WRITE:/ 'No.of BADis:' , WF_BADI.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'No userexits or BADis exist'.
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(105) 'Transaction does not exist'.
ENDIF.
AT LINE-SELECTION.
DATA : WF_OBJECT TYPE TADIR-OBJECT.
CLEAR WF_OBJECT.

GET CURSOR FIELD FIELD1.
CHECK FIELD1(8) EQ 'WA_TADIR'.
READ TABLE JTAB WITH KEY OBJ_NAME = SY-LISEL+1(20).
MOVE JTAB-OBJECT TO WF_OBJECT.
CASE WF_OBJECT.
WHEN 'SMOD'.
SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
WHEN 'SXSD'.
SET PARAMETER ID 'EXN' FIELD SY-LISEL+1(20).
CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.
ENDCASE.

Tuesday, March 11, 2008

Important Concepts in ABAP


Reports Classical, Interactive, ALV
Module Pool Programing 4 Events - PAI, PBO, POH, POV
Bdc Session method, Call transaction method, Direct input method
Bapi Business objects , Function modules
Lsmw 4 Methods - Direct input, Batch input, Business object, Idoc
Scripts Forms ( start_form,open_form) , windows ( main,variable)
Smartforms User friendly compared to Scripts
Exits 4 Types - screen , menu, field, function module exits
Badi Can have  multiple Implementations
Workflow Tasks, Rules, Events
Ale/Idoc 5 Methods - Master data,Change pointers,Extensions,Reductions,Filtering
Custom Infotypes Enhance standard , Create custom
BTE Restrict standard FI transactions and default values
Function modules Modularization, Remote calls
Data dictionary
Tables,Views,Data types,Type groups,Domain,Data element,
Search help,Lock objects

Monday, February 25, 2008

Sample ALV program to display Purchase order data

*&---------------------------------------------------------------------*
*& Report  ZMM_PURCHASE_ORDER
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zmm_purchase_order2.

TABLES: ekko,ekpo.

TYPES: BEGIN OF gty_ekko,
        ebeln TYPE ekko-ebeln,
        bukrs TYPE ekko-bukrs,
        bstyp TYPE ekko-bstyp,
        bsart TYPE ekko-bsart,
        lifnr TYPE ekko-lifnr,
        ekorg TYPE ekko-ekorg,
        ekgrp TYPE ekko-ekgrp,
        waers TYPE ekko-waers,
        kunnr TYPE ekko-kunnr,
        END OF gty_ekko.

TYPES: BEGIN OF gty_ekpo,
        ebeln TYPE ekpo-ebeln,
        ebelp TYPE ekpo-ebelp,
        loekz TYPE ekpo-loekz,
        matnr TYPE ekpo-matnr,
        bukrs TYPE ekpo-bukrs,
        werks TYPE ekpo-werks,
        lgort TYPE ekpo-lgort,
        matkl TYPE ekpo-matkl,
        menge TYPE ekpo-menge,
        meins TYPE ekpo-meins,
        netpr TYPE ekpo-netpr,
        netwr TYPE ekpo-netwr,
        mwskz TYPE ekpo-mwskz,
      END OF gty_ekpo.

TYPES: BEGIN OF gty_final,
        ebeln TYPE ekko-ebeln,
        bukrs TYPE ekko-bukrs,
        bstyp TYPE ekko-bstyp,
        bsart TYPE ekko-bsart,
        lifnr TYPE ekko-lifnr,
        ekorg TYPE ekko-ekorg,
        ekgrp TYPE ekko-ekgrp,
        waers TYPE ekko-waers,
        kunnr TYPE ekko-kunnr,
        ebelp TYPE ekpo-ebelp,
        loekz TYPE ekpo-loekz,
        matnr TYPE ekpo-matnr,
        werks TYPE ekpo-werks,
        lgort TYPE ekpo-lgort,
        matkl TYPE ekpo-matkl,
        menge TYPE ekpo-menge,
        meins TYPE ekpo-meins,
        netpr TYPE ekpo-netpr,
        netwr TYPE ekpo-netwr,
        mwskz TYPE ekpo-mwskz,
      END OF gty_final.


DATA: gt_ekko  TYPE STANDARD TABLE OF gty_ekko,
      gt_ekpo  TYPE STANDARD TABLE OF gty_ekpo,
      gt_final TYPE STANDARD TABLE OF gty_final.

DATA: gtt_ekko  TYPE gty_ekko,
      gtt_ekpo  TYPE gty_ekpo,
      gtt_final TYPE gty_final.

DATA: g_repid           TYPE sy-repid,
      gt_fieldcatalog   TYPE slis_t_fieldcat_alv ,
      gtt_fieldcatalog  TYPE slis_fieldcat_alv,
      gt_layout         TYPE slis_layout_alv ,
      gt_fieldcatalog2  TYPE slis_t_fieldcat_alv ,
      gtt_fieldcatalog2 TYPE slis_fieldcat_alv,
      gt_layout2        TYPE slis_layout_alv ,
      gt_fieldcatalog3  TYPE slis_t_fieldcat_alv ,
      gtt_fieldcatalog3 TYPE slis_fieldcat_alv,
      gt_layout3        TYPE slis_layout_alv ,
      gt_print          TYPE slis_print_alv,
      gt_sort           TYPE slis_t_sortinfo_alv ,
      gt_filter         TYPE slis_t_filter_alv,
      gt_sp_group       TYPE slis_t_sp_group_alv,
      gt_alv_graphics   TYPE dtc_t_tc,
      gt_excluding      TYPE slis_t_extab ,
      gt_events         TYPE slis_t_event ,
      gt_variant        TYPE disvariant,
      gt_variant2       TYPE disvariant,
      gt_variant3       TYPE disvariant,
      g_var2            TYPE i,
      g_user_command    TYPE slis_formname VALUE 'USER_COMMAND',
      g_status          TYPE slis_formname VALUE 'SET_PF_STATUS'.

* selection screen
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN:SKIP 1.
SELECT-OPTIONS: s_ebeln FOR ekko-ebeln OBLIGATORY, " Po number
                s_bukrs FOR ekko-bukrs, " company code
                s_aedat FOR ekko-aedat. " creation date
SELECTION-SCREEN:SKIP 1.
SELECTION-SCREEN: END OF BLOCK b1.

INITIALIZATION.
* do nothing

START-OF-SELECTION.
* fetch  the data from tables
  PERFORM select_data.

END-OF-SELECTION.
* display the data using smartform
  PERFORM display_data.

*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" p="" text="">*----------------------------------------------------------------------*
FORM select_data .

  SELECT  ebeln
          bukrs
          bstyp
          bsart
          lifnr
          ekorg
          ekgrp
          waers
          kunnr FROM ekko INTO TABLE gt_ekko
    WHERE ebeln IN s_ebeln
    AND bukrs IN s_bukrs
    AND bstyp = 'F'
    AND aedat IN s_aedat.

  IF sy-subrc = 0.

    SELECT  ebeln
            ebelp
            loekz
            matnr
            bukrs
            werks
            lgort
            matkl
            menge
            meins
            netpr
            netwr
            mwskz FROM ekpo INTO TABLE gt_ekpo
      FOR ALL ENTRIES IN gt_ekko
      WHERE ebeln = gt_ekko-ebeln
       AND bukrs = gt_ekko-bukrs.

    IF sy-subrc = 0.
* do nothing
    ENDIF.

  ENDIF.

  LOOP AT gt_ekpo INTO gtt_ekpo.

    CLEAR gtt_final.
    gtt_final-ebeln = gtt_ekpo-ebeln.
    gtt_final-ebelp = gtt_ekpo-ebelp.
    gtt_final-loekz = gtt_ekpo-loekz.
    gtt_final-matnr = gtt_ekpo-matnr.
    gtt_final-bukrs = gtt_ekpo-bukrs.
    gtt_final-werks = gtt_ekpo-werks.
    gtt_final-lgort = gtt_ekpo-lgort.
    gtt_final-matkl = gtt_ekpo-matkl.
    gtt_final-menge = gtt_ekpo-menge.
    gtt_final-meins = gtt_ekpo-ebeln.
    gtt_final-netpr = gtt_ekpo-netpr.
    gtt_final-netwr = gtt_ekpo-netwr.
    gtt_final-mwskz = gtt_ekpo-mwskz.

    CLEAR gtt_ekko.
    READ TABLE gt_ekko INTO gtt_ekko WITH KEY ebeln = gtt_ekpo-ebeln.
    IF  sy-subrc = 0.
      gtt_final-bstyp = gtt_ekko-bstyp.
      gtt_final-bsart = gtt_ekko-bsart.
      gtt_final-lifnr = gtt_ekko-lifnr.
      gtt_final-ekorg = gtt_ekko-ekorg.
      gtt_final-ekgrp = gtt_ekko-ekgrp.
      gtt_final-waers = gtt_ekko-waers.
      gtt_final-kunnr = gtt_ekko-kunnr.
    ENDIF.

    APPEND gtt_final TO gt_final.

  ENDLOOP.

ENDFORM.                    " SELECT_DATA



*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" p="" text="">*----------------------------------------------------------------------*
FORM display_data .

  set PF-STATUS 'ZSTATUS'.

  REFRESH gt_fieldcatalog.

  g_repid = sy-repid.

  gtt_fieldcatalog-fieldname   = 'EBELN'.
  gtt_fieldcatalog-seltext_m   = 'Po number'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 12.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'EBELP'.
  gtt_fieldcatalog-seltext_m   = 'Item no'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 8.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'BUKRS'.
  gtt_fieldcatalog-seltext_m   = 'Comp code'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 10.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'MATNR'.
  gtt_fieldcatalog-seltext_m   = 'Material'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 18.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'NETPR'.
  gtt_fieldcatalog-seltext_m   = 'Price'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 8.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'WAERS'.
  gtt_fieldcatalog-seltext_m   = 'Currency'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 8.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'MEINS'.
  gtt_fieldcatalog-seltext_m   = 'Unit'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 8.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'WERKS'.
  gtt_fieldcatalog-seltext_m   = 'Plant'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 8.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'EKGRP'.
  gtt_fieldcatalog-seltext_m   = 'Pur  group'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 8.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'LIFNR'.
  gtt_fieldcatalog-seltext_m   = 'Vendor'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 10.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.

  gtt_fieldcatalog-fieldname   = 'KUNNR'.
  gtt_fieldcatalog-seltext_m   = 'Customer'.
  gtt_fieldcatalog-col_pos     = g_var2 + 1.
  gtt_fieldcatalog-outputlen   = 10.
  APPEND gtt_fieldcatalog TO gt_fieldcatalog.
  CLEAR  gtt_fieldcatalog.



  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = g_repid
*      i_callback_pf_status_set = ' '
*      i_callback_user_command  = g_user_command
      is_layout                = gt_layout
      it_fieldcat              = gt_fieldcatalog[]
*      it_special_groups        = gt_sp_group[]
      it_sort                  = gt_sort[]
      it_filter                = gt_filter[]
      i_save                   = 'A'
*      is_variant               = gt_variant
      it_events                = gt_events[]
*      is_print                 = gt_print
*      it_alv_graphics          = gt_alv_graphics[]
*      it_excluding             = gt_excluding
    TABLES
      t_outtab                 = gt_final
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " DISPLAY_DATA