Tuesday, 18 February 2020

Update Order Master to Complete BUCO


Sample Program Update Order BUCO :



REPORT  Z_CS_DWN_IW32 .

TABLES: AUFK,JEST.
*        MARC,MVKE,MARA,KLAH,CABN ,
*        A100,KONP,SSCRFIELDS,A902,A604,A614,KONM,A305,MAST.

TYPE-POOLS: SLIS.

DATA : NO(2) TYPE P.

DATA: it_folder   LIKE STANDARD TABLE OF sdokpath,
      it_file     LIKE STANDARD TABLE OF sdokpath,
      it_fol_fil  LIKE STANDARD TABLE OF sdokpath,
      wa_fol_fil  LIKE sdokpath,
      file_count  TYPE i,
      dir_count   TYPE i.

DATA : BEGIN OF it_join_fields OCCURS 0,
         field_name(20),
       END OF it_join_fields.

DATA : BEGIN OF it_data OCCURS 0,
         AUFNR(018),
         LINE(100),
         AUART(010),
      END OF it_data.

TYPES : BEGIN OF TY_ORDO,
          AUFNR(18)," TYPE AUFK-AUFNR,
          OBJNR TYPE OBJNR,
          AUART LIKE AUFK-AUART,
          STAT TYPE JEST-STAT,
          LINE  LIKE  BSVX-STTXT,
          USER_LINE  LIKE  BSVX-STTXT,

          STATUS(60),
        END OF TY_ORDO.

DATA :IT_ORDO TYPE TABLE OF TY_ORDO,
      WA_ORDO TYPE TY_ORDO.

*----------------------------------------------------------------------*
*   data definition
*----------------------------------------------------------------------*
*       Batchinputdata of single transaction
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
*       messages of call transaction
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
*       error session opened (' ' or 'X')

DATA:  BEGIN OF IT_MESSTAB OCCURS 0 .
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA:  AUFNR TYPE AUFK-AUFNR.
DATA:  MESS(15).
DATA:  L_MSTRING(480) TYPE C.
DATA:  END OF IT_MESSTAB,

*      IT_AUSP TYPE TABLE OF TY_AUSP,
*      WA_AUSP TYPE TY_AUSP,
      TABLE_N TYPE I ,
      T_FLDCAT     TYPE SLIS_T_FIELDCAT_ALV,
      S_FLDCAT     TYPE SLIS_FIELDCAT_ALV,
      T_SORT       TYPE SLIS_T_SORTINFO_ALV," WITH HEADER LINE,
      WA_SORTINFO TYPE SLIS_SORTINFO_ALV,
      X_LAYOUT     TYPE SLIS_LAYOUT_ALV,
      GD_LAYOUT    TYPE LVC_S_LAYO,
      X_PRINT      TYPE SLIS_PRINT_ALV,
      X_VARIANT    TYPE DISVARIANT,
      D_REPID      TYPE SY-REPID,
      CT_TYPE(2) ,
      F_FLDCAT2 TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      G_LAYOUT TYPE SLIS_LAYOUT_ALV,
      GS_FIELDCATALOG TYPE LVC_S_FCAT OCCURS 0,
      GV_FCAT LIKE LINE OF GS_FIELDCATALOG,
      GUS_FIELDCATALOG TYPE LVC_S_FCAT OCCURS 0,
     it_alv_hedr       TYPE TABLE OF slis_listheader
                        INITIAL SIZE 0,          "ALVHEADER
     st_alv_hedr       TYPE slis_listheader,

     st_alv_layt       TYPE slis_layout_alv,         "ALVLEYOUT

     it_alv_fcat       TYPE TABLE OF slis_fieldcat_alv
                               INITIAL SIZE 0,
     st_alv_fcat       TYPE slis_fieldcat_alv,

     it_alv_sort       TYPE TABLE OF slis_sortinfo_alv
                               INITIAL SIZE 0,
     st_alv_sort       TYPE slis_sortinfo_alv,
     st_disvariant     TYPE slis_vari.
DATA:  gd_scftx TYPE smp_dyntxt.   "function key 1 properties

DATA : OK_CODE TYPE SY-UCOMM,
       SAVE_OK LIKE OK_CODE,
       OUTPUT  LIKE OK_CODE.
DATA:
       t_stpo_read like STPO_API02 occurs 0 with header line,
       t_stpo_data like STPO_API02 occurs 0 with header line,
       t_stpo_update like STPO_API03 occurs 0 with header line,
       i_stko LIKE stko_api01," OCCURS 0 WITH HEADER LINE,
       T_STKO LIKE STKO_API02 OCCURS 0 WITH HEADER LINE,
       wrk_date like CSAP_MBOM-DATUV.

DATA: AUFK_LINES TYPE I,
      GD_PERCENT TYPE I.

SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
      S_AUFNR FOR AUFK-AUFNR ,
      S_AUART FOR AUFK-AUART OBLIGATORY,
      S_ERDAT FOR AUFK-ERDAT,
      S_VAPLZ FOR AUFK-VAPLZ.
*SELECTION-SCREEN SKIP 1.
*PARAMETERS : C_TECO AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK BLOCK1.

SELECTION-SCREEN BEGIN OF SCREEN 0100 AS WINDOW TITLE txtblk03.
PARAMETERS:  p_pdirp   TYPE pfeflnamel DEFAULT 'C:\',
             psavep    TYPE string DEFAULT 'Order.XLS'.
SELECTION-SCREEN END OF SCREEN 0100.

*AT SELECTION-SCREEN OUTPUT.
*  PERFORM MODIFY_SCREEN.

*F4 for Getting Directory Path
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pdirp.
  DATA: fname TYPE string.

  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = 'Select Directory'
    CHANGING
      selected_folder      = fname
    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.
  ENDIF.

  p_pdirp = fname.

*F4 for Getting File Path and Name
AT SELECTION-SCREEN ON VALUE-REQUEST FOR psavep.

  DATA: filename TYPE string,
        path TYPE string.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = 'Select path and file name'
      default_extension    = 'XLS'
    CHANGING
      filename             = filename
      path                 = path
      fullpath             = psavep
    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.
  ENDIF.

INITIALIZATION.
  PERFORM INIT.
  txtblk03 = 'Download File'.
  psavep   = 'Order.XLS'.


START-OF-SELECTION.

  PERFORM FILL_DATA.
  PERFORM VIEW_DATA.
*  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  FILL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FILL_DATA .

  DATA : DG_OBJNR TYPE AUFK-OBJNR.

* Append Data to Itab.
  REFRESH IT_DATA.
  IT_DATA-AUFNR = 'Material Bom'.
  IT_DATA-LINE  = 'System User'.
  IT_DATA-AUART = 'Order Type'.
  APPEND IT_DATA.CLEAR IT_DATA.

*  First Step and .

  REFRESH IT_ORDO.
  SELECT AUFK~AUFNR AUFK~OBJNR AUFK~AUART JEST~STAT
    INTO CORRESPONDING FIELDS OF TABLE IT_ORDO
    FROM AUFK
    INNER JOIN JEST AS JEST ON JEST~OBJNR = AUFK~OBJNR
   WHERE AUFK~AUFNR IN S_AUFNR
     AND AUFK~AUART IN S_AUART
     AND AUFK~ERDAT IN S_ERDAT
     AND AUFK~VAPLZ IN S_VAPLZ
     AND JEST~INACT NE 'X'
     AND JEST~STAT = 'I0046'.

  table_n = 0.
  DESCRIBE TABLE IT_ORDO LINES table_n.
  IF table_n EQ 0.
    CALL FUNCTION 'C14A_POPUP_NO_HITS'.
    STOP.
  ENDIF.

