Error in BDC_OPEN_GROUP

Hi,
   For errors , I am creating a session using BDC_OPEN_GROUP.
Before calling the FM, sy-subrc is 1,001
so, its going to others and calling FUNCTION ENQUEUE_BDC_QID.
Its not going inside the FM : BDC_OPEN_GROUP.
Do I have to clear sy-subrc before calling the FM BDC_OPEN_GROUP?

Hi Srinivas:
   below is the code.....
from the beggining it never went inside the FM :BDC_OPEN_GROUP ,since sy-subrc = 1001.
Do i have to clear sy-subrc before calling the FM : BDC_OPEN_GROUP?
BATCH_INPUT_MODE = P_MODE.
  CALL TRANSACTION 'FB08' USING BDCDATA MODE BATCH_INPUT_MODE.
   IF SY-SUBRC NE 0.
   PERFORM ERROR_MESSAGE.
    CONTINUE.
   ENDIF.
FORM ERROR_MESSAGE .
IF V_OPEN = ' '.
P_GROUP = SY-UNAME.
*Open BDC Session.
    CALL FUNCTION 'BDC_OPEN_GROUP'
         EXPORTING
              CLIENT              = SY-MANDT
              GROUP               = P_GROUP
              KEEP                = 'X'
              USER                = SY-UNAME
         EXCEPTIONS
              CLIENT_INVALID      = 1
              DESTINATION_INVALID = 2
              GROUP_INVALID       = 3
              GROUP_IS_LOCKED     = 4
              HOLDDATE_INVALID    = 5
              INTERNAL_ERROR      = 6
              QUEUE_ERROR         = 7
              RUNNING             = 8
              SYSTEM_LOCK_ERROR   = 9
              USER_INVALID        = 10
              OTHERS              = 11.
    IF SY-SUBRC <> 0.
      WRITE :/'Unsuccessful during Open session'.
    ENDIF.
   IF SY-SUBRC = 0.
   V_OPEN = 'X'.
   ENDIF.
  ENDIF.
*Insert into BDC Session
  IF V_OPEN = 'X'.
  INS_COUNT = INS_COUNT + 1.
  CALL FUNCTION 'BDC_INSERT'
       EXPORTING
            TCODE            = 'FB08'
       TABLES
            DYNPROTAB        = BDC_TAB
       EXCEPTIONS
            INTERNAL_ERROR   = 1
            NOT_OPEN         = 2
            QUEUE_ERROR      = 3
            TCODE_INVALID    = 4
            PRINTING_INVALID = 5
            POSTING_INVALID  = 6
            OTHERS           = 7.
  IF SY-SUBRC <> 0.
WRITE :/'Unsuccessful during inserting data into a session'.
  ENDIF.
*Close BDC Session
  CALL FUNCTION 'BDC_CLOSE_GROUP'
       EXCEPTIONS
            NOT_OPEN    = 1
            QUEUE_ERROR = 2
            OTHERS      = 3.
  IF SY-SUBRC <> 0.
   WRITE :/'Unsuccessful during close session'.
  ENDIF.
ENDIF.
ENDFORM.

