Sunday, 25 June 2017

Bapi Automation ..

Generate bapi report based on test data which one your saved in SE37. 

Enjoy..




*&---------------------------------------------------------------------*
*& Report  ZBAPI_AUTO_CREATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zbapi_auto_create.
**
*& Declaration part
**
TABLES eufunc,rs38l,tfdir.

TYPESBEGIN OF lty_eufunc,
        gruppe TYPE eufunc-gruppe,
        name   TYPE eufunc-name,
        nummer TYPE eufunc-nummer,
        seqid  TYPE eufunc-seqid,
        srtf2  TYPE eufunc-srtf2,
        datum  TYPE eufunc-datum,
        zeit   TYPE eufunc-zeit,
      END OF lty_eufunc,

      BEGIN OF lty_param_all,  " Catch Parameter into single table.
        param(30)   TYPE c,    "Parameter Name
        struct(30)  TYPE c,    "Parameter Structure or vaiable
        t_field(30TYPE c,    "Table field Name
        t_t_fie(20TYPE c,    "TAble Text Field
        t_f_le(6)   TYPE c,    "Table Field length
        t_f_de(6)   TYPE c,    "Table Field Decimal point
        t_f_dt(10)   TYPE c,   "Table Field Data Type
        t_f_inty(30TYPE c,   "table field initial TYPE
        t_f_inle(30TYPE c,   "table field initial length
        t_f_dl(5)   TYPE c,    "table field decimal length
        t_f_indx(5)   TYPE c,  "table INDEX
        t_f_po(5)   TYPE c,    "Table field positon
        v_field(100TYPE c,   "value field Flag
        v_f_po(5)   TYPE c,    "value field positon
        v_f_le(6)   TYPE c,    "Value Field length
        field_f(2)  TYPE c,    "Parameters From (Import,export,etc..)
      END OF lty_param_all.

TYPES BEGIN OF lty_alv,
        param(30TYPE c,
        field(30TYPE c,
        c_field(30TYPE c,
        value(100TYPE c,
        slect(100TYPE c,
        table  TYPE c,
        h_code TYPE c,
        file TYPE c,
        icon TYPE icon_d,
        message TYPE char200,
        f_style TYPE lvc_t_styl,
        t_table TYPE tabname,
        t_field TYPE fieldname,
        t_cond TYPE char100,
        index  TYPE i,
        lenght TYPE char10,
        END OF lty_alv,
        BEGIN OF ty_tabname,
          tabname TYPE dd03l-tabname,
        END OF ty_tabname.
DATA lt_alv TYPE TABLE OF lty_alv,
       ls_alv TYPE lty_alv,
       lt_fcat TYPE lvc_t_fcat ,"slis_t_fieldcat_alv,
       ls_fcat TYPE lvc_s_fcat,"slis_fieldcat_alv,
       ls_lay  TYPE  lvc_s_layo,  " slis_layout_alv ,
       lt_o_file TYPE TABLE OF lty_alv,
       lt_o_file1 TYPE TABLE OF lty_alv,
       lt_o_file2 TYPE TABLE OF lty_alv,
       ls_o_file TYPE lty_alv,
       ls_o_file1 TYPE lty_alv,
       lt_evts    TYPE slis_t_event,
       la_evts    LIKE LINE OF lt_evts.

DATA lt_parame TYPE TABLE OF lty_param_all,
       lt_parame_temp TYPE TABLE OF lty_param_all,
       ls_parame_temp TYPE lty_param_all,
       ls_parame TYPE lty_param_all,
       lv_parameter(30TYPE c,
       ls_parame_inx TYPE i.

DATA lt_b_lines TYPE TABLE OF tdline,
       ls_b_lines TYPE tdline.

DATA lv_field  TYPE c,  " parameter type From (Import,export,etc..)
       lv_s_fil(30TYPE " Structure

DATA lt_eufunc TYPE TABLE OF lty_eufunc,
       ls_eufunc TYPE lty_eufunc.

DATA lt_source TYPE rswsourcet.
DATA lv_source LIKE LINE OF lt_source.

DATA lt_source_var TYPE rswsourcet.
DATA lv_source_var LIKE LINE OF lt_source_var.
DATA lv_source_var1 TYPE char8 .

DATA lt_subro TYPE rswsourcet.
DATA lv_subro LIKE LINE OF lt_subro.

DATA lt_source_code TYPE rswsourcet.
DATA lv_source_code LIKE LINE OF lt_source_var.

DATA lt_final_code TYPE rswsourcet.
DATA lv_final_code LIKE LINE OF lt_final_code.

DATA lt_final_code_reduced TYPE rswsourcet.
DATA lv_final_code_reduced LIKE LINE OF lt_final_code.

DATA ls_stylerow TYPE lvc_s_styl .
DATA lt_styletab TYPE lvc_t_styl .
*     Importing Parameters
DATABEGIN OF if_import OCCURS 15.
        INCLUDE STRUCTURE rsimp.
DATAEND OF if_import.
*     Changing Parameters
DATABEGIN OF if_change OCCURS 15.
        INCLUDE STRUCTURE rscha.
DATAEND OF if_change.
*     Exporting parameters
DATABEGIN OF if_export OCCURS 15.
        INCLUDE STRUCTURE rsexp.
DATAEND OF if_export.
*     tables parameters
DATABEGIN OF if_tables OCCURS 15.
        INCLUDE STRUCTURE rstbl.
DATAEND OF if_tables.
*     Exception
DATABEGIN OF if_except OCCURS 15.
        INCLUDE STRUCTURE rsexc.
DATAEND OF if_except.

DATABEGIN OF param_docu OCCURS 10.
        INCLUDE STRUCTURE rsfdo.
DATAEND OF param_docu.

DATABEGIN OF lt_param OCCURS 10.
        INCLUDE STRUCTURE rsimp.
DATAEND OF lt_param.

DATAit_dd03l TYPE TABLE OF dd03l,
      ls_dd03l TYPE dd03l.

DATAit_dd03l_temp  TYPE TABLE OF dd03l,
      ls_dd03l_temp  TYPE          dd03l.

DATA lt_tabname TYPE TABLE OF ty_tabname,
       ls_tabname TYPE ty_tabname.

DATA lt_tabname_temp TYPE TABLE OF ty_tabname,
       ls_tabname_temp TYPE ty_tabname.

DATAit_dd03m TYPE TABLE OF dd03m,
      ls_dd03m TYPE dd03m.

DATA:  param_value(220),
       o_param_value LIKE param_value,
       result_text(250),
       para TYPE rs38l-importing ,
       d_type .

DATA g_testprog LIKE trdir-name.
DATA d102n_exportkey LIKE functdir.
DATA lv_var_name TYPE string.
DATA split1(30TYPE c,
       split2(30TYPE c.
DATA:p_table TYPE        w_tabname,
       wf_ref  TYPE REF TO data,
       wf_ref1 TYPE REF TO data.
DATA lv_r_time TYPE VALUE 1,
       lv_alv_c TYPE VALUE 1.
DATA index TYPE i,
       index1 TYPE i,
       lv_count TYPE i.
DATA lt_lcont TYPE TABLE OF  swcont ,
       ls_lcont TYPE  swcont,
       lv_para TYPE  tabname,
       ls_lcont_index TYPE VALUE 1.
*       lv_count TYPE i.
DATA lt_table_s TYPE lvc_t_fcat ,
       lt_table_s_temp TYPE lvc_t_fcat ,
       ls_table_s TYPE lvc_s_fcat ,
       ls_table_s_temp TYPE lvc_s_fcat ,
       lv_s_name  TYPE REF TO data,
       lv_length TYPE i,
       lv_str    TYPE string.
DATA lv_ans VALUE 1,
       lv_qus TYPE string.
**********************se38 bdc
DATA bdc_count     TYPE string VALUE 1,
       bdc_edi_count TYPE string VALUE 1,
       flag TYPE c.
DATA count    TYPE string,
       it_line  TYPE TABLE OF tdline,
*       temp_it_line TYPE TABLE OF tdline,
       wa_line  TYPE tdline,
       data(30TYPE c.
DATA it_bdc   TYPE TABLE OF bdcdata,
       wa_bdc   TYPE  bdcdata.

**********************se38 bdc

**************************************************
*Get Structure

FIELD-SYMBOLS :<value>     TYPE STANDARD TABLE,
               <wa_value>  TYPE any,
               <field>     TYPE any,
               <field_val> TYPE any.
DATA lv_file_path TYPE string ,"rlgrap-filename ,
       lv_par_index TYPE i.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS p_func LIKE rs38l-name ,
             p_alv  AS CHECKBOX DEFAULT abap_true ,
             p_file AS CHECKBOX DEFAULT abap_true ,
             p_test AS CHECKBOX USER-COMMAND b1,
             p_tfil TYPE eufunc-nummer,
             p_loop  RADIOBUTTON GROUP rb1,
             p_loop1 RADIOBUTTON GROUP rb1.
SELECTION-SCREEN END OF BLOCK b1 .
SELECTION-SCREEN BEGIN OF SCREEN 2007 .
PARAMETER p_prgm TYPE trdir-name.
SELECTION-SCREEN END OF SCREEN 2007.
*F4 Help for FM Names
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_func .
  PERFORM f4_help.
*F4 Help for FM Test run data
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_tfil .
  PERFORM f4_help1.

AT SELECTION-SCREEN OUTPUT.
  PERFORM screen_control.

START-OF-SELECTION.
* Bapi Get Structure
  PERFORM get_bapi_structure.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  F4_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f4_help .
  CALL FUNCTION 'RS_HELP_HANDLING'
       EXPORTING
            dynpfield                 'P_FUNC'
            dynpname                  sy-dynnr
            object                    'FB'
            progname                  'Z_RMTIWARI_CODE_FOR_FUNCTION'
* 'SAPMS38L'
            suppress_selection_screen sy-input.
ENDFORM.                    " F4_HELP
*&---------------------------------------------------------------------*
*&      Form  SCREEN_CONTROL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM screen_control .
  LOOP AT SCREEN.
    IF p_test abap_false.
      IF screen-name 'P_TFIL' OR screen-name '%_P_TFIL_%_APP_%-TEXT'.
        screen-active '0'.
        screen-invisible '0'.
      ENDIF.
      IF screen-name 'P_LOOP' OR screen-name '%_P_LOOP_%_APP_%-TEXT'.
        screen-active '0'.
        screen-invisible '0'.
      ENDIF.
      IF screen-name 'P_LOOP1' OR screen-name '%_P_LOOP1_%_APP_%-TEXT'.
        screen-active '0'.
        screen-invisible '0'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.                    " SCREEN_CONTROL
*&---------------------------------------------------------------------*
*&      Form  Get_Bapi_Structure
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_bapi_structure .
*Getting  Function module Parametes .....
  PERFORM fu_import_interface_ext(sapms38l)
                             TABLES if_import
                                    if_change
                                    if_export
                                    if_tables
                                    if_except
                                    param_docu
                              USING p_func.


*  BREAK-POINT.
*Collectining the Fields Based on structure From (Import,Export,etc..)
  PERFORM get_all_fields.
* Bapi get value
  PERFORM get_bapi_values.
  IF p_file abap_true.
* Get input file
    PERFORM get_file.
    PERFORM get_declaration_part.
    lv_source_code 'LOOP AT lt_file INTO ls_file .' .
    APPEND lv_source_code TO lt_source_code.
    CLEAR lv_source_code.
    APPEND lv_source_code TO lt_source_code.
  ENDIF.
  CALL FUNCTION 'FUNCTION_STUB_GENERATE'
    EXPORTING
      funcname           p_func
      ic_mode            'X'
    TABLES
      source             lt_source
    EXCEPTIONS
      function_not_exist 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.

  FIELD-SYMBOLS<fs> TYPE any.
  DATAlv_string TYPE string.
  DATAlv_search_string TYPE string.

  LOOP AT lt_source INTO lv_source.

    SEARCH lv_source FOR ' EXCEPTIONS'.
    IF sy-subrc EQ  0.
      EXIT.
    ENDIF.
    SEARCH lv_source FOR ' = '.
    CHECK sy-subrc EQ 0.

    LOOP AT if_import.
      CLEAR ls_parame.
      READ TABLE lt_parame INTO ls_parame WITH KEY param if_import-parameter.
      CHECK sy-subrc .
      CONCATENATE '.' if_import-parameter '.' INTO lv_search_string
   SEPARATED BY space.

      SEARCH lv_source FOR lv_search_string .
      IF sy-subrc EQ 0.
        CONCATENATE '= lv_' if_import-parameter INTO lv_var_name.
        PERFORM split_fm_variable.
*        REPLACE '=' WITH lv_var_name INTO lv_source.
        MODIFY lt_source FROM lv_source.

        REPLACE '= lv_' WITH 'DATA: lv_' INTO lv_var_name.
        IF NOT if_import-dbfield IS INITIAL.
          CONCATENATE lv_var_name 'TYPE' if_import-dbfield '.'
                      INTO lv_source_var SEPARATED BY space.
        ELSEIF if_import-typ IS INITIAL.
          CONCATENATE lv_var_name 'TYPE'
                     'C' '.'
                     INTO lv_source_var SEPARATED BY space.
        ELSE.
          CONCATENATE lv_var_name 'TYPE'
                     if_import-typ '.'
                     INTO lv_source_var SEPARATED BY space.
        ENDIF.
        APPEND lv_source_var TO lt_source_var.

        IF if_import-default IS INITIAL.
*          CONCATENATE '* lv_' if_import-parameter ' = '
*               INTO lv_source_code.
          CLEAR ls_parame.
          lv_parameter if_import-parameter .
          PERFORM get_prameters.
*          CONCATENATE '* lv_' if_import-parameter ' = '
*               INTO lv_source_code.
        ELSE.
          CONCATENATE '* lv_' if_import-parameter ' = '
                     if_import-default '.'
               INTO lv_source_code.
        ENDIF.
*        APPEND lv_source_code TO lt_source_code.
        CLEAR lv_source_code.
        APPEND lv_source_code TO lt_source_code.

        lt_param-parameter if_import-parameter.
        lt_param-dbfield if_import-dbfield.
        lt_param-typ if_import-typ.
        APPEND lt_param.

        EXIT.
      ENDIF.
    ENDLOOP.

    LOOP AT if_export.
      CLEAR ls_parame.
      READ TABLE lt_parame INTO ls_parame WITH KEY param if_export-parameter.
      CHECK sy-subrc .
      CONCATENATE '.' if_export-parameter '.' INTO lv_search_string
                   SEPARATED BY space.
      SEARCH lv_source FOR lv_search_string .
      IF sy-subrc EQ 0.
        CONCATENATE '= lv_' if_export-parameter INTO lv_var_name.
*        REPLACE '=' WITH lv_var_name INTO lv_source.
        PERFORM split_fm_variable.
        MODIFY lt_source FROM lv_source.

        REPLACE '= lv_' WITH 'DATA: lv_' INTO lv_var_name.
        IF NOT if_export-dbfield IS INITIAL.
          CONCATENATE lv_var_name 'TYPE' if_export-dbfield '.'
                      INTO lv_source_var SEPARATED BY space.
        ELSEIF if_export-typ IS INITIAL.
          CONCATENATE lv_var_name 'TYPE'
                     'C' '.'
                     INTO lv_source_var SEPARATED BY space.


        ELSE.
          CONCATENATE lv_var_name 'TYPE'
                     if_export-typ '.'
                     INTO lv_source_var SEPARATED BY space.
        ENDIF.
        APPEND lv_source_var TO lt_source_var.

        IF if_export-parameter IS INITIAL.
*          CONCATENATE '* lv_' if_import-parameter ' = '
*               INTO lv_source_code.
          CLEAR ls_parame.
          lv_parameter if_export-parameter .
          PERFORM get_prameters.
*          CONCATENATE '* lv_' if_export-parameter ' = '
*               INTO lv_source_code.
*        ELSE.
*          CONCATENATE '* lv_' if_export-parameter ' = '
*                     if_export-default '.'
*               INTO lv_source_code.
        ENDIF.
*        APPEND lv_source_code TO lt_source_code.
        CLEAR lv_source_code.
        APPEND lv_source_code TO lt_source_code.

        lt_param-parameter if_export-parameter.
        lt_param-dbfield if_export-dbfield.
        lt_param-typ if_export-typ.
        APPEND lt_param.


        EXIT.
      ENDIF.
    ENDLOOP.

    LOOP AT if_change.
      CLEAR ls_parame.
      READ TABLE lt_parame INTO ls_parame WITH KEY param if_change-parameter.
      CHECK sy-subrc .
      CONCATENATE '.' if_change-parameter '.' INTO lv_search_string
      SEPARATED BY space.
      SEARCH lv_source FOR lv_search_string .
      IF sy-subrc EQ 0.
        CONCATENATE '= lv_' if_change-parameter INTO lv_var_name.
*        REPLACE '=' WITH lv_var_name INTO lv_source.
        PERFORM split_fm_variable.
        MODIFY lt_source FROM lv_source.

        REPLACE '= lv_' WITH 'DATA: lv_' INTO lv_var_name.
        IF NOT if_change-dbfield IS INITIAL.
          CONCATENATE lv_var_name 'TYPE' if_change-dbfield '.'
                      INTO lv_source_var SEPARATED BY space.

        ELSEIF if_change-typ IS INITIAL.
          CONCATENATE lv_var_name 'TYPE'
                     'C' '.'
                     INTO lv_source_var SEPARATED BY space.
        ELSE.
          CONCATENATE lv_var_name 'TYPE'
                     if_change-typ '.'
                     INTO lv_source_var SEPARATED BY space.
        ENDIF.
        APPEND lv_source_var TO lt_source_var.

*        CONCATENATE '* lv_' if_change-parameter   ' = '
*                    if_change-default
*               INTO lv_source_code.
        lv_parameter if_change-parameter .
        PERFORM get_prameters.
*        APPEND lv_source_code TO lt_source_code.
        CLEAR lv_source_code.
        APPEND lv_source_code TO lt_source_code.

        lt_param-parameter if_change-parameter.
        lt_param-dbfield if_change-dbfield.
        lt_param-typ if_change-typ.
        APPEND lt_param.

        EXIT.
      ENDIF.
    ENDLOOP.

    LOOP AT if_tables.
      CLEAR ls_parame.
      READ TABLE lt_parame INTO ls_parame WITH KEY param if_tables-parameter.
      CHECK sy-subrc .
      CONCATENATE '.' if_tables-parameter '.' INTO lv_search_string
      SEPARATED BY space.
      SEARCH lv_source FOR lv_search_string .
      IF sy-subrc EQ 0.
        CONCATENATE '= lt_' if_tables-parameter INTO lv_var_name.
*        REPLACE '=' WITH lv_var_name INTO lv_source.
        PERFORM split_fm_variable.
        MODIFY lt_source FROM lv_source.

        REPLACE '= lt_' WITH 'DATA: lt_' INTO lv_var_name.
        IF NOT if_tables-dbstruct IS INITIAL.
          CONCATENATE lv_var_name 'TYPE standard table of '
                      if_tables-dbstruct '.'
                      INTO lv_source_var SEPARATED BY space.

        ELSEIF if_tables-typ IS INITIAL.
          CONCATENATE lv_var_name 'TYPE standard table of '
                     'char255' '.'
                     INTO lv_source_var SEPARATED BY space.
        ELSE.
          CONCATENATE lv_var_name 'TYPE'
                     if_tables-typ '.'
                     INTO lv_source_var SEPARATED BY space.

        ENDIF.
        APPEND lv_source_var TO lt_source_var.

        CONCATENATE 'DATA: wa_' if_tables-parameter  space
                    ' LIKE LINE OF lt_' if_tables-parameter '.'
                    INTO lv_source_var.
        APPEND lv_source_var TO lt_source_var.

*   Get struture fields.
**     IF p_file =  abap_false.
**
**
**        DATA : lt_dfies_tab TYPE STANDARD TABLE OF dfies WITH HEADER LINE.
**        DATA : lv_tabname TYPE ddobjname.
**
**        lv_tabname = if_tables-dbstruct.
**
**        CALL FUNCTION 'DDIF_FIELDINFO_GET'
**          EXPORTING
**            tabname              = lv_tabname
***       FIELDNAME            = ' '
***       LANGU                = SY-LANGU
***       LFIELDNAME           = ' '
***       ALL_TYPES            = ' '
***       GROUP_NAMES          = ' '
***     IMPORTING
***       X030L_WA             =
***       DDOBJTYPE            =
***       DFIES_WA             =
***       LINES_DESCR          =
**         TABLES
**           dfies_tab            = lt_dfies_tab
***       FIXED_VALUES         =
**         EXCEPTIONS
**           not_found            = 1
**           internal_error       = 2
**           OTHERS               = 3
**                  .
**        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 lt_dfies_tab[] IS INITIAL.
**
**          CONCATENATE '* wa_' if_tables-parameter  ' = '
**                 INTO lv_source_code.
**
**          APPEND lv_source_code TO lt_source_code.
**
**        ELSE.
**          LOOP AT lt_dfies_tab.
**
**            CONCATENATE '* wa_' if_tables-parameter '-'
**                        lt_dfies_tab-fieldname ' = '
**                   INTO lv_source_code.
**
**            APPEND lv_source_code TO lt_source_code.
**          ENDLOOP.
**         ENDIF.
**    endif.
*BREAK-POINT.
        lv_parameter if_tables-parameter .
        lt_parame_temp lt_parame.
        DELETE lt_parame_temp WHERE param <> ls_parame-param.
        SORT lt_parame_temp BY t_f_indx DESCENDING.
        READ TABLE lt_parame_temp INTO ls_parame_temp INDEX 1.
        CLEAR lv_par_index.
        lv_par_index 1.
        DO ls_parame_temp-t_f_indx TIMES.
          PERFORM get_prameters.
          lv_par_index lv_par_index + lv_par_index.
          CONCATENATE ' APPEND wa_' if_tables-parameter ' to '
        ' lt_' if_tables-parameter '.'
        INTO lv_source_code.
          APPEND lv_source_code TO lt_source_code.
          CLEAR lv_source_code.
          CONCATENATE ' CLEAR wa_' if_tables-parameter '. '
          INTO lv_source_code.
          APPEND lv_source_code TO lt_source_code.
          CLEAR lv_source_code.

        ENDDO.
        CLEAR lv_par_index.
*          ENDLOOP.
*        ENDIF.
        APPEND lv_source_code TO lt_source_code.
        EXIT.
      ENDIF.
    ENDLOOP.
  ENDLOOP.



  LOOP AT lt_source_var INTO lv_source_var.
    PERFORM write_to_final.
  ENDLOOP.
  APPEND INITIAL LINE TO lt_final_code.
  APPEND INITIAL LINE TO lt_final_code_reduced.
***  WRITE : /.

  IF p_loop1 abap_true AND  p_file abap_true..
    CLEAR lv_source_code.
    APPEND lv_source_code TO lt_source_code.
    lv_source_code 'ENDLOOP.'.
    APPEND lv_source_code TO lt_source_code.
    CLEAR lv_source_code.
  ENDIF.
  LOOP AT lt_source_code INTO lv_source_code.
***    WRITE : / lv_source_code.
*      IF P_TESTD is initial.
*        APPEND  lv_source_code  to lt_final_code.
*
*      ELSE.
    APPEND  lv_source_code TO lt_final_code_reduced.
*      ENDIF.
  ENDLOOP.
***  WRITE : /.

*  LOOP AT lt_test_code into lv_test_code.
*    WRITE : / lv_test_code.
*        IF NOT P_TESTD is initial.
*           APPEND  lv_test_code to lt_final_code.
*
*        ENDIF.
*  ENDLOOP.



  LOOP AT lt_source INTO lv_source.
*    REPLACE '"' WITH '*' INTO lv_source.
    REPLACE '"' WITH ' ' INTO lv_source.
    MODIFY lt_source FROM lv_source.

    SPLIT lv_source AT '=' INTO split1 split2.
    CLEAR ls_parame.
    SHIFT split1 LEFT DELETING LEADING space.
    READ TABLE lt_parame INTO ls_parame WITH KEY param split1.
    IF sy-subrc .
******      WRITE : / lv_source.
      APPEND  lv_source  TO lt_final_code.
      APPEND  lv_source TO lt_final_code_reduced.
    ELSEIF split1       'EXPORTING' OR
           split1       'IMPORTING' OR
           split1       'CHANGING'  OR
           split1       'TABLES'.
      READ TABLE lt_parame INTO ls_parame WITH KEY field_f split1+0(1).
      CHECK sy-subrc .
******      WRITE : / lv_source.
      APPEND  lv_source  TO lt_final_code.
      APPEND  lv_source TO lt_final_code_reduced.
    ENDIF.
    IF split1+0(13'CALL FUNCTION'.
***      WRITE : / lv_source.
      APPEND  lv_source  TO lt_final_code.
      APPEND  lv_source TO lt_final_code_reduced.
    ENDIF.
  ENDLOOP.
  lv_source '.'.
  APPEND  lv_source  TO lt_final_code.
  APPEND  lv_source TO lt_final_code_reduced.
  CLEAR lv_source.
  APPEND  lv_source  TO lt_final_code.
  APPEND  lv_source TO lt_final_code_reduced.
  lv_source 'CALL FUNCTION' .
  CONCATENATE lv_source '''BAPI_TRANSACTION_COMMIT''' INTO lv_source SEPARATED BY space.
  APPEND  lv_source  TO lt_final_code.
  APPEND  lv_source TO lt_final_code_reduced.
  lv_source 'EXPORTING'.
  APPEND  lv_source  TO lt_final_code.
  APPEND  lv_source TO lt_final_code_reduced.
  lv_source '         wait = ABAP_TRUE .' .
  APPEND  lv_source  TO lt_final_code.
  APPEND  lv_source TO lt_final_code_reduced.
* Each record need separate record
  IF p_loop abap_true AND  p_file abap_true..
    CLEAR lv_source_var.
    PERFORM write_to_final.
    lv_source_var 'ENDLOOP.'.
    PERFORM write_to_final.
  ENDIF.

  LOOP AT lt_subro INTO lv_source_var.
    PERFORM write_to_final.
  ENDLOOP.

*  DATA : lv_trdir_l TYPE trdir,
*         lv_trdir_r TYPE trdir.
  IF p_file abap_true .
    CALL SELECTION-SCREEN 2007 STARTING AT  10
                                ENDING AT   75 15.
    IF p_prgm IS INITIAL.
    ELSE.
      PERFORM get_program.
    ENDIF.
  ENDIF.
*Program Writing
  PERFORM insert_prg.
**  CALL FUNCTION 'RS_EDTR_SPLIT_SCREEN_EDIT'
**    EXPORTING
***   START_WITH_COMPARE         = ' '
**      display_l                  = 'X'
**      display_r                  = 'X'
***   MOD_ENABLED_L              = 'X'
***   MOD_ENABLED_R              = 'X'
***   TEXT_L                     =
***   TEXT_R                     =
***   STATE_L                    =
***   STATE_R                    =
***   OBJECT_TYPE_L              = ' '
***   OBJECT_TYPE_R              = ' '
***   TRANSPORT_KEY_L            =
***   TRANSPORT_KEY_R            =
***   KORRNUM_L                  =
***   KORRNUM_R                  =
***   FLG_EXTENSION_CALL         = ' '
***   FLG_INACT_ENABLED          = ' '
**      trdir_wa_l                 = lv_trdir_l
**      trdir_wa_r                 = lv_trdir_r
***   SMALL_SCREEN               = ' '
***   FLG_WITHOUT_DISPLAY        = ' '
***   FLG_WITHOUT_INIT_CUS       = ' '
***   FLG_TMP_STOR_COMP          = ' '
***   FLG_REMOTE_R               = ' '
*** IMPORTING
***   COMPARE_RESULT             =
**    TABLES
**      source_l                   = lt_final_code
**      source_r                   = lt_final_code_reduced
***   LINEINDEX_L                =
***   LINEINDEX_R                =
*** EXCEPTIONS
***   PARAMETER_INVALID          = 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.                    " BAPI
*&---------------------------------------------------------------------*
*&      Form  F4_HELP1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f4_help1 .
  TYPES:
          BEGIN OF lty_final ,
            p_tfil TYPE eufunc-nummer,
            datum  TYPE eufunc-datum,
            zeit   TYPE eufunc-zeit,
            seqid  TYPE eufunc-seqid,
          END OF lty_final.

  DATA lt_dynf   TYPE TABLE OF dynpread,
         ls_dynf   TYPE dynpread.

  DATA lt_final  TYPE TABLE OF lty_final,
         ls_final  TYPE lty_final.
  DATA :  lt_map   TYPE TABLE OF dselc ,
          lt_return_tab  TYPE TABLE OF ddshretval,
          ls_map   TYPE  dselc .

  ls_dynf-fieldname 'P_FUNC '.
  APPEND ls_dynf TO lt_dynf.
*Getting Screen Filed Value For Function name
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname     sy-repid
      dynumb     sy-dynnr
    TABLES
      dynpfields lt_dynf.
*Fetching Relavent test data for the Funtion Module
  IF lt_dynf IS INITIAL.
  ELSE.
    READ TABLE lt_dynf INTO ls_dynf INDEX 1.
    IF sy-subrc 0.
      SELECT gruppe
             name
             nummer
             seqid
             srtf2
             datum
             zeit   FROM eufunc INTO TABLE lt_eufunc WHERE name ls_dynf-fieldvalue .

      IF sy-subrc 0.
*deleting inactive data ....
        DELETE lt_eufunc WHERE nummer ''.
        DELETE lt_eufunc WHERE nummer 999.
      ENDIF.
    ENDIF.
  ENDIF.
***********
*   READ TABLE lt_eufunc INTO ls_eufunc INDEX 1.
*    d102n_exportkey-area   = ls_eufunc-gruppe ."'STXD'.
*    d102n_exportkey-progid = p_func        .
*    d102n_exportkey-dataid = 999 ."p_tfil        .
*    d102n_exportkey-seqid  = ls_eufunc-seqid .
*        CATCH SYSTEM-EXCEPTIONS conne_import_wrong_comp_type = 1.
*        IMPORT lt_final
*               FROM DATABASE eufunc(FL)  ID d102n_exportkey.
*        endcatch.
*Move data to final table
  LOOP AT lt_eufunc INTO ls_eufunc.
    ls_final-p_tfil ls_eufunc-nummer.
    ls_final-datum  ls_eufunc-datum .
    ls_final-zeit   ls_eufunc-zeit  .
    ls_final-seqid  ls_eufunc-seqid .
    APPEND ls_final TO lt_final.
    CLEAR ls_final.
  ENDLOOP.
*Mapping Sceen filed
  ls_map-dyfldname 'P_TFIL'.
  ls_map-fldname 'F0001'.
  APPEND ls_map TO lt_map.
  CLEAR ls_map.


*Calling F4 function module
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        'P_TFIL'"lv_retfield
      dynpprog        sy-repid
      dynpnr          sy-dynnr
      dynprofield     'P_TFIL'
      value_org       'S'
    TABLES
      value_tab       lt_final
      return_tab      lt_return_tab
      dynpfld_mapping lt_map
    EXCEPTIONS
      parameter_error 1
      no_values_found 2
      OTHERS          3.
  IF sy-subrc 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " F4_HELP1
*&---------------------------------------------------------------------*
*&      Form  GET_BAPI_VALUES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_bapi_values .

*Start of Creating Program Name
  CLEAR tfdir.
  SELECT SINGLE FROM tfdir WHERE funcname p_func.
  CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT'
    EXPORTING
      program   tfdir-pname
    IMPORTING
      namespace rs38l-namespace
      group     rs38l-str_area
    EXCEPTIONS
      OTHERS    6.

  IF sy-subrc NE 0.
*    message s110 with fname.
    LEAVE.                             "Funktion existiert nicht
  ENDIF.

  CONCATENATE rs38l-namespace rs38l-str_area INTO rs38l-area.
  g_testprog p_func.
  TRANSLATE g_testprog USING ' ='.
  g_testprog+30 'FT'.
*end of Creating Program Name
  REFRESH lt_eufunc.
  SELECT gruppe
         name
         nummer
         seqid
         srtf2
         datum
         zeit    FROM eufunc INTO TABLE lt_eufunc WHERE name p_func.
  IF sy-subrc 0.
*deleting inactive data ....
    DELETE lt_eufunc WHERE nummer ''.
    DELETE lt_eufunc WHERE nummer 999.
  ENDIF.
*Creating  Key fields
  READ TABLE lt_eufunc INTO ls_eufunc INDEX 1.
  IF sy-subrc 0.
    d102n_exportkey-area   ls_eufunc-gruppe ."'STXD'.
    d102n_exportkey-progid p_func        .
    d102n_exportkey-dataid p_tfil        .
    d102n_exportkey-seqid  ls_eufunc-seqid  "'S'.
  ENDIF.
*Import
  LOOP AT if_import.
    para     if_import-parameter.
    lv_s_fil if_import-dbfield  .
    lv_field 'E'.  "Import parameter
    PERFORM get_values_based_on_structure.
  ENDLOOP.
*Export
  LOOP AT if_export.
    para     if_export-parameter.
    lv_s_fil if_export-dbfield  .
    lv_field 'I'.  "Exportparameter
    PERFORM get_values_based_on_structure.
  ENDLOOP.
*Changing
  LOOP AT if_change.
    para     if_change-parameter.
    lv_s_fil if_change-dbfield  .
    lv_field 'C'.  "Changing parameter
    PERFORM get_values_based_on_structure.
  ENDLOOP.
*Tables
  LOOP AT if_tables.
    CHECK :if_tables-parameter <> 'RETURN',
           if_tables-parameter <> 'EXTENSIONIN',
           if_tables-parameter <> 'EXTENSIONOUT'.
    para     if_tables-parameter.
    lv_s_fil if_tables-dbstruct  .
    lv_field 'T'.  "Tables parameter
    PERFORM get_values_based_on_structure.
  ENDLOOP.
*Deleting Return Table parameters
  DELETE lt_parame WHERE param 'RETURN'.
  IF p_test  abap_true.
    DELETE lt_parame WHERE v_field ' '.
  ENDIF.


ENDFORM.                    " GET_BAPI_VALUES
*&---------------------------------------------------------------------*
*&      Form  GET_ALL_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_all_fields .
*Import Parameters
  LOOP AT if_import.
    ls_tabname-tabname if_import-dbfield.
    APPEND ls_tabname TO lt_tabname.
    CLEAR ls_tabname.
  ENDLOOP.
*if_change Parameters
  LOOP AT if_change.
    ls_tabname-tabname if_change-dbfield.
    APPEND ls_tabname TO lt_tabname.
    CLEAR ls_tabname.
  ENDLOOP.
*if_export Parameters
  LOOP AT if_export.
    ls_tabname-tabname if_export-dbfield.
    APPEND ls_tabname TO lt_tabname.
    CLEAR ls_tabname.
  ENDLOOP.
*if_tables Parameters
  LOOP AT if_tables.
    ls_tabname-tabname if_tables-dbstruct.
    APPEND ls_tabname TO lt_tabname.
    CLEAR ls_tabname.
  ENDLOOP.
  IF lt_tabname IS NOT INITIAL.

    SELECT FROM dd03l INTO TABLE it_dd03l
                        FOR ALL ENTRIES IN lt_tabname
                        WHERE tabname lt_tabname-tabname.
    SELECT FROM dd03m INTO TABLE it_dd03m
                        FOR ALL ENTRIES IN lt_tabname
                        WHERE tabname lt_tabname-tabname AND
                              ddlanguage 'E'.
    DELETE it_dd03m WHERE scrtext_m 'Updated Info'.
    SORT it_dd03m BY intlen.

  ENDIF.
ENDFORM.                    " GET_ALL_FIELDS
*&---------------------------------------------------------------------*
*&      Form  GET_VALUES_BASED_ON_STRUCTURE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_values_based_on_structure .
  IF p_test abap_true.
    CHECK lv_s_fil IS NOT INITIAL.
    p_table lv_s_fil .
    CREATE DATA wf_ref TYPE TABLE OF (p_table.
    ASSIGN wf_ref->TO <value> .
    CREATE DATA wf_ref1 LIKE LINE OF <value>.
    ASSIGN wf_ref1->TO <wa_value>.
    IF lv_field 'T'.
*    PERFORM parameter_read_input IN PROGRAM (g_testprog) USING para
*                                                               d102n_exportkey
*                                                      CHANGING <value> .

      IF lv_r_time 1.
        PERFORM export_import IN PROGRAM (g_testprogUSING 'II' d102n_exportkey.
*        PERFORM export_import IN PROGRAM (g_testprog) USING 'IV' d102n_exportkey.
*        PERFORM function_call IN PROGRAM (g_testprog).
        lv_r_time 0.
      ENDIF.

      CONCATENATE 'I' para INTO lv_para.
      PERFORM  tables_container IN PROGRAM (g_testprogTABLES lt_lcont
                                                        USING lv_para
                                                              'O'  ."DIRECTION.
      LOOP AT lt_lcont INTO ls_lcont WHERE type 'u'.
        lv_count lv_count + 1.
      ENDLOOP.
      DO lv_count TIMES.
        PERFORM read_single_value.
        ls_lcont_index ls_lcont_index + 1.
        lv_par_index lv_par_index + .
      ENDDO.
      ls_lcont_index 1.
      lv_par_index .
      REFRESH lt_lcont.
      CLEAR lv_count.
*      perFORM PARAMETER_TABLE_gET IN PROGRAM (g_testprog) USING para <value>.
*      perFORM PARAMETER_TABLE_sET IN PROGRAM (g_testprog) USING para <value>.
*      PERFORM parameter_table_get IN PROGRAM (g_testprog) USING para  CHANGING <value>.

*      CHECK <value> IS NOT INITIAL.
*    READ TABLE <value> INTO <wa_value> INDEX 1.
*      CLEAR lv_par_index.
*      LOOP AT <value> INTO <wa_value> .
*        lv_par_index  = sy-tabix.
*        PERFORM read_single_value.
*      ENDLOOP.
    ELSE.
      PERFORM parameter_read_input IN PROGRAM (g_testprogUSING     para
                                                                     d102n_exportkey
                                                            CHANGING <wa_value> .
      lv_par_index 1.
      PERFORM read_single_value.
    ENDIF.

  ELSE.
    lv_par_index 1.
    PERFORM read_single_value.
  ENDIF.



ENDFORM.                    " GET_VALUES_BASED_ON_STRUCTURE
*&---------------------------------------------------------------------*
*&      Form  GET_BAPI_CODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_file.
*Download File
  DATA :lv_d_file   TYPE string.
  cl_gui_frontend_services=>get_desktop_directory(
  CHANGING
    desktop_directory    lv_d_file    " Desktop Directory
  EXCEPTIONS
    cntl_error           1
    error_no_gui         2
    not_supported_by_gui 3
    OTHERS               4
).
  IF sy-subrc <> 0.
*  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    CALL METHOD cl_gui_cfw=>flush.
*    CONCATENATE lv_d_file '\' p_func '.XLS' INTO lv_file_path.
    CONCATENATE 'C:\Ram kumar\bapi_code\' p_func '.XLS' INTO lv_file_path.
  ENDIF.


  PERFORM get_alv_input.

*Create Dynamic Structure

  FIELD-SYMBOLS<dyn_table> TYPE STANDARD TABLE,
<dyn_wa> TYPE any,
<dyn_field> TYPE any.
  DATA:  dy_table            TYPE REF TO data,
dy_line             TYPE REF TO data.
  DATA :lv_sum TYPE i.
  LOOP AT lt_parame INTO ls_parame WHERE t_f_indx 1.
    IF lt_o_file IS INITIAL.
    ELSE.
      CLEAR ls_o_file.
      READ TABLE lt_o_file INTO ls_o_file WITH KEY param ls_parame-param field ls_parame-t_field .
      CHECK ls_o_file-file abap_true .
    ENDIF.
    READ TABLE lt_table_s INTO ls_table_s WITH KEY fieldname ls_parame-t_field .
    IF sy-subrc 0.
      ls_table_s-scrtext_m  ls_parame-t_t_fie  .
      CONCATENATE  ls_parame-param '_' ls_parame-t_t_fie  INTO ls_table_s-scrtext_m .
      CONCATENATE  ls_parame-param '_' ls_parame-t_field  INTO ls_table_s-fieldname .
      PERFORM check_fieldname.
    ELSE.
      ls_table_s-scrtext_m  ls_parame-t_t_fie  .
      ls_table_s-fieldname  ls_parame-t_field  .
    ENDIF.
    ls_table_s-tabname    ls_parame-param  .
    ls_table_s-datatype   'CHAR' ."ls_parame-t_f_dt   .
    ls_table_s-inttype    'C'."ls_parame-t_f_inty .
    lv_length             strlenls_parame-param ).
    lv_length             lv_length 1.
    lv_str                ls_parame-param+lv_length(1).
    IF  lv_str abap_true.
      ls_table_s-intlen     25 .
    ELSE.
      ls_table_s-intlen     strlenls_parame-t_t_fie 2."ls_parame-t_f_inle .
    ENDIF.

    lv_sum ls_parame-v_f_le * .
    IF ls_table_s-intlen < lv_sum .
      ls_table_s-intlen  ls_parame-v_f_le * .
    ENDIF.
*    ls_table_s-decimals   = ls_parame-t_f_de   .

    APPEND ls_table_s TO lt_table_s .
    ls_table_s_temp ls_table_s .
    ls_table_s_temp-scrtext_m  ls_parame-t_t_fie  .
    ls_table_s_temp-fieldname  ls_parame-t_field  .
    APPEND ls_table_s_temp TO lt_table_s_temp .
    CLEAR ls_table_s.
    CLEAR ls_table_s_temp.
  ENDLOOP.
  DELETE ADJACENT DUPLICATES FROM lt_table_s COMPARING fieldname .
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog  lt_table_s
      i_length_in_byte 'X'
    IMPORTING
      ep_table         lv_s_name.

  ASSIGN lv_s_name->TO <dyn_table>.
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->TO <dyn_wa>.
*lt_parame_temp = lt_parame.
*  DATA : lv_p_len TYPE i.
*  LOOP AT lt_parame INTO ls_parame.
*    lv_p_len = strlen( ls_parame-param ).
*    lv_p_len = lv_p_len - 1.
*    IF ls_parame-param+lv_p_len(1) = 'X'.
*    ELSE.
*      APPEND ls_parame TO lt_parame_temp.
*      CLEAR ls_parame.
*    ENDIF.
*  ENDLOOP.


  CLEAR lv_count .
*Adding Header Text Data
  APPEND <dyn_wa> TO <dyn_table>.
  DATA ls_table_index TYPE VALUE 1.
  LOOP AT lt_table_s_temp INTO ls_table_s.
*    ls_table_index = sy-tabix.
    IF lt_o_file IS INITIAL.
    ELSE.
      CLEAR ls_o_file.
      READ TABLE lt_o_file INTO ls_o_file WITH KEY param ls_table_s-tabname field ls_table_s-fieldname.
      CHECK ls_o_file-file abap_true .
    ENDIF.
    READ TABLE  <dyn_table> INTO  <dyn_wa> INDEX 1.
    ASSIGN COMPONENT ls_table_index OF STRUCTURE <dyn_wa> TO <dyn_field> .
    ls_table_index ls_table_index + 1.
    <dyn_field> ls_table_s-scrtext_m.
    lv_count lv_count + 1.
    MODIFY <dyn_table> FROM <dyn_wa> INDEX 1.
  ENDLOOP.

*Adding data to file ....
  DATA lv_data_c TYPE i,
         lv_data_i TYPE VALUE 1.
  lt_o_file1 lt_o_file .
  CLEAR ls_table_index .
  SORT lt_o_file1 BY index DESCENDING .
  READ TABLE lt_o_file1 INTO ls_o_file INDEX 1.
  lv_data_c ls_o_file-index.
  CLEAR index.
  index1 1.
  ls_table_index 1.
  index 2.
  DO lv_data_c TIMES.
    CLEAR <dyn_wa> .
    APPEND <dyn_wa> TO <dyn_table>.
    ls_table_index  1.
    DO lv_count TIMES.
      CLEAR ls_table_s.
      READ TABLE  lt_table_s_temp INTO ls_table_s INDEX index1.
      index1 index1 + 1.
      IF lt_o_file IS INITIAL.
      ELSE.
        CLEAR ls_o_file.
        READ TABLE lt_o_file INTO ls_o_file WITH KEY param ls_table_s-tabname field ls_table_s-fieldname index lv_data_i.
*      CHECK ls_o_file-file = abap_true .
*      IF ls_o_file-value IS INITIAL.
*         READ TABLE lt_o_file INTO ls_o_file WITH KEY param = ls_table_s-tabname field = ls_table_s-fieldname index = 1.
*      ENDIF.
      ENDIF.
*      CLEAR <dyn_wa> .
      READ TABLE  <dyn_table> INTO  <dyn_wa> INDEX index.
      ASSIGN COMPONENT ls_table_index  OF STRUCTURE <dyn_wa> TO <dyn_field> .
      ls_table_index ls_table_index + 1.
*      ASSIGN COMPONENT ls_table_s-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field> .
      SHIFT ls_o_file-value LEFT DELETING LEADING space.
      IF ls_o_file-value IS NOT INITIAL .
           <dyn_field> ls_o_file-value.
      ENDIF.
      MODIFY <dyn_table> FROM <dyn_wa> INDEX index.
    ENDDO..
    CLEAR ls_table_index.
    lv_data_i lv_data_i + .
    index index .
    index1 1.
  ENDDO.
  CALL FUNCTION 'GUI_DOWNLOAD' " TO DOWNLOAD A TEXT DOCUMENT
   EXPORTING
     filename                        lv_file_path
    filetype                         'DAT'
   TABLES
     data_tab                        <dyn_table>.
  DELETE lt_parame WHERE t_f_indx <> .
ENDFORM.                    " GET_BAPI_CODE
*&---------------------------------------------------------------------*
*&      Form  APPEND_LINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM append_line .

  APPEND ls_b_lines TO lt_b_lines.
  CLEAR ls_b_lines.
ENDFORM.                    " APPEND_LINE
*&---------------------------------------------------------------------*
*&      Form  GET_PRAMETERS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_prameters .
  LOOP AT lt_parame INTO ls_parame WHERE param lv_parameter AND t_f_indx lv_par_index.
    IF ls_parame-field_f 'T'.
      CONCATENATE '   wa_'ls_parame-param'-'ls_parame-t_field  ' =  '
      INTO lv_source_code.
    ELSE.
      CONCATENATE '  lv_' lv_parameter'-'ls_parame-t_field  ' =  '
      INTO lv_source_code.
    ENDIF.
    IF p_file abap_true.
      CLEAR ls_o_file.
      READ TABLE lt_o_file INTO ls_o_file WITH KEY param ls_parame-param field ls_parame-t_field .
      IF sy-subrc 0.
        IF ls_o_file-c_field IS INITIAL.
        ELSE.
          ls_parame-t_field ls_o_file-c_field .
        ENDIF.
      ENDIF.
      IF ls_o_file-file abap_true.
        CONCATENATE lv_source_code ' ls_file-'ls_parame-t_field'.' INTO lv_source_code.
      ELSEIF ls_o_file-h_code abap_true.
        CONCATENATE lv_source_code '''' ls_o_file-value  '''' '.'  INTO lv_source_code.
      ENDIF.
      APPEND lv_source_code TO lt_source_code.
      CLEAR lv_source_code.
    ELSE.
      SHIFT ls_parame-v_field LEFT DELETING LEADING space.
      CONCATENATE lv_source_code '''' ls_parame-v_field '''' '.' INTO lv_source_code.
      APPEND lv_source_code TO lt_source_code.
      CLEAR lv_source_code.
    ENDIF.

  ENDLOOP.

ENDFORM.                    " GET_PRAMETERS
*&---------------------------------------------------------------------*
*&      Form  SPLIT_FM_VARIABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM split_fm_variable .
  SPLIT lv_source AT '=' INTO split1 split2 .
  split2 =  lv_var_name .
  CONCATENATE split1 split2 INTO lv_source SEPARATED BY space.
ENDFORM.                    " SPLIT_FM_VARIABLE
*&---------------------------------------------------------------------*
*&      Form  WRITE_TO_FINAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_to_final .
***  WRITE : / lv_source_var.
  APPEND  lv_source_var  TO lt_final_code.
  APPEND  lv_source_var TO lt_final_code_reduced.
ENDFORM.                    " WRITE_TO_FINAL
*&---------------------------------------------------------------------*
*&      Form  SUBROUTINES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM subroutines .
  IF p_file abap_true .
    lv_subro '*&---------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*&      Form  FILE_F4_HELP'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*&---------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*       text'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*----------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*  -->  p1        text'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*  <--  p2        text'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*----------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'FORM file_f4_help .'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'CALL FUNCTION'.
    CONCATENATE  lv_subro  ''' F4_FILENAME''' INTO lv_subro SEPARATED BY space.
    APPEND lv_subro TO lt_subro.
    lv_subro 'EXPORTING'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'program_name  = syst-cprog'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'dynpro_number = syst-dynnr'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'IMPORTING'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'file_name     = File.'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'ENDFORM.                    " FILE_F4_HELP.'.
    APPEND lv_subro TO lt_subro.


    lv_subro '*&---------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*&      Form  UPLOAD_FILE'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*&---------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*       text'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*----------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*  -->  p1        text'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*  <--  p2        text'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*----------------------------------------------------------------------*'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'FORM upload_file .'.
    APPEND lv_subro TO lt_subro.
    lv_subro '  DATA: lt_raw  TYPE truxs_t_text_data.'.
    APPEND lv_subro TO lt_subro.
    lv_subro '  Refresh LT_FILE.'.
    APPEND lv_subro TO lt_subro.
    lv_subro '  CALL FUNCTION '.
    CONCATENATE lv_subro '''TEXT_CONVERT_XLS_TO_SAP''' INTO lv_subro SEPARATED BY space.
    APPEND lv_subro TO lt_subro.
    lv_subro '    EXPORTING'.
    APPEND lv_subro TO lt_subro.
    lv_subro '*     I_FIELD_SEPERATOR    ='.
    APPEND lv_subro TO lt_subro.
    lv_subro '*     i_line_header        = abap_true'.
    APPEND lv_subro TO lt_subro.
    lv_subro '      i_tab_raw_data       = lt_raw'.
    APPEND lv_subro TO lt_subro.
    lv_subro '      i_filename           = file'.
    APPEND lv_subro TO lt_subro.
    lv_subro '    TABLES'.
    APPEND lv_subro TO lt_subro.
    lv_subro '      i_tab_converted_data = Lt_FILE'.
    APPEND lv_subro TO lt_subro.
    lv_subro '    EXCEPTIONS'.
    APPEND lv_subro TO lt_subro.
    lv_subro '      conversion_failed    = 1'.
    APPEND lv_subro TO lt_subro.
    lv_subro '      OTHERS               = 2.'.
    APPEND lv_subro TO lt_subro.
    lv_subro '  IF sy-subrc <> 0.'.
    APPEND lv_subro TO lt_subro.
    lv_subro '* Implement suitable error handling here'.
    APPEND lv_subro TO lt_subro.
    lv_subro '  ENDIF.'.
    APPEND lv_subro TO lt_subro.
    lv_subro 'ENDFORM.                    " UPLOAD_FILE'.
    APPEND lv_subro TO lt_subro.
  ENDIF.
ENDFORM.                    " SUBROUTINES
*&---------------------------------------------------------------------*
*&      Form  READ_SINGLE_VALUE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM read_single_value .
  READ TABLE  it_dd03l INTO ls_dd03l WITH KEY tabname lv_s_fil.
  IF sy-subrc 0."IF table or structure
    SORT it_dd03l BY position.
    LOOP AT it_dd03l INTO ls_dd03l WHERE tabname lv_s_fil.
      IF ls_dd03l-datatype IS NOT INITIAL.
        ls_parame-param   para.
        ls_parame-struct  lv_s_fil ."if_import-dbfield  .
        ls_parame-field_f lv_field.
        ls_parame-t_field ls_dd03l-fieldname .
        ls_parame-t_f_dt  ls_dd03l-datatype.
        ls_parame-t_f_de  ls_dd03l-decimals.
        ls_parame-t_f_inle  ls_dd03l-intlen.
        ls_parame-t_f_inty  ls_dd03l-inttype.
        ls_parame-t_f_le  ls_dd03l-leng.
        ls_parame-t_f_po  ls_dd03l-position.
        ls_parame-v_f_le  ls_dd03l-leng .
        ls_parame-t_f_dl  ls_dd03l-decimals.
        ls_parame-v_f_po  ls_dd03l-position.
        ls_parame-t_f_indx lv_par_index .
        READ TABLE it_dd03m INTO ls_dd03m WITH KEY tabname lv_s_fil  fieldname ls_dd03l-fieldname .
        IF sy-subrc 0.
          ls_parame-t_t_fie ls_dd03m-scrtext_m .
        ENDIF.
        IF p_test abap_true AND lv_field <> 'T'.
          ASSIGN ls_dd03l-fieldname TO <field>.
          ASSIGN COMPONENT <field> OF STRUCTURE <wa_value> TO <field_val> .
          ls_parame-v_field  <field_val> .
        ELSEIF lv_field 'T'.
          ls_lcont_index ls_lcont_index + 1.
          READ TABLE  lt_lcont INTO ls_lcont INDEX ls_lcont_index.
          IF sy-subrc 0.
            ls_parame-v_field  ls_lcont-value.
          ENDIF.
        ENDIF.
        IF  ls_parame-v_field IS INITIAL .
          IF p_file abap_false.
            APPEND ls_parame TO lt_parame.
            CLEAR  ls_parame.
          ENDIF.
        ELSE.
          IF ls_parame-v_field CS '0' AND ls_parame-t_f_le < 100..
            IF ls_parame-v_field CA '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_' .
            ELSE.
              CHECK ls_parame-v_field > .
            ENDIF.
          ENDIF.
          APPEND ls_parame TO lt_parame.
        ENDIF.
        CLEAR  ls_parame.
      ENDIF.
    ENDLOOP.
  ELSE "IF variables
    ls_parame-param   para.
    ls_parame-field_f lv_field.
    ls_parame-t_field para .
    IF p_test abap_true.
      ls_parame-v_field  <wa_value> .
    ENDIF.
    IF  ls_parame-v_field IS INITIAL .
    ELSE.
      IF ls_parame-v_field CS '0'.
        IF ls_parame-v_field CA '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_' .
        ELSE.
          CHECK ls_parame-v_field > .
        ENDIF.
      ENDIF.
      APPEND ls_parame TO lt_parame.
    ENDIF.
    CLEAR  ls_parame.
  ENDIF.
ENDFORM.                    " READ_SINGLE_VALUE
*&---------------------------------------------------------------------*
*&      Form  GET_ALV_INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_alv_input .
  IF lt_o_file IS INITIAL.
    LOOP AT lt_parame INTO ls_parame ." WHERE t_f_indx = 1.
      ls_o_file-param  ls_parame-param.
      ls_o_file-field  ls_parame-t_field.
      ls_o_file-value  ls_parame-v_field.
      ls_o_file-index  ls_parame-t_f_indx.
      ls_o_file-lenght ls_parame-t_f_le.
      "set field to disabled
      ls_stylerow-fieldname 'T_TABLE' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      CLEAR ls_o_file-f_style.
      APPEND ls_stylerow  TO ls_o_file-f_style.
      ls_stylerow-fieldname 'T_FIELD' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'T_COND' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'SLECT' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .

      APPEND ls_o_file TO lt_o_file.
      CLEAR ls_o_file.

    ENDLOOP.
  ELSE.
    CLEAR index.
*GREEN value '@08@'. "#EC NOTEXT
*INFO  value '@0S@'. "#EC NOTEXT
*RED   value '@0A@'. "#EC NOTEXT
    SELECT FROM dd03l INTO TABLE it_dd03l_temp
                        FOR ALL ENTRIES IN lt_o_file
                        WHERE tabname lt_o_file-t_table.
    LOOP AT lt_o_file INTO ls_o_file WHERE index 1.
      index sy-tabix .
      IF ls_o_file-table IS INITIAL  AND
         ls_o_file-h_code IS INITIAL AND
         ls_o_file-file   IS INITIAL.
        ls_o_file-icon =  '@0A@' .
        ls_o_file-message 'Please select any one (TABLE ,HARD_CODE,FILE)'.
      ELSEIF ls_o_file-table IS NOT INITIAL  AND
         ls_o_file-h_code IS  INITIAL AND
         ls_o_file-file   IS  INITIAL.
        READ TABLE it_dd03l_temp INTO ls_dd03l_temp WITH KEY tabname ls_o_file-t_table.
        IF sy-subrc 0.
          CLEAR ls_dd03l_temp.
          READ TABLE it_dd03l_temp INTO ls_dd03l_temp WITH KEY fieldname ls_o_file-t_field.
          IF sy-subrc 0.
            ls_o_file-icon =  '@08@' .
            ls_o_file-message 'No error...'.
          ELSE.
            ls_o_file-icon =  '@0A@' .
            ls_o_file-message 'Field not exit'.
          ENDIF.
        ELSE.
          ls_o_file-icon =  '@0A@' .
          ls_o_file-message 'Table not exit'.
        ENDIF.
      ELSE.
        ls_o_file-icon =  '@08@' .
        ls_o_file-message 'No error...'.
      ENDIF.
      MODIFY lt_o_file FROM ls_o_file INDEX index .
    ENDLOOP.
  ENDIF.
  REFRESH lt_fcat .
  IF lv_alv_c <> .
    PERFORM fcat USING 'ICON' 'STATUS' .
    PERFORM fcat USING 'MESSAGE' 'MESSAGE'.
  ENDIF.
  PERFORM fcat USING 'PARAM' 'Patameters'.
  PERFORM fcat USING 'FIELD' 'Field Name'.
  PERFORM fcat USING 'VALUE'  'Field Value' .
  PERFORM fcat USING 'TABLE'  'Table Name & Parameters'.
  PERFORM fcat USING 'H_CODE' 'Hard Code'.
  PERFORM fcat USING 'FILE'   'Input from file '.
  PERFORM fcat USING 'SLECT' 'Definition'.
  PERFORM fcat USING 'T_TABLE' 'Table Name'.
  PERFORM fcat USING 'T_FIELD' 'Field Name'.
  PERFORM fcat USING 'T_COND' 'Condition'.

*  ls_lay-colwidth_optimize = abap_true.
  ls_lay-stylefname        'F_STYLE'.
*  ls_lay-zebra             = abap_true.

* Event for Data Changed
  la_evts-name 'DATA_CHANGED'.
  la_evts-form 'GET_DATA_CHANGED'.
  APPEND la_evts TO lt_evts.
*Show only index 1
  lt_o_file1 lt_o_file.
  DELETE lt_o_file1 WHERE index <> .
  PERFORM call_alv.

  IF sy-subrc <> 0.
* Implement suitable error handling here
  ELSE.
    lv_alv_c 2.
  ENDIF.


*  BREAK-POINT.
  IF sy-ucomm '&IC1'.

  ENDIF.
  IF sy-ucomm '&AC1'.
    lv_qus 'Do you want exit'.
    PERFORM popup_to_confirm.
    IF lv_ans '1'.
      EXIT.
    ENDIF.
  ENDIF.


  CLEAR ls_o_file .
  READ TABLE lt_o_file1 INTO ls_o_file INDEX 1.
  IF ls_o_file-icon IS INITIAL.
    PERFORM get_alv_input.
  ELSE.
    CLEAR ls_o_file .
    READ TABLE lt_o_file1 INTO ls_o_file WITH KEY icon '@0A@'.
    IF sy-subrc 0.
      PERFORM get_alv_input.
    ENDIF.
  ENDIF.



ENDFORM.                    " GET_ALV_INPUT
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm TYPE sy-ucomm
                    rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN '&IC1'.
*      BREAK-POINT.
      CLEAR ls_o_file.
      READ TABLE lt_o_file1 INTO ls_o_file INDEX rs_selfield-tabindex .
      IF ls_o_file IS INITIAL.
      ELSE.
        IF rs_selfield-fieldname 'TABLE'.
          ls_o_file-table abap_true.
          ls_o_file-h_code ''.
          ls_o_file-file   ''.
          ls_o_file-slect ''.
        ELSEIF rs_selfield-fieldname 'H_CODE'.
          ls_o_file-table '' .
          ls_o_file-h_code abap_true.
          ls_o_file-file   ''.
          ls_o_file-slect ls_o_file-value .
        ELSEIF rs_selfield-fieldname 'FILE'.
          ls_o_file-table '' .
          ls_o_file-h_code ''.
          ls_o_file-file   abap_true.
          ls_o_file-slect ''.
        ENDIF.
        DATA lv_var TYPE char100.
        LOOP AT lt_o_file INTO ls_o_file1 WHERE param ls_o_file-param AND field ls_o_file-field.
          index1 sy-tabix .
          index  ls_o_file1-index .
          lv_var ls_o_file1-value.
          ls_o_file1 ls_o_file .
          ls_o_file1-value lv_var.
          ls_o_file1-index index.
*update same data in different index
*        MODIFY lt_o_file1 FROM ls_o_file INDEX  sy-tabix.
          MODIFY lt_o_file FROM ls_o_file1 INDEX  sy-tabix .
        ENDLOOP.
* update based on screen fields
        MODIFY lt_o_file1 FROM ls_o_file INDEX  rs_selfield-tabindex .
*        MODIFY lt_o_file FROM ls_o_file INDEX  rs_selfield-tabindex .
*        PERFORM call_alv.
        PERFORM set_specific_field_attributes.
*sET cURSOR POSITION
*        PERFORM SET_CURSOR USING rs_selfield-tabindex.

        PERFORM get_data_changed .
      ENDIF.
    WHEN '&AC1'.
      DATA ans VALUE 1.
      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          titlebar       'Exit '
          text_question  'Do you want exit'"text_question
        IMPORTING
          answer         ans
        EXCEPTIONS
          text_not_found 1
          OTHERS         2.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      IF ans 1.
        EXIT.
      ENDIF.
*    ENDIF.
    WHEN 'SAVE'.
*      gv_testrun = abap_true.
*      PERFORM process_UOM USING gv_testrun.
*      PERFORM display_log.
    WHEN 'BACK1' OR 'EXIT' OR 'LEAVE'.
*      LEAVE TO SCREEN 0.
    WHEN '&ONT'.
***  *Getting Screen Value to intenal table
**      DATA: gd_repid LIKE sy-repid, "Exists
**            ref_grid TYPE REF TO cl_gui_alv_grid.
**      IF ref_grid IS INITIAL.
**        CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
**          IMPORTING
**            e_grid = ref_grid.
**      ENDIF.
**      IF NOT ref_grid IS INITIAL.
**        CALL METHOD ref_grid->check_changed_data .
**      ENDIF.

*DATA : ROW_NO TYPE lvc_s_row.
**set the focus of cursor in ALV
*ROW_NO = rs_selfield-tabindex .
*CALL METHOD ref_grid->set_current_cell_via_id
*EXPORTING
*is_row_no = rs_selfield-tabindex. "row number where you want to focus the cursor

  ENDCASE..

*  rs_selfield-refresh = 'X'.
*  rs_selfield-tabindex = rs_selfield-tabindex.
  CLEAR sy-ucomm .
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_3261   text
*      -->P_3262   text
*---------------------------------------------------------------------*
FORM fcat  USING field desc.
  ls_fcat-fieldname field .
  ls_fcat-scrtext_m desc .
  IF field 'TABLE' OR field 'H_CODE' OR field ='FILE' .
    ls_fcat-checkbox abap_true.
    ls_fcat-edit     abap_true.
    ls_fcat-hotspot  abap_true.
  ENDIF.
  IF field 'SLECT' OR
     field 'T_TABLE' OR
     field 'T_FIELD' OR
     field 'T_COND' .
    ls_fcat-edit     abap_true.
    ls_fcat-intlen 25.
*        ls_fcat-hotspot  = abap_true.
  ENDIF.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
ENDFORM.                    " FCAT
*&---------------------------------------------------------------------*
*&      Form  CALL_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      is_layout_lvc            ls_lay
      it_fieldcat_lvc          lt_fcat
      i_callback_program       sy-repid
      i_callback_user_command  'USER_COMMAND'
*     IT_EVENTS                = LT_EVTS
*     I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      i_screen_start_column    10
      i_screen_start_line      10
      i_screen_end_column      130
      i_screen_end_line        30
*     i_save                   = 'X'
    TABLES
      t_outtab                 lt_o_file1
    EXCEPTIONS
      program_error            1
      OTHERS                   2.


ENDFORM.                    " CALL_ALV
*&---------------------------------------------------------------------*
*&      Form  SET_SPECIFIC_FIELD_ATTRIBUTES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_specific_field_attributes .


* Populate style variable (FIELD_STYLE) with style properties
*
* The NETPR field/column has been set to editable in the fieldcatalog...
* The following code sets it to be disabled(display only) if 'NETPR'
* is gt than 10.
  LOOP AT lt_o_file1 INTO ls_o_file.
    IF ls_o_file-h_code abap_true ."OR ls_o_file-file = abap_true.
      ls_stylerow-fieldname 'T_TABLE' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      CLEAR ls_o_file-f_style.                                       "set field to disabled
      APPEND ls_stylerow  TO ls_o_file-f_style.
      CLEAR ls_stylerow.

      ls_stylerow-fieldname 'T_FIELD' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'T_COND' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'SLECT' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_enabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      MODIFY lt_o_file1 FROM ls_o_file.
*      MODIFY lt_o_file FROM ls_o_file.
      CLEAR ls_o_file.
    ELSEIF ls_o_file-table abap_true.
      ls_stylerow-fieldname 'T_TABLE' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_enabled.
      CLEAR ls_o_file-f_style.                                       "set field to disabled
      APPEND ls_stylerow  TO ls_o_file-f_style.
      CLEAR ls_stylerow.

      ls_stylerow-fieldname 'T_FIELD' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_enabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'T_COND' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_enabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'SLECT' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      MODIFY lt_o_file1 FROM ls_o_file.
*      MODIFY lt_o_file FROM ls_o_file.
      CLEAR ls_o_file.
    ELSEIF  ls_o_file-file abap_true.
      ls_stylerow-fieldname 'T_TABLE' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      CLEAR ls_o_file-f_style.                                       "set field to disabled
      APPEND ls_stylerow  TO ls_o_file-f_style.
      CLEAR ls_stylerow.

      ls_stylerow-fieldname 'T_FIELD' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'T_COND' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      ls_stylerow-fieldname 'SLECT' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
      "set field to disabled
      INSERT ls_stylerow INTO TABLE ls_o_file-f_style .
      MODIFY lt_o_file1 FROM ls_o_file.
*      MODIFY lt_o_file FROM ls_o_file.
      CLEAR ls_o_file.
    ENDIF .
  ENDLOOP.
ENDFORM.                    " SET_SPECIFIC_FIELD_ATTRIBUTES
*&---------------------------------------------------------------------*
*&      Form  CHECK_FIELDNAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_fieldname .
  READ TABLE lt_table_s INTO ls_table_s WITH KEY fieldname ls_table_s-fieldname  .
  IF sy-subrc 0.
*         ls_table_s-scrtext_m  = ls_parame-t_t_fie  .
    CONCATENATE  ls_parame-param '_' ls_parame-t_t_fie 'X'  INTO ls_table_s-scrtext_m .
    CONCATENATE  ls_parame-param '_' ls_parame-t_field 'X'  INTO ls_table_s-fieldname .

  ENDIF.
ENDFORM.                    " CHECK_FIELDNAME
*&---------------------------------------------------------------------*
*&      Form  get_data_changed
*&---------------------------------------------------------------------*
*       Here we will get the current cell and than add 1 to it to move
*         to next row. Than we will call the method to set the new row
*----------------------------------------------------------------------*
FORM get_data_changed ."USING RR_DATA_CHANGED
*        TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.*
  DATAlo_grid TYPE REF TO cl_gui_alv_grid.
*
  DATAle_row     TYPE i,
        le_value   TYPE c,
        le_col     TYPE i,
        les_row_id TYPE lvc_s_row,
        les_col_id TYPE lvc_s_col,
        les_row_no TYPE lvc_s_roid.
* Get the ALV Object reference
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid lo_grid.
* Get the Current Cell
  CALL METHOD lo_grid->get_current_cell
    IMPORTING
      e_row     le_row
      e_value   le_value
      e_col     le_col
      es_row_id les_row_id
      es_col_id les_col_id
      es_row_no les_row_no.
*Get Screen Update
  CALL METHOD lo_grid->refresh_table_display.
* Set Cursor
  CALL METHOD lo_grid->set_current_cell_via_id
    EXPORTING
      is_row_id    les_row_id
      is_column_id les_col_id
      is_row_no    les_row_no.
ENDFORM.                    "get_data_changed
*&---------------------------------------------------------------------*
*&      Form  POPUP_TO_CONFIRM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM popup_to_confirm .
  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      titlebar       'Confirmation Message'
      text_question  lv_qus "text_question
    IMPORTING
      answer         lv_ans
    EXCEPTIONS
      text_not_found 1
      OTHERS         2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " POPUP_TO_CONFIRM
*&---------------------------------------------------------------------*
*&      Form  GET_PROGRAM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_program .
  DATA :rs38m_programm TYPE trdir-name,
      mode TYPE c,
      l_edit TYPE c,
      trdir TYPE trdir .

  CALL FUNCTION 'RS_EDTR_ATTR_ADD'
    EXPORTING
      program_name          p_prgm
      activate_immediately  'X'
    IMPORTING
      leaved_with_mode      mode
      leave_to_editor       l_edit
    CHANGING
      program_trdir         trdir
    EXCEPTIONS
      program_name_missing  1
      program_exists        2
      wrong_parameter_value 3
      OTHERS                4.
  IF sy-subrc NE 0.
*    IF sy-msgty NE space.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*    ENDIF.
    lv_qus 'Program name adlready available do you want continue'.
    PERFORM popup_to_confirm.
    IF lv_ans '1'.
*****************Delete Progarm----------------------------------------*
      DATA:  l_devclass LIKE tadir-devclass.

      CALL FUNCTION 'RS_PROGRAM_GET_DEVCLASS'
        EXPORTING
          progname p_prgm
        IMPORTING
          devclass l_devclass
        EXCEPTIONS
          OTHERS.
      CALL FUNCTION 'RS_DELETE_PROGRAM'
        EXPORTING
          program            p_prgm
          suppress_popup     ' '
          tadir_devclass     l_devclass
        EXCEPTIONS
          enqueue_lock       1
          object_not_found   2
          permission_failure 3
          reject_deletion    5     "abbr. in popup
          OTHERS             4.
*  p_subrc = sy-subrc.
*  IF sy-msgno = '055'. p_subrc = 1. ENDIF.  "progr. gesperrt
*  IF p_subrc < 5.
*    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
*            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*  ENDIF.

*****************Delete Progarm----------------------------------------*
*      PERFORM create_code_with_se38.

*  DO 5 TIMES.
*    CLEAR wa_line .
*    APPEND wa_line TO it_line.
*  ENDDO.
*  it_line = lt_final_code_reduced .
*       INSERT REPORT p_prgm  FROM it_line.
*         SET PARAMETER ID 'RID' FIELD p_prgm .
*         CALL TRANSACTION 'SE38'.
**         skip TO LINE 50000 .
*    ELSE.
      CALL SELECTION-SCREEN 2007 STARTING AT  10
                                 ENDING AT   75 15.
      PERFORM get_program.
    ENDIF.
*  ELSE.
** insert report *******************************************************
*  DO 5 TIMES.
*    CLEAR wa_line .
*    APPEND wa_line TO it_line.
*  ENDDO.
*  it_line = lt_final_code_reduced .
*  INSERT REPORT p_prgm  FROM it_line.
**    PERFORM create_code_with_se38.
*  SET PARAMETER ID 'RID' FIELD p_prgm .
*  CALL TRANSACTION 'SE38'.
  ENDIF.
ENDFORM.                    " GET_PROGRAM
*&---------------------------------------------------------------------*
*&      Form  CREATE_CODE_WITH_SE38
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_code_with_se38 .
  REFRESH it_line.
  DO TIMES.
    CLEAR wa_line .
    APPEND wa_line TO it_line.
  ENDDO.
  it_line lt_final_code_reduced .

  PERFORM bdc_dynpro      USING 'SAPLWBABAP' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RS38M-PROGRAMM'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=CHAP'."'=NEW'.
  PERFORM bdc_field       USING 'RS38M-PROGRAMM'
                                  p_prgm "'zram_new007'.
  PERFORM bdc_field       USING 'RS38M-FUNC_EDIT'
                                'X'.
  PERFORM bdc_dynpro      USING 'SAPLS38E' '0400'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=ED_ENTER'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RSTXP-TDLINE(02)'.
  PERFORM bdc_field       USING 'RSTXP-TDFIRST'
                                '   1'.
  CLEAR lv_str.
  CONCATENATE 'REPORT ' p_prgm '.' INTO lv_str SEPARATED BY  space.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(01)'
                                 lv_str.
*                              'REPORT  ZRAM_NEW007.'.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(02)'
                                ''.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(03)'
                                ''.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(04)'
                                ''.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(05)'
                                ''.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(06)'
                                ''.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(07)'
                                ''.
  PERFORM bdc_field       USING 'RSTXP-TDLINE(09)'
                                ''.
  PERFORM bdc_dynpro      USING 'SAPLS38E' '0400'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=ED_ENTER'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RSTXP-TDLINE(10)'.
  PERFORM bdc_field       USING 'RSTXP-TDFIRST'
                                '   1'.
  CLEAR bdc_count.
  count .
  bdc_count 2.
*bdc_edi_count = 1.
  bdc_edi_count 2.
  LOOP AT it_line INTO   wa_line.

    PERFORM bdc_dynpro      USING 'SAPLS38E' '0400'.

    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=ED_ENTER'.
    CONCATENATE 'RSTXP-TDLINE('count')' INTO data.
    PERFORM bdc_field       USING 'BDC_CURSOR'

                                   data."'RSTXP-TDLINE('count')'.

    IF bdc_count => 19.

      PERFORM bdc_field       USING 'RSTXP-TDFIRST'
                                     bdc_edi_count.

      bdc_edi_count bdc_edi_count  + .
    ELSE.
      PERFORM bdc_field       USING 'RSTXP-TDFIRST'
                                      '1'.
    ENDIF.
    CONCATENATE 'RSTXP-TDLINE('count')' INTO data.
    PERFORM bdc_field       USING data "'RSTXP-TDLINE('count')'
                                  wa_line.
    IF count 19.
      count  count 1.
    ELSE.
      count   19.
    ENDIF.

    bdc_count bdc_count  + .
  ENDLOOP.

  PERFORM bdc_dynpro      USING 'SAPLS38E' '0400'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=WB_CHECK'.
  CONCATENATE 'RSTXP-TDLINE('count')' INTO data.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                 data."'RSTXP-TDLINE(13)'.
  PERFORM bdc_field       USING 'RSTXP-TDFIRST'
                                '1'.
  PERFORM bdc_dynpro      USING 'SAPLS38E' '0400'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=WB_ACTIVATE'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                 data ." 'RSTXP-TDLINE(13)'.
  PERFORM bdc_field       USING 'RSTXP-TDFIRST'
                                '1'."bdc_count.

  CALL TRANSACTION 'SE38' USING it_bdc MODE 'E' .
  IF sy-subrc 0.
    CLEAR lv_str.
    CONCATENATE 'Report :' p_prgm ' Created Succcessfully' INTO lv_str.
    MESSAGE lv_str TYPE 'I'.
  ENDIF.
ENDFORM.                    " CREATE_CODE_WITH_SE38

*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0090   text
*      -->P_0091   text
*----------------------------------------------------------------------*
FORM bdc_dynpro  USING    value(p_0090)
                          value(p_0091).
  wa_bdc-program p_0090.
  wa_bdc-dynpro p_0091.
  wa_bdc-dynbegin  'X'.
  APPEND wa_bdc TO it_bdc.
  CLEAR wa_bdc.
ENDFORM.                    "BDC_DYNPRO

*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0105   text
*      -->P_0106   text
*----------------------------------------------------------------------*
FORM bdc_field  USING    value(p_0105)
                         value(p_0106).
  wa_bdc-fnam p_0105.
  wa_bdc-fval p_0106.
  CONDENSE wa_bdc-fval.
  APPEND wa_bdc TO it_bdc.
  CLEAR wa_bdc .
ENDFORM.                    "BDC_FIELD
*&---------------------------------------------------------------------*
*&      Form  GET_NON_DUBLICATE_FILED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_non_dublicate_filed .
*  DATA lv_co TYPE c.
*  CLEAR ls_o_file1.
*  READ TABLE lt_o_file2 INTO ls_o_file1 WITH KEY  field = ls_o_file-field.
*  IF sy-subrc = 0.
*    lv_co = lv_count .
*    CONCATENATE ls_o_file-field '_' lv_co INTO ls_o_file-c_field .
*    MODIFY lt_o_file FROM ls_o_file.
*    ls_o_file-field = ls_o_file-c_field.
*    PERFORM get_non_dublicate_filed.
*  ELSE.
  index index .
  DATA count(3TYPE c.
  count index.
  SHIFT count LEFT DELETING LEADING space.
  CONCATENATE ls_o_file-field'_'count INTO  ls_o_file-c_field.
*    APPEND ls_o_file TO lt_o_file2.
  MODIFY lt_o_file FROM ls_o_file INDEX index1.
*  ENDIF.
ENDFORM.                    " GET_NON_DUBLICATE_FILED
*&---------------------------------------------------------------------*
*&      Form  INSERT_PRG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM insert_prg .
  CHECK p_prgm IS NOT INITIAL .
  DO TIMES.
    CLEAR wa_line .
    APPEND wa_line TO it_line.
  ENDDO.
  it_line lt_final_code_reduced .
  INSERT REPORT p_prgm  FROM it_line.
  SET PARAMETER ID 'RID' FIELD p_prgm .
  CALL TRANSACTION 'SE38'.
*         skip TO LINE 50000 .
*    ELSE.
*      CALL SELECTION-SCREEN 2007 STARTING AT  5 10
*                                 ENDING AT   75 15.
*      PERFORM get_program.
*    ENDIF.
*  ELSE.
** insert report *******************************************************
*  DO 5 TIMES.
*    CLEAR wa_line .
*    APPEND wa_line TO it_line.
*  ENDDO.
*  it_line = lt_final_code_reduced .
*  INSERT REPORT p_prgm  FROM it_line.
**    PERFORM create_code_with_se38.
*  SET PARAMETER ID 'RID' FIELD p_prgm .
*  CALL TRANSACTION 'SE38'.
ENDFORM.                    " INSERT_PRG
*&---------------------------------------------------------------------*
*&      Form  GET_DECLARATION_PART
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_declaration_part .
  CLEAR lv_source_var.
  PERFORM write_to_final.
  CONCATENATE 'report'
           p_prgm
           INTO lv_source_var SEPARATED BY space.
  PERFORM write_to_final.
  lv_source_var =     '       no standard page heading line-size 255.'..
  PERFORM write_to_final.CLEAR lv_source_var.
  PERFORM write_to_final.
  PERFORM write_to_final.
  lv_source_var 'TYPES : BEGIN OF LTS_FILE,'.
  PERFORM write_to_final.
  IF p_file abap_true.
    CLEAR index1,index.
    LOOP AT lt_o_file INTO ls_o_file WHERE file abap_true.
      index1 sy-tabix.
      CLEAR lv_count.
      IF ls_o_file-file abap_true AND ls_o_file-index 1.
        PERFORM get_non_dublicate_filed.

        CLEAR lv_source_var .
        IF ls_o_file-lenght IS INITIAL.
          ls_o_file-lenght 1.
        ENDIF.
        SHIFT ls_o_file-lenght LEFT DELETING LEADING '0'.
        SHIFT ls_o_file-lenght LEFT DELETING LEADING space.
*      CONCATENATE ls_parame-field_f'_'ls_o_file-field'('ls_o_file-lenght')'   '    TYPE C,' INTO lv_source_var.
        IF ls_o_file-c_field IS INITIAL.
        ELSE.
          ls_o_file-field ls_o_file-c_field.
        ENDIF.
*space adjusment
        lv_source_var1 '11111111'.
        DO TIMES.
*         CONCATENATE '' lv_source_var1 INTO lv_source_var1 SEPARATED BY space.
          REPLACE '1' WITH space INTO lv_source_var1.
        ENDDO.
        CONCATENATE lv_source_var1 ls_o_file-field'('ls_o_file-lenght'),' INTO lv_source_var."   '    TYPE C,'
        REPLACE '1' WITH space INTO lv_source_var.
        PERFORM write_to_final.
      ENDIF.
      CLEAR ls_o_file.
    ENDLOOP.
  ELSE.
    LOOP AT lt_parame INTO ls_parame.
      CLEAR lv_source_var .
      IF ls_parame-v_f_le IS INITIAL.
        ls_parame-v_f_le 1.
      ENDIF.
      SHIFT ls_parame-v_f_le LEFT DELETING LEADING '0'.
      SHIFT ls_parame-v_f_le LEFT DELETING LEADING space.
      CONCATENATE ls_parame-field_f'_'ls_parame-t_field'('ls_parame-v_f_le')'   '    TYPE C,' INTO lv_source_var.
      PERFORM write_to_final.
    ENDLOOP.

  ENDIF.
  lv_source_var '       END OF LTS_FILE.'.
  PERFORM write_to_final.
  CLEAR lv_source_var.
  PERFORM write_to_final.
  lv_source_var 'Data: lt_file type table of lts_file.'.
  PERFORM write_to_final.
  lv_source_var 'Data: ls_file type ltS_file.      '.
  PERFORM write_to_final.
  CLEAR lv_source_var.
  PERFORM write_to_final.

  CLEAR lv_source_var.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var 'SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.'.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var 'PARAMETERS : file TYPE  rlgrap-filename OBLIGATORY.'.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var 'SELECTION-SCREEN END OF BLOCK b1.'.
  APPEND lv_source_var TO lt_source_var.
  CLEAR lv_source_var.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var 'AT SELECTION-SCREEN ON VALUE-REQUEST FOR file.'.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var 'PERFORM file_f4_help.'.
  APPEND lv_source_var TO lt_source_var.
  CLEAR lv_source_var.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var '*---------------------------*&' .
  APPEND lv_source_var TO lt_source_var.
  lv_source_var '*START-OF-SELECTION'.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var '*---------------------------*&' .
  APPEND lv_source_var TO lt_source_var.
  CLEAR lv_source_var.
  APPEND lv_source_var TO lt_source_var.
  lv_source_var 'PERFORM  UPLOAD_FILE.'.
  APPEND lv_source_var TO lt_source_var.
  CLEAR lv_source_var.
  APPEND lv_source_var TO lt_source_var.
* Adding F4_help subroutine.
*  ENDIF.
  PERFORM subroutines.
ENDFORM.                    " GET_DECLARATION_PART