*  SORT IT_ORDO BY AUFNR.
*  DELETE ADJACENT DUPLICATES FROM IT_ORDO COMPARING AUFNR.
*
  LOOP AT IT_ORDO INTO WA_ORDO.

    DG_OBJNR = WA_ORDO-OBJNR.

    CALL FUNCTION 'STATUS_TEXT_EDIT'
      EXPORTING
       FLG_USER_STAT           = 'X'
        OBJNR                   = DG_OBJNR  "WA_OR02-OBJNR
        SPRAS                   = sy-langu
     IMPORTING
*       ANW_STAT_EXISTING       =
*       E_STSMA                 =
       LINE                    =  WA_ORDO-LINE
       USER_LINE               =  WA_ORDO-USER_LINE
*       STONR                   =
*     EXCEPTIONS
*       OBJECT_NOT_FOUND        = 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.

    MODIFY IT_ORDO FROM WA_ORDO.
  ENDLOOP.

*  Change using IW32
  Perform Proses.
*  `WAIT UP TO 30 SECONDS.
  Perform lst_view.


*  SORT IT_ORDO BY ORDONR POSNR.
  LOOP AT IT_ORDO INTO WA_ORDO.
    CONCATENATE '="'  WA_ORDO-AUFNR '"' INTO WA_ORDO-AUFNR.
    MOVE-CORRESPONDING WA_ORDO TO IT_DATA.
    APPEND IT_DATA.
  ENDLOOP.

  SORT IT_ORDO BY AUFNR.
*  SORT IT_DATA BY AUFNR.

ENDFORM.                    " FILL_DATA
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWNLOAD .

  Concatenate p_Pdirp '\' psavep INTO psavep.

  IF IT_DATA[] IS NOT INITIAL.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = psavep " Path and Name of Excel File with Extension .xls
        write_field_separator   = 'X'
*          FILETYPE                      = 'ASC'
      TABLES
        data_tab                = it_data " Internal Table having all Name of Folders and Files
*        fieldnames              = it_join_fields
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21
        OTHERS                  = 22.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ELSE.
    MESSAGE: 'No file found in the selected Directory' TYPE 'I'.
  ENDIF.
ENDFORM.                    " DOWNLOAD
*&---------------------------------------------------------------------*
*&      Form  MODIFY_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_SCREEN .
  LOOP AT SCREEN.
    IF screen-name = 'pdirp'.
      screen-input = '0'.
      PSAVEP = 'Material Master.xls'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " MODIFY_SCREEN
*&---------------------------------------------------------------------*
*&      Form  VIEW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VIEW_DATA .

* Display Message Upload.
  PERFORM build_fieldcat.
  PERFORM L_build_layout.
  .
  SORT IT_ORDO BY AUFNR.
  PERFORM View.

ENDFORM.                    " VIEW_DATA
*&---------------------------------------------------------------------*
*&      Form  INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INIT .
  DEFINE f_fldcat.
    clear s_fldcat.
    s_fldcat-fieldname = &1.
    s_fldcat-decimals_out  = &2.
    s_fldcat-seltext_l = &3.
    s_fldcat-outputlen  = &4.
    s_fldcat-just      = &5.
    s_fldcat-no_out    = &6.
    s_fldcat-datatype  = &7.
    s_fldcat-cfieldname = &8.
    s_fldcat-no_zero  = &9.
*    s_fldcat-outputlen  = &10.

    append s_fldcat to t_fldcat.
  END-OF-DEFINITION.
ENDFORM.                    " INIT
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .
*           *  *             1     2  3           4   5  6  7      8  9
  f_fldcat 'AUFNR' '' 'Order' '' 'L' ''  'CHAR' '' '' .
  f_fldcat 'LINE' '' 'System User' '' 'L' ''  'CHAR' '' '' .
  f_fldcat 'AUART' '' 'Order Type' '' 'L' '' 'CHAR' '' ''.
  f_fldcat 'STATUS' '' 'Status' '' 'L' '' 'CHAR' '' ''.
  CLEAR S_FLDCAT.

ENDFORM.                    " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT .
  x_layout-colwidth_optimize  = 'X'.
  x_layout-info_fieldname     = 'LINE_COLOR'.
  x_layout-def_status         = 'X'.
ENDFORM.                    " L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  VIEW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VIEW .
  d_repid = sy-repid.
  Call function 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = d_repid
      i_callback_pf_status_set = 'F_STATUS_SET'
      i_callback_user_command  = 'USER_COMMAND'
      it_fieldcat        = t_fldcat[]
      it_sort            = t_sort[]
      is_layout          = x_layout
*        i_default          = 'X'
        i_save             = 'A'
*        is_variant         = x_variant
*        it_event_exit      = t_event_exit[]
*        is_print           = x_print
    TABLES
      t_outtab           = IT_ORDO[]
    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.                    " VIEW

*&---------------------------------------------------------------------*
*&      Form  f_status_set
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM f_status_set USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALVV'.
ENDFORM.                    "f_status_set

"stat_set
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND  USING p_ucomm    LIKE sy-ucomm
                         rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&DWN'.
      CLEAR: p_pdirp,psavep. .
      CALL SCREEN 0101 STARTING AT 10 05.
  ENDCASE.

ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Module  PF_STATUS  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE PF_STATUS OUTPUT.
  SET PF-STATUS 'Z_ST_ALV'.
ENDMODULE.                 " PF_STATUS  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0101  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0101 OUTPUT.
  SET PF-STATUS 'Z_ST_ALV'.
*  SET TITLEBAR 'xxx'.

  PERFORM MODIFY_SCREEN_101.

ENDMODULE.                 " STATUS_0101  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0101  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0101 INPUT.

  CASE SY-UCOMM.
    WHEN '&EXEC'.
      IF p_pdirp is not INITIAL AND psavep is not initial.
*        PERFORM DOWNLOAD.
        MESSAGE: 'Can Not Download ' TYPE 'S'.
        LEAVE TO SCREEN 0.
      ELSE.
        MESSAGE: 'Folder and File Name Cannot Empty ' TYPE 'S'.
      ENDIF.
    WHEN 'G_FIND'.
      PERFORM FIND.
    WHEN '&CANC'.
      LEAVE TO SCREEN 0 .
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0101  INPUT
*&---------------------------------------------------------------------*
*&      Form  MODIFY_SCREEN_101
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_SCREEN_101 .
  LOOP AT SCREEN.
    IF screen-name = 'OK_CODE'." 'pdirp'.
      screen-input = '0'.
*      P_PDIRP = 'D:\'.
      PSAVEP = 'Order.xls'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " MODIFY_SCREEN_101
*&---------------------------------------------------------------------*
*&      Form  FIND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FIND .
  DATA: fname TYPE string.

  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = 'Select Directory'
    CHANGING
      selected_folder      = fname
    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.
  ENDIF.
  p_pdirp = fname.

ENDFORM.                    " FIND
*&---------------------------------------------------------------------*
*&      Form  PROSES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROSES .
*  DATA: AUFK_LINES TYPE I,
*        GD_PERCENT TYPE I.


  SORT IT_ORDO BY AUFNR.
  DELETE ADJACENT DUPLICATES FROM IT_ORDO COMPARING AUFNR.

*  CHECK SY-SUBRC EQ 0.
  DESCRIBE TABLE IT_ORDO LINES AUFK_LINES.
*  AUFK_LINES = SY-DBCNT.
  CLEAR: GD_PERCENT.


  SORT IT_ORDO BY AUFNR .
  LOOP AT IT_ORDO INTO WA_ORDO.
    PERFORM PROGRESS_BAR USING '         Retrieving data...'(001)
                               SY-TABIX
                               AUFK_LINES.


    perform bdc_dynpro      using 'SAPLCOIH' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'CAUFVD-AUFNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'CAUFVD-AUFNR'
                                  WA_ORDO-AUFNR.
    perform bdc_dynpro      using 'SAPLCOIH' '3000'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=BBAB'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'CAUFVD-KTEXT'.

    perform bdc_dynpro      using 'SAPLCOIH' '3000'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=BU'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'CAUFVD-KTEXT'.
    perform bdc_transaction using 'IW32'.

*    WAIT UP TO 5 SECONDS.

  ENDLOOP.

  MESSAGE '       ' TYPE 'S'.

ENDFORM.                    " PROSES


*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  IF FVAL <> SPACE. "NODATA.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
  ENDIF.
ENDFORM.                    "BDC_FIELD


*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
  DATA: L_MSTRING(480).
  DATA: L_SUBRC LIKE SY-SUBRC.
  REFRESH MESSTAB.
  CALL TRANSACTION TCODE USING BDCDATA
                   MODE  'N' " 'N' "'A' "CTUMODE
                   UPDATE 'L' "'L' "'S' "CUPDATE
                   MESSAGES INTO MESSTAB.

  LOOP AT MESSTAB.
    MESSAGE ID     MESSTAB-MSGID
            TYPE   MESSTAB-MSGTYP
            NUMBER MESSTAB-MSGNR
            INTO L_MSTRING
            WITH MESSTAB-MSGV1
                 MESSTAB-MSGV2
                 MESSTAB-MSGV3
                 MESSTAB-MSGV4.

    IT_MESSTAB-MSGTYP = MESSTAB-MSGTYP.
    IT_MESSTAB-MSGV1 = MESSTAB-MSGV1.
    IT_MESSTAB-MSGV2 = MESSTAB-MSGV2.
    IF MESSTAB-MSGV2 IS NOT INITIAL.
      IT_MESSTAB-MSGV1 = MESSTAB-MSGV2.
    ENDIF.
    IT_MESSTAB-MSGV3 = MESSTAB-MSGV3.
    IT_MESSTAB-MSGV4 = MESSTAB-MSGV4.
    IT_MESSTAB-L_MSTRING = L_MSTRING.

    APPEND IT_MESSTAB .
  ENDLOOP.

  REFRESH BDCDATA.
ENDFORM.                    "BDC_TRANSACTION
*&---------------------------------------------------------------------*
*&      Form  LST_VIEW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM LST_VIEW.
  LOOP AT IT_MESSTAB.
    IT_MESSTAB-AUFNR = IT_MESSTAB-AUFNR.
    IT_MESSTAB-MESS = IT_MESSTAB-L_MSTRING+6(5).
    MODIFY  IT_MESSTAB.
  ENDLOOP.


  SORT IT_MESSTAB BY MESS.
  DELETE IT_MESSTAB WHERE MESS NE 'saved'.
  SORT IT_MESSTAB BY MSGV1.

  SORT IT_ORDO BY AUFNR.
  SORT IT_MESSTAB BY MSGV1.
  IF IT_MESSTAB IS NOT INITIAL.
    LOOP AT IT_ORDO INTO WA_ORDO.
      READ TABLE IT_MESSTAB WITH KEY MSGV1 = WA_ORDO-AUFNR BINARY SEARCH.

      IF SY-SUBRC EQ 0.
        WA_ORDO-STATUS = 'Updated'.
          REPLACE ALL OCCURRENCES OF 'CLSD' IN WA_ORDO-LINE WITH 'TECO'.
      ELSE.
        WA_ORDO-STATUS = 'Not Update'.
      ENDIF.

      MODIFY IT_ORDO FROM WA_ORDO.
    ENDLOOP.

  ENDIF.

*  LOOP AT IT_ORDO INTO WA_ORDO.
*    MOVE-CORRESPONDING WA_ORDO TO WA_MMXX.
*    APPEND WA_MMXX TO IT_MMXX.
*  ENDLOOP.
ENDFORM.                    " LST_VIEW
*&---------------------------------------------------------------------*
*&      Form  PROGRESS_BAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_1177   text
*      -->P_SY_TABIX  text
*      -->P_AUFK_LINES  text
*----------------------------------------------------------------------*
FORM PROGRESS_BAR  USING    P_VALUE
                            P_SY-TABIX
                            P_NLINES.
DATA: W_TEXT(40),
      W_PERCENTAGE TYPE P,
      W_PERCENT_CHAR(3).

  W_PERCENTAGE = ( P_SY-TABIX / P_NLINES ) * 100.
  W_PERCENT_CHAR = W_PERCENTAGE.
  SHIFT W_PERCENT_CHAR LEFT DELETING LEADING ' '.
  CONCATENATE P_VALUE W_PERCENT_CHAR '% Complete'(002) INTO W_TEXT.
* This check needs to be in otherwise when looping around big tables
* SAP will re-display indicator too many times causing report to run
* very slow. (No need to re-display same percentage anyway)
  IF W_PERCENTAGE GT GD_PERCENT OR P_SY-TABIX EQ 1.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        PERCENTAGE = W_PERCENTAGE
        TEXT       = W_TEXT.
    GD_PERCENT = W_PERCENTAGE.
  ENDIF.

ENDFORM.                    " PROGRESS_BAR

Create and Change Inforrecord Condition

Create and Change Infor record Condition Price

  First Process :



Second Process :


Complete Code  :

*----------------------------------------------------------------------*
*        Transaction Code                :
*        Program Name                    : Z_CS_INFO_RECORD
*        SAP Tcode                          :
*        Devlopment class               :
*        Message class                     :
*        Date  of Completion           : 
*----------------------------------------------------------------------*
*        Change Request Number      :
*        Program Description             : Upload and Change Inforecrd
*
************************************************************************
*        Change History
************************************************************************
REPORT Z_CS_INFO_RECORD.

TABLES : EINA,ZTB_MM_INF_LOG,LFA1,MARA,A017,EINE,KONP,MARD.

TYPE-POOLS : slis,icon,vimty,abap.

INCLUDE <icon>.
INCLUDE <symbol>.

*----------------------------------------------------------------------*
*   data definition
*----------------------------------------------------------------------*
*       Batchinputdata of single transaction
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
*       messages of call transaction
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
*       error session opened (' ' or 'X')
DATA:  BEGIN OF IT_MESSTAB OCCURS 0 .
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA:  L_MSTRING(480) TYPE C.
DATA:  END OF IT_MESSTAB.

DATA:   E_GROUP_OPENED.
*       message texts
TABLES: T100,ZTB_CS_INF_LOG.

TYPES : BEGIN OF TY_PRCO,
        LIFNR(10),
        MATNR(18),
        WERKS(4),
        URZLA(3),
        APLFZ(3),
        EKGRP(3),
        NETPR(15),
        WAERS(5),
        DATAB(10),
        DATBI(10),
        NAME1(055),
        AMT TYPE P DECIMALS 2,
        INFNR(10),
        KNUMH TYPE KNUMH,
        PICK(2),
        DATABC(8),
        DATBIC(8),
        MEINS TYPE MEINS,
        MSGV1(15),
        ERROR(100),
        MSGE(480),
        TRF_LIGHT(1),
        STATUS(1),
        END OF TY_PRCO.

TYPES : BEGIN OF TY_INFO,
          INFNR type EINA-INFNR,
          LIFNR type EINA-LIFNR,
          NAME1 TYPE NAME1,
          MATNR type EINA-MATNR,
          URZLA type EINA-URZLA,
          WERKS type EINE-WERKS,
          APLFZ type EINE-APLFZ,
          EKGRP type EINE-EKGRP,
          NETPR type P DECIMALS 2,"   NETPR,
          WAERS type EINE-WAERS,
          DATAB type DATAB,
          DATBI type DATBI,
          PEINH type EINE-PEINH,
          BPRME type EINE-BPRME,
          BPUMZ type EINE-BPUMZ,
          BPUMN type EINE-BPUMN,
          MSGE(480),
          TRF_LIGHT(1),
          STATUS(1),
        END OF TY_INFO.

TYPES: BEGIN OF TY_A017,
        KSCHL TYPE A017-KSCHL,
        LIFNR TYPE A017-LIFNR,
        MATNR TYPE A017-MATNR,
        EKORG TYPE A017-EKORG,
        WERKS TYPE A017-WERKS,
        ESOKZ TYPE A017-ESOKZ,
        DATBI TYPE A017-DATBI,
        DATAB TYPE A017-DATAB,
        KNUMH TYPE A017-KNUMH,
        PICKNO(4) TYPE C, "(2)
      END OF TY_A017.

TYPES : BEGIN OF ty_data,
       KSCHL TYPE KSCHL,
       MATNR TYPE MATNR,
       LIFNR TYPE KUNNR,
       KBETR TYPE P DECIMALS 2, "KBETR,
*         KBETR TYPE P DECIMALS 3, "KBETR,

       DATAB TYPE SY-DATUM,
       DATBI TYPE SY-DATUM,
       DATABC(10),
       DATBIC(40),
       KNUMH TYPE KNUMH,
       KBETRN TYPE STRING,
     END OF ty_data.


DATA : IT_A017 TYPE TABLE OF TY_A017,
       WA_A017 TYPE TY_A017.

DATA :IT_DAT TYPE TABLE OF TY_DATA,
       WA_DAT TYPE TY_DATA.

*  New PRCOor
DATA : IT_PRCO TYPE TABLE OF TY_PRCO,
       WA_PRCO TYPE TY_PRCO.
*  Change PRCOor
DATA : IT_INFO TYPE TABLE OF TY_INFO,
       WA_INFO TYPE TY_INFO.

DATA : IT_PRCX TYPE TABLE OF TY_INFO,
       WA_PRCX TYPE TY_INFO.

DATA : LV_FNAME TYPE STRING,
        TABLE_N TYPE I.

DATA: t_fldcat     TYPE slis_t_fieldcat_alv,
      s_fldcat     TYPE slis_fieldcat_alv,
      t_sort       TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
      t_fldcat2     TYPE slis_t_fieldcat_alv,
      s_fldcat2     TYPE slis_fieldcat_alv,
      t_sort2       TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
      wa_sortinfo TYPE slis_sortinfo_alv,
      x_layout     TYPE slis_layout_alv,
      Y_layout     TYPE slis_layout_alv,
      gd_layout    TYPE lvc_s_layo,
      x_print      TYPE slis_print_alv,
      x_variant    TYPE disvariant,
      d_repid      TYPE sy-repid,
      ct_type(2) ,
      g_layout type slis_layout_alv,
      gs_fieldcatalog TYPE lvc_s_fcat OCCURS 0,
      gv_fcat LIKE LINE OF gs_fieldcatalog,
      gus_fieldcatalog TYPE lvc_s_fcat OCCURS 0.

DATA : vf_start_col TYPE i,   "start column
       vf_start_row TYPE i,   "start row
       vf_end_col   TYPE i,   "maximum column
       vf_end_row   TYPE i,   "maximum row
       p_text(20).

DATA: itabb TYPE STANDARD TABLE OF kcde_cells WITH HEADER LINE,
      vf_index TYPE i.

FIELD-SYMBOLS: <fs>.

DATA: tab type table of itab,
      wa_tab like itab.
DATA : cnt type i.
DATA:  p_file TYPE rlgrap-filename.

DATA: var type string,
      len type i,
      var1 type i,
      LST_CHAR(1),
      MSG_TEXT(300).

DATA : CNTR_NO(4) TYPE N,
       LINE_NO(4) TYPE N,
       G_DATAB(10),G_DATBI(10).

SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-003.
PARAMETERS : RB_UP RADIOBUTTON GROUP RB_1 DEFAULT 'X' USER-COMMAND ucom.
PARAMETERS : P_FNAME TYPE IBIPPARMS-PATH .
SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_TMP RADIOBUTTON GROUP RB_1.
PARAMETER  : pdirp   TYPE pfeflnamel DEFAULT 'D:\',
            p_psavep  TYPE string DEFAULT 'Vendor Info Record.XLS'.
SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_DWN RADIOBUTTON GROUP RB_1.
SELECTION-SCREEN END OF BLOCK SEL1.

AT SELECTION-SCREEN OUTPUT.
  PERFORM MODIFY_SCREEN.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
  DATA: PATH LIKE RLGRAP-FILENAME.
  PATH = 'D:\'.
  CALL FUNCTION 'WS_FILENAME_GET'
  EXPORTING
    DEF_FILENAME     = SPACE
    DEF_PATH         = PATH
*    MASK             = ',.xls , .xlsx.'
*      MASK             = ', .txt , .txt.'
    MODE             = 'O'
    TITLE            = 'PC-File-Selection'
  IMPORTING
    FILENAME         = p_fname
  EXCEPTIONS
    INV_WINSYS       = 1
    NO_BATCH         = 2
    SELECTION_CANCEL = 3
    SELECTION_ERROR  = 4
    OTHERS           = 5.

*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pdirp.
  DATA: fname TYPE string.

  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = 'Select Directory'
    CHANGING
      selected_folder      = fname
    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.
  ENDIF.
  pdirp = fname.

INITIALIZATION.
  PERFORM BINT.

START-OF-SELECTION.

  IF RB_TMP = 'X'.
    SUBMIT Z_MM_FOB_TMP WITH p_pdirp EQ pdirp
                            WITH psavep EQ p_psavep
      AND RETURN.
    STOP.
  ENDIF.
*
  IF RB_DWN = 'X'.
    SUBMIT Z_MM_DWN_FOB via SELECTION-SCREEN
    AND RETURN.
    STOP.
  ENDIF.

*  SPLIT data Form Excel
  vf_start_col = '1'.
  vf_start_row = '2'.
  vf_end_col = '60'.
  vf_end_row = '10000'.

  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT' " Function to download data
                                               " from excel
        EXPORTING
          filename                = p_fname
          i_begin_col             = vf_start_col
          i_begin_row             = vf_start_row
          i_end_col               = vf_end_col
          i_end_row               = vf_end_row
        TABLES
          intern                  = itabb "B09
        EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 2
          OTHERS                  = 3.

  IF sy-subrc <> 0.
    MESSAGE i454(0) WITH 'File not found'.
  ENDIF.


  CLEAR: itabb .
  SORT itabb BY row col.
  LOOP AT itabb.
    MOVE : itabb-col TO vf_index.
    ASSIGN COMPONENT vf_index OF STRUCTURE WA_PRCO TO <fs>.
    MOVE : itabb-value TO <fs>.
    AT END OF row.
      APPEND WA_PRCO to IT_PRCO.
      CLEAR WA_PRCO.
    ENDAT.
  ENDLOOP.

  table_n = 0.
  DESCRIBE TABLE IT_PRCO LINES table_n.
  IF table_n EQ 0.
    CALL FUNCTION 'C14A_POPUP_NO_HITS'.
    STOP.
  ENDIF.


  SORT IT_PRCO BY WERKS LIFNR MATNR.
*  Get Vendor Name
  LOOP AT IT_PRCO INTO WA_PRCO.

    TRANSLATE WA_PRCO-MATNR TO UPPER CASE.

    REPLACE ALL OCCURENCES OF ',' IN WA_PRCO-NETPR WITH ``.
    WA_PRCO-AMT = WA_PRCO-NETPR.

    CLEAR LEN.
    LEN = STRLEN( WA_PRCO-LIFNR ).
    IF LEN LT 10.
      IF LEN = 1.
        CONCATENATE '00000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 2.
        CONCATENATE '00000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 3.
        CONCATENATE '0000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 4.
        CONCATENATE '000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 5.
        CONCATENATE '00000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 6.
        CONCATENATE '0000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 7.
        CONCATENATE '000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 8.
        CONCATENATE '00' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ELSEIF LEN = 9.
        CONCATENATE '0' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
      ENDIF.
    ENDIF.

    SELECT SINGLE NAME1 FROM LFA1 INTO WA_PRCO-NAME1
           WHERE LIFNR EQ WA_PRCO-LIFNR.

    SELECT SINGLE MEINS FROM MARA INTO WA_PRCO-MEINS    " sINI
           WHERE MATNR EQ WA_PRCO-MATNR.

    MODIFY  IT_PRCO FROM WA_PRCO .
  ENDLOOP.


**Check for New or exist Material
  LOOP AT IT_PRCO INTO WA_PRCO.

    SELECT SINGLE INFNR
    FROM EINA INTO EINA-INFNR
    WHERE LIFNR EQ WA_PRCO-LIFNR
      AND MATNR EQ WA_PRCO-MATNR.

    IF SY-SUBRC EQ 0.
      WA_PRCO-MSGE = 'Change Info Record'.
      WA_PRCO-STATUS = 'C'.
      WA_PRCO-INFNR = EINA-INFNR.
    ELSE.
      WA_PRCO-MSGE = 'Create New Info Record'.
      WA_PRCO-STATUS = 'N'.
    ENDIF.

**    Plant
*    CLEAR MARD.
*    SELECT SINGLE WERKS FROM MARD INTO MARD-WERKS
*      WHERE MATNR EQ WA_PRCO-MATNR
*        AND WERKS EQ WA_PRCO-WERKS.
*
*    IF SY-SUBRC NE 0.
*      CLEAR WA_PRCO-MSGE .
*      WA_PRCO-TRF_LIGHT = '1'.
*      WA_PRCO-MSGE = 'Plant Does Not Exist'.
*    ENDIF.


*   Currency and Amount
    IF WA_PRCO-WAERS EQ 'IDR'.
      WA_PRCO-AMT = WA_PRCO-AMT / 100.
    ENDIF.

    DATA : AMT TYPE P DECIMALS 2.
    AMT = 0.

    IF WA_PRCO-AMT <= AMT.
      IF WA_PRCO-TRF_LIGHT EQ '1'.
        WA_PRCO-TRF_LIGHT = '1'.
        CONCATENATE WA_PRCO-MSGE 'Amount Can Not less han Zero' INTO WA_PRCO-MSGE SEPARATED BY ','.
      ELSE.
        CLEAR WA_PRCO-MSGE .
        WA_PRCO-TRF_LIGHT = '1'.
        WA_PRCO-MSGE = 'Amount Can Not less han Zero'.
      ENDIF.
    ENDIF.

*  Check Vendor
    CLEAR LFA1.
    SELECT SINGLE LIFNR SPERQ INTO (LFA1-LIFNR,LFA1-SPERQ)
      FROM LFA1
      WHERE LIFNR EQ WA_PRCO-LIFNR.

    IF SY-SUBRC NE 0.
      WA_PRCO-TRF_LIGHT = '1'.
      WA_PRCO-MSGE = 'Vendor Does not Exist'.
    ELSE.
      IF LFA1-SPERQ IS NOT INITIAL.
        WA_PRCO-TRF_LIGHT = '1'.
        WA_PRCO-MSGE = 'Vendor Block'.
      ENDIF.
    ENDIF.

*      Check Material
    SELECT SINGLE MATNR INTO MARA-MATNR
      FROM MARA
      WHERE MATNR EQ WA_PRCO-MATNR.

    IF SY-SUBRC NE 0.
      IF WA_PRCO-TRF_LIGHT = '1'.
        WA_PRCO-TRF_LIGHT = '1'.
        CONCATENATE WA_PRCO-MSGE 'Material Does not Exist' INTO WA_PRCO-MSGE SEPARATED BY ','.
      ELSE.
        WA_PRCO-TRF_LIGHT = '1'.
        WA_PRCO-MSGE = 'Material Does not Exist'.
      ENDIF.
    ELSE.
      IF WA_PRCO-TRF_LIGHT = '1'.
        WA_PRCO-TRF_LIGHT = '1'.
      ELSE.
        WA_PRCO-TRF_LIGHT = '2'.
      ENDIF.
    ENDIF.

*
*    Change Currency amt and Value
    IF WA_PRCO-STATUS = 'C'.
      CLEAR: G_DATAB,G_DATBI.
      CONCATENATE WA_PRCO-DATAB+6(4) WA_PRCO-DATAB+3(2)  WA_PRCO-DATAB(2)  INTO G_DATAB.
      REPLACE ALL OCCURENCES OF '.' IN G_DATAB WITH ``.
      CONDENSE G_DATAB.
      wa_prco-databc = G_DATAB.

      CONCATENATE WA_PRCO-DATBI+6(4) WA_PRCO-DATBI+3(2)  WA_PRCO-DATBI(2)  INTO G_DATBI.
      REPLACE ALL OCCURENCES OF '.' IN G_DATBI WITH ``.
      CONDENSE G_DATBI.
      wa_prco-datbic = G_DATBI.

      SELECT SINGLE DATAB INTO A017-DATAB
        FROM A017
        WHERE LIFNR EQ WA_PRCO-LIFNR
          AND MATNR EQ WA_PRCO-MATNR
          AND DATAB EQ G_DATAB AND DATBI EQ G_DATBI.
*
      IF SY-SUBRC EQ 0.

        SELECT SINGLE WAERS INTO EINE-WAERS
          FROM EINE
        WHERE INFNR EQ WA_PRCO-INFNR.

        IF SY-SUBRC EQ 0.
          WA_PRCO-STATUS = 'W'.
        ENDIF.
      ELSE.
*        WA_PRCO-STATUS = 'W'.
*        WA_PRCO-TRF_LIGHT = '1'.
*        WA_PRCO-MSGE = 'Can Not Change Amount'.
      ENDIF.
    ENDIF.

    MODIFY IT_PRCO FROM WA_PRCO.
  ENDLOOP.

*  Price Condition
  REFRESH IT_A017.
  SORT IT_PRCO BY LIFNR MATNR.
  SELECT  *  FROM a017
    INTO CORRESPONDING FIELDS OF TABLE it_a017
    FOR ALL ENTRIES IN it_prco
    WHERE matnr EQ it_prco-matnr
      AND lifnr EQ it_prco-lifnr
      AND KSCHL = 'PB00'.

*   Add Line Number.
  DATA : l_no(4) TYPE C,
         d_matnr type matnr.
  .
  SORT it_prco BY lifnr matnr datab.
  l_no = 1.
  LOOP AT it_a017 INTO wa_a017.

    if wa_a017-matnr ne d_matnr.
      l_no = 1.
      wa_a017-PICKNO = l_no.
    else.
      l_no  = l_no  + 1.
      wa_a017-PICKNO = l_no.
    endif.
    d_matnr = wa_a017-matnr.
    MODIFY IT_A017 FROM WA_A017.
  ENDLOOP.

*   Update Pick Line
  SORT it_prco BY status lifnr matnr datab.
  LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS NE 'N'.
    READ TABLE it_a017 into wa_a017 WITH  KEY lifnr = wa_prco-lifnr
                                              matnr = wa_prco-matnr
                                              datab = wa_prco-databc BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      wa_prco-pick = wa_a017-pickno.
    ENDIF.
    MODIFY IT_PRCO FROM WA_PRCO.
  ENDLOOP.


*Processing data
  PERFORM FIRST_VIEW_DATA.
*----------------------------------------------------------------------*
*        Start new transaction according to parameters                 *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
  DATA: L_MSTRING(480).
  DATA: L_SUBRC LIKE SY-SUBRC.
  REFRESH MESSTAB.
  CALL TRANSACTION TCODE USING BDCDATA
                   MODE   'N' " 'N' 'A' 'E' "CTUMODE
                   UPDATE  'L' "'S' "CUPDATE
                   MESSAGES INTO MESSTAB.

  LOOP AT MESSTAB.
    MESSAGE ID     MESSTAB-MSGID
            TYPE   MESSTAB-MSGTYP
            NUMBER MESSTAB-MSGNR
            INTO L_MSTRING
            WITH MESSTAB-MSGV1
                 MESSTAB-MSGV2
                 MESSTAB-MSGV3
                 MESSTAB-MSGV4.

    IT_MESSTAB-MSGTYP = MESSTAB-MSGTYP.
    IT_MESSTAB-MSGV1 = MESSTAB-MSGV1.
    IT_MESSTAB-MSGV2 = MESSTAB-MSGV2.
    IF MESSTAB-MSGV2 IS NOT INITIAL.
      IT_MESSTAB-MSGV1 = MESSTAB-MSGV2.
    ENDIF.
    IT_MESSTAB-MSGV3 = MESSTAB-MSGV3.
    IT_MESSTAB-MSGV4 = MESSTAB-MSGV4.
    IT_MESSTAB-L_MSTRING = L_MSTRING.

    APPEND IT_MESSTAB .
  ENDLOOP.
  REFRESH BDCDATA.
ENDFORM.                    "BDC_TRANSACTION

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  IF FVAL <> SPACE. "NODATA.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.
  ENDIF.
ENDFORM.                    "BDC_FIELD

*&---------------------------------------------------------------------*
*&      Form  BINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BINT.
  DEFINE f_fldcat.
    clear s_fldcat.
    s_fldcat-fieldname = &1.
    s_fldcat-decimals_out  = &2.
    s_fldcat-seltext_l = &3.
    s_fldcat-outputlen  = &4.
    s_fldcat-just      = &5.
    s_fldcat-no_out    = &6.
    s_fldcat-datatype  = &7.
    s_fldcat-cfieldname = &8.
    s_fldcat-no_zero  = &9.
    append s_fldcat to t_fldcat.
  END-OF-DEFINITION.

  DEFINE f_fldcat2.
    clear s_fldcat2.
    s_fldcat2-fieldname = &1.
    s_fldcat2-decimals_out  = &2.
    s_fldcat2-seltext_l = &3.
    s_fldcat2-outputlen  = &4.
    s_fldcat2-just      = &5.
    s_fldcat2-no_out    = &6.
    s_fldcat2-datatype  = &7.
    s_fldcat2-cfieldname = &8.
    s_fldcat2-no_zero  = &9.
    append s_fldcat2 to t_fldcat2.
  END-OF-DEFINITION.

ENDFORM.                    " BINT
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .
* *   *   *   *  *             1     2  3           4   5  6  7      8  9
  f_fldcat2 'LIFNR' '' 'Vendor' '' 'L' '' 'CHAR' '' '' .
  f_fldcat2 'NAME1' '' 'Vendor Name' '' 'L' '' 'CHAR' '' '' .
  f_fldcat2 'MATNR' '' 'Material Number' '' 'L' '' 'CHAR' '' ''.
  f_fldcat2 'WERKS' '' 'Plant ' '' 'L' '' 'CHAR' '' ''.
  f_fldcat2 'URZLA' '' 'Country of Origin' '' 'L' '' 'CHAR' '' ''.
  f_fldcat2 'APLFZ' '' 'Planned Deliv. Time' '' 'L' '' 'CHAR' '' ''.
  f_fldcat2 'EKGRP' '' 'Purchasing Group' '' 'L' '' 'CHAR' '' ''.

  f_fldcat2 'NETPR' '' 'Net price Currency Key' '' 'R' '' '' 'WAERS' '' .

*  f_fldcat2 'NETPR' '' 'Net price Currency Key' '' 'R' '' 'DEC' 'WAERS' ''.
  f_fldcat2 'WAERS' '' 'Currency' '' 'L' '' 'CHAR' '' ''.
  f_fldcat2 'DATAB' '' 'Valid From Date' '' 'L' '' 'DATS' '' ''.
  f_fldcat2 'DATBI' '' 'Valid To Date' '' 'L' '' 'DATS' '' ''.
  f_fldcat2 'MSGE' ''  'Status' '' 'L' '' 'CHAR' '' ''.
  CLEAR s_fldcat2.
ENDFORM.                    " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT .

  y_layout-colwidth_optimize  = 'X'.
  y_layout-info_fieldname     = 'LINE_COLOR'.
  y_layout-def_status         = 'X'.
  y_layout-lights_fieldname  = 'TRF_LIGHT'.
  y_layout-lights_tabname    = 'I_LIGHTS'.

ENDFORM.                    " L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY .
  d_repid = sy-repid.
  Call function 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = d_repid
      i_callback_pf_status_set = 'STATUS_SET'
      i_callback_user_command  = 'USR_CMD'
      it_fieldcat        = t_fldcat2[]
      it_sort            = t_sort[]
      is_layout          = y_layout
*        i_default          = 'X'
        i_save             = 'A'
*        is_variant         = x_variant
*        it_event_exit      = t_event_exit[]
*        is_print           = x_print
    TABLES
      t_outtab           = IT_PRCX[] "IT_VENX[]
    EXCEPTIONS
      program_error      = 1
      others             = 2.

  IF sy-subrc eq 0.

*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " DISPLAY


*&---------------------------------------------------------------------*
*&      Form  f_status_set
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM status_set USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALV'.
ENDFORM.                    "f_status_set
*&---------------------------------------------------------------------*
*&      Form  MODIFY_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_SCREEN .
  LOOP AT SCREEN.
    IF RB_UP = 'X' .
      IF screen-name = 'PDIRP' OR  screen-name = 'P_PSAVEP'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR : PDIRP,P_PSAVEP.
    ELSEIF RB_TMP = 'X' .
      IF screen-name = 'P_FNAME'.
        screen-input = '0'.
        P_PSAVEP = 'FOB Price.xls'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR: P_FNAME.
    ELSEIF RB_DWN = 'X'.
      IF screen-name = 'P_FNAME' OR screen-name = 'PDIRP' OR  screen-name = 'P_PSAVEP'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR: PDIRP,P_PSAVEP.
    ELSE.
      IF screen-name = 'PDIRP' OR  screen-name = 'P_PSAVEP'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
      CLEAR: PDIRP,P_PSAVEP.
      CLEAR: P_FNAME.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " MODIFY_SCREEN
*&---------------------------------------------------------------------*
*&      Form  FIRST_VIEW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FIRST_VIEW_DATA .
  PERFORM  build_fieldcat_ist.
  PERFORM  l_build_layout_ist.
  PERFORM  display_ist.
ENDFORM.                    " FIRST_VIEW_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT_IST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT_IST .

  f_fldcat 'LIFNR' '' 'Vendor' '' 'L' '' 'CHAR' '' '' .
  f_fldcat 'NAME1' '' 'Vendor Name' '' 'L' '' 'CHAR' '' '' .
  f_fldcat 'MATNR' ''   'Material Number' '' 'L' '' 'CHAR' '' ''.
  f_fldcat 'WERKS' ''  'Plant ' '' 'L' '' 'CHAR' '' ''.
  f_fldcat 'URZLA' ''  'Country of Origin' '' 'L' '' 'CHAR' '' ''.
  f_fldcat 'APLFZ' ''  'Planned Deliv. Time' '' 'L' '' 'CHAR' '' ''.
  f_fldcat 'EKGRP' ''  'Purchasing Group' '' 'L' '' 'CHAR' '' ''.
  f_fldcat 'AMT' '' 'Net price Currency Key' '' 'R' '' 'CURR' 'WAERS' '' .
  f_fldcat 'WAERS' ''  'Currency' '' 'L' '' 'CHAR' '' ''.
  f_fldcat 'DATAB' ''  'Valid From Date' '' 'L' '' 'DATS' '' ''.
  f_fldcat 'DATBI' ''  'Valid To Date' '' 'L' '' 'DATS' '' ''.
  f_fldcat 'MSGE' ''   'Status' '' 'L' '' 'CHAR' '' ''.
  CLEAR S_FLDCAT.

ENDFORM.                    " BUILD_FIELDCAT_IST
*&---------------------------------------------------------------------*
*&      Form  L_BUILD_LAYOUT_IST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT_IST .
  x_layout-colwidth_optimize  = 'X'.
  x_layout-info_fieldname     = 'LINE_COLOR'.
  X_layout-def_status         = 'X'.
  X_layout-lights_fieldname  = 'TRF_LIGHT'.
  X_layout-lights_tabname    = 'I_LIGHTS'.
ENDFORM.                    " L_BUILD_LAYOUT_IST
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_IST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_IST .
  d_repid = sy-repid.
  Call function 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = d_repid
      i_callback_pf_status_set = 'STAT_SET'
      i_callback_user_command  = 'USER_COMMAND'
      it_fieldcat              = t_fldcat[]
      it_sort                  = t_sort[]
      is_layout                = x_layout
*      i_default                = ''
      i_save                   = 'A'
    TABLES
      t_outtab                 = IT_PRCO[]
    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_IST

*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND  USING p_ucomm    LIKE sy-ucomm
                         rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&PRO'.
      PERFORM PROS_DATA.
      PERFORM END_VIEW_DATA.
    WHEN '&BACK'.
      LEAVE TO SCREEN 0.
    WHEN '&EXIT'.
      LEAVE TO SCREEN 0.
    WHEN '&CNCL'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  f_status_set
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM STAT_SET USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALV2'.
ENDFORM.                    "stat_set
*&---------------------------------------------------------------------*
*&      Form  END_VIEW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM END_VIEW_DATA.
  PERFORM build_fieldcat.
  PERFORM L_build_layout.
  PERFORM Display.
ENDFORM.                    " END_VIEW_DATA
*&---------------------------------------------------------------------*
*&      Form  PROS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROS_DATA.

  CLEAR WA_PRCO.
  SORT IT_PRCO BY STATUS LIFNR MATNR.
*  Create New Vendor
  LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS EQ 'N'    " New Vendor
                                 AND TRF_LIGHT NE '1'.

    perform bdc_dynpro      using 'SAPMM06I' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINE-WERKS'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'EINA-LIFNR'
                                   WA_PRCO-LIFNR.
    perform bdc_field       using 'EINA-MATNR'
                                   WA_PRCO-MATNR.
    perform bdc_field       using 'EINE-EKORG'
                                  '1000'.
    perform bdc_field       using 'EINE-WERKS'
                                   WA_PRCO-WERKS.
    perform bdc_field       using 'RM06I-NORMB'
                                  'X'.
    perform bdc_dynpro      using 'SAPMM06I' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINA-MAHN1'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
*    perform bdc_field       using 'EINA-URZLA'
*                                   WA_PRCO-URZLA.
*    perform bdc_field       using 'EINA-MEINS'
*                                  'UNT'.
*    perform bdc_field       using 'EINA-UMREZ'
*                                  '1'.
*    perform bdc_field       using 'EINA-UMREN'
*                                  '1'.
    perform bdc_dynpro      using 'SAPMM06I' '0102'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINE-NETPR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=KO'.
    perform bdc_field       using 'EINE-APLFZ'
                                   WA_PRCO-APLFZ.
    perform bdc_field       using 'EINE-EKGRP'
                                   WA_PRCO-EKGRP.
    perform bdc_field       using 'EINE-NORBM'
                                  '1'.
*    perform bdc_field       using 'EINE-BSTAE'
*                                  '0004'.
    perform bdc_field       using 'EINE-IPRKZ'
                                  'D'.
    perform bdc_field       using 'EINE-NETPR'
                                   WA_PRCO-NETPR.
    perform bdc_field       using 'EINE-WAERS'
                                   WA_PRCO-WAERS.
    perform bdc_field       using 'EINE-PEINH'
                                  '1'.
*    perform bdc_field       using 'EINE-BPRME'
*                                  'PC'.
    perform bdc_field       using 'EINE-BPRME'
                                   EINE-BPRME. "'AU'. "WA_PRCO-MEINS.
    perform bdc_field       using 'EINE-BPUMZ'
                                  '1'.
    perform bdc_field       using 'EINE-BPUMN'
                                  '1'.
    perform bdc_dynpro      using 'SAPMV13A' '0201'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RV13A-DATAB'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RV13A-DATAB'
                                   WA_PRCO-DATAB.
    perform bdc_field       using 'RV13A-DATBI'
                                   WA_PRCO-DATBI.
    perform bdc_dynpro      using 'SAPMV13A' '0201'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RV13A-DATAB'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SICH'.
    perform bdc_transaction using 'ME11'.
  ENDLOOP.


**  ********************************************
**  Change Vendor Info Record
  LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS EQ 'C'
                                 AND TRF_LIGHT NE '1'.

    perform bdc_dynpro      using 'SAPMM06I' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINA-LIFNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'EINA-LIFNR'
                                   WA_PRCO-LIFNR.
    perform bdc_field       using 'EINA-MATNR'
                                   WA_PRCO-MATNR.
    perform bdc_field       using 'EINE-EKORG'
                                  '1000'.
    perform bdc_field       using 'EINE-WERKS'
                                   WA_PRCO-WERKS.
    perform bdc_field       using 'RM06I-NORMB'
                                  'X'.
    perform bdc_dynpro      using 'SAPMM06I' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINA-MAHN1'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_dynpro      using 'SAPMM06I' '0102'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINE-APLFZ'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=KO'.
*    perform bdc_field       using 'EINE-APLFZ'
*                                   WA_PRCO-APLFZ.
    perform bdc_field       using 'EINE-EKGRP'
                                   WA_PRCO-EKGRP.
    perform bdc_field       using 'EINE-NORBM'
                                  '1'.
*    perform bdc_field       using 'EINE-BSTAE'
*                                  '0004'.
    perform bdc_field       using 'EINE-IPRKZ'
                                  'D'.


    perform bdc_dynpro      using 'SAPLV14A' '0102'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VAKE-DATAB(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=NEWD'.

    perform bdc_dynpro      using 'SAPMV13A' '0201'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'KONP-KBETR(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RV13A-DATAB'
                                   WA_PRCO-DATAB.
    perform bdc_field       using 'RV13A-DATBI'
                                    WA_PRCO-DATBI.
    perform bdc_field       using 'KONP-KBETR(01)'
*                                   WA_PRCO-AMT.
                                   WA_PRCO-NETPR.
    perform bdc_dynpro      using 'SAPMV13A' '0201'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'KONP-KBETR(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SICH'.
    perform bdc_field       using 'RV13A-DATAB'
                                   WA_PRCO-DATAB.
    perform bdc_field       using 'RV13A-DATBI'
                                   WA_PRCO-DATBI.
    perform bdc_field       using 'KONP-KBETR(01)'
*                                   WA_PRCO-AMT.
                                  WA_PRCO-NETPR.
    perform bdc_dynpro      using 'SAPMV13A' '0201'.
    perform bdc_transaction using 'ME12'.
  ENDLOOP.

  DATA: lv_tabix type c length 2,
        lv_postion type string.

*  Change Vendor Info Record
  LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS EQ 'W'
                                 AND TRF_LIGHT NE '1'.

    perform bdc_dynpro      using 'SAPMM06I' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINE-WERKS'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'EINA-LIFNR'
                                    WA_PRCO-LIFNR.
    perform bdc_field       using 'EINA-MATNR'
                                   WA_PRCO-MATNR.
    perform bdc_field       using 'EINE-EKORG'
                                  '1000'.
    perform bdc_field       using 'EINE-WERKS'
                                   WA_PRCO-WERKS.
    perform bdc_field       using 'RM06I-NORMB'
                                  'X'.
    perform bdc_dynpro      using 'SAPMM06I' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'EINA-MAHN1'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=KO'.
    lv_tabix =  wa_prco-pick.
    perform bdc_dynpro      using 'SAPLV14A' '0102'.

    CONCATENATE 'VAKE-DATAB('  lv_tabix ')' into lv_postion.


    perform bdc_field       using 'BDC_CURSOR'
                                  lv_postion.

    perform bdc_field       using 'BDC_OKCODE'
                                  '=PICK'.


    perform bdc_dynpro      using 'SAPMV13A' '0201'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'KONP-KBETR(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RV13A-DATAB'
                                   WA_PRCO-DATAB.
    perform bdc_field       using 'RV13A-DATBI'
                                    WA_PRCO-DATBI.
    perform bdc_field       using 'KONP-KBETR(01)'
                                  WA_PRCO-NETPR.

    perform bdc_dynpro      using 'SAPMV13A' '0201'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'KONP-KBETR(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SICH'.
    perform bdc_field       using 'RV13A-DATAB'
                                   WA_PRCO-DATAB.
    perform bdc_field       using 'RV13A-DATBI'
                                    WA_PRCO-DATBI.
    perform bdc_transaction using 'ME12'.

  ENDLOOP.

  MESSAGE ' ' TYPE 'S'.

*  Process Data
  IF IT_PRCO[] IS NOT INITIAL.
    PERFORM Modify_data.
    PERFORM SAVE_TABLE_LOG.
  ENDIF.

ENDFORM.                    " PROS_DATA
*&---------------------------------------------------------------------*
*&      Form  MODIFY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_DATA .

  SELECT EINA~INFNR  EINA~LIFNR EINA~MATNR EINA~URZLA  EINA~REGIO
         EINA~TELF1  EINA~MEINS  EINA~UMREZ  EINA~UMREN
         EINE~EKORG  EINE~WERKS EINE~APLFZ  EINE~EKGRP
         EINE~NORBM  EINE~IPRKZ  EINE~NETPR  EINE~WAERS
         EINE~PEINH  EINE~BPRME  EINE~BPUMZ  EINE~BPUMN
  INTO CORRESPONDING FIELDS OF TABLE IT_INFO
  FROM EINA
  INNER JOIN EINE AS EINE ON EINE~INFNR = EINA~INFNR
  FOR ALL ENTRIES IN IT_PRCO
  WHERE EINA~LIFNR EQ IT_PRCO-LIFNR
    AND EINA~MATNR EQ IT_PRCO-MATNR.


  SORT IT_PRCO BY WERKS LIFNR MATNR.
  SORT IT_INFO BY WERKS LIFNR MATNR.
  LOOP AT IT_PRCO INTO WA_PRCO.
    READ TABLE IT_INFO INTO WA_INFO WITH KEY LIFNR = WA_PRCO-LIFNR
                                             MATNR = WA_PRCO-MATNR BINARY SEARCH.
    IF SY-SUBRC EQ 0 AND WA_PRCO-TRF_LIGHT NE '1'.
      IF WA_PRCO-STATUS = 'N' .
        PERFORM UPD_AMT.
        WA_PRCO-MSGE  = 'Info Record  Created'.
        WA_PRCO-TRF_LIGHT = 3.
        WA_PRCO-STATUS = 'N'.
*        MOVE-CORRESPONDING WA_INFO TO WA_PRCX.
        MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
      ELSEIF WA_PRCO-STATUS = 'C'.
        PERFORM UPD_AMT.
        WA_PRCO-MSGE  = 'Info Record  Changed'.
        WA_PRCO-TRF_LIGHT = 3.
        WA_INFO-STATUS = 'C'.
*        MOVE-CORRESPONDING WA_INFO TO WA_PRCX.
        MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
      ELSEIF WA_PRCO-STATUS = 'W'.
*        PERFORM UPD_AMT.
        WA_PRCO-MSGE  = 'Info Record  Changed'.
        WA_PRCO-TRF_LIGHT = 3.
        WA_INFO-STATUS = 'C'.
*        MOVE-CORRESPONDING WA_INFO TO WA_PRCX.
        MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
      ENDIF.
    ELSE.
      WA_PRCO-MSGE  = 'Info Record Not Create'.
      WA_PRCO-TRF_LIGHT = 1.
      MODIFY IT_PRCO FROM WA_PRCO.
      MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
    ENDIF.


    REPLACE ALL OCCURRENCES OF '.' IN WA_PRCO-DATAB WITH space.
    CONCATENATE WA_PRCO-DATAB+4(4) WA_PRCO-DATAB+2(2) WA_PRCO-DATAB(2)  INTO WA_PRCO-DATAB.
    WA_PRCX-DATAB = WA_PRCO-DATAB.

    REPLACE ALL OCCURRENCES OF '.' IN WA_PRCO-DATBI WITH space.
    CONCATENATE WA_PRCO-DATBI+4(4) WA_PRCO-DATBI+2(2) WA_PRCO-DATBI(2)  INTO WA_PRCO-DATBI.
    WA_PRCX-DATBI = WA_PRCO-DATBI.

    WA_PRCX-NAME1 = WA_PRCO-NAME1.


*    WA_PRCX-NETPR = WA_PRCX-NETPR / 100.

    APPEND WA_PRCX TO IT_PRCX.
  ENDLOOP.



ENDFORM.                    " MODIFY_DATA


*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USR_CMD USING p_ucomm    LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&BACK'.
      SUBMIT Z_CS_INFO_RECORD via SELECTION-SCREEN.
  ENDCASE.
ENDFORM.                    "USR_CMD
*&---------------------------------------------------------------------*
*&      Form  SAVE_TABLE_LOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SAVE_TABLE_LOG .
 
ENDFORM.                    " SAVE_TABLE_LOG
*&---------------------------------------------------------------------*
*&      Form  UPD_AMT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPD_AMT .

  LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS = 'W'
                                 AND TRF_LIGHT NE '1'.

    CLEAR: G_DATAB,G_DATBI.
    CONCATENATE WA_PRCO-DATAB+6(4) WA_PRCO-DATAB+3(2)  WA_PRCO-DATAB(2)  INTO G_DATAB.
    REPLACE ALL OCCURENCES OF '.' IN G_DATAB WITH ``.
    CONDENSE G_DATAB.

    CONCATENATE WA_PRCO-DATBI+6(4) WA_PRCO-DATBI+3(2)  WA_PRCO-DATBI(2)  INTO G_DATBI.
    REPLACE ALL OCCURENCES OF '.' IN G_DATBI WITH ``.
    CONDENSE G_DATBI.

    SELECT SINGLE KNUMH INTO A017-KNUMH
      FROM A017
      WHERE KSCHL EQ 'PB00'
        AND LIFNR EQ WA_PRCO-LIFNR
        AND MATNR EQ WA_PRCO-MATNR
        AND DATAB EQ WA_PRCO-DATABC. "G_DATAB AND DATBI EQ G_DATBI.

    IF SY-SUBRC EQ 0.
      SELECT SINGLE KBETR FROM KONP INTO KONP-KBETR
        WHERE KNUMH EQ A017-KNUMH
          AND KSCHL EQ 'PB00' .

      WA_PRCO-NETPR = KONP-KBETR.
      WA_PRCO-TRF_LIGHT = '3'.

    ENDIF.

    MODIFY IT_PRCO FROM WA_PRCO.
  ENDLOOP.
  .
ENDFORM.                 

Visitor

Code Syntax Try...Endtry

  Code : Report Try. Parameters  NUMBER  type  I . data  RESULT  type  P  decimals  2 . data  OREF  type  ref  to  CX_ROOT . data  TEXT  typ...