Similar Messages

  • Error records in Batch Input

    how to get the list of error records from batch input method.

    u can record them using bdcmsgcoll and also in t100 table.
    *&      Form  prepare_bdc_tab
    Prepare BDC Table for updating Copack Purchase Prices
    FORM prepare_bdc_tab .
      REFRESH gv_bdc_tab.
    *MEK1 intial screen
      PERFORM bdc_dynpro      USING 'SAPMV13A' '0100'.
      PERFORM bdc_field       USING 'BDC_CURSOR' 'RV13A-KSCHL'.
      PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
      PERFORM bdc_field       USING 'RV13A-KSCHL' 'PB00'.
      PERFORM bdc_dynpro      USING 'SAPLV14A' '0100'.
      PERFORM bdc_field       USING 'BDC_CURSOR' 'RV130-SELKZ(03)'.
      PERFORM bdc_field       USING 'BDC_OKCODE' '=WEIT'.
      PERFORM bdc_field       USING 'RV130-SELKZ(01)' ''.
      PERFORM bdc_field       USING 'RV130-SELKZ(03)' 'X'.
      PERFORM bdc_dynpro      USING 'SAPMV13A' '1018'.
      PERFORM bdc_field       USING 'BDC_CURSOR' 'RV13A-DATBI(01)'.
      PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
      PERFORM bdc_field       USING 'KOMG-LIFNR' gs_data-lifnr.
      PERFORM bdc_field       USING 'KOMG-MATNR' gs_data-matnr.
      PERFORM bdc_field       USING 'KOMG-EKORG' gs_data-ekorg.
      PERFORM bdc_field       USING 'KOMG-ESOKZ(01)' '0'.
      PERFORM bdc_field       USING 'KONP-KBETR(01)'  gs_data-kbetr.
      PERFORM bdc_field       USING 'KONP-KONWA(01)' 'USD'.
      PERFORM bdc_field       USING 'KONP-KPEIN(01)'  gs_data-peinh.
      PERFORM bdc_field       USING 'RV13A-DATAB(01)' gs_data-datab.
      PERFORM bdc_field       USING 'RV13A-DATBI(01)' gs_data-datbi.
      PERFORM bdc_dynpro      USING 'SAPMV13A' '1018'.
      PERFORM bdc_field       USING 'BDC_CURSOR'  'KOMG-ESOKZ(01)'.
      PERFORM bdc_field       USING 'BDC_OKCODE'  '=SICH'.
    ENDFORM.                    " prepare_bdc_tab
           Start new screen                                              *
    FORM bdc_dynpro USING program dynpro.
      CLEAR:  gs_bdc_tab.
      gs_bdc_tab-program  = program.
      gs_bdc_tab-dynpro   = dynpro.
      gs_bdc_tab-dynbegin = gc_x.
      APPEND gs_bdc_tab TO gv_bdc_tab.
    ENDFORM.                    "bdc_dynpro
           Insert field
    FORM bdc_field USING fnam fval.
      CLEAR:  gs_bdc_tab.
      gs_bdc_tab-fnam = fnam.
      gs_bdc_tab-fval = fval.
      APPEND gs_bdc_tab TO gv_bdc_tab.
    ENDFORM.                    "bdc_field
    *&      Form  call_transaction_mek1
    Call Transaction for updating CoPack Price entries
    FORM call_transaction_mek1 .
    *Local  Data Declaration
      CONSTANTS:lc_e         TYPE c VALUE 'E',
                lc_mek1(4)   TYPE c VALUE 'MEK1',
                lc_mode(1)   TYPE c VALUE 'N',
                lc_update(1) TYPE c VALUE 'U'.
      REFRESH: gv_bdc_msg.
    *Call MEK1 Transaction
      CALL TRANSACTION     lc_mek1
                USING      gv_bdc_tab
                 MODE      lc_mode
               UPDATE      lc_update
        MESSAGES INTO      gv_bdc_msg.
      IF sy-subrc NE 0.
        IF gv_bdc_open_flag IS INITIAL.
          PERFORM bdc_open_group.
          gv_bdc_open_flag = gc_x.
        ENDIF.
        PERFORM bdc_insert_group.
        DELETE gv_bdc_msg WHERE msgtyp NE lc_e.
        REFRESH:gv_bdc_msg,
                gv_bdc_tab.
      ENDIF.
      CLEAR:gs_data.
    ENDFORM.                    " call_transaction_mek1
    *&      Form  bdc_open_group
    Subroutine for Open BDC Group
    FORM bdc_open_group .
      CALL FUNCTION 'BDC_OPEN_GROUP'
        EXPORTING
          client              = sy-mandt
          group               = p_esnm
          user                = sy-uname
        EXCEPTIONS
          client_invalid      = 1
          destination_invalid = 2
          group_invalid       = 3
          group_is_locked     = 4
          holddate_invalid    = 5
          internal_error      = 6
          queue_error         = 7
          running             = 8
          system_lock_error   = 9
          user_invalid        = 10
          OTHERS              = 11.
      IF sy-subrc <> 0.
        WRITE :/ text-040. "Error in BDC_OPEN_GROUP
        EXIT.
      ENDIF.
    ENDFORM.                    " bdc_open_group
    *&      Form  BDC_INSERT_GROUP
    Subroutine for calling BDC_INSERT for inserting BDC Table
    FORM bdc_insert_group .
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          tcode            = 'MEK1'
        TABLES
          dynprotab        = gv_bdc_tab
        EXCEPTIONS
          internal_error   = 1
          not_open         = 2
          queue_error      = 3
          tcode_invalid    = 4
          printing_invalid = 5
          posting_invalid  = 6
          OTHERS           = 7.
      IF sy-subrc <> 0.
        WRITE :/ text-041. "Error in BDC_INSERT
        EXIT.
      ENDIF.
    ENDFORM.                    " BDC_INSERT_GROUP
    *&      Form  BDC_CLOSE_GROUP
    Subroutine for Closeing of BDC group
    FORM bdc_close_group .
      CALL FUNCTION 'BDC_CLOSE_GROUP'
        EXCEPTIONS
          not_open    = 1
          queue_error = 2
          OTHERS      = 3.
      IF sy-subrc <> 0.
        WRITE :/ text-042.         "Error in BDC_CLOSE_GROUP.
        EXIT.
      ENDIF.
    ENDFORM.                    " BDC_CLOSE_GROUP
    if u can see gv_bdc_msg is holding the messages
    hope this helps
    dont go through the code as it is ...it is only part of it
    Message was edited by:
            Durgaprasad Kare

  • Bdc_open_group invalid user name error

    hai ,
    the given below is my bdc programming. while am executing(F8) these program it depicts the message in one dilaog box like as bdc_open_group , user name is invalid. or say this program is correct or not.
    if any error .recover it
    plz resolve this problem.
    REPORT  YSUSBDC5.
    DATA: BDC_TAB LIKE BDCDATA OCCURS 6 WITH HEADER LINE.
    START-OF-SELECTION.
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
       CLIENT                    = SY-MANDT
      DEST                      = FILLER8
       GROUP                     =  'SURENDER'
      HOLDDATE                  = FILLER8
      KEEP                      = FILLER1
      USER                      = FILLER12
      RECORD                    = FILLER1
       PROG                      = SY-CPROG.
    IMPORTING
      QID                       =
    EXCEPTIONS
      CLIENT_INVALID            = 1
      DESTINATION_INVALID       = 2
      GROUP_INVALID             = 3
      GROUP_IS_LOCKED           = 4
      HOLDDATE_INVALID          = 5
      INTERNAL_ERROR            = 6
      QUEUE_ERROR               = 7
      RUNNING                   = 8
      SYSTEM_LOCK_ERROR         = 9
      USER_INVALID              = 10
      OTHERS                    = 11
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    PERFORM FILL_BDC_TAB.
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
      TCODE                  =  'FK02'
      POST_LOCAL             = NOVBLOCAL
      PRINTING               = NOPRINT
      SIMUBATCH              = ' '
      CTUPARAMS              = ' '
      TABLES
        DYNPROTAB              = BDC_TAB.
    EXCEPTIONS
      INTERNAL_ERROR         = 1
      NOT_OPEN               = 2
      QUEUE_ERROR            = 3
      TCODE_INVALID          = 4
      PRINTING_INVALID       = 5
      POSTING_INVALID        = 6
      OTHERS                 = 7
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
      NOT_OPEN          = 1
      QUEUE_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.
    FORM FILL_BDC_TAB.
    REFRESH BDC_TAB.
    PERFORM POPULATE_BDC_TAB USING:
    '1' 'SAPMF02K' '0106',
    ' ' 'RF02K-LIFNR' 'SUREN',
    ' ' 'RF02K_D0110' 'X',
    '1' 'SAPMF02K' '0111',
    ' ' 'LFA1-NAME1' 'SURENDER',
    ' ' 'LFA1-STRAS' '69 abass ali',
    ' ' 'SZA1_D0100-SMTP_ADDR' '[email protected]'.
    ENDFORM.
    FORM POPULATE_BDC_TAB USING FLAG VAR1 VAR2.
    CLEAR BDC_TAB.
    IF FLAG = '1'.
    BDC_TAB-PROGRAM = VAR1.
    BDC_TAB-DYNPRO = VAR2.
    BDC_TAB-DYNBEGIN = 'X'.
    ELSE.
    BDC_TAB-FNAM = VAR1.
    BDC_TAB-FVAL = VAR2.
    ENDIF.
    APPEND BDC_TAB.
    ENDFORM.
    regards
    SURENDER

    Hallo,
    I want to share what happend to me with my bdc Program.
    I was able to create Sessions of Batch input (SM35)  through the Creation Program ZRSFFL0A (writen below) from 29.04.2008 to 21.05.2008. On May 21 I changed a parameter to play an error, since than the proper original programme has never worked.
    Now while I am executing(F8) it shows the message in one dialog box 'BDC_OPEN_GROUP user name is invalid'. I don't know why.
    **During Debugging the program stopped Function SAPLLANG:
    FUNCTION CONVERSION_EXIT_ISOLA_OUTPUT.
    ""Lokale Schnittstelle:
    *"       IMPORTING
    *"             VALUE(INPUT)
    *"       EXPORTING
    *"             VALUE(OUTPUT)
      OUTPUT = SAVE_INPUT(1) = INPUT.
      CHECK SAVE_INPUT(1) NA ' *'.
      SELECT SINGLE * FROM T002 WHERE SPRAS = INPUT.
      CHECK SY-SUBRC = 0.
      OUTPUT = T002-LAISO.
    ENDFUNCTION.
    Original programme
    REPORT zrsffl0a.
    TABLES: apqi, sflight.
    DATA: BEGIN OF BDC_TAB OCCURS 50.
      INCLUDE STRUCTURE BDCDATA.
      DATA END OF BDC_TAB.
      PARAMETERS:
        name LIKE apqi-groupid DEFAULT SY-UNAME,
        carrid LIKE sflight-carrid DEFAULT 'AA',
        connid LIKE sflight-connid DEFAULT '0064',
        plane LIKE sflight-planetype DEFAULT 'A310-200'.
      START-OF-SELECTION.
      WRITE: / 'Top creation of a session BDC',
      sy-mandt, name, sy-uzeit.
      CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING: CLIENT = sy-mandt,
               GROUP = name,
               USER = sy-uname,
               KEEP = 'X'.
      PERFORM GENERATE_BDC_DATA.
      CALL FUNCTION 'BDC_INSERT'
      EXPORTING TCODE = 'ZTCF2'
        TABLES DYNPROTAB = BDC_TAB.
      CALL FUNCTION 'BDC_CLOSE_GROUP'.
      WRITE: / 'End  creation of a session BDC',
      sy-mandt, name, sy-uzeit.
    *&      Form  GENERATE_BDC_DATA
          text
    -->  p1        text
    <--  p2        text
    form GENERATE_BDC_DATA .
    REFRESH BDC_TAB.
    CLEAR BDC_TAB.
    MOVE: 'ZRSFFL03A' TO BDC_TAB-PROGRAM,
          100 TO BDC_TAB-DYNPRO,
          'X' TO BDC_TAB-DYNBEGIN.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    MOVE: NAME TO BDC_TAB-FNAM,
          SY-UNAME TO BDC_TAB-FVAL.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    MOVE: carrid TO BDC_TAB-FNAM,
          'AA' TO BDC_TAB-FVAL.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    MOVE: connid TO BDC_TAB-FNAM,
          '0064' TO BDC_TAB-FVAL.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    MOVE: plane TO BDC_TAB-FNAM,
          'A310-200' TO BDC_TAB-FVAL.
    APPEND BDC_TAB.
    CLEAR BDC_TAB.
    endform.                    " GENERATE_BDC_DATA
    I thank those who will give me suggestions and / or explanations.
    Best regards
    Claudia

  • BDC_OPEN_GROUP ERROR.

    Hii All,
    in my prog,
    session not going into BDC_OPEN_GROUP.
    y its not opening session.
    its closing before opening the session.

    Hi gs,
    1. Check the sy-subrc after the call to the FM.
    2. U will be able to find the error based upon the value of sy-subrc,
       (exception), as available in se37.
    regards,
    amit m.

  • Urgent plz help me.error fixing--full marks given

    Hi..this is regarding error fixing for prgm below in ecc 6.0
    *& Report  ZCLEAREM
    REPORT  ZCLEAREM.
    TABLES: LFA1, LFB1, BSIK.
    PARAMETERS: CLRDATE LIKE BSIK-AUGDT.
    SELECT-OPTIONS:  ALLOCATE FOR BSIK-ZUONR,
                     CLIENT   FOR BSIK-MANDT.
    DATA:  BEGIN OF CLEARING OCCURS 3000,
           LIFNR  LIKE BSIK-LIFNR,
           BUKRS  LIKE BSIK-BUKRS,
           BUDAT  LIKE BSIK-BUDAT,
           ZUONR  LIKE BSIK-ZUONR.
    DATA:  END OF CLEARING.
    DATA: SESSION(12) VALUE 'CLEARVENDORS'.
    DATA: BEGIN OF BDC_TAB OCCURS 10.
            INCLUDE STRUCTURE BDCDATA.
    DATA: END OF BDC_TAB.
    DATA: FROM_DATE(10), TO_DATE(10), COMPANY_CODE LIKE KOST1-BUKRS.
    DATA: CTR(4) TYPE N VALUE 0, HOLD_LIFNR LIKE BSIK-LIFNR.
    DATA: HOLD_BUKRS LIKE BSIK-BUKRS.
    CALL FUNCTION 'BDC_OPEN_GROUP'
         EXPORTING
              CLIENT   = SY-MANDT
              GROUP    = SESSION
              HOLDDATE = '07/01/96'
              USER     = SY-UNAME
              KEEP     = 'X'.
    CONCATENATE: CLRDATE4(2) '/' CLRDATE6(2) '/'
      CLRDATE+0(4) INTO FROM_DATE.
    WRITE : / 'CLEARING DATE USED IS ', CLRDATE.
    START-OF-SELECTION.
    GET BSIK LATE.
      CHECK CLIENT.
      CHECK ALLOCATE.
      IF ( BSIK-QSSHB GT 0 ) AND ( BSIK-AUGBL EQ '          ' ).
        MOVE-CORRESPONDING BSIK TO CLEARING.
        APPEND CLEARING.
      ENDIF.
    END-OF-SELECTION.
      WRITE : / 'SELECTED ', CTR, ' RECORDS FOR CLEARING...'.
      SORT CLEARING BY LIFNR BUKRS BUDAT.
      DELETE ADJACENT DUPLICATES FROM CLEARING COMPARING LIFNR BUKRS.
      LOOP AT CLEARING.
        WRITE : / CLEARING-LIFNR, ' ', CLEARING-BUKRS, ' CLEARED. '.
        PERFORM GENERATE_BDC_DATA.
        CTR = CTR + 1.
        CALL FUNCTION 'BDC_INSERT'
             EXPORTING
                  TCODE     = 'F-44'
             TABLES
                  DYNPROTAB = BDC_TAB.
      ENDLOOP.
      CALL FUNCTION 'BDC_CLOSE_GROUP'.
      WRITE: /'end of generation of bdc session - ', SESSION, SY-MANDT,
             SY-UNAME, SY-UZEIT.
      WRITE: / 'WILL CLEAR A TOTAL OF ', CTR, ' RECORDS.'.
          FORM GENERATE_BDC_DATA                                        *
    FORM GENERATE_BDC_DATA.
      REFRESH BDC_TAB.
      PERFORM DYNPRO USING:
           'X' 'SAPMF05A' '0131',
           '' 'RF05A-AGKON' CLEARING-LIFNR,
           '' 'BKPF-BUKRS'  CLEARING-BUKRS,
           '' 'BKPF-BUDAT'  FROM_DATE,
           '' 'RF05A-XPOS1(2)' 'X',
           '' 'BDC_OKCODE' '/16',
           'X' 'SAPMF05A'  '0731',
           '' 'RF05A-SEL01(1)' CLEARING-ZUONR,
           '' 'BDC_OKCODE' '/16',
    LOOP AT
           'X' 'SAPDF05X' '1102',
           ''  'BDC_OKCODE'  'BU'.
    ENDFORM.
          FORM DYNPRO                                                   *
    -->  DYNBEGIN                                                      *
    -->  NAME                                                          *
    -->  VALUE                                                         *
    FORM DYNPRO USING DYNBEGIN NAME VALUE.
      IF DYNBEGIN = 'X'.
        CLEAR BDC_TAB.
        MOVE: NAME TO BDC_TAB-PROGRAM,
        VALUE TO BDC_TAB-DYNPRO,
        'X' TO BDC_TAB-DYNBEGIN.
        APPEND BDC_TAB.
      ELSE.
        CLEAR BDC_TAB.
        MOVE: NAME TO BDC_TAB-FNAM,
            VALUE TO BDC_TAB-FVAL.
        APPEND BDC_TAB.
      ENDIF.
    ENDFORM.

    In abap editor menu path
    Goto-->Attributes
    here in Logical Database name define KDF.
    It will work.
    regards
    shiba dutta

  • Hi all..very urgent..error fixing..full marks wud be given for the answers.

    Hi guys..facing problem in error fixing.in bdc...prgm is in ECC 6.0..
    prgm is
    *& Report  ZCJI_CNV_POSTGOODSRECEIPT_ALT1
    REPORT  ZCJI_CNV_POSTGOODSRECEIPT_ALT1.
    *REPORT ZCJI_CNV_POSTGOODSRECEIPT_ALT NO STANDARD PAGE HEADING
                      LINE-SIZE 255.
    *Program:  ZCJI_CNV_POSTGOODSRECEIPT_ALT                               *
    *Function: This program is used to carry out GR transaction MB0A for
             CJI import logistics purchase orders. The objective is to
             choose only those purchase orders for which billing has been
             carried out already. Once GR document is posted, the status
             of delivery document items is also updated.
    DATE        AUTHOR      SCR #         CHANGE DESCRIPTION
    11/04/03   Ohm Reddy   BRD # 90      Initial version
                           DEVK928402
    02/25/04   Ohm Reddy                 In BDC session for posting Goods
                           DEVK929329    Receipt document, update document
                                         date with system local date
                                         (SYST-DATLO) rather than with
                                         system date(SYST-DATUM)
    06/23/04   Ohm Reddy                 Post GR only when sales order
                           DEVK931359    item SKU and PO item SKU matches
    03/21/05   Alex Mutia  13829/DEVK934135                              *
                           Phase II modifications:                       *
                           1. Added criteria in the selection screen;    *
                           2. Modified record selection logic;           *
                           3. Added fields in the Control Report;        *
    04/08/05   Alex Mutia  13829/DEVK934262                              *
                           Fixed bug in processing MFRGR field;          *
    04/13/05   Alex Mutia  13829/DEVK934283                              *
                           1.Fixed bug in assigning error record pointers*
                             to part-success part-error POs;             *
                           2.Added SO and SO line item numbers in report;*
                           3.Compressed report to fit in 255 columns;    *
    04/27/05   Alex Mutia  13829/DEVK934384                              *
                           1.Material documents retrieval changed from   *
                             MSEG to EKBE for performance.               *
                           2.Display empty ALV columns when no records   *
                             were selected for processing;               *
    TYPE-POOLS: SLIS.
    DATA:   GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
    DATA:   G_LAYOUT_ALV_SPEC TYPE SLIS_LAYOUT_ALV.
    *INCLUDE ZMMCJI_CNV_POSTGR_BDC2.
    INCLUDE ZCJI_CNV_PGR_DATA_ALT.
    $--"DEVK934135 Begin;-$
    INITIALIZATION.                                  "DEVK934135
      PERFORM INITIALIZE_VENDOR.                     "DEVK934135
      PERFORM INITIALIZE_PRICE.                      "DEVK934135
    $--"DEVK934135 End;---$
    START-OF-SELECTION.
      IF P_LIFNR IS INITIAL.                         "DEVK934135
        PERFORM INITIALIZE_VENDOR.                   "DEVK934135
      ENDIF.                                         "DEVK934135
      IF P_NETPR IS INITIAL.                         "DEVK934135
        PERFORM INITIALIZE_PRICE.                    "DEVK934135
      ENDIF.                                         "DEVK934135
      PERFORM 100_SELECT_DATA.
    END-OF-SELECTION.
    CHECK: g_return_code IS INITIAL.               "DEVK934384
    IF NOT itab[] IS INITIAL.                      "DEVK934384
      IF G_RETURN_CODE IS INITIAL  AND               "DEVK934384
         NOT ITAB[] IS INITIAL.                      "DEVK934384
        PERFORM 200_PROCESS_DATA.
        PERFORM 300_POST_DOCUMENTS.
        PERFORM 399_RETRIEVE_DOCUMENTS.
        PERFORM REORG_ITAB.
        PERFORM BUILD_HEADER_CATALOG.
        PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
        SY_COPY = SYST.
        PERFORM SHOW_TRANSACTION_ERRORS.
      ELSE.                                          "DEVK934384
        PERFORM SHOW_EMPTY_LIST.                     "DEVK934384
      ENDIF.
    *&      Form  SELECT_DATA
    FORM 100_SELECT_DATA.
      PERFORM 110_SELECT_OPEN_PO_QTY.
      CHECK: G_RETURN_CODE IS INITIAL.
      PERFORM 120_SELECT_PO_BILLED_QTY.
    ENDFORM.                    " 100_SELECT_DATA
    *&      Form  110_SELECT_OPEN_PO_QTY
    FORM 110_SELECT_OPEN_PO_QTY.
    $--"DEVK934135 Begin;-$
      SELECT T1~VGBEL
             T1~VGPOS
             T1~VBELN
             T1~POSNR
             T1~MATNR
             T1~LFIMG
             T1~MFRGR
             T2~LIFEX
             T2~LFDAT
             FROM       LIPS AS T1
             INNER JOIN LIKP AS T2
             ON T1MANDT EQ T2MANDT  AND
                T1VBELN EQ T2VBELN
             APPENDING CORRESPONDING FIELDS OF TABLE ITAB_LIPS
             WHERE T1~MANDT EQ SY-MANDT         "client is system client
              AND  T1~VBELN IN S_VBELN          "billing doc in criteria
              AND  T1~VGBEL IN S_EBELN          "po reference in criteria
              AND  T1~PSTYV EQ 'ELN'            "billing item category
              AND  T1~WERKS EQ 'JDC1'           "plant
              AND  T1~MFRGR NE 'C'              "material freight group
              AND  T2~LIFNR EQ  P_LIFNR.        "vendor is param vendor
      LOOP AT ITAB_LIPS.
        ITAB_LIPS-EBELN = ITAB_LIPS-VGBEL.
        ITAB_LIPS-EBELP = ITAB_LIPS-VGPOS.
        ITAB_LIPS-CHARG = ITAB_LIPS-LIFEX.
        ITAB_LIPS-OLDMFRGR
                        = ITAB_LIPS-MFRGR.
        MODIFY ITAB_LIPS.
      ENDLOOP.
      IF ITAB_LIPS[] IS INITIAL.
      MESSAGE i032(zm) WITH text-m11.              "DEVK934384
        G_RETURN_CODE = 'X'.
        EXIT.
      ENDIF.
      SELECT T1~EBELN
             T1~EBELP
             T1~LICHA
             T2~MATNR
             T2~MENGE
             T2~LOEKZ
             T2~ELIKZ
             T2~NETPR
             T3~IHREZ
             FROM       EKET AS T1
             INNER JOIN EKPO AS T2
             ON T1MANDT EQ T2MANDT  AND
                T1EBELN EQ T2EBELN  AND
                T1EBELP EQ T2EBELP
             INNER JOIN EKKO AS T3
             ON T1MANDT EQ T3MANDT  AND
                T1EBELN EQ T3EBELN
             APPENDING CORRESPONDING FIELDS OF TABLE ITAB
             FOR ALL ENTRIES IN ITAB_LIPS
             WHERE T1~MANDT EQ SY-MANDT         "client is system client
              AND  T1~EBELN EQ ITAB_LIPS-EBELN  "po# matches w/ billing
              AND  T3~BSART IN ('YT', 'YN').    "po type
      IF ITAB[] IS INITIAL.
      MESSAGE i032(zm) WITH text-m11.              "DEVK934384
        G_RETURN_CODE = 'X'.
        EXIT.
      ENDIF.
    $--"DEVK934135 End;---$
    delete any duplicate entries in itab table
      SORT ITAB BY EBELN EBELP.
      DELETE ADJACENT DUPLICATES FROM ITAB COMPARING EBELN EBELP.
      LOOP AT ITAB.
        ITAB-RECID = SY-TABIX.
        IF NOT ITAB-IHREZ IS INITIAL.
          WHILE ITAB-IHREZ+0(1) EQ ' '.
            SHIFT ITAB-IHREZ.
          ENDWHILE.
          WHILE ITAB-IHREZ+9(1) EQ ' '.
            SHIFT ITAB-IHREZ RIGHT.
            ITAB-IHREZ+0(1) = '0'.
          ENDWHILE.
        ENDIF.
        MODIFY ITAB.
      ENDLOOP.
    delete  ITAB_LIPS entries that are not there in ITAB
      LOOP AT ITAB_LIPS.
        SY_COPY-TABIX = SY-TABIX.
        CLEAR ITAB.
        READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
                                 EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
        SY_COPY-INDEX = SY-TABIX.
        IF SY-SUBRC NE 0.
          DELETE ITAB_LIPS.
        ELSE.
          ITAB_LIPS-IHREZ = ITAB-IHREZ.
          MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
          ITAB-MFRGR = ITAB_LIPS-MFRGR.
          ITAB-LIFEX = ITAB_LIPS-LIFEX.
          ITAB-OLDMFRGR
                     = ITAB_LIPS-OLDMFRGR.
          MODIFY ITAB      INDEX SY_COPY-INDEX.
        ENDIF.
      ENDLOOP.
    select the goods receipts documents created for the above deliveries
      SELECT EBELN EBELP BELNR GJAHR
                     INTO TABLE ITAB_EKBE FROM EKBE
                                FOR ALL ENTRIES IN ITAB_LIPS
                                WHERE EBELN = ITAB_LIPS-EBELN
                                AND   EBELP = ITAB_LIPS-EBELP.
    select Goods receipt data from MSEG table for the above deliveries
      IF NOT ITAB_EKBE[] IS INITIAL.
        SELECT EBELN EBELP CHARG BWART MENGE MBLNR MJAHR ZEILE
                       INTO TABLE ITAB_MSEG FROM MSEG
                                  FOR ALL ENTRIES IN ITAB_EKBE
                                  WHERE MBLNR = ITAB_EKBE-BELNR
                                  AND   MJAHR = ITAB_EKBE-GJAHR.
      ENDIF.
      SORT ITAB_MSEG BY EBELN EBELP CHARG.
    calculate the GR qty eligible to be posted
      SORT ITAB_LIPS BY EBELN EBELP.
      LOOP AT ITAB_LIPS.
        ITAB_LIPS-POSTQTY = ITAB_LIPS-LFIMG.
        CLEAR ITAB_MSEG.
        LOOP AT ITAB_MSEG WHERE EBELN = ITAB_LIPS-EBELN
                          AND   EBELP = ITAB_LIPS-EBELP
                          AND   CHARG = ITAB_LIPS-CHARG.
          IF ITAB_MSEG-BWART = '101'.
            ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY - ITAB_MSEG-MENGE.
          ELSEIF ITAB_MSEG-BWART = '102'.
            ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY + ITAB_MSEG-MENGE.
          ENDIF.
        ENDLOOP.
        MODIFY ITAB_LIPS.
        CLEAR ITAB_LIPS.
      ENDLOOP.
      LOOP AT ITAB.
        ITAB-RECID = SY-TABIX.
        MODIFY ITAB.
        LOOP AT ITAB_LIPS WHERE EBELN EQ ITAB-EBELN
                           AND  EBELP EQ ITAB-EBELP.
          ITAB_LIPS-RECID = ITAB-RECID.
          MODIFY ITAB_LIPS.
        ENDLOOP.
      ENDLOOP.
    free the memory of unnecessary internal tables
    $--"DEVK934135 Begin;-$
      CLEAR: ITAB_EKBE.
      FREE:  ITAB_EKBE.
    $--"DEVK934135 End;---$
    ENDFORM.                    " 110_SELECT_OPEN_PO_QTY
    *&      Form  120_SELECT_PO_BILLED_QTY
    FORM 120_SELECT_PO_BILLED_QTY.
    $--"DEVK934135 Begin;-$
      SELECT T1~VBELN
             T1~POSNR
             T1~FKIMG
             T1~AUBEL
             T1~AUPOS
             APPENDING CORRESPONDING FIELDS OF TABLE ITAB_VBRP
             FROM       VBRP AS T1
             INNER JOIN VBRK AS T2
             ON T1MANDT EQ T2MANDT  AND
                T1VBELN EQ T2VBELN
             FOR ALL ENTRIES IN ITAB
             WHERE T1~MANDT EQ SY-MANDT         "client is system client
              AND  T1~VBELN EQ ITAB-IHREZ+0(10) "billing doc = your ref.
              AND  T2~FKSTO EQ ' '.             "status NOT cancelled
    Match ITAB-IHREZ <-> ITAB_VBRP-VBELN...
           ITAB-LICHA <-> ITAB_VBRP-POSNR...
      LOOP AT ITAB.
        SY_COPY-TABIX = SY-TABIX.
      Check your reference (IHREZ) field;
        IF ITAB-IHREZ IS INITIAL.                    "your-ref blank
          ITAB-ERRFA = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-E0A.
          APPEND GT_ERROR.
        ELSE.                                        "your-ref NOT blank
          IF ITAB-IHREZ CO ' 0123456789'.            "your-ref numeric
          ENDIF.                                     "your-ref numeric
          IF SY-FDPOS NE 12.                         "your-ref NOT numeric
            ITAB-ERRFA = 'X'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-E0A.
            APPEND GT_ERROR.
          ELSE.                                      "your-ref NOT numeric
          Check PO line item (LICHA) field;
            IF ITAB-LICHA IS INITIAL.                "line item blank
              ITAB-ERRFA = 'X'.
              GT_ERROR-RECID = ITAB-RECID.
              GT_ERROR-ERRTX = TEXT-E01.
              APPEND GT_ERROR.
            ELSE.                                    "line item NOT blank
              IF ITAB-LICHA CO ' 0123456789'.        "line item numeric
              ENDIF.                                 "line item numeric
              IF SY-FDPOS NE 15.                     "line item NOT numeric
                ITAB-ERRFA = 'X'.
                GT_ERROR-RECID = ITAB-RECID.
                GT_ERROR-ERRTX = TEXT-E01.
                APPEND GT_ERROR.
              ELSE.                                  "line item NOT numeric
                SY_COPY-SUBRC = 4.
                READ TABLE ITAB_VBRP
                     WITH KEY VBELN = ITAB-IHREZ+0(10)
                              POSNR = ITAB-LICHA+0(6)    BINARY SEARCH.
                SY_COPY-SUBRC = SY-SUBRC.
                IF SY_COPY-SUBRC NE 0.
                  ITAB-ERRFA = 'X'.
                  GT_ERROR-RECID = ITAB-RECID.
                  GT_ERROR-ERRTX = TEXT-E01.
                  APPEND GT_ERROR.
                ELSE.                                "DEVK934283
                  ITAB-AUBEL = ITAB_VBRP-AUBEL.      "DEVK934283
                  ITAB-AUPOS = ITAB_VBRP-AUPOS.      "DEVK934283
                ENDIF.
              ENDIF.                                 "line item NOT numeric
            ENDIF.                                   "line item blank
          ENDIF.                                     "your-ref NOT numeric
        ENDIF.                                       "your-ref blank
      Check ID - LIFEX;
        IF ITAB-LIFEX EQ ' '.                        "LIFEX is blank
          ITAB-ERRFB = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-ERB.
          APPEND GT_ERROR.
        ELSE.                                        "LIFEX is NOT blank
        Check ID - MFRGR;
          IF ITAB-MFRGR NE 'G'.                      "MFRGR NOT G
            ITAB-ERRFC = 'X'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-ERC.
            APPEND GT_ERROR.
          ENDIF.                                     "MFRGR NOT G
        ENDIF.                                       "LIFEX is blank
      Check PO - Deletion indicator;
        IF ITAB-LOEKZ NE ' '.                        "LOEKZ NOT blank
          ITAB-ERRFD = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-ERD.
          APPEND GT_ERROR.
        ENDIF.                                       "LOEKZ NOT blank
      Check PO - Delivery completed flag;
        IF ITAB-ELIKZ NE ' '.                        "ELIKZ NOT blank
          ITAB-ERRFE = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          GT_ERROR-ERRTX = TEXT-ERE.
          APPEND GT_ERROR.
        ENDIF.                                       "ELIKZ NOT blank
      Check PO - Net price;
        IF ITAB-NETPR LT P_NETPR.                    "price < parameter
          ITAB-ERRFF = 'X'.
          GT_ERROR-RECID = ITAB-RECID.
          CONCATENATE TEXT-ERF
                      G_NETPR
                      TEXT-USD
                      INTO GT_ERROR-ERRTX SEPARATED BY SPACE.
          APPEND GT_ERROR.
        ENDIF.                                       "ELIKZ NOT blank
        IF ITAB-AUPOS EQ '000000'.
          CLEAR: ITAB-AUPOS.
        ENDIF.
        MODIFY ITAB INDEX SY_COPY-TABIX.
      ENDLOOP.
      LOOP AT ITAB.                                  "DEVK934283
        READ TABLE ITAB_LIPS                         "DEVK934283
             WITH KEY VGBEL = ITAB-EBELN             "DEVK934283
                      VGPOS = ITAB-EBELP             "DEVK934283
             BINARY SEARCH.                          "DEVK934283
        SY_COPY-TABIX = SY-TABIX.                    "DEVK934283
        IF SY-SUBRC EQ 0.                            "DEVK934283
          ITAB_LIPS-AUBEL = ITAB-AUBEL.              "DEVK934283
          ITAB_LIPS-AUPOS = ITAB-AUPOS.              "DEVK934283
          MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.      "DEVK934283
        ENDIF.                                       "DEVK934283
      ENDLOOP.                                       "DEVK934283
    Transfer errors from ITAB to ITAB_LIPS;
      LOOP AT ITAB WHERE ERRFA EQ 'X'
                    OR   ERRFB EQ 'X'
                    OR   ERRFC EQ 'X'
                    OR   ERRFD EQ 'X'
                    OR   ERRFE EQ 'X'
                    OR   ERRFF EQ 'X'.
        READ TABLE ITAB_LIPS
             WITH KEY VGBEL = ITAB-EBELN
                      VGPOS = ITAB-EBELP  BINARY SEARCH.
        SY_COPY-TABIX = SY-TABIX.
        IF SY-SUBRC EQ 0.
          ITAB_LIPS-ERRFA    = ITAB-ERRFA.
          ITAB_LIPS-ERRFB    = ITAB-ERRFB.
          ITAB_LIPS-ERRFC    = ITAB-ERRFC.
          ITAB_LIPS-ERRFD    = ITAB-ERRFD.
          ITAB_LIPS-ERRFE    = ITAB-ERRFE.
          ITAB_LIPS-ERRFF    = ITAB-ERRFF.
          ITAB_LIPS-NEWMFRGR = 'E'.
          MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
        ENDIF.
      ENDLOOP.
    $--"DEVK934135 End;---$
    ENDFORM.                    " 120_SELECT_PO_BILLED_QTY
    *&      Form  200_PROCESS_DATA
    FORM 200_PROCESS_DATA.
      PERFORM 210_CONSOLIDATE_DATA.
      PERFORM 220_PROCESS_DATA.
    ENDFORM.                    " 200_PROCESS_DATA
    *&      Form  210_consolidate_data
    FORM 210_CONSOLIDATE_DATA.
    Get the PO item open qty and billed qty into one table
      LOOP AT ITAB.
        CLEAR ITAB_LIPS.
        LOOP AT ITAB_LIPS WHERE EBELN = ITAB-EBELN
                          AND   EBELP = ITAB-EBELP.
         ITAB-IDQTY = ITAB-IDQTY + ITAB_LIPS-POSTQTY.      "inbound delv qty
        ENDLOOP.
        CLEAR ITAB_VBRP.
        LOOP AT ITAB_VBRP WHERE VBELN = ITAB-IHREZ
                          AND   POSNR = ITAB-LICHA.
          ITAB-FKIMG = ITAB-FKIMG + ITAB_VBRP-FKIMG.    "PO item billed qty
        ENDLOOP.
        CLEAR ITAB_MSEG.
        LOOP AT ITAB_MSEG WHERE EBELN = ITAB-EBELN
                          AND   EBELP = ITAB-EBELP.
          IF ITAB_MSEG-BWART = '101'.
           ITAB-GRQTY = ITAB-GRQTY + ITAB_MSEG-MENGE.        "PO item GR qty
          ELSEIF ITAB_MSEG-BWART = '102'.
           ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE.        "PO item GR qty
          ELSEIF ITAB_MSEG-BWART = '122'.            "DEVK934135
           ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE.        "PO item GR qty
          ENDIF.
        ENDLOOP.
        ITAB-RCVQTY = ITAB-FKIMG - ITAB-GRQTY.  "qty billed but not received
    calculate the quantity to be processed for which GRs are to be posted
        IF ITAB-RCVQTY > 0 AND ITAB-RCVQTY > ITAB-IDQTY.
          ITAB-PROCQTY = ITAB-IDQTY.
        ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY < ITAB-IDQTY.
          ITAB-PROCQTY = ITAB-RCVQTY.
        ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY = ITAB-IDQTY.
          ITAB-PROCQTY = ITAB-IDQTY.
        ENDIF.
        MODIFY ITAB.
        CLEAR ITAB.
      ENDLOOP.
    free the memory of unnecessary internal tables
    $--"DEVK934135 Begin;-$
      CLEAR: ITAB_MSEG.
      FREE:  ITAB_MSEG.
    $--"DEVK934135 End;---$
    ENDFORM.                    " 210_consolidate_data
    *&      Form  220_PROCESS_DATA
    FORM 220_PROCESS_DATA.
      DATA: L0_FISCAL_PERIOD  LIKE BAPI0002_4-FISCAL_PERIOD,
            L0_FISCAL_YEAR    LIKE BAPI0002_4-FISCAL_YEAR,
            L0_RETURN         LIKE BAPIRETURN1,
            L1_FISCAL_PERIOD  LIKE BAPI0002_4-FISCAL_PERIOD,
            L1_FISCAL_YEAR    LIKE BAPI0002_4-FISCAL_YEAR,
            L1_RETURN         LIKE BAPIRETURN1.
      SORT ITAB_LIPS BY VGBEL VGPOS EBELN EBELP
                        LFDAT DESCENDING POSNR ASCENDING.
      SORT ITAB BY EBELN EBELP.
    Calculate the GR quanities to be posted for all inbound deliveries
      LOOP AT ITAB_LIPS.
        AT NEW EBELP.
          CLEAR ITAB.
          CLEAR V_RCVQTY.
          READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
                                   EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
          V_RCVQTY = ITAB-RCVQTY.
        ENDAT.
        IF ITAB-PROCQTY GT 0.
          IF ITAB_LIPS-POSTQTY GT ITAB-PROCQTY.
            ITAB_LIPS-PROCQTY = ITAB-PROCQTY.
            ITAB_LIPS-NEWMFRGR = 'B'.
            ITAB-PROCQTY = 0.
          ELSEIF ITAB_LIPS-POSTQTY LT ITAB-PROCQTY.
            ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
            ITAB_LIPS-NEWMFRGR = 'C'.
            ITAB-PROCQTY = ITAB-PROCQTY - ITAB_LIPS-POSTQTY.
          ELSEIF ITAB_LIPS-POSTQTY EQ ITAB-PROCQTY.
            ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
            ITAB_LIPS-NEWMFRGR = 'C'.
            ITAB-PROCQTY = 0.
          ENDIF.
    Compare the Inbound delivery processing quantity with the pending
    billing quantity to write it in the report log
          IF ITAB_LIPS-POSTQTY LT V_RCVQTY.
            ITAB_LIPS-GRIND = 'D'.            "GR will be created for ID qty
            V_RCVQTY = V_RCVQTY - ITAB_LIPS-POSTQTY.
          ELSEIF ITAB_LIPS-POSTQTY GT V_RCVQTY.
            ITAB_LIPS-GRIND = 'B'.       "GR will be created for Billied qty
            V_RCVQTY = 0.
          ELSEIF ITAB_LIPS-POSTQTY EQ V_RCVQTY.
            ITAB_LIPS-GRIND = 'S'.            "Billed qty is equal to ID qty
            V_RCVQTY = 0.
          ENDIF.
        ELSE.
    Decide why this inbound delivery could not have GR quantity -
    excess GR quantity or unavailable Billing quantity
          IF ITAB-RCVQTY LT ITAB-IDQTY.
            ITAB_LIPS-GRIND = 'C'.      "GR not created - Lack of Billed qty
          ENDIF.
          IF ITAB-RCVQTY LT 0.
            ITAB_LIPS-GRIND = 'A'.       "GR not created - GR qty > Bill qty
          ENDIF.
        ENDIF.
        MODIFY ITAB_LIPS.
        CLEAR ITAB_LIPS.
      ENDLOOP.
    $--"DEVK934135-Begin;-$
      LOOP AT ITAB_LIPS.
        AT NEW EBELP.
          CLEAR ITAB.
          CLEAR V_RCVQTY.
          READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
                                   EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
          V_RCVQTY = ITAB-FKIMG - ITAB-GRQTY.
        ENDAT.
        IF ITAB_LIPS-ERRFA IS INITIAL.
          IF V_RCVQTY EQ 0.
            ITAB_LIPS-ERRF1    = 'X'.
            ITAB_LIPS-NEWMFRGR = 'E'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-R01.
            APPEND GT_ERROR.
          ELSEIF V_RCVQTY LT 0.
            ITAB_LIPS-ERRF2    = 'X'.
            ITAB_LIPS-NEWMFRGR = 'E'.
            GT_ERROR-RECID = ITAB-RECID.
            GT_ERROR-ERRTX = TEXT-R02.
            APPEND GT_ERROR.
          ELSEIF V_RCVQTY GT 0.
            IF V_RCVQTY EQ ITAB_LIPS-LFIMG.
              ITAB_LIPS-ERRF3    = 'X'.
              ITAB_LIPS-NEWMFRGR = 'C'.
            ELSEIF V_RCVQTY GT ITAB_LIPS-LFIMG.
              ITAB_LIPS-ERRF4    = 'X'.
              ITAB_LIPS-NEWMFRGR = 'C'.
              ITAB_LIPS-PROCQTY  =  ITAB_LIPS-LFIMG.
              GT_ERROR-RECID = ITAB-RECID.
              GT_ERROR-ERRTX = TEXT-R04.
              APPEND GT_ERROR.
            ELSEIF V_RCVQTY LT ITAB_LIPS-LFIMG.
              ITAB_LIPS-ERRF5    = 'X'.
              ITAB_LIPS-NEWMFRGR = 'E'.
              GT_ERROR-RECID = ITAB-RECID.
              GT_ERROR-ERRTX = TEXT-R05.
              APPEND GT_ERROR.
            ENDIF.
          ENDIF.
        ENDIF.
        CLEAR: ITAB_LIPS-BLDAT.
        READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-VGBEL
                                 EBELP = ITAB_LIPS-VGPOS BINARY SEARCH.
        SELECT SINGLE FKDAT
               FROM  VBRK
               INTO (ITAB_LIPS-BLDAT)
               WHERE VBELN EQ ITAB-IHREZ+0(10).
        CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
             EXPORTING
                  COMPANYCODEID = 'C800'
                  POSTING_DATE  =  ITAB_LIPS-BLDAT
             IMPORTING
                  FISCAL_YEAR   =  L0_FISCAL_YEAR
                  FISCAL_PERIOD =  L0_FISCAL_PERIOD
                  RETURN        =  L0_RETURN.
        CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
             EXPORTING
                  COMPANYCODEID = 'C800'
                  POSTING_DATE  =  SY-DATLO
             IMPORTING
                  FISCAL_YEAR   =  L1_FISCAL_YEAR
                  FISCAL_PERIOD =  L1_FISCAL_PERIOD
                  RETURN        =  L1_RETURN.
        IF L0_FISCAL_YEAR   EQ L1_FISCAL_YEAR  AND
           L0_FISCAL_PERIOD EQ L1_FISCAL_PERIOD.
          ITAB_LIPS-BUDAT = ITAB_LIPS-BLDAT.
        ELSE.
          ITAB_LIPS-BUDAT = SY-DATLO.
        ENDIF.
        MODIFY ITAB_LIPS.
        CLEAR ITAB_LIPS.
      ENDLOOP.
    $--"DEVK934135-End;---$
    collect all the inbound deliveries for which goods receipt are to be
    made / material freight status  are to be updated
      LOOP AT ITAB_LIPS    WHERE ERRFA IS INITIAL       "DEVK934135
                            AND  ERRFB IS INITIAL       "DEVK934135
                            AND  ERRFC IS INITIAL       "DEVK934135
                            AND  ERRFD IS INITIAL       "DEVK934135
                            AND  ERRFE IS INITIAL       "DEVK934135
                            AND  ERRFF IS INITIAL       "DEVK934135
                            AND  ERRF1 IS INITIAL       "DEVK934135
                            AND  ERRF2 IS INITIAL       "DEVK934135
                            AND  ERRF5 IS INITIAL.      "DEVK934135
        IF ITAB_LIPS-PROCQTY GT 0 AND ITAB_LIPS-LFIMG NE 0.
          ITAB_LIPS_G-VBELN = ITAB_LIPS-VBELN.
          ITAB_LIPS_G-BLDAT = ITAB_LIPS-BLDAT.       "DEVK934135
          ITAB_LIPS_G-BUDAT = ITAB_LIPS-BUDAT.       "DEVK934135
          ITAB_LIPS_G-IHREZ = ITAB_LIPS-IHREZ.       "DEVK934135
          APPEND ITAB_LIPS_G.
        ENDIF.
      ENDLOOP.
      SORT ITAB_LIPS_G BY VBELN.
      DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_G.
      LOOP AT ITAB_LIPS    WHERE NOT ERRFA IS INITIAL       "DEVK934135
                            OR   NOT ERRFB IS INITIAL       "DEVK934135
                            OR   NOT ERRFC IS INITIAL       "DEVK934135
                            OR   NOT ERRFD IS INITIAL       "DEVK934135
                            OR   NOT ERRFE IS INITIAL       "DEVK934135
                            OR   NOT ERRFF IS INITIAL       "DEVK934135
                            OR   NOT ERRF1 IS INITIAL       "DEVK934135
                            OR   NOT ERRF2 IS INITIAL       "DEVK934135
                            OR   NOT ERRF3 IS INITIAL       "DEVK934135
                            OR   NOT ERRF4 IS INITIAL       "DEVK934135
                            OR   NOT ERRF5 IS INITIAL.      "DEVK934135
          ITAB_LIPS_X-VBELN = ITAB_LIPS-VBELN.
          ITAB_LIPS_X-BLDAT = ITAB_LIPS-BLDAT.       "DEVK934135
          ITAB_LIPS_X-BUDAT = ITAB_LIPS-BUDAT.       "DEVK934135
          ITAB_LIPS_X-IHREZ = ITAB_LIPS-IHREZ.       "DEVK934135
          APPEND ITAB_LIPS_X.
      ENDLOOP.
      SORT ITAB_LIPS_X BY VBELN.
      DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_X.
      LOOP AT ITAB_LIPS.
          READ TABLE ITAB WITH KEY RECID = ITAB_LIPS-RECID.
          SY_COPY-INDEX = SY-TABIX.
          IF SY-SUBRC EQ 0.
            ITAB-ERRFA = ITAB_LIPS-ERRFA.
            ITAB-ERRFB = ITAB_LIPS-ERRFB.
            ITAB-ERRFC = ITAB_LIPS-ERRFC.
            ITAB-ERRFD = ITAB_LIPS-ERRFD.
            ITAB-ERRFE = ITAB_LIPS-ERRFE.
            ITAB-ERRFF = ITAB_LIPS-ERRFF.
            ITAB-ERRF1 = ITAB_LIPS-ERRF1.
            ITAB-ERRF2 = ITAB_LIPS-ERRF2.
            ITAB-ERRF3 = ITAB_LIPS-ERRF3.
            ITAB-ERRF4 = ITAB_LIPS-ERRF4.
            ITAB-ERRF5 = ITAB_LIPS-ERRF5.
            MODIFY ITAB INDEX SY_COPY-INDEX.
          ENDIF.
      ENDLOOP.
    Decide the goods receipt item number for the delivery items that are
    to be processed. Delivery items with zero quantities are not shown up
    in MB0A transaction for GR
      CLEAR V_DEL_ZERO.
      IF NOT ITAB_LIPS_G[] IS INITIAL.
        SELECT VBELN POSNR LFIMG
                  INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
                                  FOR ALL ENTRIES IN ITAB_LIPS_G
                                  WHERE VBELN = ITAB_LIPS_G-VBELN
                                  AND LFIMG EQ 0.
        IF SY-SUBRC EQ 0.
          V_DEL_ZERO = 'X'.
          CLEAR ITAB_LIPS_Z.
          FREE ITAB_LIPS_Z.
          SELECT VBELN POSNR LFIMG
                   INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
                                    FOR ALL ENTRIES IN ITAB_LIPS_G
                                    WHERE VBELN = ITAB_LIPS_G-VBELN.
          SORT ITAB_LIPS_Z BY VBELN POSNR.
          LOOP AT ITAB_LIPS_Z.
            AT NEW VBELN.
              CLEAR V_ZEILE.
            ENDAT.
            IF ITAB_LIPS_Z-LFIMG NE 0.
              V_ZEILE = V_ZEILE + 1.
            ENDIF.
            ITAB_LIPS_Z-ZEILE = V_ZEILE.
            MODIFY ITAB_LIPS_Z.
          ENDLOOP.
        ELSE.
          V_DEL_ZERO = ' '.
        ENDIF.
      ENDIF.
      SORT ITAB_LIPS_Z BY VBELN POSNR.
      LOOP AT ITAB_LIPS.
        IF V_DEL_ZERO = ' '.
          ITAB_LIPS-ZEILE = ITAB_LIPS-POSNR.
        ELSE.
          CLEAR ITAB_LIPS_Z.
          READ TABLE ITAB_LIPS_Z WITH KEY VBELN = ITAB_LIPS-VBELN
                                    POSNR = ITAB_LIPS-POSNR BINARY SEARCH.
          ITAB_LIPS-ZEILE = ITAB_LIPS_Z-ZEILE.
        ENDIF.
        MODIFY ITAB_LIPS.
      ENDLOOP.
      SORT ITAB_LIPS BY VBELN DESCENDING POSNR ASCENDING.
    ENDFORM.                    " 220_PROCESS_DATA
    *&      Form  300_post_documents
    FORM 300_POST_DOCUMENTS.
      LOOP AT ITAB_LIPS_G.
        PERFORM 310_POST_GR_DOC.
        MODIFY ITAB_LIPS_G.
        CLEAR ITAB_LIPS_G.
      ENDLOOP.
      CLEAR: BDCDATA, BDCDATA[].
      ITAB_LIPS_R[] = ITAB_LIPS_G[].
      ITAB_LIPS_G[] = ITAB_LIPS_X[].
      LOOP AT ITAB_LIPS_G.
        PERFORM 350_UPDATE_DELIVERY_DOC.
        MODIFY ITAB_LIPS_G.
        CLEAR ITAB_LIPS_G.
      ENDLOOP.
    PERFORM close_group.
    ENDFORM.                    " 300_post_documents
    *&      Form  310_POST_GR_DOC
    FORM 310_POST_GR_DOC.
      PERFORM 320_POST_GR_HEADER.
      LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
                        AND   LFIMG NE 0
                        AND PROCQTY NE 0
                        AND ERRFA   IS INITIAL
                        AND ERRFB   IS INITIAL
                        AND ERRFC   IS INITIAL
                        AND ERRFD   IS INITIAL
                        AND ERRFE   IS INITIAL
                        AND ERRFF   IS INITIAL
                        AND ERRF1   IS INITIAL
                        AND ERRF2   IS INITIAL
                        AND ERRF5   IS INITIAL.
        IF ITAB_LIPS-ZEILE EQ 1.
          PERFORM 335_POST_GR_ITEMS.
        ELSE.
          PERFORM 330_POST_GR_ITEMS.
        ENDIF.
      ENDLOOP.
      PERFORM 340_SAVE_GR_DOC.
    ENDFORM.                    " 310_POST_GR_DOC
    *&      Form  320_POST_GR_HEADER
    FORM 320_POST_GR_HEADER.
      DATA: L_BLDAT    TYPE SYDATUM,
            L_BUDAT    TYPE SYDATUM.
      WRITE: ITAB_LIPS_G-BLDAT TO L_BLDAT,
             ITAB_LIPS_G-BUDAT TO L_BUDAT.
      IF ITAB_LIPS_G-IHREZ+0(10) NE '0000000000'  AND
         ITAB_LIPS_G-IHREZ+0(10) NE '          '.
        WHILE ITAB_LIPS_G-IHREZ+0(1) EQ '0'.
          SHIFT ITAB_LIPS_G-IHREZ.
        ENDWHILE.
      ENDIF.
      perform bdc_dynpro      using 'SAPMM07M' '0201'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM07M-VLIEF'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/00'.
      PERFORM BDC_FIELD       USING 'MKPF-BKTXT'
                                    ITAB_LIPS_G-IHREZ.
      perform bdc_field       using 'MKPF-BLDAT'
                                    L_BLDAT.
      perform bdc_field       using 'MKPF-BUDAT'
                                    L_BUDAT.
      perform bdc_field       using 'RM07M-BWARTWE'
                                    '101'.
      perform bdc_field       using 'RM07M-WERKS'
      perform bdc_field       using 'RM07M-LGORT'
      perform bdc_field       using 'RM07M-XNUVO'
                                    'X'.
      perform bdc_field       using 'XFULL'
      perform bdc_field       using 'RM07M-VLIEF'
                                    ITAB_LIPS_G-VBELN.
      perform bdc_dynpro      using 'SAPMM07M' '0221'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=SELN'.
      perform bdc_dynpro      using 'SAPMM07M' '0221'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'MSEG-ERFMG(01)'.
    ENDFORM.                    " 320_POST_GR_HEADER
    *&      Form  330_POST_GR_ITEMS
    FORM 330_POST_GR_ITEMS.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=KLA'.
      perform bdc_dynpro      using 'SAPMM07M' '1501'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=OK'.
      VV_ZEILE = ITAB_LIPS-ZEILE.
      PERFORM BDC_FIELD       USING 'RM07M-ZEILE'
                                    VV_ZEILE.
      perform bdc_dynpro      using 'SAPMM07M' '0221'.
      perform bdc_field       using 'RM07M-XSELK(01)'
                                    'X'.
      VV_PROCQTY = ITAB_LIPS-PROCQTY.
      perform bdc_field       using 'MSEG-ERFMG(01)'
                                    VV_PROCQTY.
      perform bdc_field       using 'MSEG-CHARG(01)'
                                    ITAB_LIPS-CHARG.
      perform bdc_field       using 'MSEG-INSMK(01)'
                                    'S'.
    ENDFORM.                    " 330_POST_GR_ITEMS
    *&      Form  340_SAVE_GR_DOC
    FORM 340_SAVE_GR_DOC.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=BU'.
      CLEAR V_FAIL_IND.
      PERFORM BDC_TRANSACTION USING 'MB0A'
                              CHANGING V_FAIL_IND.
    ENDFORM.                    " 340_SAVE_GR_DOC
    *&      Form  350_UPDATE_DELIVERY_DOC
    FORM 350_UPDATE_DELIVERY_DOC.
      PERFORM 360_UPDATE_DELIVERY_HEADER.
      LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
                         AND  ERRFA IS INITIAL
                         AND  ERRFB IS INITIAL
                         AND  ERRFC IS INITIAL.
                       AND  errfd IS INITIAL
                       AND  errfe IS INITIAL.
        PERFORM 370_UPDATE_DELIVERY_ITEMS.
      ENDLOOP.
      PERFORM 380_SAVE_DELIVERY_DOC.
    ENDFORM.                    " 350_UPDATE_DELIVERY_DOC
    *&      Form  360_UPDATE_DELIVERY_HEADER
    FORM 360_UPDATE_DELIVERY_HEADER.
      perform bdc_dynpro      using 'SAPMV50A' '0108'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'LIKP-VBELN'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=UELA'.
      perform bdc_field       using 'LIKP-VBELN'
                                    ITAB_LIPS_G-VBELN.
    ENDFORM.                    " 360_UPDATE_DELIVERY_HEADER
    *&      Form  370_UPDATE_DELIVERY_ITEMS
    FORM 370_UPDATE_DELIVERY_ITEMS.
      IF ITAB_LIPS-ERRFD EQ 'X'  OR
         ITAB_LIPS-ERRFE EQ 'X'  OR
         ITAB_LIPS-ERRFF EQ 'X'.
        ITAB_LIPS-NEWMFRGR = 'E'.
      ENDIF.
      perform bdc_dynpro      using 'SAPMV50A' '0270'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RV50A-VERUR_LA'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=POPO'.
      perform bdc_dynpro      using 'SAPMV50A' '0111'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RV50A-POSNR'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=POPO'.
      VV_POSNR =  ITAB_LIPS-POSNR.
      perform bdc_field       using 'RV50A-POSNR'
                                    VV_POSNR.
      perform bdc_dynpro      using 'SAPMV50A' '0270'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'LIPS-POSNR(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=LAPD'.
      perform bdc_field       using 'RV50A-LIPS_SELKZ(01)'
                                    'X'.
      perform bdc_dynpro      using 'SAPMV50A' '0570'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'LIPS-MFRGR'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=BACK'.
      perform bdc_field       using 'LIPS-MFRGR'
                                    ITAB_LIPS-NEWMFRGR.
    ENDFORM.                    " 370_UPDATE_DELIVERY_ITEMS
    *&      Form  380_SAVE_DELIVERY_DOC
    FORM 380_SAVE_DELIVERY_DOC.
      perform bdc_dynpro      using 'SAPMV50A' '0270'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RV50A-VERUR_LA'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=SICH'.
    If GR document is not posted successfully, then do not update the
    status of delivery document
      CLEAR V_FAIL_IND.
      PERFORM BDC_TRANSACTION USING 'VL32'
                              CHANGING V_FAIL_IND.
      IF V_FAIL_IND = 'X'.
        CALL FUNCTION 'BDC_INSERT'
             EXPORTING
                  TCODE     = 'VL32'
             TABLES
                  DYNPROTAB = BDCDATA.
        REFRESH BDCDATA.
      ENDIF.
    ENDFORM.                    " 380_SAVE_DELIVERY_DOC
           Start new transaction according to parameters                 *
    FORM BDC_TRANSACTION USING TCODE
                         CHANGING V_FAILURE_IND.
      DATA: L_MSTRING(480).
      DATA: L_SUBRC LIKE SY-SUBRC.
      REFRESH MESSTAB.
      CALL TRANSACTION TCODE USING BDCDATA
                       MODE   CTUMODE
                       UPDATE CUPDATE
                       MESSAGES INTO MESSTAB.
      L_SUBRC = SY-SUBRC.
      CLEAR V_FAILURE_IND.
      IF L_SUBRC NE 0.
        V_FAILURE_IND = 'X'.
        CLEAR V_IND.
        LOOP AT MESSTAB.
          SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
                                    AND   ARBGB = MESSTAB-MSGID
                                    AND   MSGNR = MESSTAB-MSGNR.
          IF SY-SUBRC = 0.
            L_MSTRING = T100-TEXT.
            IF L_MSTRING CS '&1'.
              REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
              REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
              REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
              REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
            ELSE.
              REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
              REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
              REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
              REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
            ENDIF.
            CONDENSE L_MSTRING.
            IF MESSTAB-MSGTYP = 'E'.
              ERRORTAB-TCODE       = TCODE.
              ERRORTAB-VBELN       = ITAB_LIPS_G-VBELN.
              ERRORTAB-ERROR_TEXT  = L_MSTRING.
              APPEND ERRORTAB.
              V_IND = 'X'.
            ENDIF.
          ELSE.
            IF MESSTAB-MSGTYP = 'E'.
              ERRORTAB-TCODE       = TCODE.
              ERRORTAB-VBELN       = ITAB_LIPS_G-VBELN.
              ERRORTAB-ERROR_TEXT  = TEXT-U01.
              APPEND ERRORTAB.
              V_IND = 'X'.
            ENDIF.
          ENDIF.
        ENDLOOP.
        IF V_IND IS INITIAL.
          ERRORTAB-TCODE       = TCODE.
          ERRORTAB-VBELN       = ITAB_LIPS_G-VBELN.
          ERRORTAB-ERROR_TEXT  = TEXT-U01.
          APPEND ERRORTAB.
        ENDIF.
      ELSE.
        IF TCODE = 'MB0A'.
          LOOP AT MESSTAB WHERE MSGTYP = 'S'
                          AND   MSGID = 'M7'
                          AND   MSGNR = '060'.
            IF NOT MESSTAB-MSGV1 IS INITIAL.
              ITAB_LIPS_G-MBLNR = MESSTAB-MSGV1.
            ENDIF.
          ENDLOOP.
        ELSEIF TCODE = 'VL32'.
          ITAB_LIPS_G-DLVIND = 'X'.
        ENDIF.
      ENDIF.
      IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
        IF E_GROUP_OPENED = ' '.
          CALL FUNCTION 'BDC_OPEN_GROUP'
               EXPORTING
                    CLIENT   = SY-MANDT
                    GROUP    = E_GROUP
                    USER     = E_USER
                    KEEP     = E_KEEP
                    HOLDDATE = E_HDATE.
          E_GROUP_OPENED = 'X'.
        ENDIF.
        CALL FUNCTION 'BDC_INSERT'
             EXPORTING
                  TCODE     = TCODE
             TABLES
                  DYNPROTAB = BDCDATA.
      ENDIF.
      REFRESH BDCDATA.
    ENDFORM.
    *&      Form  335_POST_GR_ITEMS
    FORM 335_POST_GR_ITEMS.
      VV_ZEILE = ITAB_LIPS-ZEILE.
      perform bdc_field       using 'RM07M-XSELK(01)'
                                    'X'.
      VV_PROCQTY = ITAB_LIPS-PROCQTY.
      perform bdc_field       using 'MSEG-ERFMG(01)'
                                    VV_PROCQTY.
      perform bdc_field       using 'MSEG-CHARG(01)'
                                    ITAB_LIPS-CHARG.
      perform bdc_field       using 'MSEG-INSMK(01)'
                                    'S'.
    ENDFORM.                    " 335_POST_GR_ITEMS
    *&      Form  399_RETRIEVE_DOCUMENTS
    &----

    that is a warning message only ... But if you want to fix it then replace all 000 with 001 in your write statement. The position instead of 000 you have to give 001
    write : /000(10)....instead of this
    write : /1(10) or write : /(10) or write : /001(10) any thing you can use.
    regards
    shiba dutta

  • ERROR WHILE RUNNING THE SESSION IN SM35

    Hi all
            when ever m running this session in SM35 , M getting error as :
    "LEAVE TO TRANSACTION" MARA-BISMT is not allow
    in batch input                               
    REPORT  YASEC_BDC_NIK_SESSION
            no standard page heading
            message-id zmm
            line-count 65
            line-size 150.
    tables : mara.
    *Top includr program
    INCLUDE YNEW_MAIN_TOP.
    *include yasec_bdc_nik_session_top.
    ***********selection screen *******************
    selection-screen begin of block b1 with frame title text-001.
    selection-screen skip.
    PARAMETERS: p_ifile(128)   TYPE c .
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
    PARAMETERS: rad1  TYPE c RADIOBUTTON GROUP 1 USER-COMMAND gr1,
                rad2  TYPE c RADIOBUTTON GROUP 1 .
    SELECTION-SCREEN SKIP.
    PARAMETERS: p_sess TYPE c.
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN END OF BLOCK b1.
    Subroutine call***************************
    INCLUDE YNEW_MAIN_F01.
    *include yasec_bdc_nik_session_f01.
    *********At selection event triggered *************
    at selection-screen on value-request for p_ifile.
    To get F4 help for the input file path
      PERFORM f_f4_input_file.
    AT SELECTION-SCREEN ON p_ifile.
    To validate and upload the input file
      PERFORM f_load_file.
    AT SELECTION-SCREEN ON p_sess.
    To validate the Number of Sessions field
      IF rad2 IS NOT INITIAL AND sy-ucomm EQ c_onli.
        PERFORM f_check_sessions.
      ENDIF.
    ***********Start of selection *******************
    start-of-selection.
    *To process BDC
      PERFORM f_process_bdc.
           TOP OF PAGE
    TOP-OF-PAGE.
    Writes the report heading and for displaying line number.
      PERFORM f_report_header.
    TYPES : BEGIN OF t_final,
            matnr(50) TYPE c,
            bismt(18) type c,
            end of t_final.
    TYPES: BEGIN OF t_fdata,
            data(256) TYPE c,
           END OF t_fdata.
    TYPES: BEGIN OF t_error,
            message(100) TYPE c,
            END OF t_error.
    *Internal table declarations
    *Internal table to load the data from the file that is changed throgh BDC
    DATA : i_final TYPE STANDARD TABLE OF t_final,
           wa_final TYPE t_final.
    *Internal table to store the error messages
    DATA : i_error TYPE STANDARD TABLE OF t_error,
           wa_error TYPE t_error.
    *Internal table to load the raw data
    DATA : i_fdata TYPE STANDARD TABLE OF t_fdata,
           wa_fdata TYPE t_fdata.
    *Internal table to store records of BDC
    DATA : i_bdcdata TYPE STANDARD TABLE OF bdcdata INITIAL SIZE 0,
           wa_bdcdata TYPE bdcdata.
    Internal table to store BDC messages
    DATA: i_bdcmsgcoll TYPE STANDARD TABLE OF bdcmsgcoll INITIAL SIZE 0,
          wa_bdcmsgcoll TYPE bdcmsgcoll.
    VARIABLE DECLARATIONS
    DATA:  v_ifile      TYPE string,
           v_input      TYPE i,
           c_delimiter  TYPE c VALUE 'X',
           v_mode       TYPE c VALUE 'A',
           v_sessions   TYPE i.
    CONSTANTS
    CONSTANTS : c_flagx    TYPE   c VALUE 'X',
                c_slash    TYPE   c VALUE '/',
                c_onli(4)  TYPE   c VALUE 'ONLI',
                c_vl02(4)  TYPE   c VALUE 'VL02',
                c_s        TYPE   c VALUE 'A'.
    FORM f_f4_input_file .
      CALL FUNCTION 'F4_FILENAME'
        EXPORTING
          program_name  = syst-cprog
          dynpro_number = syst-dynnr
        IMPORTING
          file_name     = p_ifile.
    ENDFORM.                    " f_f4_input_file
    *&      Form  f_load_file
    FORM f_load_file .
      v_ifile = p_ifile.
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          filename                =  v_ifile
          filetype                =  'ASC'
         has_field_separator    =  'X'
        TABLES
          data_tab                = i_fdata
        EXCEPTIONS
          file_open_error         = 1
          file_read_error         = 2
          no_batch                = 3
          gui_refuse_filetransfer = 4
          invalid_type            = 5
          no_authority            = 6
          unknown_error           = 7
          bad_data_format         = 8
          header_not_allowed      = 9
          separator_not_allowed   = 10
          header_too_long         = 11
          unknown_dp_error        = 12
          access_denied           = 13
          dp_out_of_memory        = 14
          disk_full               = 15
          dp_timeout              = 16
          OTHERS                  = 17.
      IF sy-subrc <> 0.
    *Text-103-Input file does not exist.
        MESSAGE e000 WITH text-103 .
      ELSEIF NOT i_fdata IS INITIAL.
        DELETE i_fdata WHERE data = space.
        DESCRIBE TABLE i_fdata LINES v_input.
      ENDIF.
      IF v_input EQ 0.
    Text-104 - Input file is empty.
        MESSAGE e000 WITH text-104 .
      ENDIF.
    ENDFORM.                    " f_load_file
    *&      Form  f_check_sessions
    FORM f_check_sessions .
      IF p_sess IS INITIAL.
        MESSAGE e000 WITH text-106.
      ELSE.
        v_sessions = v_input DIV p_sess.
      ENDIF.
    ENDFORM.                    " f_check_sessions
    *&      Form  f_process_bdc
          text
    FORM   f_process_bdc.
      LOOP AT i_fdata INTO wa_fdata.
        SPLIT wa_fdata AT cl_abap_char_utilities=>horizontal_tab
        INTO  wa_final-matnr
              wa_final-bismt.
        APPEND wa_final TO i_final.
        CLEAR wa_fdata.
      ENDLOOP.
      IF rad1 = c_flagx.
        PERFORM f_passbdc_vl02.
      ELSEIF rad2 = c_flagx.
        PERFORM f_sessions_vl02.
      ENDIF.
    ENDFORM.                    "f_process_bdc
    To populate the Screen information
       p_program   Program Name
       p_dynpro    Screen Number
    FORM bdc_dynpro USING  p_program TYPE any
                             p_dynpro TYPE any.
      CLEAR wa_bdcdata.
    Populate the BDC structure with the Screen Information.
    Move the Program name PROGRAM
      wa_bdcdata-program  = p_program.
    Move the Screen Number DYNPRO
      wa_bdcdata-dynpro   = p_dynpro.
    Indicate the beginning of a new screen
      wa_bdcdata-dynbegin = c_flagx.
      APPEND wa_bdcdata TO i_bdcdata.
    ENDFORM.                    "f_bdc_dynpro
    *&      Form  f_passbdc_vl02
          text
    FORM f_passbdc_vl02.
      DATA: l_lines_im TYPE i.
      SORT i_final BY matnr ASCENDING.
      CLEAR wa_final.
      LOOP AT i_final INTO wa_final.
        CLEAR: i_bdcmsgcoll[],
               wa_bdcmsgcoll,
               wa_bdcdata.
          CLEAR: i_bdcdata[].
    perform bdc_dynpro      using 'SAPLMGMM' '0060'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RMMG1-MATNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RMMG1-MATNR'
                                  wa_final-matnr.
    perform bdc_dynpro      using 'SAPLMGMM' '0070'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MSICHTAUSW-DYTXT(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    perform bdc_field       using 'MSICHTAUSW-KZSEL(01)'
                                  'X'.
    perform bdc_dynpro      using 'SAPLMGMM' '4004'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MARA-BISMT'.
    perform bdc_field       using 'MARA-BISMT'
                                  wa_final-bismt.
    perform bdc_dynpro      using 'SAPLSPO1' '0300'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=YES'.
    perform bdc_transaction using 'MM02'.
    perform bdc_dynpro      using 'SAPLMGMM' '0060'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RMMG1-MATNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_dynpro      using 'SAPLMGMM' '0070'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MSICHTAUSW-DYTXT(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    perform bdc_dynpro      using 'SAPLMGMM' '4004'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RMMG1-MATNR'.
    perform bdc_dynpro      using 'SAPLSPO1' '0300'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=YES'.
    perform bdc_transaction using 'MM03'.
          CALL TRANSACTION 'MM02' USING i_bdcdata
                                 MODE   v_mode
                                 UPDATE c_s
                                 MESSAGES INTO i_bdcmsgcoll.
    If error occurred in call transaction 'VA02' then stores all
    information of failed records into internal table i_error_im.
          IF sy-subrc NE 0.
            DESCRIBE TABLE i_bdcmsgcoll LINES l_lines_im.
            CLEAR wa_bdcmsgcoll.
            READ TABLE i_bdcmsgcoll INTO wa_bdcmsgcoll INDEX l_lines_im.
    To capture success and error messages in BDC.
            CALL FUNCTION 'FORMAT_MESSAGE'                      "#EC *
              EXPORTING
                id        = wa_bdcmsgcoll-msgid
                lang      = wa_bdcmsgcoll-msgspra
                no        = wa_bdcmsgcoll-msgnr
                v1        = wa_bdcmsgcoll-msgv1
                v2        = wa_bdcmsgcoll-msgv2
                v3        = wa_bdcmsgcoll-msgv3
                v4        = wa_bdcmsgcoll-msgv4
              IMPORTING
                msg       = wa_error-message
              EXCEPTIONS
                not_found = 1
                OTHERS    = 2.
            IF sy-subrc <> 0.
            ENDIF.
          ELSE.
            WRITE:  text-111 COLOR 7.
          ENDIF.
        CLEAR: wa_final.
        REFRESH i_bdcdata.
      ENDLOOP.
    ENDFORM.                     "f_passbdc_va02
    *&      Form  bdc_field
          text
         -->P_FNAM     text
         -->P_FVAL     text
    FORM bdc_field USING p_fnam TYPE any
                           p_fval TYPE any.
      CLEAR wa_bdcdata.
    Populate the Field Name
      wa_bdcdata-fnam = p_fnam.
    Populate the field value
      wa_bdcdata-fval = p_fval.
      APPEND wa_bdcdata TO i_bdcdata.
    ENDFORM.                    "f_bdc_field
    *&      Form  f_sessions_vl02
          text
    FORM f_sessions_vl02 .
      DATA: l_sindex TYPE sy-tabix VALUE 1,
            l_eindex TYPE sy-tabix,
            l_flag TYPE c VALUE space.
      l_eindex = v_input.
      SORT i_final BY matnr ASCENDING.
      DO p_sess TIMES.
        CALL FUNCTION 'BDC_OPEN_GROUP'
          EXPORTING
            client              = sy-mandt
            group               = 'Y_VL02_NIK'
            user                = sy-uname
           keep                = c_flagx
          EXCEPTIONS
            client_invalid      = 1
            destination_invalid = 2
            group_invalid       = 3
            group_is_locked     = 4
            holddate_invalid    = 5
            internal_error      = 6
            queue_error         = 7
            running             = 8
            system_lock_error   = 9
            user_invalid        = 10
            OTHERS              = 11.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
        CLEAR wa_final.
        CLEAR: i_bdcdata[].
        LOOP AT i_final INTO wa_final FROM l_sindex TO l_eindex .
            IF l_flag = v_sessions.
              CLEAR l_flag.
              EXIT.
            ENDIF.
            l_flag = l_flag + 1.
            CLEAR: i_bdcdata[].
    perform bdc_dynpro      using 'SAPLMGMM' '0060'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RMMG1-MATNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RMMG1-MATNR'
                                  wa_final-matnr.
    perform bdc_dynpro      using 'SAPLMGMM' '0070'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MSICHTAUSW-DYTXT(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    perform bdc_field       using 'MSICHTAUSW-KZSEL(01)'
                                  'X'.
    perform bdc_dynpro      using 'SAPLMGMM' '4004'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MARA-BISMT'.
    perform bdc_field       using 'MARA-BISMT'
                                  wa_final-bismt.
    perform bdc_dynpro      using 'SAPLSPO1' '0300'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=YES'.
    perform bdc_transaction using 'MM02'.
    perform bdc_dynpro      using 'SAPLMGMM' '0060'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RMMG1-MATNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_dynpro      using 'SAPLMGMM' '0070'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MSICHTAUSW-DYTXT(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    perform bdc_dynpro      using 'SAPLMGMM' '4004'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RMMG1-MATNR'.
    perform bdc_dynpro      using 'SAPLSPO1' '0300'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=YES'.
    perform bdc_transaction using 'MM03'.
          l_sindex = l_sindex + 1.
        ENDLOOP.
        CALL FUNCTION 'BDC_CLOSE_GROUP'
          EXCEPTIONS
            not_open    = 1
            queue_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.
      ENDDO.
    ENDFORM.                    " f_sessions_vl02
    *&      Form  f_report_header
    FORM f_report_header .
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
      ULINE.
    text-201 - Company: Carrier
    text-102-  Batch Data Communication.
    text-202 - System: SAP
      WRITE: /1   sy-vline,
              3   text-201,
              50  text-102,
              100 text-202,
              AT  sy-linsz sy-vline.
    text-203 - Program:
    text-204 - Date/Time:
      WRITE: /1   sy-vline,
              3   text-203, sy-repid ,
              100 text-204,sy-datum ,c_slash, sy-uzeit,
              AT  sy-linsz sy-vline.
    text-205 - User ID:
    text-206 - Page:
      WRITE: /1   sy-vline,
              3   text-205, sy-uname,
              100 text-206, sy-pagno,
              AT  sy-linsz sy-vline.
      FORMAT COLOR OFF.
      ULINE.
    ENDFORM.                    " f_report_header
    FORM bdc_transaction USING tcode.
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          tcode            = tcode
        TABLES
          dynprotab        = i_bdcdata
        EXCEPTIONS
          internal_error   = 1
          not_open         = 2
          queue_error      = 3
          tcode_invalid    = 4
          printing_invalid = 5
          posting_invalid  = 6
          OTHERS           = 7.
      IF sy-subrc <> 0.
             MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        WRITE: / text-109 ,wa_final-matnr,
                 text-110 .
      ENDIF.
    ENDFORM.                    "bdc_transaction

    please check this
    check all perform bdcfield correct or not....
    perform bdc_dynpro using 'SAPLMGMM' '0060'.
    perform bdc_field using 'BDC_CURSOR'
    'RMMG1-MATNR'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'RMMG1-MATNR'
    wa_final-matnr.
    perform bdc_dynpro using 'SAPLMGMM' '0070'.
    perform bdc_field using 'BDC_CURSOR'
    'MSICHTAUSW-DYTXT(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_field using 'MSICHTAUSW-KZSEL(01)'
    'X'.
    perform bdc_dynpro using 'SAPLMGMM' '4004'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'BDC_CURSOR'
    'MARA-BISMT'.
    perform bdc_field using 'MARA-BISMT'
    wa_final-bismt.
    perform bdc_dynpro using 'SAPLSPO1' '0300'.
    perform bdc_field using 'BDC_OKCODE'
    '=YES'.
    perform bdc_transaction using 'MM02'.
    perform bdc_dynpro using 'SAPLMGMM' '0060'.
    perform bdc_field using 'BDC_CURSOR'
    'RMMG1-MATNR'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_dynpro using 'SAPLMGMM' '0070'.
    perform bdc_field using 'BDC_CURSOR'
    'MSICHTAUSW-DYTXT(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_dynpro using 'SAPLMGMM' '4004'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'BDC_CURSOR'
    'RMMG1-MATNR'.
    perform bdc_dynpro using 'SAPLSPO1' '0300'.
    perform bdc_field using 'BDC_OKCODE'
    '=YES'.
    perform bdc_transaction using 'MM03'.

  • Error in my BDC SESSION METHOD

    Hi,
    I was trying work on BDC SESSION METHOD AND MY TCODE IS XK01.
    Here is my code can some one tell me where i am doing wrong becoz its not giving the output as I expected. And I am uploading a tab delimeter file.
    report ZAN_BDCVENDOR
           no standard page heading line-size 255.
    include bdcrecx1.
    DATA: I_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF RECORD OCCURS 0,
    LIFNR(016),
    BURKS(004),
    EKORG(004),
    KTOKK(004),
    AKONT(010),
    FDGRV(010),
    WAERS(005),
    END OF RECORD.
    start-of-selection.
    perform open_group.
    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename                      = 'C:\VENDOR.TXT'
    FILETYPE                      = 'ASC'
      tables
        data_tab                      = RECORD
    IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    LOOP AT RECORD.
    perform bdc_dynpro      using 'SAPMF02K' '0100'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'USE_ZAV'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RF02K-LIFNR'
                                  '8765'.
    perform bdc_field       using 'RF02K-BUKRS'
                                  '1000'.
    perform bdc_field       using 'RF02K-EKORG'
                                  '1000'.
    perform bdc_field       using 'RF02K-KTOKK'
                                  '0001'.
    perform bdc_field       using 'USE_ZAV'
                                  'X'.
    perform bdc_dynpro      using 'SAPMF02K' '0210'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFB1-FDGRV'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=UPDA'.
    perform bdc_field       using 'LFB1-AKONT'
                                  '160000'.
    perform bdc_field       using 'LFB1-FDGRV'
                                  'A1'.
    perform bdc_dynpro      using 'SAPMF02K' '0310'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'LFM1-WAERS'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=UPDA'.
    perform bdc_field       using 'LFM1-WAERS'
                                  'usd'.
    perform bdc_transaction using 'XK01'.
    ENDLOOP.
    perform close_group.
                  CALL FUNCTION 'BDC_OPEN_GROUP'
                   EXPORTING
                    CLIENT                    = SY-MANDT
                    DEST                      = FILLER8
                     GROUP                     = 'SESSION1'
                    HOLDDATE                  = FILLER8
                    KEEP                      = FILLER1
                     USER                      = SY-UNAME
                    RECORD                    = FILLER1
                    PROG                      = SY-CPROG
                  IMPORTING
                    QID                       =
                  EXCEPTIONS
                    CLIENT_INVALID            = 1
                    DESTINATION_INVALID       = 2
                    GROUP_INVALID             = 3
                    GROUP_IS_LOCKED           = 4
                    HOLDDATE_INVALID          = 5
                    INTERNAL_ERROR            = 6
                    QUEUE_ERROR               = 7
                    RUNNING                   = 8
                    SYSTEM_LOCK_ERROR         = 9
                    USER_INVALID              = 10
                    OTHERS                    = 11
                  IF sy-subrc <> 0.
                  WRITE 'ERROR IN OPEN_GROUP'.
                  ENDIF.
                   CALL FUNCTION 'BDC_INSERT'
                   EXPORTING
                     TCODE                  = TCODE
                     POST_LOCAL             = NOVBLOCAL
                     PRINTING               = NOPRINT
                     SIMUBATCH              = ' '
                     CTUPARAMS              = ' '
                     TABLES
                       dynprotab              = I_BDCDATA
                   EXCEPTIONS
                     INTERNAL_ERROR         = 1
                     NOT_OPEN               = 2
                     QUEUE_ERROR            = 3
                     TCODE_INVALID          = 4
                     PRINTING_INVALID       = 5
                     POSTING_INVALID        = 6
                     OTHERS                 = 7
                   IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
                   ENDIF.
                   CALL FUNCTION 'BDC_CLOSE_GROUP'
                   EXCEPTIONS
                     NOT_OPEN          = 1
                     QUEUE_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.
    I appreciate

    Hi,
    i guess, the error is due to, u didnt pass the TCODE parameter in BDC_INSERT FM.
    Try by passing it...
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = TCODE*
    POST_LOCAL = NOVBLOCAL
    PRINTING = NOPRINT
    SIMUBATCH = ' '
    CTUPARAMS = ' '
    TABLES
    dynprotab = I_BDCDATA
    EXCEPTIONS
    INTERNAL_ERROR = 1
    NOT_OPEN = 2
    QUEUE_ERROR = 3
    TCODE_INVALID = 4
    PRINTING_INVALID = 5
    POSTING_INVALID = 6
    OTHERS = 7
    Hope it works!!
    Regards,
    Pavan

  • Syntax error

    Hi abappers
    I am using the following code in my program.
    i  m getting a syntax error that i do not understand? can any body help me out with this.
    Regards
    Narendiran Rathinavelu
    *& Report  ZTEST_RECUPLOAD
    REPORT  ZTEST_RECUPLOAD.
    *include bdcrecx1.
    ******************Selection screen************************************
    SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-T01 .
    PARAMETERS P_FILE   TYPE RLGRAP-FILENAME OBLIGATORY.
    PARAMETERS P_SESSN  TYPE APQI-GROUPID DEFAULT 'RECURRING'.
    PARAMETERS P_SESSN2 TYPE APQI-GROUPID DEFAULT 'RECURRING_E'.
    SELECTION-SCREEN END OF BLOCK 1.
    ********************Type declaration**********************************
    *type for data input table
    TYPES : BEGIN OF TY_DATA,
            BUKRS    TYPE T001-BUKRS,         "Company code
            BLART    TYPE BKPF-BLART,         "Document type
           BUDAT    TYPE BKPF-BUDAT,         "Posting date
            DBBDT    TYPE BKDF-DBBDT,         "First run
            DBATR    TYPE BKDF-DBATR,         "Next run
            DBEDT    TYPE BKDF-DBEDT,         "last run
            DBMON    TYPE BKDF-DBMON,         "Run frequency
            DBTAG    TYPE BKDF-DBTAG,         "Run date
           DBZHL    TYPE BKDF-DBZHL,         "no of runs
            XBLNR    TYPE BKPF-XBLNR,         "reference(site)
            BKTXT    TYPE BKPF-BKTXT,         "document header data
           USNAM    TYPE BKPF-USNAM,         "User name
           CPUDT    TYPE BKPF-CPUDT,         "Entry date
            BSCHL_1  TYPE BSEG-BSCHL,         "Posting key 1 item
            HKONT_1  TYPE BSEG-HKONT,         "Account 1 item
            DESC_1   TYPE CHAR40,             "Description vendor/GL 1 item
            MWSKZ_1  TYPE BSEG-MWSKZ,         "Tax code 1 item
           MWSTS1_1 TYPE BSEG-MWSTS,         "Tax Amount 1 item
            MWSTS2_1 TYPE BSEG-MWSTS,         "Amount is local currency 1 item
           MWSTS3_1 TYPE BSEG-MWSTS,         "Amount is foreign currency 1 item
            SGTXT_1  TYPE BSEG-SGTXT,         "Item text 1 item
            ZUONR_1  TYPE BSEG-ZUONR,         "Assignment 1 item
            BSCHL_2  TYPE BSEG-BSCHL,         "Posting key 2 item
            HKONT_2  TYPE BSEG-HKONT,         "Account 2 item
            DESC_2   TYPE CHAR40,             "Description vendor/GL 2 item
            MWSKZ_2  TYPE BSEG-MWSKZ,         "Tax code 2 item
           MWSTS1_2 TYPE BSEG-MWSTS,         "Tax Amount 2 item
            MWSTS2_2 TYPE BSEG-MWSTS,         "Amount is local currency 2 item
           MWSTS3_2 TYPE BSEG-MWSTS,         "Amount is foreign currency 2 item
            KOSTL    TYPE COBL-KOSTL,         "Cost center
            AUFNR    TYPE COBL-AUFNR,         "Internal order number
            SGTXT_2  TYPE BSEG-SGTXT,         "Item text 2 item
            ZUONR_2  TYPE BSEG-ZUONR,         "Assignment 2 item
          END OF TY_DATA.
    *type for data error table
    TYPES : BEGIN OF TY_ERROR,
             BUKRS    TYPE T001-BUKRS,         "Company code
            BLART    TYPE BKPF-BLART,         "Document type
           BUDAT    TYPE BKPF-BUDAT,         "Posting date
            DBBDT    TYPE BKDF-DBBDT,         "First run
            DBATR    TYPE BKDF-DBATR,         "Next run
            DBEDT    TYPE BKDF-DBEDT,         "last run
            DBMON    TYPE BKDF-DBMON,         "Run frequency
            DBTAG    TYPE BKDF-DBTAG,         "Run date
           DBZHL    TYPE BKDF-DBZHL,         "no of runs
            XBLNR    TYPE BKPF-XBLNR,         "reference(site)
            BKTXT    TYPE BKPF-BKTXT,         "document header data
           USNAM    TYPE BKPF-USNAM,         "User name
           CPUDT    TYPE BKPF-CPUDT,         "Entry date
            BSCHL_1  TYPE BSEG-BSCHL,         "Posting key 1 item
            HKONT_1  TYPE BSEG-HKONT,         "Account 1 item
            DESC_1   TYPE CHAR40,             "Description vendor/GL 1 item
            MWSKZ_1  TYPE BSEG-MWSKZ,         "Tax code 1 item
           MWSTS1_1 TYPE BSEG-MWSTS,         "Tax Amount 1 item
            MWSTS2_1 TYPE BSEG-MWSTS,         "Amount is local currency 1 item
           MWSTS3_1 TYPE BSEG-MWSTS,         "Amount is foreign currency 1 item
            SGTXT_1  TYPE BSEG-SGTXT,         "Item text 1 item
            ZUONR_1  TYPE BSEG-ZUONR,         "Assignment 1 item
            BSCHL_2  TYPE BSEG-BSCHL,         "Posting key 2 item
            HKONT_2  TYPE BSEG-HKONT,         "Account 2 item
            DESC_2   TYPE CHAR40,             "Description vendor/GL 2 item
            MWSKZ_2  TYPE BSEG-MWSKZ,         "Tax code 2 item
           MWSTS1_2 TYPE BSEG-MWSTS,         "Tax Amount 2 item
            MWSTS2_2 TYPE BSEG-MWSTS,         "Amount is local currency 2 item
           MWSTS3_2 TYPE BSEG-MWSTS,         "Amount is foreign currency 2 item
            KOSTL    TYPE COBL-KOSTL,         "Cost center
            AUFNR    TYPE COBL-AUFNR,         "Internal order number
            SGTXT_2  TYPE BSEG-SGTXT,         "Item text 2 item
            ZUONR_2  TYPE BSEG-ZUONR,         "Assignment 2 item
          END OF TY_ERROR.
    ********************Data declaration***********************************
    DATA : T_DATA TYPE TABLE OF TY_DATA,   "Table to upload correct entries
           T_ERROR TYPE TABLE OF TY_ERROR. "Table to upload error data
    DATA : W_DATA TYPE TY_DATA,            "workarea for t_data
           W_ERROR TYPE TY_ERROR.          "workarea for t_error
    DATA : T_BDCDATA TYPE TABLE OF BDCDATA,
           W_BDCDATA TYPE BDCDATA.
    DATA : T_SEL_FILE TYPE FILETABLE,
           W_RETURN_CODE TYPE I VALUE '0',
           W_SEL_FILE LIKE LINE OF T_SEL_FILE.
    DATA : T_DATAIN TYPE TABLE OF TY_DATA,
           W_DATAIN TYPE string.
    DATA : W_FILE TYPE STRING.
    ********************At Selection Screen*********************************
    *selection screen validations
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
        EXPORTING
          WINDOW_TITLE            = 'Select File for upload'
       DEFAULT_EXTENSION       =
       DEFAULT_FILENAME        =
          FILE_FILTER             = '*.xls'
       WITH_ENCODING           =
       INITIAL_DIRECTORY       =
       MULTISELECTION          =
        CHANGING
          FILE_TABLE              = T_SEL_FILE
          RC                      = W_RETURN_CODE
       USER_ACTION             =
       FILE_ENCODING           =
        EXCEPTIONS
          FILE_OPEN_DIALOG_FAILED = 1
          CNTL_ERROR              = 2
          ERROR_NO_GUI            = 3
          NOT_SUPPORTED_BY_GUI    = 4
          OTHERS                  = 5
      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 W_RETURN_CODE <> -1.
        READ TABLE T_SEL_FILE INTO W_SEL_FILE INDEX 1.
        CLEAR P_FILE.
        MOVE W_SEL_FILE TO P_FILE.
      ENDIF.
    *at selection screen
    AT SELECTION-SCREEN ON P_SESSN.
      IF P_SESSN IS INITIAL.
        P_SESSN = 'RECURRING'.
      ENDIF.
    AT SELECTION-SCREEN ON P_SESSN2.
      IF P_SESSN2 IS INITIAL.
        P_SESSN2 = 'RECURRING_E'.
      ENDIF.
    *********************Start of Selection ****************************
    START-OF-SELECTION.
      OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
    *error message when file not found.
      IF SY-SUBRC <> 0.
        MESSAGE 'File Not Found' TYPE 'E'.
      ENDIF.
      DO.
        READ DATASET P_FILE INTO w_datain.
        IF SY-SUBRC EQ 0.
          perform pre_process_record using w_datain
                                     changing w_data.
          PERFORM VALIDATE_DATA TABLES T_DATA
                                       T_ERROR
                                USING  W_DATA.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      CLOSE DATASET P_FILE.
    *check if any error has occured.
      IF T_ERROR[] IS NOT INITIAL.
        PERFORM FILL_BDC_TABLE TABLES T_ERROR
                                      T_BDCDATA
                               USING  P_SESSN2.
      ENDIF.
    *Check if any records are present to be uploaded.
      IF T_DATA[] IS NOT INITIAL.
        PERFORM FILL_BDC_TABLE TABLES T_DATA
                                      T_BDCDATA
                               USING  P_SESSN.
      ELSE.
        WRITE :/ 'No Correct Records were found to create session in SM35',
               / 'Please Check the File'.
      ENDIF.
    *&      Form  validate_data
          Sub routine to check correctness of the uploaded data.
         -->P_T_DATA  table to upload correct entries
         -->P_T_ERROR table to upload erroneous entries
         -->P_W_DATA  current record
    FORM VALIDATE_DATA  TABLES   P_T_DATA STRUCTURE  W_DATA
                                 P_T_ERROR STRUCTURE W_ERROR
                        USING    P_W_DATA.
      DATA : L_W_LIFNR TYPE LFA1-LIFNR,
             L_W_SAKNR TYPE SKA1-SAKNR.
      DATA:  L_W_DATA  TYPE TY_DATA,
             L_W_ERROR TYPE TY_ERROR.
      MOVE P_W_DATA TO L_W_DATA.
      DATA : L_FG_ERROR TYPE C,
             L_W_DATE   TYPE SY-DATUM.
      CONSTANTS : C_X       TYPE C VALUE 'X',
                  C_O2CA(4) TYPE C VALUE 'O2CA',
                  C_ZK_1(2) TYPE C VALUE 'ZK',
                  C_ZK_2(2) TYPE C VALUE 'zk',
                  C_NUM(17) TYPE C VALUE '01234567890/.-, ',
                  C_31(2)   TYPE C VALUE '31',
                  C_40(2)   TYPE C VALUE '40'.
      L_FG_ERROR = SPACE.
      DO.
    *check document type is 'ZK'
        IF NOT L_W_DATA-BLART NE C_ZK_1 OR
           L_W_DATA-BLART NE C_ZK_2.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check 1 item text fields are filled by numeric value.
        IF NOT L_W_DATA-SGTXT_1 CO C_NUM.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check 2 item text fields are filled by date.
        MOVE L_W_DATA-SGTXT_2 TO L_W_DATE.
        CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
          EXPORTING
            DATE                      = L_W_DATE
          EXCEPTIONS
            PLAUSIBILITY_CHECK_FAILED = 1
            OTHERS                    = 2.
        IF SY-SUBRC <> 0.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check first posting key is '31'
        IF NOT L_W_DATA-BSCHL_1 EQ C_31.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check second posting key is '40'
        IF NOT L_W_DATA-BSCHL_2 EQ C_40.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check valid Vendor
        SELECT SINGLE LIFNR FROM LFA1 INTO L_W_LIFNR
                            WHERE LIFNR = L_W_DATA-HKONT_1.
        IF SY-SUBRC <> 0.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check valid G/L account.
        SELECT SINGLE SAKNR FROM SKA1 INTO L_W_SAKNR
                            WHERE KTOPL = C_O2CA AND
                                  SAKNR = L_W_DATA-HKONT_2.
        IF SY-SUBRC <> 0.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check 1 item assignment contains numeric value
        IF NOT L_W_DATA-ZUONR_1 CO C_NUM.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check 2 item assigment contains date value
        MOVE L_W_DATA-ZUONR_2 TO L_W_DATE.
        CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
          EXPORTING
            DATE                      = L_W_DATE
          EXCEPTIONS
            PLAUSIBILITY_CHECK_FAILED = 1
            OTHERS                    = 2.
        IF SY-SUBRC <> 0.
          L_FG_ERROR = C_X.
          EXIT.
        ENDIF.
    *check if no error has occured
        IF NOT L_FG_ERROR EQ C_X.
          EXIT.
        ENDIF.
      ENDDO.
    *check error flag and insert error text.
      CASE L_FG_ERROR.
        WHEN C_X.                        "When error has occured.
          APPEND L_W_DATA TO P_T_ERROR.
        WHEN OTHERS.                     "When no error has occured.
          APPEND L_W_DATA TO P_T_DATA.
      ENDCASE.
    ENDFORM.                    " validate_data
    *&      Form  download_error_log
          Sub routine to download the error log
         -->P_T_ERROR  error log
    FORM DOWNLOAD_ERROR_LOG  TABLES   P_T_ERROR STRUCTURE W_ERROR.
      DATA : L_FILENAME TYPE STRING,
             L_PATH     TYPE STRING,
             L_FULLPATH TYPE STRING.
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
        EXPORTING
          WINDOW_TITLE         = 'Save the Error log'
        CHANGING
          FILENAME             = L_FILENAME
          PATH                 = L_PATH
          FULLPATH             = L_FULLPATH
        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.
      CHECK L_FULLPATH IS NOT INITIAL.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          FILENAME                = L_FULLPATH
          FILETYPE                = 'ASC'
          WRITE_FIELD_SEPARATOR   = 'X'
        TABLES
          DATA_TAB                = P_T_ERROR
        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.
    ENDFORM.                    " download_error_log
    *&      Form  fill_bdc_table
          bdc session is created in SM35
         -->P_T_DATA     correct data
         -->P_T_BDCDATA  bdcdata
         -->P_P_SESSN    session name
    FORM FILL_BDC_TABLE  TABLES   P_T_DATA STRUCTURE W_DATA
                                  P_T_BDCDATA STRUCTURE BDCDATA
                         USING    P_P_SESSN.
      DATA : L_W_DATA TYPE TY_DATA.    "workarea for t_data
      CONSTANTS: C_EUR(3) TYPE C VALUE 'EUR'.
    *open batch
      PERFORM OPEN_GROUP USING P_P_SESSN.
      LOOP AT P_T_DATA INTO L_W_DATA.
    *clear the bdc table
        REFRESH P_T_BDCDATA.
    *initial screen
        PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
                           USING  'SAPMF05A' '0106'.
        PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BKPF-WAERS',
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00',            "enter
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BUKRS' L_W_DATA-BUKRS,   "company code
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBBDT' L_W_DATA-DBBDT,   "first run on
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBATR' L_W_DATA-DBATR,   "next run on
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBEDT' L_W_DATA-DBEDT,   "last run on
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBMON' L_W_DATA-DBMON,   "run frequency
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBTAG' L_W_DATA-DBTAG,   "run date
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BLART' L_W_DATA-BLART,   "document type
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-WAERS' C_EUR,            "currency
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-XBLNR' L_W_DATA-XBLNR,   "reference
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BKTXT' L_W_DATA-BKTXT,   "document header data
                  BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_1,"posting key
                  BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_1."account no
    *second screen (First line item)
        PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
                           USING 'SAPMF05A' '0302'.
        PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWKO',
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00',              "enter
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_1,  "amount in LC
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_1,   "tax code
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_1,   "assignment
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_1,   "item level text
                  BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_2,  "posting key
                  BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_2.  "account no
    *third screen (Second line item)
        PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
                           USING 'SAPMF05A' '0300'.
        PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BSEG-EBELN',
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=AB',              "overview button
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_2,  "amount in LC
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_2,   "tax code
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_2,   "assigment
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_2.   "item text
    *fourth screen (pop up)
        PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
                           USING 'SAPLKACB' '0002'.
        PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'COBL-KOSTL',
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=ENTE',            "ok button
                  BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-KOSTL' L_W_DATA-KOSTL,     "cost center
                  BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-AUFNR' L_W_DATA-AUFNR.     "order number
    *fifth screen
        PERFORM BDC_FIELD TABLES P_T_BDCDATA
                          USING 'SAPMF05A' '0070'.
        PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWBS',
                  BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=BU'.              "save document
        PERFORM BDC_INSERT TABLES P_T_BDCDATA
                            USING 'ZREC_ENTRY'.
      ENDLOOP.
    *close the batch.
      PERFORM CLOSE_GROUP.
    ENDFORM.                    " fill_bdc_table
    *&      Form  bdc_dynpro
          bdc screen insert sub routine
         -->P_T_BDCDATA  BDC table
         -->P_PROGRAM    Program name
         -->P_SCREEN     Screen no
    FORM BDC_DYNPRO  TABLES   P_T_BDCDATA STRUCTURE BDCDATA
                     USING    VALUE(P_PROGRAM)
                              VALUE(P_SCREEN).
      CONSTANTS C_X TYPE C VALUE 'X'.
      DATA L_W_BDCDATA TYPE BDCDATA.
      L_W_BDCDATA-PROGRAM = P_PROGRAM.
      L_W_BDCDATA-DYNPRO = P_SCREEN.
      L_W_BDCDATA-DYNBEGIN = C_X.
      APPEND L_W_BDCDATA TO P_T_BDCDATA.
    ENDFORM.                    " bdc_dynpro
    *&      Form  bdc_field
          bdc field screen routine
         -->P_T_BDCDATA  BDC table
         -->P_FIELD    Field name
         -->P_VALUE      Value
    FORM BDC_FIELD  TABLES   P_T_BDCDATA STRUCTURE BDCDATA
                    USING    VALUE(P_FIELD)
                             VALUE(P_VALUE).
      DATA L_W_BDCDATA TYPE BDCDATA.     "Work area
      L_W_BDCDATA-FNAM = P_FIELD.
      L_W_BDCDATA-FVAL = P_VALUE.
      APPEND L_W_BDCDATA TO P_T_BDCDATA.
    ENDFORM.                    " bdc_field
    *&      Form  open_group
          bdc  open group in sm35
         -->P_P_SESSN  session name
    FORM OPEN_GROUP  USING    P_P_SESSN.
      CONSTANTS C_X TYPE C VALUE 'X'.
      CALL FUNCTION 'BDC_OPEN_GROUP'
        EXPORTING
          CLIENT              = SY-MANDT
          GROUP               = P_P_SESSN
          KEEP                = C_X
          USER                = SY-UNAME
          PROG                = SY-CPROG
        EXCEPTIONS
          CLIENT_INVALID      = 1
          DESTINATION_INVALID = 2
          GROUP_INVALID       = 3
          GROUP_IS_LOCKED     = 4
          HOLDDATE_INVALID    = 5
          INTERNAL_ERROR      = 6
          QUEUE_ERROR         = 7
          RUNNING             = 8
          SYSTEM_LOCK_ERROR   = 9
          USER_INVALID        = 10
          OTHERS              = 11.
      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.                    " open_group
    *&      Form  bdc_insert
          bdc insert in sm35
         -->P_T_BDCDATA  bdcdata table
         -->P_tcode      transaction
    FORM BDC_INSERT  TABLES   P_T_BDCDATA STRUCTURE BDCDATA
                     USING    VALUE(P_TCODE).
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          TCODE            = P_TCODE
        TABLES
          DYNPROTAB        = P_T_BDCDATA
        EXCEPTIONS
          INTERNAL_ERROR   = 1
          NOT_OPEN         = 2
          QUEUE_ERROR      = 3
          TCODE_INVALID    = 4
          PRINTING_INVALID = 5
          POSTING_INVALID  = 6
          OTHERS           = 7.
      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.                    " bdc_insert
    *&      Form  close_group
          bdc close group in sm35
    FORM CLOSE_GROUP .
      CALL FUNCTION 'BDC_CLOSE_GROUP'
        EXCEPTIONS
          NOT_OPEN    = 1
          QUEUE_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.
    ENDFORM.                    " close_group
    *&      Form  pre_process_record
          text
         -->P_W_DATAIN  text
         <--P_W_DATA  text
    FORM pre_process_record  USING    P_W_DATAIN
                             CHANGING P_W_DATA.
    move p_w_datain to p_w_data-bukrs.
    ENDFORM.                    " pre_process_record

    copy paste this code
    *& Report ZTEST_RECUPLOAD
    REPORT ZTEST_RECUPLOAD.
    *include bdcrecx1.
    *******************Selection screen*************************************
    SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-T01 .
    PARAMETERS P_FILE TYPE RLGRAP-FILENAME OBLIGATORY.
    PARAMETERS P_SESSN TYPE APQI-GROUPID DEFAULT 'RECURRING'.
    PARAMETERS P_SESSN2 TYPE APQI-GROUPID DEFAULT 'RECURRING_E'.
    SELECTION-SCREEN END OF BLOCK 1.
    *********************Type declaration***********************************
    *type for data input table
    TYPES : BEGIN OF TY_DATA,
    BUKRS TYPE T001-BUKRS, "Company code
    BLART TYPE BKPF-BLART, "Document type
    * BUDAT TYPE BKPF-BUDAT, "Posting date
    DBBDT TYPE BKDF-DBBDT, "First run
    DBATR TYPE BKDF-DBATR, "Next run
    DBEDT TYPE BKDF-DBEDT, "last run
    DBMON TYPE BKDF-DBMON, "Run frequency
    DBTAG TYPE BKDF-DBTAG, "Run date
    * DBZHL TYPE BKDF-DBZHL, "no of runs
    XBLNR TYPE BKPF-XBLNR, "reference(site)
    BKTXT TYPE BKPF-BKTXT, "document header data
    * USNAM TYPE BKPF-USNAM, "User name
    * CPUDT TYPE BKPF-CPUDT, "Entry date
    BSCHL_1 TYPE BSEG-BSCHL, "Posting key 1 item
    HKONT_1 TYPE BSEG-HKONT, "Account 1 item
    DESC_1 TYPE CHAR40, "Description vendor/GL 1 item
    MWSKZ_1 TYPE BSEG-MWSKZ, "Tax code 1 item
    * MWSTS1_1 TYPE BSEG-MWSTS, "Tax Amount 1 item
    MWSTS2_1 TYPE BSEG-MWSTS, "Amount is local currency 1 item
    * MWSTS3_1 TYPE BSEG-MWSTS, "Amount is foreign currency 1 item
    SGTXT_1 TYPE BSEG-SGTXT, "Item text 1 item
    ZUONR_1 TYPE BSEG-ZUONR, "Assignment 1 item
    BSCHL_2 TYPE BSEG-BSCHL, "Posting key 2 item
    HKONT_2 TYPE BSEG-HKONT, "Account 2 item
    DESC_2 TYPE CHAR40, "Description vendor/GL 2 item
    MWSKZ_2 TYPE BSEG-MWSKZ, "Tax code 2 item
    ** MWSTS1_2 TYPE BSEG-MWSTS, "Tax Amount 2 item
    MWSTS2_2 TYPE BSEG-MWSTS, "Amount is local currency 2 item
    * MWSTS3_2 TYPE BSEG-MWSTS, "Amount is foreign currency 2 item
    KOSTL TYPE COBL-KOSTL, "Cost center
    AUFNR TYPE COBL-AUFNR, "Internal order number
    SGTXT_2 TYPE BSEG-SGTXT, "Item text 2 item
    ZUONR_2 TYPE BSEG-ZUONR, "Assignment 2 item
    END OF TY_DATA.
    *type for data error table
    TYPES : BEGIN OF TY_ERROR,
    BUKRS TYPE T001-BUKRS, "Company code
    BLART TYPE BKPF-BLART, "Document type
    * BUDAT TYPE BKPF-BUDAT, "Posting date
    DBBDT TYPE BKDF-DBBDT, "First run
    DBATR TYPE BKDF-DBATR, "Next run
    DBEDT TYPE BKDF-DBEDT, "last run
    DBMON TYPE BKDF-DBMON, "Run frequency
    DBTAG TYPE BKDF-DBTAG, "Run date
    * DBZHL TYPE BKDF-DBZHL, "no of runs
    XBLNR TYPE BKPF-XBLNR, "reference(site)
    BKTXT TYPE BKPF-BKTXT, "document header data
    * USNAM TYPE BKPF-USNAM, "User name
    * CPUDT TYPE BKPF-CPUDT, "Entry date
    BSCHL_1 TYPE BSEG-BSCHL, "Posting key 1 item
    HKONT_1 TYPE BSEG-HKONT, "Account 1 item
    DESC_1 TYPE CHAR40, "Description vendor/GL 1 item
    MWSKZ_1 TYPE BSEG-MWSKZ, "Tax code 1 item
    * MWSTS1_1 TYPE BSEG-MWSTS, "Tax Amount 1 item
    MWSTS2_1 TYPE BSEG-MWSTS, "Amount is local currency 1 item
    * MWSTS3_1 TYPE BSEG-MWSTS, "Amount is foreign currency 1 item
    SGTXT_1 TYPE BSEG-SGTXT, "Item text 1 item
    ZUONR_1 TYPE BSEG-ZUONR, "Assignment 1 item
    BSCHL_2 TYPE BSEG-BSCHL, "Posting key 2 item
    HKONT_2 TYPE BSEG-HKONT, "Account 2 item
    DESC_2 TYPE CHAR40, "Description vendor/GL 2 item
    MWSKZ_2 TYPE BSEG-MWSKZ, "Tax code 2 item
    * MWSTS1_2 TYPE BSEG-MWSTS, "Tax Amount 2 item
    MWSTS2_2 TYPE BSEG-MWSTS, "Amount is local currency 2 item
    * MWSTS3_2 TYPE BSEG-MWSTS, "Amount is foreign currency 2 item
    KOSTL TYPE COBL-KOSTL, "Cost center
    AUFNR TYPE COBL-AUFNR, "Internal order number
    SGTXT_2 TYPE BSEG-SGTXT, "Item text 2 item
    ZUONR_2 TYPE BSEG-ZUONR, "Assignment 2 item
    END OF TY_ERROR.
    *********************Data declaration************************************
    DATA : T_DATA TYPE TABLE OF TY_DATA, "Table to upload correct entries
    T_ERROR TYPE TABLE OF TY_ERROR. "Table to upload error data
    DATA : W_DATA type TY_DATA, "workarea for t_data
    W_ERROR TYPE TY_ERROR. "workarea for t_error
    DATA : T_BDCDATA TYPE TABLE OF BDCDATA,
    W_BDCDATA TYPE BDCDATA.
    DATA : T_SEL_FILE TYPE FILETABLE,
    W_RETURN_CODE TYPE I VALUE '0',
    W_SEL_FILE LIKE LINE OF T_SEL_FILE.
    DATA : T_DATAIN TYPE TABLE OF TY_DATA,
    W_DATAIN TYPE string.
    DATA : W_FILE TYPE STRING.
    *********************At Selection Screen**********************************
    *selection screen validations
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
    WINDOW_TITLE = 'Select File for upload'
    * DEFAULT_EXTENSION =
    * DEFAULT_FILENAME =
    FILE_FILTER = '*.xls'
    * WITH_ENCODING =
    * INITIAL_DIRECTORY =
    * MULTISELECTION =
    CHANGING
    FILE_TABLE = T_SEL_FILE
    RC = W_RETURN_CODE
    * USER_ACTION =
    * FILE_ENCODING =
    EXCEPTIONS
    FILE_OPEN_DIALOG_FAILED = 1
    CNTL_ERROR = 2
    ERROR_NO_GUI = 3
    NOT_SUPPORTED_BY_GUI = 4
    OTHERS = 5
    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 W_RETURN_CODE <> -1.
    READ TABLE T_SEL_FILE INTO W_SEL_FILE INDEX 1.
    CLEAR P_FILE.
    MOVE W_SEL_FILE TO P_FILE.
    ENDIF.
    *at selection screen
    AT SELECTION-SCREEN ON P_SESSN.
    IF P_SESSN IS INITIAL.
    P_SESSN = 'RECURRING'.
    ENDIF.
    AT SELECTION-SCREEN ON P_SESSN2.
    IF P_SESSN2 IS INITIAL.
    P_SESSN2 = 'RECURRING_E'.
    ENDIF.
    *********************Start of Selection ****************************
    START-OF-SELECTION.
    OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
    *error message when file not found.
    IF SY-SUBRC <> 0.
    MESSAGE 'File Not Found' TYPE 'E'.
    ENDIF.
    DO.
    READ DATASET P_FILE INTO w_datain.
    IF SY-SUBRC EQ 0.
    perform pre_process_record using w_datain
    changing w_data.
    PERFORM VALIDATE_DATA TABLES T_DATA
    T_ERROR
    USING W_DATA.
    ELSE.
    EXIT.
    ENDIF.
    ENDDO.
    CLOSE DATASET P_FILE.
    *check if any error has occured.
    IF T_ERROR[] IS NOT INITIAL.
    PERFORM FILL_BDC_TABLE TABLES T_ERROR
    T_BDCDATA
    USING P_SESSN2.
    ENDIF.
    *Check if any records are present to be uploaded.
    IF T_DATA[] IS NOT INITIAL.
    PERFORM FILL_BDC_TABLE TABLES T_DATA
    T_BDCDATA
    USING P_SESSN.
    ELSE.
    WRITE :/ 'No Correct Records were found to create session in SM35',
    / 'Please Check the File'.
    ENDIF.
    *& Form validate_data
    * Sub routine to check correctness of the uploaded data.
    * -->P_T_DATA table to upload correct entries
    * -->P_T_ERROR table to upload erroneous entries
    * -->P_W_DATA current record
    FORM VALIDATE_DATA TABLES P_T_DATA STRUCTURE W_DATA
    P_T_ERROR STRUCTURE W_ERROR
    USING P_W_DATA structure w_data .
    DATA : L_W_LIFNR TYPE LFA1-LIFNR,
    L_W_SAKNR TYPE SKA1-SAKNR.
    DATA: L_W_DATA TYPE TY_DATA,
    L_W_ERROR TYPE TY_ERROR.
    MOVE P_W_DATA TO L_W_DATA.
    DATA : L_FG_ERROR TYPE C,
    L_W_DATE TYPE SY-DATUM.
    CONSTANTS : C_X TYPE C VALUE 'X',
    C_O2CA(4) TYPE C VALUE 'O2CA',
    C_ZK_1(2) TYPE C VALUE 'ZK',
    C_ZK_2(2) TYPE C VALUE 'zk',
    C_NUM(17) TYPE C VALUE '01234567890/.-, ',
    C_31(2) TYPE C VALUE '31',
    C_40(2) TYPE C VALUE '40'.
    L_FG_ERROR = SPACE.
    DO.
    *check document type is 'ZK'
    IF NOT L_W_DATA-BLART NE C_ZK_1 OR
    L_W_DATA-BLART NE C_ZK_2.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check 1 item text fields are filled by numeric value.
    IF NOT L_W_DATA-SGTXT_1 CO C_NUM.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check 2 item text fields are filled by date.
    MOVE L_W_DATA-SGTXT_2 TO L_W_DATE.
    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
    EXPORTING
    DATE = L_W_DATE
    EXCEPTIONS
    PLAUSIBILITY_CHECK_FAILED = 1
    OTHERS = 2.
    IF SY-SUBRC <> 0.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check first posting key is '31'
    IF NOT L_W_DATA-BSCHL_1 EQ C_31.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check second posting key is '40'
    IF NOT L_W_DATA-BSCHL_2 EQ C_40.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check valid Vendor
    SELECT SINGLE LIFNR FROM LFA1 INTO L_W_LIFNR
    WHERE LIFNR = L_W_DATA-HKONT_1.
    IF SY-SUBRC <> 0.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check valid G/L account.
    SELECT SINGLE SAKNR FROM SKA1 INTO L_W_SAKNR
    WHERE KTOPL = C_O2CA AND
    SAKNR = L_W_DATA-HKONT_2.
    IF SY-SUBRC <> 0.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check 1 item assignment contains numeric value
    IF NOT L_W_DATA-ZUONR_1 CO C_NUM.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check 2 item assigment contains date value
    MOVE L_W_DATA-ZUONR_2 TO L_W_DATE.
    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
    EXPORTING
    DATE = L_W_DATE
    EXCEPTIONS
    PLAUSIBILITY_CHECK_FAILED = 1
    OTHERS = 2.
    IF SY-SUBRC <> 0.
    L_FG_ERROR = C_X.
    EXIT.
    ENDIF.
    *check if no error has occured
    IF NOT L_FG_ERROR EQ C_X.
    EXIT.
    ENDIF.
    ENDDO.
    *check error flag and insert error text.
    CASE L_FG_ERROR.
    WHEN C_X. "When error has occured.
    APPEND L_W_DATA TO P_T_ERROR.
    WHEN OTHERS. "When no error has occured.
    APPEND L_W_DATA TO P_T_DATA.
    ENDCASE.
    ENDFORM. " validate_data
    *& Form download_error_log
    * Sub routine to download the error log
    * -->P_T_ERROR error log
    FORM DOWNLOAD_ERROR_LOG TABLES P_T_ERROR STRUCTURE W_ERROR.
    DATA : L_FILENAME TYPE STRING,
    L_PATH TYPE STRING,
    L_FULLPATH TYPE STRING.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
    WINDOW_TITLE = 'Save the Error log'
    CHANGING
    FILENAME = L_FILENAME
    PATH = L_PATH
    FULLPATH = L_FULLPATH
    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.
    CHECK L_FULLPATH IS NOT INITIAL.
    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    FILENAME = L_FULLPATH
    FILETYPE = 'ASC'
    WRITE_FIELD_SEPARATOR = 'X'
    TABLES
    DATA_TAB = P_T_ERROR
    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.
    ENDFORM. " download_error_log
    *& Form fill_bdc_table
    * bdc session is created in SM35
    * -->P_T_DATA correct data
    * -->P_T_BDCDATA bdcdata
    * -->P_P_SESSN session name
    FORM FILL_BDC_TABLE TABLES P_T_DATA STRUCTURE W_DATA
    P_T_BDCDATA STRUCTURE BDCDATA
    USING P_P_SESSN.
    DATA : L_W_DATA TYPE TY_DATA. "workarea for t_data
    CONSTANTS: C_EUR(3) TYPE C VALUE 'EUR'.
    *open batch
    PERFORM OPEN_GROUP USING P_P_SESSN.
    LOOP AT P_T_DATA INTO L_W_DATA.
    *clear the bdc table
    REFRESH P_T_BDCDATA.
    *initial screen
    PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
    USING 'SAPMF05A' '0106'.
    PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BKPF-WAERS',
    BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00', "enter
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BUKRS' L_W_DATA-BUKRS, "company code
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBBDT' L_W_DATA-DBBDT, "first run on
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBATR' L_W_DATA-DBATR, "next run on
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBEDT' L_W_DATA-DBEDT, "last run on
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBMON' L_W_DATA-DBMON, "run frequency
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKDF-DBTAG' L_W_DATA-DBTAG, "run date
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BLART' L_W_DATA-BLART, "document type
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-WAERS' C_EUR, "currency
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-XBLNR' L_W_DATA-XBLNR, "reference
    BDC_FIELD TABLES P_T_BDCDATA USING 'BKPF-BKTXT' L_W_DATA-BKTXT, "document header data
    BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_1,"posting key
    BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_1."account no
    *second screen (First line item)
    PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
    USING 'SAPMF05A' '0302'.
    PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWKO',
    BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '/00', "enter
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_1, "amount in LC
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_1, "tax code
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_1, "assignment
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_1, "item level text
    BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWBS' L_W_DATA-BSCHL_2, "posting key
    BDC_FIELD TABLES P_T_BDCDATA USING 'RF05A-NEWKO' L_W_DATA-HKONT_2. "account no
    *third screen (Second line item)
    PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
    USING 'SAPMF05A' '0300'.
    PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'BSEG-EBELN',
    BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=AB', "overview button
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-WRBTR' L_W_DATA-MWSTS2_2, "amount in LC
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-MWSKZ' L_W_DATA-MWSKZ_2, "tax code
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-ZUONR' L_W_DATA-ZUONR_2, "assigment
    BDC_FIELD TABLES P_T_BDCDATA USING 'BSEG-SGTXT' L_W_DATA-SGTXT_2. "item text
    *fourth screen (pop up)
    PERFORM BDC_DYNPRO TABLES P_T_BDCDATA
    USING 'SAPLKACB' '0002'.
    PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'COBL-KOSTL',
    BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=ENTE', "ok button
    BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-KOSTL' L_W_DATA-KOSTL, "cost center
    BDC_FIELD TABLES P_T_BDCDATA USING 'COBL-AUFNR' L_W_DATA-AUFNR. "order number
    *fifth screen
    PERFORM BDC_FIELD TABLES P_T_BDCDATA
    USING 'SAPMF05A' '0070'.
    PERFORM : BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_CURSOR' 'RF05A-NEWBS',
    BDC_FIELD TABLES P_T_BDCDATA USING 'BDC_OKCODE' '=BU'. "save document
    PERFORM BDC_INSERT TABLES P_T_BDCDATA
    USING 'ZREC_ENTRY'.
    ENDLOOP.
    *close the batch.
    PERFORM CLOSE_GROUP.
    ENDFORM. " fill_bdc_table
    *& Form bdc_dynpro
    * bdc screen insert sub routine
    * -->P_T_BDCDATA BDC table
    * -->P_PROGRAM Program name
    * -->P_SCREEN Screen no
    FORM BDC_DYNPRO TABLES P_T_BDCDATA STRUCTURE BDCDATA
    USING VALUE(P_PROGRAM)
    VALUE(P_SCREEN).
    CONSTANTS C_X TYPE C VALUE 'X'.
    DATA L_W_BDCDATA TYPE BDCDATA.
    L_W_BDCDATA-PROGRAM = P_PROGRAM.
    L_W_BDCDATA-DYNPRO = P_SCREEN.
    L_W_BDCDATA-DYNBEGIN = C_X.
    APPEND L_W_BDCDATA TO P_T_BDCDATA.
    ENDFORM. " bdc_dynpro
    *& Form bdc_field
    * bdc field screen routine
    * -->P_T_BDCDATA BDC table
    * -->P_FIELD Field name
    * -->P_VALUE Value
    FORM BDC_FIELD TABLES P_T_BDCDATA STRUCTURE BDCDATA
    USING VALUE(P_FIELD)
    VALUE(P_VALUE).
    DATA L_W_BDCDATA TYPE BDCDATA. "Work area
    L_W_BDCDATA-FNAM = P_FIELD.
    L_W_BDCDATA-FVAL = P_VALUE.
    APPEND L_W_BDCDATA TO P_T_BDCDATA.
    ENDFORM. " bdc_field
    *& Form open_group
    * bdc open group in sm35
    * -->P_P_SESSN session name
    FORM OPEN_GROUP USING P_P_SESSN.
    CONSTANTS C_X TYPE C VALUE 'X'.
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    CLIENT = SY-MANDT
    GROUP = P_P_SESSN
    KEEP = C_X
    USER = SY-UNAME
    PROG = SY-CPROG
    EXCEPTIONS
    CLIENT_INVALID = 1
    DESTINATION_INVALID = 2
    GROUP_INVALID = 3
    GROUP_IS_LOCKED = 4
    HOLDDATE_INVALID = 5
    INTERNAL_ERROR = 6
    QUEUE_ERROR = 7
    RUNNING = 8
    SYSTEM_LOCK_ERROR = 9
    USER_INVALID = 10
    OTHERS = 11.
    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. " open_group
    *& Form bdc_insert
    * bdc insert in sm35
    * -->P_T_BDCDATA bdcdata table
    * -->P_tcode transaction
    FORM BDC_INSERT TABLES P_T_BDCDATA STRUCTURE BDCDATA
    USING VALUE(P_TCODE).
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = P_TCODE
    TABLES
    DYNPROTAB = P_T_BDCDATA
    EXCEPTIONS
    INTERNAL_ERROR = 1
    NOT_OPEN = 2
    QUEUE_ERROR = 3
    TCODE_INVALID = 4
    PRINTING_INVALID = 5
    POSTING_INVALID = 6
    OTHERS = 7.
    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. " bdc_insert
    *& Form close_group
    * bdc close group in sm35
    FORM CLOSE_GROUP .
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
    NOT_OPEN = 1
    QUEUE_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.
    ENDFORM. " close_group
    *& Form pre_process_record
    * text
    * -->P_W_DATAIN text
    * <--P_W_DATA text
    FORM pre_process_record USING P_W_DATAIN
    CHANGING P_W_DATA structure w_data.
    move p_w_datain to p_w_data-bukrs.
    ENDFORM. " pre_process_record

  • Error while running BDC in Background

    Hi,
    I am using BDC for a custom transaction YMMFGC. The operation that I am acheiving using this transaction is updating Materials from SalesOrg/Dist Chnl to another SalesOrg/Dist Chnl. When I am trying to run the Program in Foreground in No Screens Mode or Visible screen navigations, the data is getting updated in the MVKE table. Extension is verified for in this table. But when I try to run the program in the background, the job is getting finished successfully, but the data is not getting updated in the table. Please suggest how to proceed with this.
    Thanks!!!
    ChK

    Write your BDC_OPEN_GROUP in the following manner..
    p_group  - Name of BDC session
                 p_keep   - set to 'X' to keep session after process
                 p_user   - User ID for authorizations
                 p_subrc  - returned status.
      CALL FUNCTION 'BDC_OPEN_GROUP'
           EXPORTING
                client            = sy-mandt
                group             = p_group
                keep              = p_keep
                user              = p_user
           IMPORTING
                qid               = p_qid
           EXCEPTIONS
                client_invalid    = 1
                group_invalid     = 3
                group_is_locked   = 4
                running           = 8
                system_lock_error = 9
                user_invalid      = 10
                OTHERS            = 11.
    also..what does update mode 'P' means..it should be either 'S' or 'A' or 'L'..
    Check below...
    ctumode LIKE ctu_params-dismode
      "          A: show all dynpros
      "          E: show dynpro on error only
      "          N: do not display dynpro
    cupdate LIKE ctu_params-updmode
      "          S: synchronously
      "          A: asynchronously
      "          L: local
      TRANSLATE: p_tcode  TO UPPER CASE,
                 ctumode   TO UPPER CASE,
                 cupdate TO UPPER CASE.
      CALL TRANSACTION p_tcode USING         p_tb_bdc
                               MODE          ctumode
                               UPDATE        cupdate
                               MESSAGES INTO p_tb_bdcmsg.

  • Error with creating a new employee - PA40

    When creating a new employee record using PA40, the PERNR gets generated as soon as Infotype 0000 is updated. How do we capture the new PERNR, if a BDC recording of PA40 fails midway during the process
    I would appreciate and reward any valuable ideas!

    create a session for error messages....and u can go to sm35 and check what has ahppened.....if not use format_message and display what has happened as report output....in case of BDC fail......!!!!!
    it will be like....
    call transaction 'PA40' using it_bdctab
    mode 'N'
    update 'S'
    messages into it_bdcmsgcoll.
    if sy-subrc <> 0.
    *--store the pernr for which bdc failed......here!!!
    call function 'bdc_open_group'
    call function 'bdc_insert'
    call function format_message
    call function 'bdc_close_group'
    *---check error and try to rectify it.....
    Regards
    Vasu

  • Creation of error log  on input data  and stat report

    I am doing call transaction on <b>C202</b> transaction.my client asked me before uploading the file he needs some validations on input file and he is asking me to create  a log for all the validations.i have to place error lof for all the input data.
    •An error log will record all errors occurring during upload. For each error the list should
    contain the data (line) going in error and an error text in a subsequent column (subsequent to data). The change number used to perform  the upload will be stated in the header of the error list.A txt-file containing the error log will get the same name as the input file, but with an ending –err.xls.
    Therefore no Batch-Input-Session is needed.
    • After execution of the batch input program, the following analysis regarding execution will be shown:
    o Number of records in input file (including title, first line)
    o Number of records successfully updated
    o Number of records in error
    Example:
    Number of records in input file (incl. first line) 4
    Number of records successfully updated:   3
    Number of records in error:      0
    How to do this according to client  requirements.can u help me to get a statastical way to represent errors.  Send me some smpale code for number of errors and no records gets success and no of failed.
    Thanks
    chandrasekhar

    Hai Chandrasekhar
    Go through the following Code
    report Z_CALLTRANS_VENDOR_01
    no standard page heading line-size 255.
    Generated data section with specific formatting - DO NOT CHANGE ***
    data: begin of it_lfa1 occurs 0,
    KTOKK like lfa1-ktokk,
    NAME1 like lfa1-name1,
    SORTL like lfa1-sortl,
    LAND1 like lfa1-land1,
    end of it_lfa1.
    End generated data section ***
    data : it_bdc like bdcdata occurs 0 with header line.
    *DATA: IT_MESSAGES TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE.
    *DATA: LV_MESSAGE(255).
    data : it_messages like bdcmsgcoll occurs 0 with header line.
    data : V_message(255).
    data : V_flag.
    data : V_datum1 type sy-datum.
    data : begin of it_mesg occurs 0,
    message(100),
    end of it_mesg.
    *V_datum1 = sy-datum-1.
    parameters : P_Sess like APQI-GROUPID.
    start-of-selection.
    perform Get_data.
    *perform open_group.
    loop at it_lfa1.
    perform bdc_dynpro using 'SAPMF02K' '0100'.
    perform bdc_field using 'BDC_CURSOR'
    'RF02K-KTOKK'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'RF02K-KTOKK'
    it_lfa1-KTOKK.
    perform bdc_dynpro using 'SAPMF02K' '0110'.
    perform bdc_field using 'BDC_CURSOR'
    'LFA1-LAND1'.
    perform bdc_field using 'BDC_OKCODE'
    '=UPDA'.
    perform bdc_field using 'LFA1-NAME1'
    it_lfa1-name1.
    perform bdc_field using 'LFA1-SORTL'
    it_lfa1-sortl.
    perform bdc_field using 'LFA1-LAND1'
    it_lfa1-land1.
    call transaction 'XK01' using it_bdc
    mode 'N'
    update 'S'
    messages into it_messages.
    if sy-subrc <> 0.
    if V_flag <> 'X'.
    perform open_group.
    V_flag = 'X'.
    endif.
    perform bdc_transaction. "using 'XK01'.
    endif.
    perform format_messages.
    refresh : it_bdc,it_messages.
    endloop.
    if V_flag = 'X'.
    perform close_group.
    endif.
    *& Form Get_data
    text
    --> p1 text
    <-- p2 text
    FORM Get_data .
    CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
    FILENAME = 'C:\srinu_vendor.txt'
    FILETYPE = 'ASC'
    TABLES
    DATA_TAB = it_lfa1
    EXCEPTIONS
    CONVERSION_ERROR = 1
    INVALID_TABLE_WIDTH = 2
    INVALID_TYPE = 3
    NO_BATCH = 4
    UNKNOWN_ERROR = 5
    GUI_REFUSE_FILETRANSFER = 6
    OTHERS = 7
    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. " Get_data
    *& Form bdc_dynpro
    text
    -->P_0061 text
    -->P_0062 text
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
    CLEAR it_BDC.
    it_BDC-PROGRAM = PROGRAM.
    it_BDC-DYNPRO = DYNPRO.
    it_BDC-DYNBEGIN = 'X'.
    APPEND it_BDC.
    ENDFORM.
    Insert field *
    FORM BDC_FIELD USING FNAM FVAL.
    CLEAR it_BDC.
    it_BDC-FNAM = FNAM.
    it_BDC-FVAL = FVAL.
    APPEND it_BDC.
    ENDFORM.
    *& Form format_messages
    text
    --> p1 text
    <-- p2 text
    FORM format_messages .
    loop at it_messages.
    CALL FUNCTION 'FORMAT_MESSAGE'
    EXPORTING
    ID = it_messages-MSGID
    LANG = 'EN'
    NO = it_messages-MSGNR
    V1 = it_messages-MSGV1
    V2 = it_messages-MSGV2
    V3 = it_messages-MSGV3
    V4 = it_messages-MSGV4
    IMPORTING
    MSG = V_message
    EXCEPTIONS
    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.
    write : / V_message.
    clear : V_message.
    endloop.
    ENDFORM. " format_messages
    *& Form open_group
    text
    --> p1 text
    <-- p2 text
    FORM open_group .
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
    CLIENT = SY-MANDT
    GROUP = P_Sess
    HOLDDATE = V_datum1
    KEEP = 'X'
    USER = SY-UNAME
    IF SY-SUBRC = 0.
    write : / 'Session Creating wit Name : ',P_Sess.
    ENDIF.
    ENDFORM. " open_group
    *& Form close_group
    text
    --> p1 text
    <-- p2 text
    FORM close_group .
    CALL FUNCTION 'BDC_CLOSE_GROUP'.
    ENDFORM. " close_group
    *& Form bdc_transaction
    text
    -->P_0132 text
    FORM bdc_transaction. "USING VALUE(P_0132).
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
    TCODE = 'XK01'
    POST_LOCAL = NOVBLOCAL
    PRINTING = NOPRINT
    SIMUBATCH = ' '
    CTUPARAMS = ' '
    TABLES
    DYNPROTAB = it_bdc
    EXCEPTIONS
    INTERNAL_ERROR = 1
    NOT_OPEN = 2
    QUEUE_ERROR = 3
    TCODE_INVALID = 4
    PRINTING_INVALID = 5
    POSTING_INVALID = 6
    OTHERS = 7
    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. " bdc_transaction
    Regards
    Sreeni
    Message was edited by: Sreenivasulu Ponnadi

  • Error in LSMW

    Hi
    i am using lsmw to upload my pouting
    I am using batch input methode to upload my header data. and direct input  methode to upload my operation and material assignment data.
    is this the correct way of doing lsmw.
    can we upload header data and the operation data and material assignment data in one step.
    ok
    when i am doing batch inpurt methode for uploading my header data
    its showing me this error message.
    BDC_OPEN_GROUP, lock date .01132009. is invalid
    Message no. 00335
    Diagnosis
    Error creating a batch input session.
    Procedure
    Contact the person in charge.
    what should i do. is there any way to relesase the dates.

    Hi,
    There is a field BI000-START. You just have to Map it with any of the earlier date.I mapped it with 20120101 and it worked. It should be in YYYYMMDD format.
    Regards
    Ankush

  • Error: No batch input data for screen SAPMZVKDIALOGDEMO 1000 Help Needed

    Hi Experts!
    I wrote a program for BDC. I am attaching the code herewith. When i am trying to process the session in SM35, i was getting the error: No batch input data for screen SAPMZVKDIALOGDEMO 1000. Can anyone please tell me, what am i doing wrong.
    Thanks.
    REPORT  zvkbdcdemo01.
    DATA: bdc_tab LIKE bdcdata OCCURS 6 WITH HEADER LINE.
    DATA: session LIKE apqi-groupid VALUE 'Session #1'.
    CALL FUNCTION 'BDC_OPEN_GROUP'
      EXPORTING
        client                    = sy-mandt
    *   DEST                      = FILLER8
        group                     = session
    *   HOLDDATE                  = FILLER8
    *   KEEP                      = FILLER1
        user                      = sy-uname
    *   RECORD                    = FILLER1
    *   PROG                      = SY-CPROG
    * IMPORTING
    *   QID                       =
    * EXCEPTIONS
    *   CLIENT_INVALID            = 1
    *   DESTINATION_INVALID       = 2
    *   GROUP_INVALID             = 3
    *   GROUP_IS_LOCKED           = 4
    *   HOLDDATE_INVALID          = 5
    *   INTERNAL_ERROR            = 6
    *   QUEUE_ERROR               = 7
    *   RUNNING                   = 8
    *   SYSTEM_LOCK_ERROR         = 9
    *   USER_INVALID              = 10
    *   OTHERS                    = 11
    IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    PERFORM fill_bdc_tab.
    CALL FUNCTION 'BDC_INSERT'
      EXPORTING
        tcode                  = 'ZVKTR001'
    *   POST_LOCAL             = NOVBLOCAL
    *   PRINTING               = NOPRINT
    *   SIMUBATCH              = ' '
    *   CTUPARAMS              = ' '
      TABLES
        dynprotab              = bdc_tab
    * EXCEPTIONS
    *   INTERNAL_ERROR         = 1
    *   NOT_OPEN               = 2
    *   QUEUE_ERROR            = 3
    *   TCODE_INVALID          = 4
    *   PRINTING_INVALID       = 5
    *   POSTING_INVALID        = 6
    *   OTHERS                 = 7
    IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    * EXCEPTIONS
    *   NOT_OPEN          = 1
    *   QUEUE_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.
    *&      Form  fill_bdc_tab
    *       text
    FORM fill_bdc_tab.
      REFRESH bdc_tab.
      PERFORM populate_bdc_tab USING:
      '1' 'SAPMZVKDIALOGDEMO' '1000',
      ' ' 'SFLIGHT-CARRID' 'LH',
      ' ' 'SFLIGHT-CONNID' '0400',
      ' ' 'SFLIGHT-FLDATE' '07/07/2007',
      ' ' 'SFLIGHT-PRICE' '1982',
      ' ' 'SFLIGHT-CURRENCY' 'EUR',
      ' ' 'SFLIGHT-PLANETYPE' 'A310-300',
      ' ' 'BDC_OKCODE' 'CREA'.
    ENDFORM.                    "fill_bdc_tab
    *&      Form  POPULATE_BDC_TAB
    *       text
    *      -->FLAG       text
    *      -->VAR1       text
    *      -->VAR2       text
    FORM populate_bdc_tab USING flag var1 var2.
      CLEAR bdc_tab.
      IF flag = '1'.
        bdc_tab-program = var1.
        bdc_tab-dynpro = var2.
        bdc_tab-dynbegin = 'X'.
      ELSE.
        bdc_tab-fnam = var1.
        bdc_tab-fval = var2.
      ENDIF.
      APPEND bdc_tab.
    ENDFORM.                    "POPULATE_BDC_TAB

    This normally means that you are trying to insert data on a screen for which a particular field is not available.
    So check screen number, screen fields and report name. In case of screen fields, use F1, F9 (technical information), and check the name of the screen field for batch processing (all the way at th bottom of the pop-up). This can differ from actual name of the screen field.
    If all this is ok, try to create a recording of the transaction with SM37.

  • Pls tell me how to check the errors in  BDC CALL TRANSACTION

    lemme know

    HI ,
    check for the bold part..
    REPORT ZCONCUR_UPLOAD_TO_SAP NO STANDARD PAGE HEADING
                                 LINE-SIZE 170
                                 LINE-COUNT 58
                                 MESSAGE-ID ZM.
                 Internal Table                                         *
    *-Internal table for the Header input data from the Comma Delimited file
    DATA: BEGIN OF IT_DATA_HEADER OCCURS 0,
              ID    TYPE C,      "Identifier
              BUKRS(6),          "Company Code
              WAERS(7),          "Currency
              NEWKO(12),         "Vendor
              XBLNR(16),         "First Name
              XBLNR1(16),        "Last Name
              BLDAT(12),         "Document/Posting date
              PK(15),            "Reference
              WRBTR(15),         "Amount
              BKTXT(27),         "Doc.header text
              BKTXT1(27),        "Item text
              SELNO(8),          "Serial No
          END OF IT_DATA_HEADER.
    *-Internal table for the item input data from the Comma Delimited file
    DATA: BEGIN OF IT_DATA_ITEM OCCURS 0,
              ID    TYPE C,      "Identifier
              NEWKO(19),         "Vendor
              BUKRS(6),          "Company Code
              KOSTL(12),         "Cost center
              WRBTR(15),         "Amount
              SGTXT(50),         "Text
              SELNO(8),          "Serial No Header
              SELNO1(8),         "Serial No item
          END OF IT_DATA_ITEM      .
    *-Internal table for the Header input data from the Comma Delimited file
    *-Removing " " From Comma Delimited file
    DATA: BEGIN OF IT_FINAL_HEADER OCCURS 0,
              ID     TYPE C,           "Identifier
              BUKRS  LIKE BKPF-BUKRS,  "Company Code
              WAERS  LIKE BKPF-WAERS,  "Currency
              NEWKO  TYPE RF05A-NEWKO, "Vendor
              XBLNR  LIKE BKPF-XBLNR,
              XBLNR1 LIKE BKPF-XBLNR,
              BLDAT(10), " LIKE BKPF-BLDAT,  "Date
              PK(15),                  "Reference
              WRBTR(15),               "Amount
              BKTXT  LIKE BKPF-BKTXT,  "Doc.header text
              BKTXT1 LIKE BKPF-BKTXT,  "Item text
              SELNO  TYPE I,           "Serial No
              FLAG   TYPE C,
          END OF IT_FINAL_HEADER.
    *-Internal table for the Item input data from the Comma Delimited file
    *-Removing " " From Comma Delimited file
    DATA: BEGIN OF IT_FINAL_ITEM OCCURS 0,
              ID     TYPE C,           "Identifier
              NEWKO  TYPE RF05A-NEWKO, "Account
              BUKRS  LIKE BKPF-BUKRS,  "Company Code
              KOSTL  LIKE BSEG-KOSTL,  "Cost Center
              WRBTR(15),               "Amount
              SGTXT  LIKE BSEG-SGTXT,  "Text
              SELNO  TYPE I,           "Serial No
              SELNO1 TYPE I,           "Serial No
          END OF IT_FINAL_ITEM.
    **-Internal table for the  input data from the file
    DATA : BEGIN OF P_DOWNLOAD  OCCURS 0,
            V_FILEREC(1000) TYPE C,
           END OF P_DOWNLOAD.
    *--- Internal Table for Success messages
    DATA : BEGIN OF I_SUCC OCCURS 0,
             HEADER(50),
             MSG(100),                     "SUCCESS message
           END OF I_SUCC.
    *--- Internal Table for error messages
    DATA : BEGIN OF I_ERROR_LOG OCCURS 0,
             HEADER(50),
             MSG(100),                     "Error message
           END OF I_ERROR_LOG.
    *--- Internal table for getting the BDC data
    DATA : BEGIN OF IT_BDCDATA OCCURS 0.
            INCLUDE STRUCTURE BDCDATA.     " Table to hold BDC data
    DATA : END OF IT_BDCDATA.
    *--- Internal table for reading the messages of call transaction
    DATA : BEGIN OF IT_MESSAGE_TAB OCCURS 0.
            INCLUDE STRUCTURE BDCMSGCOLL.  "Table to hold messages
    DATA : END OF IT_MESSAGE_TAB.
                          DATA DECLARATIONS                              *
    DATA:
          V_ERROR_COUNTER   TYPE I,        " error records counter
          V_MSG(100),                      " used for Error message
          V_LINES TYPE I,                  " used for format message
          V_HEAD LIKE SY-CPROG,            " Heading for report
          XMODE VALUE 'N',                 " EXECUTION MODE
          V_SUCCESS_COUNTER TYPE I,        " Success records counter
          V_UNAME LIKE APQI-USERID,        " User Name
          V_TOTAL TYPE I.                  " Total records uploaded
    DATA : V_SELNO TYPE I.
    DATA : V_CHECK TYPE I.
    DATA : V_HEADER(50) TYPE C.             "Header Information
    DATA : V_SUCC_MSG LIKE BDCMSGCOLL-MSGV1."Success Message
    DATA : V_ZERO(4) VALUE '0.00'.          "Checking Zero
    DATA : V_CHECK_ZERO  LIKE BSEG-WRBTR.   "Checking Zero
    DATA : V_CHECK_ZERO1 LIKE BSEG-WRBTR.   "Checking Zero
    DATA : V_SYSTEMDATE  LIKE BKPF-BUDAT.
    DATA : V_VALUE TYPE I.
    DATA : V_VALUE1 TYPE I.
    DATA : V_VALUE2 TYPE I.
    Flags
    DATA:
           F_BDC_OPEN,                   " BDC session open check.
           F_CONTINUE_PROCESSING.        " To continue further processing
                             CONSTANTS                                   *
    CONSTANTS:
           C_SESSION_NAME LIKE APQI-GROUPID VALUE 'F-43',  "Session
           C_X VALUE 'X'.                                  " Used for falgs
                        SELECTION SCREEN                                 *
    *--- Selection Screen with Block and title
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-038.
    PARAMETER: P_FNAME LIKE RLGRAP-FILENAME DEFAULT
                       'C:\Concur.txt'.
    SELECTION-SCREEN END OF BLOCK B1.
    AT SELECTION SCREEN ON VALUE-REQUEST
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
      CALL FUNCTION 'F4_FILENAME'
           IMPORTING
                FILE_NAME = P_FNAME
           EXCEPTIONS
                OTHERS    = 1.
      IF SY-SUBRC <> 0.
        MESSAGE E999 WITH 'Error in opening a file'(009).
      ENDIF.
                              Top-of-page                                *
    TOP-OF-PAGE .
    *---perform to display the standard header
      PERFORM STANDARD_HEADER.
    --START OF SELECTION--
    START-OF-SELECTION.
    Upload data
      PERFORM UPLOAD_DATA.
    move data to bdcdata internal table
      PERFORM MOVE_DATA_F43.
    *--- Posting the valid data to F-43
      IF F_BDC_OPEN = C_X.
    *---perform to close bdc group
        PERFORM CLOSE_GROUP.
      ENDIF.
                             END OF SELECTION                            *
    END-OF-SELECTION.
      CHECK F_CONTINUE_PROCESSING IS INITIAL.
      PERFORM DISPLAY_REPORT.
    *&      Form  MESSAGE_FORMAT
                MESSAGE FORMAT
    FORM MESSAGE_FORMAT.
      CLEAR V_MSG.
      CALL FUNCTION 'FORMAT_MESSAGE'
           EXPORTING
                ID        = IT_MESSAGE_TAB-MSGID
                LANG      = 'EN'
                NO        = IT_MESSAGE_TAB-MSGNR
                V1        = IT_MESSAGE_TAB-MSGV1
                V2        = IT_MESSAGE_TAB-MSGV2
                V3        = IT_MESSAGE_TAB-MSGV3
                V4        = IT_MESSAGE_TAB-MSGV4
           IMPORTING
                MSG       = V_MSG
           EXCEPTIONS
                NOT_FOUND = 1
                OTHERS    = 2.
      IF SY-SUBRC <> 0.
        V_MSG = SPACE.
      ENDIF.
    ENDFORM.                               " MESSAGE_FORMAT
    *&      Form  F4_HELP
    FORM F4_HELP.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                DEF_FILENAME     = ' '
                DEF_PATH         = 'C:\'
                MODE             = 'O'
                TITLE            = TEXT-025  "'Upload File'
           IMPORTING
                FILENAME         = P_FNAME
           EXCEPTIONS
                SELECTION_CANCEL = 3
                SELECTION_ERROR  = 4.
      CASE SY-SUBRC.
        WHEN 3.
          MESSAGE I000 WITH TEXT-007.      " Selection Cancel.
        WHEN 4.
          MESSAGE I000 WITH TEXT-008.      " Selection Error.
      ENDCASE.
    ENDFORM.                                                    " F4_HELP
    *&      Form  STANDARD_HEADER
           STANDARD_HEADER
    FORM STANDARD_HEADER.
      FORMAT COLOR COL_HEADING INTENSIFIED OFF.
      CASE V_HEAD.
        WHEN 'Summary Report'(001).
        WHEN 'SUCC_REPORT'.
    **---To display the field headings for Success report.
          ULINE (154).
          WRITE : /001 SY-VLINE,
                   002 'Header Details '(011),
                   052 SY-VLINE,
                   053 'Document Number'(036),
                  154 SY-VLINE.
          ULINE (154).
        WHEN 'Error Report'.
    **---To display the field headings for error report.
          ULINE (154).
          WRITE : /001 SY-VLINE,
                   002 'Header Details '(011),
                   052 SY-VLINE,
                   053 'Error Message/Text'(035),
                  154 SY-VLINE.
          ULINE (154).
      ENDCASE.
    ENDFORM.                               " STANDARD_HEADER
    *&      Form  DISPLAY_REPORT
          Display Report Details
    FORM DISPLAY_REPORT.
      PERFORM SUMMARY_REPORT.
      PERFORM SUCC_REPORT.
      PERFORM ERROR_REPORT.
    ENDFORM.                               " DISPLAY_REPORT
    *&      Form  SUMMARY_REPORT
           Success & Error Count Number
    FORM SUMMARY_REPORT.
      WRITE : /030 SY-TITLE.
      SKIP 1.
      WRITE : /005 'Program Name : '(032),
               024 SY-REPID,
               080 'Date :'(033),
               088 SY-DATUM.
      SKIP 1.
      V_HEAD = 'Summary Report'(001).
      ULINE (132).
      WRITE : /1 SY-VLINE,
               5 'No. of Records read from the Data file'(014),
               45 ':', V_TOTAL LEFT-JUSTIFIED,
               132 SY-VLINE,
              /1 SY-VLINE,
               5 'No. of Records successfully posted'(015),
               45 ':', V_SUCCESS_COUNTER LEFT-JUSTIFIED,
               132 SY-VLINE,
              /1 SY-VLINE,
               5 'No. of Records Failed'(023),
               45 ':'(031), V_ERROR_COUNTER LEFT-JUSTIFIED,
               132 SY-VLINE.
      IF NOT F_BDC_OPEN IS INITIAL.
        WRITE:  /1 SY-VLINE,
                5 'Session Name'(022),
                45 ':'(031), C_SESSION_NAME LEFT-JUSTIFIED,
                132 SY-VLINE.
      ENDIF.
      ULINE (132).
      IF NOT F_BDC_OPEN IS INITIAL.
        WRITE:  /1 SY-VLINE,
                5 'Session Name'(022),
                45 ':'(031), C_SESSION_NAME LEFT-JUSTIFIED,
                132 SY-VLINE.
      ENDIF.
    ULINE (132).
    ENDFORM.                               " SUMMARY_REPORT
    *&      Form  ERROR_REPORT
          Error Report
    FORM ERROR_REPORT.
      IF NOT I_ERROR_LOG[] IS INITIAL.
        SORT I_ERROR_LOG.                  " by tcode.
        V_HEAD = 'Error Report'(013).
        NEW-PAGE.
        LOOP AT I_ERROR_LOG.
          WRITE: /001 SY-VLINE,
                  002 I_ERROR_LOG-HEADER,
                  052 SY-VLINE,
                  053 I_ERROR_LOG-MSG,
                  154 SY-VLINE.
          ULINE (154).
        ENDLOOP.
      ENDIF.
    ENDFORM.                               " ERROR_REPORT
    *&      Form  ERROR_REPORT
          Success Report
    FORM SUCC_REPORT.
      IF NOT I_SUCC[] IS INITIAL.
        SORT I_SUCC.                  " by tcode.
        V_HEAD = 'SUCC_REPORT'(034).
        NEW-PAGE.
        LOOP AT I_SUCC.
          WRITE: /001 SY-VLINE,
                  002 I_SUCC-HEADER,
                  052 SY-VLINE,
                  053 I_SUCC-MSG,
                  154 SY-VLINE.
          ULINE (154).
        ENDLOOP.
      ENDIF.
    ENDFORM.                               " SUCC_REPORT
    *&      Form  OPEN_SESSION
    FORM OPEN_SESSION.
      DATA : V_DATE LIKE SY-DATUM.         " For Hold Date.
      V_DATE = SY-DATUM - 1.               " Hold date
      V_UNAME = SY-UNAME.                  " User name
      CALL FUNCTION 'BDC_OPEN_GROUP'
           EXPORTING
                CLIENT              = SY-MANDT
                GROUP               = C_SESSION_NAME
                HOLDDATE            = V_DATE
                KEEP                = 'X'
                USER                = V_UNAME
           EXCEPTIONS
                CLIENT_INVALID      = 1
                DESTINATION_INVALID = 2
                GROUP_INVALID       = 3
                GROUP_IS_LOCKED     = 4
                HOLDDATE_INVALID    = 5
                INTERNAL_ERROR      = 6
                QUEUE_ERROR         = 7
                RUNNING             = 8
                SYSTEM_LOCK_ERROR   = 9
                USER_INVALID        = 10
                OTHERS              = 11.
      IF SY-SUBRC <> 0.
        MESSAGE I000 WITH 'Session can not be opened'(019).
        STOP.
      ENDIF.
      F_BDC_OPEN = 'X'.
    ENDFORM.                               " OPEN_SESSION
    *&      Form  BDC_INSERT
    FORM BDC_INSERT USING P_TCODE TYPE ANY.
      CALL FUNCTION 'BDC_INSERT'
           EXPORTING
                TCODE            = P_TCODE
           TABLES
                DYNPROTAB        = IT_BDCDATA
           EXCEPTIONS
                INTERNAL_ERROR   = 1
                NOT_OPEN         = 2
                QUEUE_ERROR      = 3
                TCODE_INVALID    = 4
                PRINTING_INVALID = 5
                POSTING_INVALID  = 6
                OTHERS           = 7.
      IF SY-SUBRC <> 0.
        MESSAGE I000 WITH 'Unable to insert, Error record'(037).
        STOP.
      ENDIF.
    ENDFORM.                               " BDC_INSERT
    *&      Form  CLOSE_GROUP
    FORM CLOSE_GROUP.
      CALL FUNCTION 'BDC_CLOSE_GROUP'
           EXCEPTIONS
                NOT_OPEN    = 1
                QUEUE_ERROR = 2
                OTHERS      = 3.
      IF SY-SUBRC <> 0.
        MESSAGE I000 WITH 'Session can not be closed'(021).
        STOP.
      ENDIF.
    ENDFORM.                               " CLOSE_GROUP
    *&      Form  UPLOAD_DATA
          Upload Data From the text file
    FORM UPLOAD_DATA.
      CALL FUNCTION 'WS_UPLOAD'
           EXPORTING
                FILENAME                = P_FNAME
                FILETYPE                = 'DAT'
           TABLES
                DATA_TAB                = P_DOWNLOAD
           EXCEPTIONS
                CONVERSION_ERROR        = 1
                FILE_OPEN_ERROR         = 2
                FILE_READ_ERROR         = 3
                INVALID_TYPE            = 4
                NO_BATCH                = 5
                UNKNOWN_ERROR           = 6
                INVALID_TABLE_WIDTH     = 7
                GUI_REFUSE_FILETRANSFER = 8
                OTHERS                  = 10.
      IF SY-SUBRC NE 0.
        MESSAGE E000 WITH 'File does not Exist'(003).
      ELSEIF P_DOWNLOAD[] IS INITIAL.
        MESSAGE E000 WITH 'Input file is empty'(004).
      ENDIF.
      DATA: V_INDEX LIKE SY-TABIX.
      IF NOT P_DOWNLOAD[] IS INITIAL.
        LOOP AT P_DOWNLOAD.
          V_INDEX = SY-TABIX.
    *Removing double quotes
          DO.
            REPLACE '"' WITH '' INTO P_DOWNLOAD.
            IF SY-SUBRC NE 0.
              EXIT.
            ENDIF.
          ENDDO.
          MODIFY P_DOWNLOAD INDEX V_INDEX.
          CONDENSE P_DOWNLOAD.
          IF P_DOWNLOAD(1) = '1'.
    *Finding the header information, creating key field
            V_SELNO =  SY-TABIX.
          ENDIF.
    WE ARE NOT HAVING KEY FIELD IN HEADER/ITEM IN THE FILE.
    SO WE ARE CREATING MANUAL KEY FIELD IN INTERNAL TABLE (SELNO).
          IF P_DOWNLOAD(1) = '1'.
    Moving header information into IT_DATA_HEADER Internal Table
            SPLIT P_DOWNLOAD AT ',' INTO
                  IT_DATA_HEADER-ID
                  IT_DATA_HEADER-BUKRS
                  IT_DATA_HEADER-WAERS
                  IT_DATA_HEADER-NEWKO
                  IT_DATA_HEADER-XBLNR
                  IT_DATA_HEADER-XBLNR1
                  IT_DATA_HEADER-BLDAT
                  IT_DATA_HEADER-PK
                  IT_DATA_HEADER-WRBTR
                  IT_DATA_HEADER-BKTXT
                  IT_DATA_HEADER-BKTXT1.
            IT_DATA_HEADER-SELNO = V_SELNO.
            CONDENSE : IT_DATA_HEADER-ID,     IT_DATA_HEADER-BUKRS,
                       IT_DATA_HEADER-WAERS,  IT_DATA_HEADER-NEWKO,
                       IT_DATA_HEADER-XBLNR,  IT_DATA_HEADER-XBLNR1,
                       IT_DATA_HEADER-BLDAT,  IT_DATA_HEADER-PK,
                       IT_DATA_HEADER-WRBTR,  IT_DATA_HEADER-BKTXT,
                       IT_DATA_HEADER-BKTXT1, IT_DATA_HEADER-SELNO.
            APPEND IT_DATA_HEADER.
            CLEAR  IT_DATA_HEADER.
          ELSEIF P_DOWNLOAD(1) = '2'.
    Moving header information into IT_DATA_ITEM Internal Table
            SPLIT P_DOWNLOAD AT ',' INTO
                  IT_DATA_ITEM-ID
                  IT_DATA_ITEM-NEWKO
                  IT_DATA_ITEM-BUKRS
                  IT_DATA_ITEM-KOSTL
                  IT_DATA_ITEM-WRBTR
                  IT_DATA_ITEM-SGTXT.
            IT_DATA_ITEM-SELNO  = V_SELNO.
            IT_DATA_ITEM-SELNO1 = SY-TABIX.
            CONDENSE: IT_DATA_ITEM-ID,IT_DATA_ITEM-NEWKO,IT_DATA_ITEM-BUKRS,
                      IT_DATA_ITEM-KOSTL,IT_DATA_ITEM-WRBTR,
                      IT_DATA_ITEM-SGTXT,IT_DATA_ITEM-SELNO,
                      IT_DATA_ITEM-SELNO1.
            APPEND IT_DATA_ITEM.
            CLEAR  IT_DATA_ITEM.
          ENDIF.
        ENDLOOP.
    *SORT HEADER & ITEM INTERNAL Table
        SORT IT_DATA_HEADER BY SELNO.
        SORT IT_DATA_ITEM   BY SELNO SELNO1.
    *Header Information
        LOOP AT IT_DATA_HEADER.
          IT_FINAL_HEADER-ID    = IT_DATA_HEADER-ID.
          IT_FINAL_HEADER-BUKRS = IT_DATA_HEADER-BUKRS.
          IT_FINAL_HEADER-WAERS = IT_DATA_HEADER-WAERS.
          IT_FINAL_HEADER-NEWKO = IT_DATA_HEADER-NEWKO.
          CONCATENATE IT_DATA_HEADER-XBLNR IT_DATA_HEADER-XBLNR1
                      INTO IT_FINAL_HEADER-XBLNR.
          IT_FINAL_HEADER-BLDAT  = IT_DATA_HEADER-BLDAT.
          IT_FINAL_HEADER-PK     = IT_DATA_HEADER-PK.
          IT_FINAL_HEADER-WRBTR  = IT_DATA_HEADER-WRBTR.
          IT_FINAL_HEADER-BKTXT  = IT_DATA_HEADER-BKTXT.
          IT_FINAL_HEADER-BKTXT1 = IT_DATA_HEADER-BKTXT1.
          IT_FINAL_HEADER-SELNO  = IT_DATA_HEADER-SELNO.
          APPEND IT_FINAL_HEADER.
          CLEAR  IT_FINAL_HEADER.
        ENDLOOP.
    *Item Information
        LOOP AT IT_DATA_ITEM.
    CHECKING ZERO IN THE IT_DATA_ITEM-WRBTR FIELD
    It will not append the IT_FINAL_ITEM
          V_CHECK_ZERO = IT_DATA_ITEM-WRBTR.
          IF V_CHECK_ZERO NE V_CHECK_ZERO1. "V_ZERO.
            IT_FINAL_ITEM-ID     = IT_DATA_ITEM-ID.
            IT_FINAL_ITEM-NEWKO  = IT_DATA_ITEM-NEWKO.
            IT_FINAL_ITEM-BUKRS  = IT_DATA_ITEM-BUKRS.
            IT_FINAL_ITEM-KOSTL  = IT_DATA_ITEM-KOSTL.
            IT_FINAL_ITEM-WRBTR  = IT_DATA_ITEM-WRBTR.
            IT_FINAL_ITEM-SGTXT  = IT_DATA_ITEM-SGTXT.
            IT_FINAL_ITEM-SELNO  = IT_DATA_ITEM-SELNO.
            IT_FINAL_ITEM-SELNO1 = IT_DATA_ITEM-SELNO1.
            APPEND IT_FINAL_ITEM.
            CLEAR  IT_FINAL_ITEM.
            CLEAR : V_CHECK_ZERO,V_CHECK_ZERO1.
          ENDIF.
        ENDLOOP.
        SORT IT_FINAL_HEADER BY SELNO.
        SORT IT_FINAL_ITEM BY SELNO.
      ENDIF.
    ENDFORM.                    " UPLOAD_DATA
    *&      Form  MOVE_DATA_F43
          Call Transaction F-43
    FORM MOVE_DATA_F43.
    *MOVE THE SYSTEM DATE TO
      CLEAR V_SYSTEMDATE.
      V_SYSTEMDATE = SY-DATUM.
      LOOP AT IT_FINAL_HEADER.
        CLEAR V_CHECK.
        V_CHECK = IT_FINAL_HEADER-SELNO.
      MOVE HEADER DATA TO BDCDATA INTERNAL TABLE
        PERFORM BDC_BUILD_HEADER.
      MOVE ITEM DATA TO BDCDATA INTERNAL TABLE
        PERFORM BDC_BUILD_ITEM.
    <b>*   Call Transcation (F-43)
        CALL TRANSACTION 'F-43' USING IT_BDCDATA
                                MODE XMODE
                                UPDATE 'S'
                                MESSAGES INTO IT_MESSAGE_TAB.</b>
    IF error record found, it will move to batch Input session
        IF SY-SUBRC <> 0.
          V_ERROR_COUNTER = V_ERROR_COUNTER + 1.      " Inc the counter
          CLEAR V_LINES.
          DESCRIBE TABLE IT_MESSAGE_TAB LINES V_LINES.
          READ TABLE IT_MESSAGE_TAB INDEX V_LINES.
    *--- <b>Perform to read the messages
          PERFORM MESSAGE_FORMAT.</b>*--- Appending the error records into error table
          CONDENSE IT_FINAL_HEADER-BUKRS.
          CONDENSE IT_FINAL_HEADER-NEWKO.
          CONDENSE IT_FINAL_HEADER-XBLNR.
          CONDENSE IT_FINAL_HEADER-BLDAT.
          CONCATENATE IT_FINAL_HEADER-BUKRS ','
                      IT_FINAL_HEADER-NEWKO ','
                      IT_FINAL_HEADER-XBLNR ','
                      IT_FINAL_HEADER-BLDAT
                      INTO V_HEADER.
          I_ERROR_LOG-HEADER = V_HEADER.
          I_ERROR_LOG-MSG = V_MSG.
          APPEND I_ERROR_LOG.
          CLEAR I_ERROR_LOG.
    *--  Posting the error record to Session
          IF F_BDC_OPEN IS INITIAL.
            PERFORM OPEN_SESSION.
          ENDIF.
          PERFORM BDC_INSERT USING 'F-43'.
        ELSE.
          V_SUCCESS_COUNTER = V_SUCCESS_COUNTER + 1.
    *--  READING ONLY SUCCESS MESSAGE(MSGNR 312)
          LOOP AT IT_MESSAGE_TAB WHERE MSGNR = '312'.
            V_SUCC_MSG = IT_MESSAGE_TAB-MSGV1.
          ENDLOOP.
    *--- Perform to read the messages
          PERFORM MESSAGE_FORMAT.
    *--- Appending the Success records into Success table
          CONDENSE IT_FINAL_HEADER-BUKRS.
          CONDENSE IT_FINAL_HEADER-NEWKO.
          CONDENSE IT_FINAL_HEADER-PK.
          CONDENSE IT_FINAL_HEADER-XBLNR.
          CONDENSE IT_FINAL_HEADER-BLDAT.
          CONCATENATE IT_FINAL_HEADER-BUKRS ','
                      IT_FINAL_HEADER-NEWKO ','
                      IT_FINAL_HEADER-PK ','
                      IT_FINAL_HEADER-XBLNR ','
                      IT_FINAL_HEADER-BLDAT
                      INTO V_HEADER.
          I_SUCC-HEADER = V_HEADER.
          I_SUCC-MSG = V_SUCC_MSG.
          APPEND I_SUCC.
          CLEAR  I_SUCC.
        ENDIF.
        V_TOTAL = V_TOTAL + 1.
        REFRESH: IT_BDCDATA,
                 IT_MESSAGE_TAB.
        CLEAR:   IT_BDCDATA,
                 IT_MESSAGE_TAB.
      ENDLOOP.
    ENDFORM.                    " MOVE_DATA_F43
           Start new screen                                              *
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR IT_BDCDATA.
      IT_BDCDATA-PROGRAM  = PROGRAM.
      IT_BDCDATA-DYNPRO   = DYNPRO.
      IT_BDCDATA-DYNBEGIN = 'X'.
      APPEND IT_BDCDATA.
    ENDFORM.
           Insert field                                                  *
    FORM BDC_FIELD USING FNAM FVAL.
      CLEAR IT_BDCDATA.
      IT_BDCDATA-FNAM = FNAM.
      IT_BDCDATA-FVAL = FVAL.
      APPEND IT_BDCDATA.
    ENDFORM.
    *&      Form  BDC_BUILD_HEADER
          Header Information
    FORM BDC_BUILD_HEADER.
    Header Details
      PERFORM BDC_DYNPRO      USING 'SAPMF05A'    '0100'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'  '/00'.
      PERFORM BDC_FIELD       USING 'BKPF-BLDAT'
                                     IT_FINAL_HEADER-BLDAT.
      PERFORM BDC_FIELD       USING 'BKPF-BLART'
                                    'KR'.
      PERFORM BDC_FIELD       USING 'BKPF-BUKRS'
                                    IT_FINAL_HEADER-BUKRS.
    Moveing System date to Posting date in the document
      CLEAR IT_FINAL_HEADER-BLDAT.
      CONCATENATE V_SYSTEMDATE4(4) V_SYSTEMDATE0(4)
                       INTO  IT_FINAL_HEADER-BLDAT.
      PERFORM BDC_FIELD       USING 'BKPF-BUDAT'
                                  IT_FINAL_HEADER-BLDAT.
      PERFORM BDC_FIELD       USING 'BKPF-WAERS'
                                    IT_FINAL_HEADER-WAERS.
      PERFORM BDC_FIELD       USING 'BKPF-XBLNR'
                                    IT_FINAL_HEADER-PK.
      PERFORM BDC_FIELD       USING 'BKPF-BKTXT'
                                    IT_FINAL_HEADER-BKTXT.
      PERFORM BDC_FIELD       USING 'FS006-DOCID'  '*'.
      IF IT_FINAL_HEADER-WRBTR CA '-'.
        REPLACE '-' WITH SPACE INTO IT_FINAL_HEADER-WRBTR.
        CONDENSE IT_FINAL_HEADER-WRBTR.
        PERFORM BDC_FIELD       USING 'RF05A-NEWBS'  '25'.
      ELSE.
        PERFORM BDC_FIELD       USING 'RF05A-NEWBS'  '31'.
      ENDIF.
      PERFORM BDC_FIELD       USING 'RF05A-NEWKO'
                                     IT_FINAL_HEADER-NEWKO.
    *-- Item Vendor Details
      PERFORM BDC_DYNPRO      USING 'SAPMF05A' '0302'.
      PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                    '/00'.
      PERFORM BDC_FIELD       USING 'BSEG-WRBTR'
                                    IT_FINAL_HEADER-WRBTR.
      PERFORM BDC_FIELD       USING 'BSEG-SGTXT'
                                    IT_FINAL_HEADER-BKTXT1.
    ENDFORM.                    " BDC_BUILD_HEADER
    *&      Form  BDC_BUILD_ITEM
          Item Information
    FORM BDC_BUILD_ITEM.
      DATA L_FIRST TYPE C.
      LOOP AT IT_FINAL_ITEM WHERE SELNO = V_CHECK.
        IF L_FIRST IS INITIAL.
          L_FIRST = C_X.
    Line Item ( PstKy,Account & New Company Code)
         CONDENSE IT_FINAL_HEADER-BLDAT.
          IF IT_FINAL_ITEM-WRBTR CA '-'.
            REPLACE '-' WITH SPACE INTO IT_FINAL_ITEM-WRBTR.
            CONDENSE IT_FINAL_ITEM-WRBTR.
            PERFORM BDC_DYNPRO    USING  'SAPMF05A'    '0302'.
            PERFORM BDC_FIELD     USING: 'BDC_OKCODE'   '/00',
                                         'RF05A-NEWBS'  '50',
                                         'RF05A-NEWKO'  IT_FINAL_ITEM-NEWKO,
                                         'RF05A-NEWBK'  IT_FINAL_ITEM-BUKRS.
          ELSE.
            PERFORM BDC_DYNPRO    USING  'SAPMF05A'    '0302'.
            PERFORM BDC_FIELD     USING: 'BDC_OKCODE'   '/00',
                                         'RF05A-NEWBS'  '40',
                                         'RF05A-NEWKO'  IT_FINAL_ITEM-NEWKO,
                                         'RF05A-NEWBK'  IT_FINAL_ITEM-BUKRS.
          ENDIF.
    Amount & Text
          PERFORM BDC_DYNPRO    USING  'SAPMF05A' '0300'.
          PERFORM BDC_FIELD     USING: 'BDC_OKCODE'   '/00',
                                       'BSEG-WRBTR'   IT_FINAL_ITEM-WRBTR,
                                       'BSEG-SGTXT'   IT_FINAL_ITEM-SGTXT,
                                       'DKACB-FMORE'  'X'.
    Cost Center
          PERFORM BDC_DYNPRO    USING  'SAPLKACB'    '0002'.
          PERFORM BDC_FIELD     USING: 'BDC_OKCODE' 'ENTE',
                                       'COBL-KOSTL' IT_FINAL_ITEM-KOSTL.
        ELSE.
    Line Item ( PstKy,Account & New Company Code)
          IF IT_FINAL_ITEM-WRBTR CA '-'.
            REPLACE '-' WITH SPACE INTO IT_FINAL_ITEM-WRBTR.
            CONDENSE IT_FINAL_ITEM-WRBTR.
            PERFORM BDC_DYNPRO    USING  'SAPMF05A'    '0300'.
            PERFORM BDC_FIELD     USING: 'BDC_OKCODE'   '/00',
                                         'RF05A-NEWBS'  '50',
                                         'RF05A-NEWKO'  IT_FINAL_ITEM-NEWKO,
                                         'RF05A-NEWBK'  IT_FINAL_ITEM-BUKRS.
          ELSE.
            PERFORM BDC_DYNPRO    USING  'SAPMF05A'    '0300'.
            PERFORM BDC_FIELD     USING: 'BDC_OKCODE'   '/00',
                                         'RF05A-NEWBS'  '40',
                                         'RF05A-NEWKO'  IT_FINAL_ITEM-NEWKO,
                                         'RF05A-NEWBK'  IT_FINAL_ITEM-BUKRS.
          ENDIF.
          PERFORM BDC_DYNPRO    USING  'SAPLKACB'   '0002'.
          PERFORM BDC_FIELD     USING: 'BDC_OKCODE' 'ENTE'.
    Amount & Text
          PERFORM BDC_DYNPRO    USING  'SAPMF05A'    '0300'.
          PERFORM BDC_FIELD     USING: 'BDC_OKCODE'  '/00',
                                       'BSEG-WRBTR'  IT_FINAL_ITEM-WRBTR,
                                       'BSEG-SGTXT'  IT_FINAL_ITEM-SGTXT,
                                       'DKACB-FMORE' 'X'.
    Cost Center
          PERFORM BDC_DYNPRO    USING  'SAPLKACB'    '0002'.
          PERFORM BDC_FIELD     USING: 'BDC_OKCODE' 'ENTE',
                                       'COBL-KOSTL' IT_FINAL_ITEM-KOSTL.
        ENDIF.
      ENDLOOP.
    *Save Details
      PERFORM BDC_DYNPRO        USING  'SAPMF05A' '0300'.
      PERFORM BDC_FIELD         USING  'BDC_OKCODE'
                                       '=BU'.
      PERFORM BDC_DYNPRO        USING  'SAPLKACB'    '0002'.
      PERFORM BDC_FIELD         USING: 'BDC_OKCODE' 'ENTE'.
    ENDFORM.                    " BDC_BUILD_ITEM
    Thanks
    Mahesh

Maybe you are looking for

  • Airport Extreme-have wifi connection but no internet on some devices???

    I just replaced my linksys router with the latest (tower) Airport Extreme and an Airport Express as an extention of the network.  Now I had a heak of a tme setting this up to mimic what the linksys did so I would have a smooth transition.  I have a w

  • Satellite A300 - Windows 7 post upgrade issue

    G'Day All, I have made 2 posts to Microsoft Discussion groups: *Post 1:* G'Day All, Just upgraded two (networked) Vista Systems to Win 7 HP (32-bit). Minor network/Homegroup problems - all resolved. Desktop - Fine. Laptop - ?? Toshiba Satellite 300.

  • Photoshop PlugIn error installation doesn't work !

    Download a PlugIn for Adobe Photoshop, in description stand PS CC / CS6 but Plugin doesn't work with CS6 ... error message coming: Photoshop 13,0 or newer need, my actually version is 13.06 but every try the error messager is coming. The app is "Beau

  • Exporting images in order

    I'm exporting images to a folder on my desktop to burn to a CD, but the images are not kept in sequential order. How do keep them in order on esporting and burning to a CD?

  • Select list filter in a tabular form problem

    Hello everyone: I need to filter a list in a tabular form, depend on another column value in the same row of the Tabular Form Try using the syntax *#COLUMN#* in the query of select list but did not work. This is my query SELECT   nombre_respuesta, co