F-03 clearing BDC

Hi gurus,
I've created a BDC for F-03 transaction to clear the GL account...
but some times it wont clear it... why it is so...
and the same problem in cash journal posting...

Hello,
Your query is not specific. You have not explained if you are getting any error, etc., while clearing. Nevertheless, please review the SAP Note 1228601 (FB05: When are certain display variants used?) which will be of great help to you.
This note describes in detail the logic of the variant selection and the solution for getting the customized variant selected. The table control variants can be deleted via transaction SE19 or through the Open Item screen -> Icon on the right hand side of the table control: Configuration -> like this you will open the table control data and from here you can change and/or delete them.
I hope this helps.
Best regards,
Suresh Jayanthi.

Similar Messages

  • Clearing APQD / BDC entries prior to an upgrade

    Hello.  We're putting together a plan for our 4.6C -> ERP 2006 upgrade and are wondering ...
    1. Should we clear APQD prior to the upgrade?
    2. Should we clear BDC prior to the upgrade (SM35)?
    Thank you much.
    ~TJ

    Hi TJ,
    in general that makes sense when you anyway test everything and post all open stuff before.
    On the other hand, it will not make the upgrade or unicode cpc faster and the DB will not shrink down by 1% ...
    So, you can but need not do that ....
    Regards
    Volker Gueldenpfennig, consolut international ag
    http://www.consolut.net - http://www.4soi.de - http://www.easymarketplace.de

  • BDC FOR PO CREATE USING ME21

    Iam Creating BDC Program bu using ME21 for Uploading PO.
    Iam getting error at Income term2 in the Second Screen of ME21. Iam Passing this value through Excel Sheet But event then it is not picking. When i check in debugging the value of income term2 is populating.
    Let me know what are the mandotory fields for creating PO using Me21.
    Here iam also attaching the code, Please help us because it is very urgent.
    report ZPOUPLOADME21
    no standard page heading line-size 255.
    *include bdcrecx1.
    INCLUDE YMM_BDCRECX1.
    •     Internal Table T_BDCDATA to store BDC data
    •     Batchinputdata of single transaction
    DATA: T_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    •     Internal Table T_BDC_MSG to store BDC messages
    DATA: T_BDC_MSG LIKE STANDARD TABLE OF BDCMSGCOLL INITIAL
    SIZE 0 WITH HEADER LINE.
    DATA: V_FILE LIKE RLGRAP-FILENAME ,
    V_COUNT(5) TYPE C,
    V_MESSAGE_CNT(5) TYPE C .
    DATA : BEGIN OF IT_DATA OCCURS 0,
    LIFNR LIKE EKKO-LIFNR, " Vendor
    BSART LIKE RM06E-BSART, " Order Type
    BEDAT(10) TYPE C, " Date
    EKORG LIKE EKKO-EKORG, " Purchasing Organization
    EKGRP LIKE EKKO-EKGRP, " Purchasing Group
    WERKS LIKE RM06E-WERKS, " Plant
    INCO2 LIKE EKKO-INCO2, " Inco Terms
    KNTTP LIKE EKPO-KNTTP, " A/C Assignment Category
    EMATN LIKE EKPO-EMATN, " Material Number
    MENGE LIKE EKPO-MENGE, " Purchase Order Quantity
    NETPR LIKE EKPO-NETPR, " Net Price
    MWSKZ LIKE EKPO-MWSKZ, " Tax Code
    NPLNR LIKE MSEG-NPLNR, " Network
    VORNR LIKE PSORDER-VORNR, " Operation
    END OF IT_DATA.
    START-OF-SELECTION.
    PERFORM OPEN_GROUP.
    PERFORM DATA_UPLOAD.
    PERFORM CALL_TRANSACTION.
    PERFORM CLOSE_GROUP.
    PERFORM WRITE_ERROR.
    *& Form DATA_UPLOAD
    •     text
    •     --> p1 text
    •     <-- p2 text
    FORM DATA_UPLOAD.
    *call function ws_upload to retrieve data from a flat file in the
    *presentation server into an internal table
    CALL FUNCTION 'UPLOAD'
    EXPORTING
    FILENAME = V_FILE
    FILETYPE = 'DAT'
    TABLES
    DATA_TAB = IT_DATA
    EXCEPTIONS
    CONVERSION_ERROR = 1
    INVALID_TABLE_WIDTH = 2
    INVALID_TYPE = 3
    NO_BATCH = 4
    UNKNOWN_ERROR = 5
    GUI_REFUSE_FILETRANSFER = 6
    OTHERS = 7.
    •     if ws_upload fails then display appropriate message
    IF SY-SUBRC 0.
    •     MESSAGE E000 WITH 'Data not Uploaded into internal table'.
    ENDIF.
    ENDFORM. " DATA_UPLOAD
    *& Form CALL_TRANSACTION
    •     text
    •     --> p1 text
    •     <-- p2 text
    FORM CALL_TRANSACTION.
    DATA : V_IVDAT(10) TYPE C,
    V_AKTIV(10) TYPE C,
    V_MESSAGE(404) TYPE C.
    REFRESH T_BDCDATA.
    CLEAR T_BDCDATA.
    V_COUNT = 0.
    V_MESSAGE_CNT = 0.
    LOOP AT IT_DATA .
    V_COUNT = V_COUNT + 1.
    *perform open_group.
    perform bdc_dynpro using 'SAPMM06E' '0100'.
    perform bdc_field using 'BDC_CURSOR'
    'RM06E-WERKS'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'EKKO-LIFNR'
    IT_DATA-LIFNR.
    perform bdc_field using 'RM06E-BSART'
    IT_DATA-BSART.
    *perform bdc_field using 'RM06E-BEDAT'
    •     '24.01.2008'.
    perform bdc_field using 'RM06E-BEDAT'
    IT_DATA-BEDAT.
    perform bdc_field using 'EKKO-EKORG'
    IT_DATA-EKORG.
    perform bdc_field using 'EKKO-EKGRP'
    IT_DATA-EKGRP.
    *perform bdc_field using 'RM06E-LPEIN'
    •     'T'.
    perform bdc_field using 'RM06E-WERKS'
    IT_DATA-WERKS.
    perform bdc_dynpro using 'SAPMM06E' '0101'.
    perform bdc_field using 'BDC_CURSOR'
    'EKKO-INCO2'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    *perform bdc_field using 'EKKO-EKGRP'
    •     IT_DATA-EKGRP1. "'SP3'.
    *perform bdc_field using 'EKKO-PINCR'
    •     IT_DATA-PINCR. "'10'.
    *perform bdc_field using 'EKKO-SPRAS'
    •     IT_DATA-SPRAS. "'EN'.
    *perform bdc_field using 'EKKO-UPINC'
    •     IT_DATA-UPINC. "'1'.
    *perform bdc_field using 'EKKO-ZTERM'
    •     IT_DATA-ZTERM.
    *perform bdc_field using 'EKKO-WAERS'
    •     IT_DATA-WAERS. "'INR'.
    *perform bdc_field using 'EKKO-ZBD1T'
    •     IT_DATA-ZBD1T. "'44'.
    *perform bdc_field using 'EKKO-WKURS'
    •     IT_DATA-WKURS. "' 1.00000'.
    *perform bdc_field using 'EKKO-INCO1'
    •     IT_DATA-INCO1.
    perform bdc_field using 'EKKO-INCO2'
    IT_DATA-INCO2.
    perform bdc_dynpro using 'SAPMM06E' '0120'.
    perform bdc_field using 'BDC_CURSOR'
    'EKPO-NETPR(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    *perform bdc_field using 'EKPO-KNTTP(01)'
    •     'N'.
    perform bdc_field using 'EKPO-KNTTP(01)'
    IT_DATA-KNTTP.
    perform bdc_field using 'EKPO-EMATN(01)'
    IT_DATA-EMATN.
    perform bdc_field using 'EKPO-MENGE(01)'
    IT_DATA-MENGE.
    perform bdc_field using 'EKPO-NETPR(01)'
    IT_DATA-NETPR.
    perform bdc_dynpro using 'SAPMM06E' '0111'.
    perform bdc_field using 'BDC_CURSOR'
    'EKPO-MWSKZ'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    *perform bdc_field using 'EKPO-KNTTP'
    •     'N'.
    *perform bdc_field using 'EKPO-TXZ01'
    •     'Clamps & Connector'.
    *perform bdc_field using 'EKPO-MENGE'
    •     '4'.
    *perform bdc_field using 'EKPO-SPINF'
    •     'A'.
    *perform bdc_field using 'EKPO-NETPR'
    •     '100.00'.
    *perform bdc_field using 'EKPO-PEINH'
    •     '1'.
    *perform bdc_field using 'EKPO-BPRME'
    •     'NO'.
    *perform bdc_field using 'EKPO-BPUMN'
    •     '1'.
    *perform bdc_field using 'EKPO-BPUMZ'
    •     '1'.
    *perform bdc_field using 'EKPO-PRSDR'
    •     'X'.
    *perform bdc_field using 'RM06E-EEIND'
    •     '24.01.2008'.
    *perform bdc_field using 'RM06E-LPEIN'
    •     'D'.
    *perform bdc_field using 'EKPO-WEPOS'
    •     'X'.
    perform bdc_field using 'EKPO-MWSKZ'
    IT_DATA-MWSKZ.
    *perform bdc_field using 'EKPO-REPOS'
    •     'X'.
    perform bdc_dynpro using 'SAPMM06E' '0511'.
    perform bdc_field using 'BDC_CURSOR'
    'EKKN-SAKTO'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTE'.
    *perform bdc_field using 'EKKN-SAKTO'
    •     '6034025'.
    *perform bdc_field using 'DKACB-FMORE'
    •     'X'.
    perform bdc_dynpro using 'SAPLKACB' '0002'.
    *perform bdc_field using 'BDC_CURSOR'
    •     'COBL-VORNR'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTE'.
    perform bdc_field using 'COBL-NPLNR'
    IT_DATA-NPLNR.
    perform bdc_field using 'COBL-VORNR'
    IT_DATA-VORNR.
    perform bdc_dynpro using 'SAPMM06E' '0111'.
    perform bdc_dynpro using 'SAPMM06E' '0120'.
    perform bdc_field using 'BDC_CURSOR'
    'RM06E-EBELP'.
    perform bdc_field using 'BDC_OKCODE'
    '=BU'.
    *perform bdc_field using 'RM06E-EBELP'
    •     '10'.
    perform bdc_dynpro using 'SAPLSPO1' '0300'.
    perform bdc_field using 'BDC_OKCODE'
    '=YES'.
    perform bdc_transaction using 'ME21'.
    perform close_group.
    LOOP AT T_MESSTAB WHERE REC_NO IS INITIAL.
    AT FIRST.
    V_MESSAGE_CNT = V_MESSAGE_CNT + 1.
    T_MESSTAB-REC_NO = V_COUNT.
    ENDAT.
    MODIFY T_MESSTAB TRANSPORTING REC_NO.
    ENDLOOP.
    REFRESH T_BDCDATA.
    CLEAR T_BDCDATA.
    ENDLOOP.
    SKIP.
    WRITE : /10 'Record Number ', 30 'Error Message'.
    SKIP.
    endform.
    *& Form WRITE_ERROR
    •     text
    •     --> p1 text
    •     <-- p2 text
    FORM WRITE_ERROR.
    LOOP AT T_MESSTAB.
    WRITE : /10 T_MESSTAB-REC_NO , 30 T_MESSTAB-MESSAGE.
    ENDLOOP.
    ULINE /10(100).
    WRITE : /10 'No of Records : ' , V_COUNT.
    WRITE : /10 'No of Erroneous Records : ' , V_MESSAGE_CNT.
    ULINE /10(100).
    ENDFORM. " WRITE_ERROR
    *& Form CHECK_BDC
    •     text
    •     --> p1 text
    •     <-- p2 text
    FORM CHECK_BDC.
    DATA: L_CHECK LIKE YMMT_CHECK_BDC-YCHECK.
    SELECT SINGLE YCHECK INTO L_CHECK FROM YMMT_CHECK_BDC
    WHERE PROGRAMM EQ SY-REPID
    AND YCHECK EQ 'X'.
    IF SY-SUBRC NE 0.
    MESSAGE S000(YM) WITH 'Execution not possible'.
    STOP.
    ENDIF.
    ENDFORM. " CHECK_BDC
    Your Help will be highly appreciated.
    If any bapi code you have please send me.
    Thanks
    Rahul

    Hi.
    ckeck this.
    *Code used to create BDC
    *& Report ZBDC_EXAMPLE *
    *& Example BDC program, which updates net price of item 00010 of a *
    *& particular Purchase order(EBELN). *
    REPORT ZBDC_EXAMPLE NO STANDARD PAGE HEADING
    LINE-SIZE 132.
    Data declaration
    TABLES: ekko, ekpo.
    TYPES: BEGIN OF t_ekko,
    ebeln TYPE ekko-ebeln,
    waers TYPE ekko-waers,
    netpr TYPE ekpo-netpr,
    err_msg(73) TYPE c,
    END OF t_ekko.
    DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
    wa_ekko TYPE t_ekko,
    it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
    wa_error TYPE t_ekko,
    it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
    wa_success TYPE t_ekko.
    DATA: w_textout LIKE t100-text.
    DATA: gd_update TYPE i,
    gd_lines TYPE i.
    *Used to store BDC data
    DATA: BEGIN OF bdc_tab OCCURS 0.
    INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    *Used to stores error information from CALL TRANSACTION Function Module
    DATA: BEGIN OF messtab OCCURS 0.
    INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    *Screen declaration
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
    TITLE text-001. "Purchase order Num
    SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
    TITLE text-002. "New NETPR value
    PARAMETERS: p_newpr(14) TYPE c obligatory. "LIKE ekpo-netpr.
    SELECTION-SCREEN END OF BLOCK block2.
    *START-OF-SELECTION
    START-OF-SELECTION.
    Retrieve data from Purchase order table(EKKO)
    SELECT ekkoebeln ekkowaers ekpo~netpr
    INTO TABLE it_ekko
    FROM ekko AS ekko INNER JOIN ekpo AS ekpo
    ON ekpoebeln EQ ekkoebeln
    WHERE ekko~ebeln IN so_ebeln AND
    ekpo~ebelp EQ '10'.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Check data has been retrieved ready for processing
    DESCRIBE TABLE it_ekko LINES gd_lines.
    IF gd_lines LE 0.
    Display message if no data has been retrieved
    MESSAGE i003(zp) WITH 'No Records Found'(001).
    LEAVE TO SCREEN 0.
    ELSE.
    Update Customer master data (instalment text)
    LOOP AT it_ekko INTO wa_ekko.
    PERFORM bdc_update.
    ENDLOOP.
    Display message confirming number of records updated
    IF gd_update GT 1.
    MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
    ELSE.
    MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
    ENDIF.
    Display Success Report
    Check Success table
    DESCRIBE TABLE it_success LINES gd_lines.
    IF gd_lines GT 0.
    Display result report column headings
    PERFORM display_column_headings.
    Display result report
    PERFORM display_report.
    ENDIF.
    Display Error Report
    Check errors table
    DESCRIBE TABLE it_error LINES gd_lines.
    If errors exist then display errors report
    IF gd_lines GT 0.
    Display errors report
    PERFORM display_error_headings.
    PERFORM display_error_report.
    ENDIF.
    ENDIF.
    *& Form DISPLAY_COLUMN_HEADINGS
    Display column headings
    FORM display_column_headings.
    WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
    SKIP.
    WRITE:2 'The following records updated successfully:'(013).
    WRITE:/ sy-uline(42).
    FORMAT COLOR COL_HEADING.
    WRITE:/ sy-vline,
    (10) 'Purchase Order'(004), sy-vline,
    (11) 'Old Netpr'(005), sy-vline,
    (11) 'New Netpr'(006), sy-vline.
    WRITE:/ sy-uline(42).
    ENDFORM. " DISPLAY_COLUMN_HEADINGS
    *& Form BDC_UPDATE
    Populate BDC table and call transaction ME22
    FORM bdc_update.
    PERFORM dynpro USING:
    'X' 'SAPMM06E' '0105',
    ' ' 'BDC_CURSOR' 'RM06E-BSTNR',
    ' ' 'RM06E-BSTNR' wa_ekko-ebeln,
    ' ' 'BDC_OKCODE' '/00', "OK code
    'X' 'SAPMM06E' '0120',
    ' ' 'BDC_CURSOR' 'EKPO-NETPR(01)',
    ' ' 'EKPO-NETPR(01)' p_newpr,
    ' ' 'BDC_OKCODE' '=BU'. "OK code
    Call transaction to update customer instalment text
    CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
    MESSAGES INTO messtab.
    Check if update was succesful
    IF sy-subrc EQ 0.
    ADD 1 TO gd_update.
    APPEND wa_ekko TO it_success.
    ELSE.
    Retrieve error messages displayed during BDC update
    LOOP AT messtab WHERE msgtyp = 'E'.
    Builds actual message based on info returned from Call transaction
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
    EXPORTING
    msgid = messtab-msgid
    msgnr = messtab-msgnr
    msgv1 = messtab-msgv1
    msgv2 = messtab-msgv2
    msgv3 = messtab-msgv3
    msgv4 = messtab-msgv4
    IMPORTING
    message_text_output = w_textout.
    ENDLOOP.
    Build error table ready for output
    wa_error = wa_ekko.
    wa_error-err_msg = w_textout.
    APPEND wa_error TO it_error.
    CLEAR: wa_error.
    ENDIF.
    Clear bdc date table
    CLEAR: bdc_tab.
    REFRESH: bdc_tab.
    ENDFORM. " BDC_UPDATE
    FORM DYNPRO *
    stores values to bdc table *
    --> 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. " DYNPRO
    *& Form DISPLAY_REPORT
    Display Report
    FORM display_report.
    FORMAT COLOR COL_NORMAL.
    Loop at data table
    LOOP AT it_success INTO wa_success.
    WRITE:/ sy-vline,
    (10) wa_success-ebeln, sy-vline,
    (11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
    (11) p_newpr, sy-vline.
    CLEAR: wa_success.
    ENDLOOP.
    WRITE:/ sy-uline(42).
    REFRESH: it_success.
    FORMAT COLOR COL_BACKGROUND.
    ENDFORM. " DISPLAY_REPORT
    *& Form DISPLAY_ERROR_REPORT
    Display error report data
    FORM display_error_report.
    LOOP AT it_error INTO wa_error.
    WRITE:/ sy-vline,
    (10) wa_error-ebeln, sy-vline,
    (11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
    (73) wa_error-err_msg, sy-vline.
    ENDLOOP.
    WRITE:/ sy-uline(104).
    REFRESH: it_error.
    ENDFORM. " DISPLAY_ERROR_REPORT
    *& Form DISPLAY_ERROR_HEADINGS
    Display error report headings
    FORM display_error_headings.
    SKIP.
    WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
    SKIP.
    WRITE:2 'The following records failed during update:'(008).
    WRITE:/ sy-uline(104).
    FORMAT COLOR COL_HEADING.
    WRITE:/ sy-vline,
    (10) 'Purchase Order'(009), sy-vline,
    (11) 'Netpr'(010), sy-vline,
    (73) 'Error Message'(012), sy-vline.
    WRITE:/ sy-uline(104).
    FORMAT COLOR COL_NORMAL.
    ENDFORM. " DISPLAY_ERROR_HEADINGS
    regards.
    sowjanya.b.

  • Transaction codes in BDC

    Hi Experts,
    CAn someone please explain how to use a transaction code in BDC???

    Hi Manpreet,
    I think you are asking how to call transaction using BDC.
    If I am not wrong , hope this code will be helpful for u.
    Thanks.
    REPORT  ZBDC_EXAMPLE  NO STANDARD PAGE HEADING
                          LINE-SIZE 132.
    Data declaration
    TABLES: ekko, ekpo.
    TYPES: BEGIN OF t_ekko,
        ebeln TYPE ekko-ebeln,
        waers TYPE ekko-waers,
        netpr TYPE ekpo-netpr,
        err_msg(73) TYPE c,
    END OF t_ekko.
    DATA: it_ekko  TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko  TYPE t_ekko,
          it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_error TYPE t_ekko,
          it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_success TYPE t_ekko.
    DATA: w_textout            LIKE t100-text.
    DATA: gd_update TYPE i,
          gd_lines TYPE i.
    *Used to store BDC data
    DATA: BEGIN OF bdc_tab OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    *Used to stores error information from CALL TRANSACTION Function Module
    DATA: BEGIN OF messtab OCCURS 0.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    *Screen declaration
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
                                        TITLE text-001. "Purchase order Num
    SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
                                        TITLE text-002. "New NETPR value
    PARAMETERS:  p_newpr(14)   TYPE c obligatory.  "LIKE ekpo-netpr.
    SELECTION-SCREEN END OF BLOCK block2.
    *START-OF-SELECTION
    START-OF-SELECTION.
    Retrieve data from Purchase order table(EKKO)
      SELECT ekkoebeln ekkowaers ekpo~netpr
        INTO TABLE it_ekko
        FROM ekko AS ekko INNER JOIN ekpo AS ekpo
          ON ekpoebeln EQ ekkoebeln
       WHERE ekko~ebeln IN so_ebeln AND
             ekpo~ebelp EQ '10'.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Check data has been retrieved ready for processing
      DESCRIBE TABLE it_ekko LINES gd_lines.
      IF gd_lines LE 0.
      Display message if no data has been retrieved
        MESSAGE i003(zp) WITH 'No Records Found'(001).
        LEAVE TO SCREEN 0.
      ELSE.
      Update Customer master data (instalment text)
        LOOP AT it_ekko INTO wa_ekko.
          PERFORM bdc_update.
        ENDLOOP.
      Display message confirming number of records updated
        IF gd_update GT 1.
          MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
        ELSE.
          MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
        ENDIF.
    Display Success Report
      Check Success table
        DESCRIBE TABLE it_success LINES gd_lines.
        IF gd_lines GT 0.
        Display result report column headings
          PERFORM display_column_headings.
        Display result report
          PERFORM display_report.
        ENDIF.
    Display Error Report
      Check errors table
        DESCRIBE TABLE it_error LINES gd_lines.
      If errors exist then display errors report
        IF gd_lines GT 0.
        Display errors report
          PERFORM display_error_headings.
          PERFORM display_error_report.
        ENDIF.
      ENDIF.
    *&      Form  DISPLAY_COLUMN_HEADINGS
          Display column headings
    FORM display_column_headings.
      WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
      SKIP.
      WRITE:2 'The following records updated successfully:'(013).
      WRITE:/ sy-uline(42).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(004), sy-vline,
              (11) 'Old Netpr'(005), sy-vline,
              (11) 'New Netpr'(006), sy-vline.
      WRITE:/ sy-uline(42).
    ENDFORM.                    " DISPLAY_COLUMN_HEADINGS
    *&      Form  BDC_UPDATE
          Populate BDC table and call transaction ME22
    FORM bdc_update.
      PERFORM dynpro USING:
          'X'   'SAPMM06E'        '0105',
          ' '   'BDC_CURSOR'      'RM06E-BSTNR',
          ' '   'RM06E-BSTNR'     wa_ekko-ebeln,
          ' '   'BDC_OKCODE'      '/00',                      "OK code
          'X'   'SAPMM06E'        '0120',
          ' '   'BDC_CURSOR'      'EKPO-NETPR(01)',
          ' '   'EKPO-NETPR(01)'  p_newpr,
          ' '   'BDC_OKCODE'      '=BU'.                      "OK code
    Call transaction to update customer instalment text
      CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
             MESSAGES INTO messtab.
    Check if update was succesful
      IF sy-subrc EQ 0.
        ADD 1 TO gd_update.
        APPEND wa_ekko TO it_success.
      ELSE.
      Retrieve error messages displayed during BDC update
        LOOP AT messtab WHERE msgtyp = 'E'.
        Builds actual message based on info returned from Call transaction
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
               EXPORTING
                    msgid               = messtab-msgid
                    msgnr               = messtab-msgnr
                    msgv1               = messtab-msgv1
                    msgv2               = messtab-msgv2
                    msgv3               = messtab-msgv3
                    msgv4               = messtab-msgv4
               IMPORTING
                    message_text_output = w_textout.
        ENDLOOP.
      Build error table ready for output
        wa_error = wa_ekko.
        wa_error-err_msg = w_textout.
        APPEND wa_error TO it_error.
        CLEAR: wa_error.
      ENDIF.
    Clear bdc date table
      CLEAR: bdc_tab.
      REFRESH: bdc_tab.
    ENDFORM.                    " BDC_UPDATE
          FORM DYNPRO                                                   *
          stores values to bdc table                                    *
    -->  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.                               " DYNPRO
    *&      Form  DISPLAY_REPORT
          Display Report
    FORM display_report.
      FORMAT COLOR COL_NORMAL.
    Loop at data table
      LOOP AT it_success INTO wa_success.
        WRITE:/      sy-vline,
                (10) wa_success-ebeln, sy-vline,
                (11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
                (11) p_newpr, sy-vline.
        CLEAR: wa_success.
      ENDLOOP.
      WRITE:/ sy-uline(42).
      REFRESH: it_success.
      FORMAT COLOR COL_BACKGROUND.
    ENDFORM.                    " DISPLAY_REPORT
    *&      Form  DISPLAY_ERROR_REPORT
          Display error report data
    FORM display_error_report.
      LOOP AT it_error INTO wa_error.
        WRITE:/      sy-vline,
                (10) wa_error-ebeln, sy-vline,
                (11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
                (73) wa_error-err_msg, sy-vline.
      ENDLOOP.
      WRITE:/ sy-uline(104).
      REFRESH: it_error.
    ENDFORM.                    " DISPLAY_ERROR_REPORT
    *&      Form  DISPLAY_ERROR_HEADINGS
          Display error report headings
    FORM display_error_headings.
      SKIP.
      WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
      SKIP.
      WRITE:2 'The following records failed during update:'(008).
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(009), sy-vline,
              (11) 'Netpr'(010), sy-vline,
              (73) 'Error Message'(012), sy-vline.
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_NORMAL.
    ENDFORM.                    " DISPLAY_ERROR_HEADINGS
    Edited by: Navdeep Malik on Dec 24, 2008 6:33 AM
    Edited by: Navdeep Malik on Dec 24, 2008 7:02 AM

  • BDC using session method

    hai
    can anyone post me bdc using session method plz

    Hi,
    ABAP BDC SESSION METHOD SAMPLE CODE
    pool of form routines
    include zmppn001.
    Define BDC Table Structure
    data: begin of itab_bdc_tab occurs 0.
    include structure bdcdata.
    data: end of itab_bdc_tab.
    Input record layout of Leagcy File
    data: begin of itab_xcel occurs 0,
    matnr(18) type c,
    werks(4) type c,
    alnag(2) type c,
    verid(4) type c,
    text1(40) type c,
    bstmi like mkal-bstmi,
    bstma like mkal-bstma,
    adatu(10) type c,
    bdatu(10) type c,
    stlal(2) type c,
    stlan(1) type c,
    serkz(1) type c,
    mdv01(8) type c,
    elpro(4) type c,
    alort(4) type c,
    end of itab_xcel.
    data: begin of lt_pp04_cache occurs 0,
    matnr like itab_xcel-matnr,
    werks like itab_xcel-werks,
    alnag like itab_xcel-alnag,
    plnnr like mapl-plnnr,
    arbpl like crhd-arbpl,
    ktext like crtx-ktext,
    end of lt_pp04_cache.
    data: v_ssnnr(4) type n,
    v_lines_in_xcel like sy-tabix,
    v_ssnname like apqi-groupid,
    v_trans_in_ssn type i,
    wa_xcel LIKE itab_xcel,
    l_tabix like sy-tabix,
    v_matnr like rc27m-matnr,
    v_plnnr like mapl-plnnr,
    v_plnal like mapl-plnal,
    v_tcode like sy-tcode value 'C223',
    v_plnty like plas-plnty value 'R',
    v_objty like crhd-objty value 'A',
    v_plpo_steus like plpo-steus value 'PP04',
    v_verwe like crhd-verwe value '0007'.
    Parameters
    selection-screen: skip 3.
    selection-screen: begin of block 1 with frame.
    parameters: p_name like rlgrap-filename
    default 'C:\My Documents\InputFile.txt'
    obligatory,
    bdc session name prefix
    p_bdcpfx(6) default 'ZPVCRT'
    obligatory,
    number for transction per BDC session
    p_trnssn type i
    default 2000 obligatory,
    retain the BDC session after successfull execution
    p_keep like apqi-qerase
    default 'X',
    user who will be executing BDC session
    p_uname like apqi-userid
    default sy-uname
    obligatory.
    selection-screen: end of block 1.
    possible entry list (F4 dropdown) for input file name
    at selection-screen on value-request for p_name.
    *-SELECT FILE FROM USERS LOCAL PC
    call function 'WS_FILENAME_GET'
    exporting
    DEF_FILENAME = ' '
    def_path = 'C:\Temp\'
    mask = ',.,..'
    mode = 'O'
    title = 'Select File '(007)
    importing
    filename = p_name
    RC =
    exceptions
    inv_winsys = 1
    no_batch = 2
    selection_cancel = 3
    selection_error = 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.
    begin the show
    start-of-selection.
    read data from input file
    perform transfer_xcel_to_itab.
    loop at itab_xcel.
    hang on to xcel line num
    l_tabix = sy-tabix.
    each line in the xcel file marks begining of new prod.version defn
    if num-of-trnas-in-session = 0, create new BDC session
    if v_trans_in_ssn is initial.
    perform bdc_session_open.
    endif.
    begin new bdc script for rtg create trans
    fill in bdc-data for prod.version maintenance screens
    perform bdc_build_script.
    insert the bdc script as a BDC transaction
    perform bdc_submit_transaction.
    keep track of how many BDC transactions were inserted in the BDC
    session
    add 1 to v_trans_in_ssn.
    if the user-specified num of trans in BDC session is reached OR
    if end of input file is reached, close the BDC session
    if v_trans_in_ssn = p_trnssn or
    l_tabix = v_lines_in_xcel.
    perform bdc_session_close.
    clear v_trans_in_ssn.
    endif.
    endloop.
    top-of-page.
    call function 'Z_HEADER'
    EXPORTING
    FLEX_TEXT1 =
    FLEX_TEXT2 =
    FLEX_TEXT3 =
    FORM TRANSFER_XCEL_TO_ITAB *
    Transfer Xcel Spreadsheet to SAP Internal Table *
    form transfer_xcel_to_itab.
    Read the tab-delimited file into itab
    call function 'WS_UPLOAD'
    exporting
    filename = p_name
    filetype = 'DAT'
    IMPORTING
    filelength = flength
    tables
    data_tab = itab_xcel
    exceptions
    conversion_error = 1
    file_open_error = 2
    file_read_error = 3
    invalid_table_width = 4
    invalid_type = 5
    no_batch = 6
    unknown_error = 7
    others = 8.
    if sy-subrc = 0.
    sort the data
    sort itab_xcel by matnr werks.
    clear v_lines_in_xcel.
    if no data in the file - error out
    describe table itab_xcel lines v_lines_in_xcel.
    if v_lines_in_xcel is initial.
    write: / 'No data in input file'.
    stop.
    endif.
    else.
    if file upload failed - error out
    write: / 'Error reading input file'.
    stop.
    endif.
    endform.
    FORM BDC_SESSION_OPEN *
    Open BDC Session *
    form bdc_session_open.
    create bdc session name = prefix-from-selectn-screen + nnnn
    add 1 to v_ssnnr.
    concatenate p_bdcpfx v_ssnnr into v_ssnname.
    open new bdc session
    call function 'BDC_OPEN_GROUP'
    exporting
    client = sy-mandt
    group = v_ssnname
    keep = p_keep
    user = p_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.
    endform.
    FORM BDC_BUILD_SCRIPT *
    Build BDC *
    form bdc_build_script.
    data: l_arbpl like crhd-arbpl,
    l_text1 like mkal-text1,
    l_mdv01 like mkal-mdv01,
    l_mapl like mapl.
    clear bdc-data itab - begin of new bdc transaction
    clear itab_bdc_tab.
    refresh itab_bdc_tab.
    read material cross reference tables to determine sap part#
    clear : v_matnr, v_plnnr, v_plnal.
    perform read_matnr_cross_ref using itab_xcel-matnr
    itab_xcel-werks
    changing v_matnr.
    determine the version description to use
    if itab_xcel-text1 is initial.
    l_text1 = itab_xcel-verid.
    else.
    l_text1 = itab_xcel-text1.
    endif.
    determine the routing group# and group ctr# to use
    perform read_routing .
    determine the production line to use
    if itab_xcel-mdv01 is initial.
    if not provided in the file then:
    prod line = work ctr on the last PP04 op of the rtg determined above
    perform read_wc_on_last_pp04 using v_plnnr v_plnal
    changing l_mdv01.
    NOTE: when executing the above form\routine, if v_plnnr is initial
    or v_plnal is initial, THEN l_mdv01 will automatically be
    returned blank (ie initial)
    else.
    l_mdv01 = itab_xcel-mdv01.
    endif.
    build bdc script
    perform bdc_build_script_record
    fill in initial screen
    using: 'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=ENTE',
    ' ' 'MKAL-WERKS' itab_xcel-werks,
    ' ' 'MKAL-MATNR' v_matnr,
    ' ' 'MKAL_ADMIN-DISPO' space,
    ' ' 'MKAL-PLNNR' space,
    ' ' 'MKAL_ADMIN-STTAG' space,
    ' ' 'MKAL-PLNNG' space,
    ' ' 'MKAL-MDV01' space,
    ' ' 'MKAL-PLNNM' space,
    click create button on initial screen and go to detail screen
    'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=CREA',
    fill in the detail screen and go back to initial screen
    'X' 'SAPLCMFV' '2000',
    ' ' 'BDC_OKCODE' '=CLOS',
    ' ' 'MKAL_EXPAND-MATNR' v_matnr,
    ' ' 'MKAL_EXPAND-VERID' itab_xcel-verid,
    ' ' 'MKAL_EXPAND-TEXT1' l_text1,
    ' ' 'MKAL_EXPAND-BSTMI' itab_xcel-bstmi,
    ' ' 'MKAL_EXPAND-BSTMA' itab_xcel-bstma,
    ' ' 'MKAL_EXPAND-ADATU' itab_xcel-adatu,
    ' ' 'MKAL_EXPAND-BDATU' itab_xcel-bdatu,
    ' ' 'MKAL_EXPAND-PLTYG' v_plnty,
    ' ' 'MKAL_EXPAND-PLNNG' v_plnnr,
    ' ' 'MKAL_EXPAND-ALNAG' v_plnal,
    ' ' 'MKAL_EXPAND-STLAL' itab_xcel-stlal,
    ' ' 'MKAL_EXPAND-STLAN' itab_xcel-stlan,
    ' ' 'MKAL_EXPAND-SERKZ' itab_xcel-serkz,
    ' ' 'MKAL_EXPAND-MDV01' l_mdv01,
    ' ' 'MKAL_EXPAND-ELPRO' itab_xcel-elpro,
    ' ' 'MKAL_EXPAND-ALORT' itab_xcel-alort,
    save the production version from initial screen
    'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=SAVE'.
    endform.
    FORM BDC_SUBMIT_TRANSACTION *
    Submit BDC Session *
    form bdc_submit_transaction.
    Load BDC script as a trqansction in BDC session
    call function 'BDC_INSERT'
    exporting
    tcode = v_tcode
    tables
    dynprotab = itab_bdc_tab
    exceptions
    internal_error = 01
    not_open = 02
    queue_error = 03
    tcode_invalid = 04.
    endform.
    FORM BDC_BUILD_SCRIPT_RECORD *
    form bdc_build_script_record using dynbegin name value.
    clear itab_bdc_tab.
    if dynbegin = 'X'.
    move: name to itab_bdc_tab-program,
    value to itab_bdc_tab-dynpro,
    'X' to itab_bdc_tab-dynbegin.
    else.
    move: name to itab_bdc_tab-fnam,
    value to itab_bdc_tab-fval.
    shift itab_bdc_tab-fval left deleting leading space.
    endif.
    append itab_bdc_tab.
    endform.
    FORM BDC_SESSION_CLOSE *
    Close BDC Session *
    form bdc_session_close.
    close the session
    call function 'BDC_CLOSE_GROUP'
    exceptions
    not_open = 1
    queue_error = 2
    others = 3.
    skip 2.
    if sy-subrc ne 0.
    write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
    else.
    write : / 'Session created:', v_ssnname,
    50 '# of transactions:', v_trans_in_ssn.
    endif.
    endform.
    *& Form read_routing_cache
    *FORM read_routing_cache USING pi_matnr
    pi_werks
    pi_alnag
    pi_verid
    pi_mdv01.
    DATA: BEGIN OF lt_plpo OCCURS 0,
    vornr LIKE plpo-vornr,
    objty LIKE crhd-objty,
    objid LIKE crhd-objid,
    arbpl LIKE crhd-arbpl,
    END OF lt_plpo,
    l_mapl_plnnr LIKE mapl-plnnr.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    IF sy-subrc = 0.
    do nothing - lt_pp04_cache header line has rtg#
    ELSE.
    get the routing group # from MAPL
    SELECT plnnr INTO l_mapl_plnnr
    FROM mapl UP TO 1 ROWS
    WHERE matnr = pi_matnr AND
    werks = pi_werks AND
    plnty = 'R' AND
    plnal = pi_alnag AND
    loekz = space.
    ENDSELECT.
    put it in the cache internal table
    IF NOT l_mapl_plnnr IS INITIAL.
    lt_pp04_cache-matnr = pi_matnr.
    lt_pp04_cache-werks = pi_werks.
    lt_pp04_cache-alnag = pi_alnag.
    lt_pp04_cache-plnnr = l_mapl_plnnr.
    APPEND lt_pp04_cache.
    ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
    lt_pp04_cache-arbpl IS INITIAL AND
    ( pi_verid IS INITIAL OR
    pi_mdv01 IS INITIAL ).
    read the last PP04 operation
    CLEAR lt_plpo.
    REFRESH lt_plpo.
    SELECT vornr eobjty eobjid e~arbpl
    INTO CORRESPONDING FIELDS OF TABLE lt_plpo
    FROM plas AS b
    INNER JOIN plpo AS c
    ON bplnty = cplnty AND
    bplnnr = cplnnr AND
    bzaehl = czaehl
    INNER JOIN crhd AS e
    ON carbid = eobjid
    WHERE b~plnty = v_plnty AND
    b~plnnr = lt_pp04_cache-plnnr AND
    b~plnal = lt_pp04_cache-alnag AND
    c~loekz = space AND
    c~steus = v_plpo_steus AND
    e~objty = v_objty AND
    e~werks = lt_pp04_cache-werks AND
    e~verwe = v_verwe.
    SORT lt_plpo BY vornr DESCENDING.
    READ TABLE lt_plpo INDEX 1.
    IF NOT lt_plpo-arbpl IS INITIAL.
    lt_pp04_cache-arbpl = lt_plpo-arbpl.
    read work center description
    SELECT SINGLE ktext INTO lt_pp04_cache-ktext
    FROM crtx WHERE objty = lt_plpo-objty AND
    objid = lt_plpo-objid AND
    spras = sy-langu.
    the following read will get the index of the correct record to be
    updated in the cache
    READ TABLE lt_pp04_cache
    WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    MODIFY lt_pp04_cache
    INDEX sy-tabix
    TRANSPORTING arbpl ktext.
    ENDIF.
    ENDIF.
    *ENDFORM. " read_last_pp04_operation_cache
    *& Form read_routing
    form read_routing.
    data: begin of lt_mapl occurs 0,
    plnnr like mapl-plnnr,
    plnal like mapl-plnal,
    end of lt_mapl,
    l_arbpl like crhd-arbpl.
    get all the rtg# and grp ctr# from MAPL
    select plnnr plnal
    into corresponding fields of table lt_mapl
    from mapl
    where matnr = v_matnr and
    werks = itab_xcel-werks and
    plnty = v_plnty and "Rate Routing
    loekz = space. "with del flag = OFF
    sort lt_mapl by plnal.
    if not itab_xcel-verid is initial.
    if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#
    if itab_xcel-verid = '0001'.
    read table lt_mapl index 1.
    v_plnnr = lt_mapl-plnnr.
    v_plnal = lt_mapl-plnal.
    else.
    if the verid<>0001 then use the rtg-grp# and grp-ctr# of the routing
    whose work center on the last PP04 operation matches the given verid
    loop at lt_mapl.
    clear l_arbpl.
    get the work center from the last PP04 operation
    perform read_wc_on_last_pp04 using lt_mapl-plnnr
    lt_mapl-plnal
    changing l_arbpl.
    if itab_xcel-verid = l_arbpl.
    v_plnnr = lt_mapl-plnnr.
    v_plnal = lt_mapl-plnal.
    exit.
    endif.
    endloop.
    endif.
    else.
    do nothing
    endif.
    For version IDs that are other then '0000' or 'ZWIP' :--
    if itab_xcel-verid NE '0000' and
    itab_xcel-verid NE 'ZWIP'.
    if routing group# or group counter was not determined, make the
    valid-to date 99/99/9999 so that the BDC, on execution, errors out.
    if v_plnnr is initial or
    v_plnal is initial.
    itab_xcel-bdatu = '99/99/9999'.
    endif.
    endif.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    IF sy-subrc = 0.
    do nothing - lt_pp04_cache header line has rtg#
    ELSE.
    get the routing group # from MAPL
    put it in the cache internal table
    IF NOT l_mapl_plnnr IS INITIAL.
    lt_pp04_cache-matnr = pi_matnr.
    lt_pp04_cache-werks = pi_werks.
    lt_pp04_cache-alnag = pi_alnag.
    lt_pp04_cache-plnnr = l_mapl_plnnr.
    APPEND lt_pp04_cache.
    ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
    lt_pp04_cache-arbpl IS INITIAL AND
    ( pi_verid IS INITIAL OR
    pi_mdv01 IS INITIAL ).
    read the last PP04 operation
    CLEAR lt_plpo.
    REFRESH lt_plpo.
    SELECT vornr eobjty eobjid e~arbpl
    INTO CORRESPONDING FIELDS OF TABLE lt_plpo
    FROM plas AS b
    INNER JOIN plpo AS c
    ON bplnty = cplnty AND
    bplnnr = cplnnr AND
    bzaehl = czaehl
    INNER JOIN crhd AS e
    ON carbid = eobjid
    WHERE b~plnty = v_plnty AND
    b~plnnr = lt_pp04_cache-plnnr AND
    b~plnal = lt_pp04_cache-alnag AND
    c~loekz = space AND
    c~steus = v_plpo_steus AND
    e~objty = v_objty AND
    e~werks = lt_pp04_cache-werks AND
    e~verwe = v_verwe.
    SORT lt_plpo BY vornr DESCENDING.
    READ TABLE lt_plpo INDEX 1.
    IF NOT lt_plpo-arbpl IS INITIAL.
    lt_pp04_cache-arbpl = lt_plpo-arbpl.
    read work center description
    SELECT SINGLE ktext INTO lt_pp04_cache-ktext
    FROM crtx WHERE objty = lt_plpo-objty AND
    objid = lt_plpo-objid AND
    spras = sy-langu.
    the following read will get the index of the correct record to be
    updated in the cache
    READ TABLE lt_pp04_cache
    WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    MODIFY lt_pp04_cache
    INDEX sy-tabix
    TRANSPORTING arbpl ktext.
    ENDIF.
    ENDIF.
    endform. " read_last_pp04_operation_cache
    *& Form read_wc_on_last_pp04
    form read_wc_on_last_pp04 using pi_plnnr
    pi_plnal
    changing pe_arbpl.
    data: begin of lt_plpo occurs 0,
    vornr like plpo-vornr,
    objty like crhd-objty,
    objid like crhd-objid,
    arbpl like crhd-arbpl,
    end of lt_plpo.
    get all the PP04 operations for the given rtg# & grp-ctr#
    select vornr eobjty eobjid e~arbpl
    into corresponding fields of table lt_plpo
    from plas as b
    inner join plpo as c
    on bplnty = cplnty and
    bplnnr = cplnnr and
    bzaehl = czaehl
    inner join crhd as e
    on carbid = eobjid
    where b~plnty = v_plnty and "Rate Routing
    b~plnnr = pi_plnnr and
    b~plnal = pi_plnal and
    c~loekz = space and "Oper Del Flag = OFF
    c~steus = v_plpo_steus and "PP04
    e~objty = v_objty. "WC Obj Type = 'A'
    read the last operation
    sort lt_plpo by vornr descending.
    read table lt_plpo index 1.
    pe_arbpl = lt_plpo-arbpl.
    endform.
    Reward Points if useful
    Raghunath.S
    9986076729

  • Bdc using  FBS1 & F.81

    HI,
    how can i create this programm using call transaction there is two tcodes are used in recording .
    if it is done bu session method plz provide me codes for this.
    thanks jayant

    Hi,
    PERFORM bdc_transaction USING 'FBS1'.
    After calling 1st T-Code
    Clear BDC data.
    ie.
    clear i_bdcdata[].
    After clear itab continue as per yur way.
    otherwise
    use 1st T-Code itab  i_bdcdata .
    use 2st T-Code itab  i_bdcdata_01.
    Reward if usefull...
    Thanks,
    Durai.V

  • BDC SESSION METHOD EXPLAINED

    Hi,
    Eplained BDC Session Method
    flat file upload into sap

    ABAP BDC SESSION METHOD SAMPLE CODE
    pool of form routines
    include zmppn001.
    Define BDC Table Structure
    data: begin of itab_bdc_tab occurs 0.
    include structure bdcdata.
    data: end of itab_bdc_tab.
    Input record layout of Leagcy File
    data: begin of itab_xcel occurs 0,
    matnr(18) type c,
    werks(4) type c,
    alnag(2) type c,
    verid(4) type c,
    text1(40) type c,
    bstmi like mkal-bstmi,
    bstma like mkal-bstma,
    adatu(10) type c,
    bdatu(10) type c,
    stlal(2) type c,
    stlan(1) type c,
    serkz(1) type c,
    mdv01(8) type c,
    elpro(4) type c,
    alort(4) type c,
    end of itab_xcel.
    data: begin of lt_pp04_cache occurs 0,
    matnr like itab_xcel-matnr,
    werks like itab_xcel-werks,
    alnag like itab_xcel-alnag,
    plnnr like mapl-plnnr,
    arbpl like crhd-arbpl,
    ktext like crtx-ktext,
    end of lt_pp04_cache.
    data: v_ssnnr(4) type n,
    v_lines_in_xcel like sy-tabix,
    v_ssnname like apqi-groupid,
    v_trans_in_ssn type i,
    wa_xcel LIKE itab_xcel,
    l_tabix like sy-tabix,
    v_matnr like rc27m-matnr,
    v_plnnr like mapl-plnnr,
    v_plnal like mapl-plnal,
    v_tcode like sy-tcode value 'C223',
    v_plnty like plas-plnty value 'R',
    v_objty like crhd-objty value 'A',
    v_plpo_steus like plpo-steus value 'PP04',
    v_verwe like crhd-verwe value '0007'.
    Parameters
    selection-screen: skip 3.
    selection-screen: begin of block 1 with frame.
    parameters: p_name like rlgrap-filename
    default 'C:\My Documents\InputFile.txt'
    obligatory,
    bdc session name prefix
    p_bdcpfx(6) default 'ZPVCRT'
    obligatory,
    number for transction per BDC session
    p_trnssn type i
    default 2000 obligatory,
    retain the BDC session after successfull execution
    p_keep like apqi-qerase
    default 'X',
    user who will be executing BDC session
    p_uname like apqi-userid
    default sy-uname
    obligatory.
    selection-screen: end of block 1.
    possible entry list (F4 dropdown) for input file name
    at selection-screen on value-request for p_name.
    *-SELECT FILE FROM USERS LOCAL PC
    call function 'WS_FILENAME_GET'
    exporting
    DEF_FILENAME = ' '
    def_path = 'C:\Temp\'
    mask = ',.,..'
    mode = 'O'
    title = 'Select File '(007)
    importing
    filename = p_name
    RC =
    exceptions
    inv_winsys = 1
    no_batch = 2
    selection_cancel = 3
    selection_error = 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.
    begin the show
    start-of-selection.
    read data from input file
    perform transfer_xcel_to_itab.
    loop at itab_xcel.
    hang on to xcel line num
    l_tabix = sy-tabix.
    each line in the xcel file marks begining of new prod.version defn
    if num-of-trnas-in-session = 0, create new BDC session
    if v_trans_in_ssn is initial.
    perform bdc_session_open.
    endif.
    begin new bdc script for rtg create trans
    fill in bdc-data for prod.version maintenance screens
    perform bdc_build_script.
    insert the bdc script as a BDC transaction
    perform bdc_submit_transaction.
    keep track of how many BDC transactions were inserted in the BDC
    session
    add 1 to v_trans_in_ssn.
    if the user-specified num of trans in BDC session is reached OR
    if end of input file is reached, close the BDC session
    if v_trans_in_ssn = p_trnssn or
    l_tabix = v_lines_in_xcel.
    perform bdc_session_close.
    clear v_trans_in_ssn.
    endif.
    endloop.
    top-of-page.
    call function 'Z_HEADER'
    EXPORTING
    FLEX_TEXT1 =
    FLEX_TEXT2 =
    FLEX_TEXT3 =
    FORM TRANSFER_XCEL_TO_ITAB *
    Transfer Xcel Spreadsheet to SAP Internal Table *
    form transfer_xcel_to_itab.
    Read the tab-delimited file into itab
    call function 'WS_UPLOAD'
    exporting
    filename = p_name
    filetype = 'DAT'
    IMPORTING
    filelength = flength
    tables
    data_tab = itab_xcel
    exceptions
    conversion_error = 1
    file_open_error = 2
    file_read_error = 3
    invalid_table_width = 4
    invalid_type = 5
    no_batch = 6
    unknown_error = 7
    others = 8.
    if sy-subrc = 0.
    sort the data
    sort itab_xcel by matnr werks.
    clear v_lines_in_xcel.
    if no data in the file - error out
    describe table itab_xcel lines v_lines_in_xcel.
    if v_lines_in_xcel is initial.
    write: / 'No data in input file'.
    stop.
    endif.
    else.
    if file upload failed - error out
    write: / 'Error reading input file'.
    stop.
    endif.
    endform.
    FORM BDC_SESSION_OPEN *
    Open BDC Session *
    form bdc_session_open.
    create bdc session name = prefix-from-selectn-screen + nnnn
    add 1 to v_ssnnr.
    concatenate p_bdcpfx v_ssnnr into v_ssnname.
    open new bdc session
    call function 'BDC_OPEN_GROUP'
    exporting
    client = sy-mandt
    group = v_ssnname
    keep = p_keep
    user = p_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.
    endform.
    FORM BDC_BUILD_SCRIPT *
    Build BDC *
    form bdc_build_script.
    data: l_arbpl like crhd-arbpl,
    l_text1 like mkal-text1,
    l_mdv01 like mkal-mdv01,
    l_mapl like mapl.
    clear bdc-data itab - begin of new bdc transaction
    clear itab_bdc_tab.
    refresh itab_bdc_tab.
    read material cross reference tables to determine sap part#
    clear : v_matnr, v_plnnr, v_plnal.
    perform read_matnr_cross_ref using itab_xcel-matnr
    itab_xcel-werks
    changing v_matnr.
    determine the version description to use
    if itab_xcel-text1 is initial.
    l_text1 = itab_xcel-verid.
    else.
    l_text1 = itab_xcel-text1.
    endif.
    determine the routing group# and group ctr# to use
    perform read_routing .
    determine the production line to use
    if itab_xcel-mdv01 is initial.
    if not provided in the file then:
    prod line = work ctr on the last PP04 op of the rtg determined above
    perform read_wc_on_last_pp04 using v_plnnr v_plnal
    changing l_mdv01.
    NOTE: when executing the above form\routine, if v_plnnr is initial
    or v_plnal is initial, THEN l_mdv01 will automatically be
    returned blank (ie initial)
    else.
    l_mdv01 = itab_xcel-mdv01.
    endif.
    build bdc script
    perform bdc_build_script_record
    fill in initial screen
    using: 'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=ENTE',
    ' ' 'MKAL-WERKS' itab_xcel-werks,
    ' ' 'MKAL-MATNR' v_matnr,
    ' ' 'MKAL_ADMIN-DISPO' space,
    ' ' 'MKAL-PLNNR' space,
    ' ' 'MKAL_ADMIN-STTAG' space,
    ' ' 'MKAL-PLNNG' space,
    ' ' 'MKAL-MDV01' space,
    ' ' 'MKAL-PLNNM' space,
    click create button on initial screen and go to detail screen
    'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=CREA',
    fill in the detail screen and go back to initial screen
    'X' 'SAPLCMFV' '2000',
    ' ' 'BDC_OKCODE' '=CLOS',
    ' ' 'MKAL_EXPAND-MATNR' v_matnr,
    ' ' 'MKAL_EXPAND-VERID' itab_xcel-verid,
    ' ' 'MKAL_EXPAND-TEXT1' l_text1,
    ' ' 'MKAL_EXPAND-BSTMI' itab_xcel-bstmi,
    ' ' 'MKAL_EXPAND-BSTMA' itab_xcel-bstma,
    ' ' 'MKAL_EXPAND-ADATU' itab_xcel-adatu,
    ' ' 'MKAL_EXPAND-BDATU' itab_xcel-bdatu,
    ' ' 'MKAL_EXPAND-PLTYG' v_plnty,
    ' ' 'MKAL_EXPAND-PLNNG' v_plnnr,
    ' ' 'MKAL_EXPAND-ALNAG' v_plnal,
    ' ' 'MKAL_EXPAND-STLAL' itab_xcel-stlal,
    ' ' 'MKAL_EXPAND-STLAN' itab_xcel-stlan,
    ' ' 'MKAL_EXPAND-SERKZ' itab_xcel-serkz,
    ' ' 'MKAL_EXPAND-MDV01' l_mdv01,
    ' ' 'MKAL_EXPAND-ELPRO' itab_xcel-elpro,
    ' ' 'MKAL_EXPAND-ALORT' itab_xcel-alort,
    save the production version from initial screen
    'X' 'SAPLCMFV' '1000',
    ' ' 'BDC_OKCODE' '=SAVE'.
    endform.
    FORM BDC_SUBMIT_TRANSACTION *
    Submit BDC Session *
    form bdc_submit_transaction.
    Load BDC script as a trqansction in BDC session
    call function 'BDC_INSERT'
    exporting
    tcode = v_tcode
    tables
    dynprotab = itab_bdc_tab
    exceptions
    internal_error = 01
    not_open = 02
    queue_error = 03
    tcode_invalid = 04.
    endform.
    FORM BDC_BUILD_SCRIPT_RECORD *
    form bdc_build_script_record using dynbegin name value.
    clear itab_bdc_tab.
    if dynbegin = 'X'.
    move: name to itab_bdc_tab-program,
    value to itab_bdc_tab-dynpro,
    'X' to itab_bdc_tab-dynbegin.
    else.
    move: name to itab_bdc_tab-fnam,
    value to itab_bdc_tab-fval.
    shift itab_bdc_tab-fval left deleting leading space.
    endif.
    append itab_bdc_tab.
    endform.
    FORM BDC_SESSION_CLOSE *
    Close BDC Session *
    form bdc_session_close.
    close the session
    call function 'BDC_CLOSE_GROUP'
    exceptions
    not_open = 1
    queue_error = 2
    others = 3.
    skip 2.
    if sy-subrc ne 0.
    write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
    else.
    write : / 'Session created:', v_ssnname,
    50 '# of transactions:', v_trans_in_ssn.
    endif.
    endform.
    *& Form read_routing_cache
    *FORM read_routing_cache USING pi_matnr
    pi_werks
    pi_alnag
    pi_verid
    pi_mdv01.
    DATA: BEGIN OF lt_plpo OCCURS 0,
    vornr LIKE plpo-vornr,
    objty LIKE crhd-objty,
    objid LIKE crhd-objid,
    arbpl LIKE crhd-arbpl,
    END OF lt_plpo,
    l_mapl_plnnr LIKE mapl-plnnr.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    IF sy-subrc = 0.
    do nothing - lt_pp04_cache header line has rtg#
    ELSE.
    get the routing group # from MAPL
    SELECT plnnr INTO l_mapl_plnnr
    FROM mapl UP TO 1 ROWS
    WHERE matnr = pi_matnr AND
    werks = pi_werks AND
    plnty = 'R' AND
    plnal = pi_alnag AND
    loekz = space.
    ENDSELECT.
    put it in the cache internal table
    IF NOT l_mapl_plnnr IS INITIAL.
    lt_pp04_cache-matnr = pi_matnr.
    lt_pp04_cache-werks = pi_werks.
    lt_pp04_cache-alnag = pi_alnag.
    lt_pp04_cache-plnnr = l_mapl_plnnr.
    APPEND lt_pp04_cache.
    ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
    lt_pp04_cache-arbpl IS INITIAL AND
    ( pi_verid IS INITIAL OR
    pi_mdv01 IS INITIAL ).
    read the last PP04 operation
    CLEAR lt_plpo.
    REFRESH lt_plpo.
    SELECT vornr eobjty eobjid e~arbpl
    INTO CORRESPONDING FIELDS OF TABLE lt_plpo
    FROM plas AS b
    INNER JOIN plpo AS c
    ON bplnty = cplnty AND
    bplnnr = cplnnr AND
    bzaehl = czaehl
    INNER JOIN crhd AS e
    ON carbid = eobjid
    WHERE b~plnty = v_plnty AND
    b~plnnr = lt_pp04_cache-plnnr AND
    b~plnal = lt_pp04_cache-alnag AND
    c~loekz = space AND
    c~steus = v_plpo_steus AND
    e~objty = v_objty AND
    e~werks = lt_pp04_cache-werks AND
    e~verwe = v_verwe.
    SORT lt_plpo BY vornr DESCENDING.
    READ TABLE lt_plpo INDEX 1.
    IF NOT lt_plpo-arbpl IS INITIAL.
    lt_pp04_cache-arbpl = lt_plpo-arbpl.
    read work center description
    SELECT SINGLE ktext INTO lt_pp04_cache-ktext
    FROM crtx WHERE objty = lt_plpo-objty AND
    objid = lt_plpo-objid AND
    spras = sy-langu.
    the following read will get the index of the correct record to be
    updated in the cache
    READ TABLE lt_pp04_cache
    WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    MODIFY lt_pp04_cache
    INDEX sy-tabix
    TRANSPORTING arbpl ktext.
    ENDIF.
    ENDIF.
    *ENDFORM. " read_last_pp04_operation_cache
    *& Form read_routing
    form read_routing.
    data: begin of lt_mapl occurs 0,
    plnnr like mapl-plnnr,
    plnal like mapl-plnal,
    end of lt_mapl,
    l_arbpl like crhd-arbpl.
    get all the rtg# and grp ctr# from MAPL
    select plnnr plnal
    into corresponding fields of table lt_mapl
    from mapl
    where matnr = v_matnr and
    werks = itab_xcel-werks and
    plnty = v_plnty and "Rate Routing
    loekz = space. "with del flag = OFF
    sort lt_mapl by plnal.
    if not itab_xcel-verid is initial.
    if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#
    if itab_xcel-verid = '0001'.
    read table lt_mapl index 1.
    v_plnnr = lt_mapl-plnnr.
    v_plnal = lt_mapl-plnal.
    else.
    if the verid<>0001 then use the rtg-grp# and grp-ctr# of the routing
    whose work center on the last PP04 operation matches the given verid
    loop at lt_mapl.
    clear l_arbpl.
    get the work center from the last PP04 operation
    perform read_wc_on_last_pp04 using lt_mapl-plnnr
    lt_mapl-plnal
    changing l_arbpl.
    if itab_xcel-verid = l_arbpl.
    v_plnnr = lt_mapl-plnnr.
    v_plnal = lt_mapl-plnal.
    exit.
    endif.
    endloop.
    endif.
    else.
    do nothing
    endif.
    For version IDs that are other then '0000' or 'ZWIP' :--
    if itab_xcel-verid NE '0000' and
    itab_xcel-verid NE 'ZWIP'.
    if routing group# or group counter was not determined, make the
    valid-to date 99/99/9999 so that the BDC, on execution, errors out.
    if v_plnnr is initial or
    v_plnal is initial.
    itab_xcel-bdatu = '99/99/9999'.
    endif.
    endif.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    IF sy-subrc = 0.
    do nothing - lt_pp04_cache header line has rtg#
    ELSE.
    get the routing group # from MAPL
    put it in the cache internal table
    IF NOT l_mapl_plnnr IS INITIAL.
    lt_pp04_cache-matnr = pi_matnr.
    lt_pp04_cache-werks = pi_werks.
    lt_pp04_cache-alnag = pi_alnag.
    lt_pp04_cache-plnnr = l_mapl_plnnr.
    APPEND lt_pp04_cache.
    ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
    lt_pp04_cache-arbpl IS INITIAL AND
    ( pi_verid IS INITIAL OR
    pi_mdv01 IS INITIAL ).
    read the last PP04 operation
    CLEAR lt_plpo.
    REFRESH lt_plpo.
    SELECT vornr eobjty eobjid e~arbpl
    INTO CORRESPONDING FIELDS OF TABLE lt_plpo
    FROM plas AS b
    INNER JOIN plpo AS c
    ON bplnty = cplnty AND
    bplnnr = cplnnr AND
    bzaehl = czaehl
    INNER JOIN crhd AS e
    ON carbid = eobjid
    WHERE b~plnty = v_plnty AND
    b~plnnr = lt_pp04_cache-plnnr AND
    b~plnal = lt_pp04_cache-alnag AND
    c~loekz = space AND
    c~steus = v_plpo_steus AND
    e~objty = v_objty AND
    e~werks = lt_pp04_cache-werks AND
    e~verwe = v_verwe.
    SORT lt_plpo BY vornr DESCENDING.
    READ TABLE lt_plpo INDEX 1.
    IF NOT lt_plpo-arbpl IS INITIAL.
    lt_pp04_cache-arbpl = lt_plpo-arbpl.
    read work center description
    SELECT SINGLE ktext INTO lt_pp04_cache-ktext
    FROM crtx WHERE objty = lt_plpo-objty AND
    objid = lt_plpo-objid AND
    spras = sy-langu.
    the following read will get the index of the correct record to be
    updated in the cache
    READ TABLE lt_pp04_cache
    WITH KEY matnr = pi_matnr
    werks = pi_werks
    alnag = pi_alnag.
    MODIFY lt_pp04_cache
    INDEX sy-tabix
    TRANSPORTING arbpl ktext.
    ENDIF.
    ENDIF.
    endform. " read_last_pp04_operation_cache
    *& Form read_wc_on_last_pp04
    form read_wc_on_last_pp04 using pi_plnnr
    pi_plnal
    changing pe_arbpl.
    data: begin of lt_plpo occurs 0,
    vornr like plpo-vornr,
    objty like crhd-objty,
    objid like crhd-objid,
    arbpl like crhd-arbpl,
    end of lt_plpo.
    get all the PP04 operations for the given rtg# & grp-ctr#
    select vornr eobjty eobjid e~arbpl
    into corresponding fields of table lt_plpo
    from plas as b
    inner join plpo as c
    on bplnty = cplnty and
    bplnnr = cplnnr and
    bzaehl = czaehl
    inner join crhd as e
    on carbid = eobjid
    where b~plnty = v_plnty and "Rate Routing
    b~plnnr = pi_plnnr and
    b~plnal = pi_plnal and
    c~loekz = space and "Oper Del Flag = OFF
    c~steus = v_plpo_steus and "PP04
    e~objty = v_objty. "WC Obj Type = 'A'
    read the last operation
    sort lt_plpo by vornr descending.
    read table lt_plpo index 1.
    pe_arbpl = lt_plpo-arbpl.
    endform.
    Regards.

  • Bdc for  vao1

    Please send  sample  code  for va01  bdc
    Thanks,
    Asha

    REPORT zsdcidoc NO STANDARD PAGE HEADING LINE-SIZE 160.
       OBJECT NAME:  ZSDCIDOC
       OBJECT TYPE:  Executable Program
       DESCRIPTION:  Create Sales Documents on variances in
                     Consignment/InPlant physical inventory.
       PROGRAM CHANGE LOG:
       NAME             DATE          DESCRIPTION OF CHANGE
       VOOTKURA         11/19/99      Initial release
       VOOTKURA         11/28/99      Don't create BDC session on errors
       VOOTKURA         01/10/2000    On Sales Ord, ReqDelDate=CountDate
       VOOTKURA         01/14/2000    Make ReqDelDate=PlannedCountDate
       DB TABLES
    Mod. By        Date         Description                      Transport       *
    NEMANIR        23/08/2006   Modified for Unicode Compliance  DEVK914940      *
                                in lines 492, 527-529, 646       
    VIGNESWARAN S  01/03/2007        Corrected BDC Recording To
                                Create Sale Order                               *
    TABLES: mkpf,                          "Material Document Header
            t9ip,                          "In-plants - user table
            iseg,                   "Physical Inventory Document Items
            ikpf.                   "Header: Physical Inventory Document
       Internal tables
    DATA: BEGIN OF tiseg OCCURS   0,
            iblnr LIKE iseg-iblnr,
            gjahr LIKE iseg-gjahr,
            zeili LIKE iseg-zeili,
            matnr LIKE iseg-matnr,
            werks LIKE iseg-werks,
            charg LIKE iseg-charg,
            sobkz LIKE iseg-sobkz,
            kunnr LIKE iseg-kunnr,
            zldat LIKE iseg-zldat,
            budat LIKE iseg-budat,
            xzael LIKE iseg-xzael,
            xdiff LIKE iseg-xdiff,
            xnzae LIKE iseg-xnzae,
            xloek LIKE iseg-xloek,
            xamei LIKE iseg-xamei,
            buchm LIKE iseg-buchm,
            xnull LIKE iseg-xnull,
            menge LIKE iseg-menge,
            meins LIKE iseg-meins,
            erfmg LIKE iseg-erfmg,
            erfme LIKE iseg-erfme,
            crdr_ind(1),
            ord_type(4),
            ord_rsn(3),
            qty_p  TYPE p DECIMALS 3,                           "03/02/00
            qty(13),
            qty_c(13),
            uom_conv(3),
          END OF tiseg.
    DATA: tiseg2 LIKE tiseg OCCURS 0 WITH HEADER LINE.
    DATA: tiseg3 LIKE tiseg OCCURS 0 WITH HEADER LINE.
       Internal table BDC_TAB has BDCDATA
    DATA: bdc_tab LIKE bdcdata OCCURS 5 WITH HEADER LINE.
       Internal table MESSTAB - Message table for use in Call transaction
    DATA: BEGIN OF messtab OCCURS 5.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
       TXMSG has info on call trans output
    DATA: BEGIN OF txmsg OCCURS 0,
            tx(4),
            success,
            type LIKE vbak-auart,
            reason(4),
            zldat(10),
            matnr LIKE iseg-matnr,
            comments(100),
          END OF txmsg.
       DATA DEFINITIONS - Structures
    DATA: outrec LIKE tiseg.
       DATA DEFINITIONS - Constants
    DATA: ord_reason_zke(3) VALUE 'O05',
          ord_reason_zkr(3) VALUE 'O05',
          ord_reason_zmor(3) VALUE 'O08',
          ord_reason_zmre(3) VALUE 'O08'.
       DATA DEFINITIONS - Counters
    DATA: tx_va01_ok(3)    TYPE n VALUE 0,
          tx_va01_err(3)    TYPE n VALUE 0,
          tx_va01_sub(3)    TYPE n VALUE 0,
          tx_mi02_ok(3)    TYPE n VALUE 0,
          tx_mi02_err(3)    TYPE n VALUE 0,
          tx_mi02_sub(3)    TYPE n VALUE 0,
          n(5)              TYPE n VALUE 0.
       DATA DEFINITIONS - Miscellaneous
    DATA:  stock_ind LIKE iseg-sobkz,
           inplant_customer LIKE t9ip-kunnr,
           qty_p TYPE p DECIMALS 3,
           qty_c(13),
         qty_c(13) type p decimals 3,
         qty_c type p decimals 3,
           vmsgno(3) TYPE n,
           count_date(10),                 "Date of the document
           bdc_open_flag,
           call_mode,
           msg LIKE message,
           prt_cnt TYPE i,
           session_name(12),
           tx_rc,
           loop_cnt TYPE i,
           ikpf_gidat(10).
       Parameter Definitions
    SELECTION-SCREEN SKIP 2.
    SELECTION-SCREEN BEGIN OF BLOCK pgm.
    SELECTION-SCREEN SKIP 1.
    PARAMETERS:  p_doc# LIKE zpinv-iblnr OBLIGATORY,
                 p_year LIKE iseg-gjahr OBLIGATORY.
    SELECTION-SCREEN SKIP.
    PARAMETERS:  p_org LIKE vbak-vkorg  DEFAULT '1000',
                 p_chnl LIKE vbak-vtweg DEFAULT '01',
                 p_div LIKE vbak-spart  DEFAULT '00'.
    SELECTION-SCREEN END OF BLOCK pgm.
    SELECTION-SCREEN SKIP 2.
    *parameters: testmode as checkbox default space.
       INITIALIZATION
    INITIALIZATION.
      p_year = sy-datum(4).
       START-OF-SELECTION
    START-OF-SELECTION.
       Initialize
      PERFORM init.
       Get data from the Phy Inv Document (PID)
       The PID entered should be for Consignment or In-plant
      PERFORM get_data_frm_phy_inv_doc.
       Build transactions for order processing
      PERFORM build_order_trans.
       Submit orders
      PERFORM submit_order_transactions.
       If orders went through, set delete indicator on the PID's
      IF tx_va01_err IS INITIAL.
        PERFORM set_pid_delete.
      ENDIF.
       Wrapup
      PERFORM wrapup.
       END-OF-SELECTION
    END-OF-SELECTION.
          FORM INIT                                                     *
    FORM init.
      CLEAR: stock_ind,
             inplant_customer.
      call_mode = 'N'.                     "No display
    if testmode = 'X'.
       call_mode = 'A'.                   "Display mode
    endif.
    ENDFORM.                    "INIT
          FORM GET_DATA_FRM_PHY_INV_DOC                                 *
    FORM get_data_frm_phy_inv_doc.
       VALIDATE PID AT THE HEADER LEVEL
      PERFORM validate_pid.
       GET DATA AT ITEM LEVEL
      SELECT * FROM iseg
            INTO CORRESPONDING FIELDS OF TABLE tiseg
         WHERE iblnr = p_doc# AND gjahr = p_year AND
               xnzae <> 'X' AND            "NOT RECOUNT
               xloek <> 'X' AND            "NOT DELETED
               xzael = 'X' AND             "COUNTED
               zldat <> '00000000'.        "COUNT POSTED  "redundant?
      IF sy-subrc <> 0.
        FORMAT INTENSIFIED OFF.
        WRITE: / 'NO QUALIFIED ENTRIES WERE FOUND FOR THE PHY INV DOCUMENT',
                  p_doc#.
        STOP.
      Is it Consignment?
      ELSE.
        LOOP AT tiseg FROM 1 TO 1.
        ENDLOOP.
        IF tiseg-sobkz <> 'W'.
         In-Plant?
          SELECT SINGLE * FROM t9ip
            WHERE werks = tiseg-werks.
          IF sy-subrc = 0.
            MOVE t9ip-kunnr TO inplant_customer.
          Neither
          ELSE.
            CLEAR inplant_customer.
            MESSAGE ID 'ZS' TYPE 'I' NUMBER '909' WITH p_doc#.
            STOP.
          ENDIF.
        ENDIF.
      ENDIF.
      FORMAT COLOR 6 OFF.
    ENDFORM.                    "GET_DATA_FRM_PHY_INV_DOC
          FORM VALIDATE_PID                                             *
    FORM validate_pid.
      CLEAR inplant_customer.
       VALIDATE
      FORMAT COLOR 6 ON.
      FORMAT INTENSIFIED OFF.
      CLEAR ikpf_gidat.
      SELECT SINGLE * FROM ikpf
         WHERE iblnr = p_doc# AND gjahr = p_year.
      IF sy-subrc <> 0.
        WRITE: / 'NO ENTRY FOUND FOR THE PHY INV DOCUMENT', p_doc#.
        STOP.
      ELSE.
        IF ikpf-zstat <> 'X'.
          WRITE: / 'THE PHY INV DOCUMENT', p_doc#,
                   'INDICATES THAT ALL ITEMS HAVE NOT BEEN COUNTED'.
          STOP.
        ENDIF.
        IF ikpf-lstat = 'X'.
          WRITE: / 'THE PHY INV DOCUMENT', p_doc#,
                   'INDICATES THAT ALL ITEMS HAVE ALREADY BEEN DELETED'.
          STOP.
        ENDIF.
       Save Planned Count date                     "01/14/2000
        CONCATENATE ikpf-gidat4(2) '/' ikpf-gidat6(2) '/'
           ikpf-gidat(4) INTO ikpf_gidat.
      ENDIF.
    ENDFORM.                    "VALIDATE_PID
          FORM BUILD_ORDER_TRANS                                        *
    FORM build_order_trans.
       Get Sales details in to internal table TISEG
      SORT tiseg BY iblnr zeili.
      LOOP AT tiseg.
        IF  tiseg-buchm <> tiseg-menge.
       BOOKED QTY - COUNTED
          tiseg-qty = tiseg-buchm - tiseg-menge.
          tiseg-qty_p = tiseg-qty.                              "03/02/00
          MODIFY tiseg.
        ENDIF.
      ENDLOOP.
       Now, prepare data for BDC
      LOOP AT tiseg.
       If inplant_customer is filled in, take that for customer number
        IF NOT inplant_customer IS INITIAL.
          tiseg-kunnr = inplant_customer.
        ENDIF.
       Convert UOM from internal to external presentation
        CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
          EXPORTING
            input          = tiseg-meins
            language       = sy-langu
          IMPORTING
            output         = tiseg-uom_conv
          EXCEPTIONS
            unit_not_found = 1
            OTHERS         = 2.
       Identify Order Type (Booked-counted<0,CR-ZKE-ZMRE else DR-ZKR-ZMOR)
        IF tiseg-qty_p < 0.
          tiseg-crdr_ind = 'C'.
          tiseg-qty =   ABS( tiseg-qty ).
       Consignment
          IF inplant_customer IS INITIAL.
            tiseg-ord_type = 'ZKR '.
            tiseg-ord_rsn = ord_reason_zkr.
       InPlant
          ELSE.
            tiseg-ord_type = 'ZMRE'.
            tiseg-ord_rsn = ord_reason_zmre.
          ENDIF.
        ELSEIF tiseg-qty_p > 0.
          tiseg-crdr_ind = 'D'.
       Consignment
          IF inplant_customer IS INITIAL.
            tiseg-ord_type = 'ZKE '.
            tiseg-ord_rsn = ord_reason_zke.
       InPlant
          ELSE.
            tiseg-ord_type = 'ZMOR'.
            tiseg-ord_rsn = ord_reason_zmor.
          ENDIF.
        ELSE.
          tiseg-crdr_ind = 'X'.            "No orders on these
          CLEAR: tiseg-ord_rsn, tiseg-ord_type.
        ENDIF.
       Get qty in char format
        qty_p = tiseg-qty.
        MOVE qty_p TO: qty_c, tiseg-qty_c.
       Update tiseg with the new fields.
        MODIFY tiseg.
      ENDLOOP.
      tiseg2[] = tiseg[].
      LOOP AT tiseg WHERE crdr_ind = 'X'.
        DELETE tiseg.
      ENDLOOP.
      tiseg3[] = tiseg[].
    ENDFORM.                    "BUILD_ORDER_TRANS
          FORM SUBMIT_ORDER_TRANSACTIONS                                *
    FORM submit_order_transactions.
      SORT tiseg BY crdr_ind matnr.
      n = 1.
      LOOP AT tiseg.
       Change in CR/DR order type, save and call Trans
        ON CHANGE OF tiseg-crdr_ind.
          IF n > 1.
            PERFORM fill_bdc_save.
            PERFORM call_trans USING 'VA01'.
            n = 1.
          ENDIF.
        ENDON.
        outrec = tiseg.
        IF n = 1.
          PERFORM fill_bdc1.               "Screen 1 & hdr of screen 2
        ENDIF.
        PERFORM fill_bdc2.                 "Materials on screen 2
        n = n + 1.
       Last record, save and call Trans
        AT LAST.
          PERFORM fill_bdc_save.
          PERFORM call_trans USING 'VA01'.
        ENDAT.
      ENDLOOP.
    ENDFORM.                    "SUBMIT_ORDER_TRANSACTIONS
          FORM FILL_BDC1                                                *
    FORM fill_bdc1.
       Create Sales Order - Initial Screen
      PERFORM dynpro USING:          'X'   'SAPMV45A'         '0101'    ,
                                     ' '  'VBAK-AUART'    outrec-ord_type,
                                     ' '  'VBAK-VKORG'        p_org     ,   "Sales org
                                     ' '  'VBAK-VTWEG'        p_chnl    ,    "Distr Channel
                                     ' '  'VBAK-SPART'        p_div     ,             "Div
                                     ' '  'BDC_OKCODE'        '/00'     .   "Enter
      CONCATENATE outrec-zldat4(2) '/' outrec-zldat6(2) '/'
         outrec-zldat(4) INTO count_date.
       Create Phy Inv Credit/Debit: Overview
      PERFORM dynpro USING:
               'X'  'SAPMV45A'      '0400'     ,          ""Changed on 22.01.07
                 'X'  'SAPMV45A'      '4001'     ,
                 ' '  'KUAGV-KUNNR'    outrec-kunnr  ,
               ' '  'VBAK-BSTDK'     count_date    .      " Changed on 22.01.07
                 ' '  'VBKD-BSTDK'     count_date    .
      IF outrec-ord_type <> 'ZKR '.
      PERFORM dynpro USING:
                ' '   'RV45A-KETDAT'   ikpf_gidat .  "Planned deliv date 01/14/00
      ENDIF.
    *****Start Added on 26/02/2007
    ***Pick Sales TAB in VA01 for updating Ordering Reason
      PERFORM dynpro USING : ' '  'BDC_OKCODE'  '=T\01',
                             'X'  'SAPMV45A' '4001',
                             ' '  'VBAK-AUGRU'  outrec-ord_rsn. "  'C25'.
    ***Come back to Item Overview Tab in VA01 for inserting Plant
      PERFORM dynpro USING : 'X'  'SAPMV45A' '4001',
                             ' '  'BDC_OKCODE'  '=T\02'.
    End of Add  on 26/02/2007
      PERFORM dynpro USING : 'X'  'SAPMV45A' '4001',
                             ' '  'RV45A-DWERK'    outrec-werks  ,     "Deliv Plant
                             ' '  'BDC_OKCODE'        '/00'      ,   "Hdr-Bus Data
                             'X'  'SAPMV45A'         '4001'     .
    ENDFORM.                                                    "FILL_BDC1
          FORM FILL_BDC2                                                *
    FORM fill_bdc2.
      IF n = 4.                            "4 double entries per page
        n = 2.                             "On the next page start from 2nd line
        PERFORM ldynpro USING:
            ' '   'BDC_OKCODE'        '/20'     0,     "Create item
          'X'   'SAPMV45A'         '0400'     0.     "Changed on 22.01.07
            'X'   'SAPMV45A'         '4001'     0.
      ENDIF.
      PERFORM ldynpro USING:
            ' '  'VBAP-MATNR'     outrec-matnr  n,              "Material
            ' '  'RV45A-KWMENG'   outrec-qty_c  n,              "Quantity
            ' '  'VBAP-VRKME'     outrec-uom_conv  n,           "UoM
            ' '  'RV45A-ETDAT'    ikpf_gidat    n,              "Del Date 1
            ' '  'VBAP-CHARG'     outrec-charg  n.              "Batch#
      PERFORM ldynpro USING:
          ' '   'BDC_OKCODE'        '/00'     0,              "Enter
         'X'   'SAPMV45A'         '0400'     0.                ""Changed on 22.01.07
           'X'   'SAPMV45A'         '4001'     0.
    ENDFORM.                                                    "FILL_BDC2
          FORM FILL_BDC3                                                *
    FORM fill_bdc_save.
      PERFORM dynpro USING:
               ' '  'BDC_OKCODE'        '/11'   .  "Save
    ENDFORM.                    "FILL_BDC_SAVE
          FORM DYNPRO
    -->  DYNBEGIN                                                      *
    -->  NAME                                                          *
    -->  VALUE                                                         *
    *------Begin of SAP Unicode changes - <23/08/2006>
    FORM dynpro USING dynbegin TYPE c       " Unicode change
                      name    TYPE bdc_prog
                      value  TYPE clike.
    *------End of SAP Unicode chnages - <23/08/2006>
      CLEAR bdc_tab.
      IF dynbegin = 'X'.
        MOVE: name TO bdc_tab-program,
              value TO bdc_tab-dynpro,
              'X'   TO bdc_tab-dynbegin.
      ELSE.
        MOVE: name TO bdc_tab-fnam,
              value TO bdc_tab-fval.
      ENDIF.
      IF NOT value IS INITIAL.
        APPEND bdc_tab.
      ENDIF.
    ENDFORM.                    "DYNPRO
          FORM LDYNPRO                                                  *
    -->  DYNBEGIN                                                      *
    -->  NAME                                                          *
    -->  VALUE                                                         *
    -->  N                                                             *
    *------Begin of SAP unicode changes - <23/08/2006>
    FORM ldynpro USING dynbegin TYPE c     "Unicode change
                      name TYPE bdc_prog
                      value TYPE clike
                      n TYPE n.
    *------End of SAp Unicode changes - <23/08/2006>
      CLEAR bdc_tab.
      IF dynbegin = 'X'.
        MOVE: name TO bdc_tab-program,
              value TO bdc_tab-dynpro,
              'X'   TO bdc_tab-dynbegin.
      ELSE.
        IF n <> 0.
          CONCATENATE name '(' n ')' INTO bdc_tab-fnam.
        ELSE.
          MOVE name TO bdc_tab-fnam.
        ENDIF.
        MOVE value TO bdc_tab-fval.
      ENDIF.
      IF NOT value IS INITIAL.
        APPEND bdc_tab.
      ENDIF.
    ENDFORM.                    "LDYNPRO
          FORM BDC_INSERT                                               *
    -->  TCODE                                                         *
    FORM bdc_insert USING tcode.
      DATA: l_tcode TYPE sy-tcode.         "Added on 26/02/2007
      IF bdc_open_flag = ' '.
        CONCATENATE 'ZS' p_doc# INTO session_name.
        CALL FUNCTION 'BDC_OPEN_GROUP'
          EXPORTING
            client = sy-mandt
            group  = session_name
            user   = sy-uname
            keep   = 'X'.
      ENDIF.
      l_tcode = tcode.                        "Added on 26/02/2007
      CALL FUNCTION 'BDC_INSERT'
        EXPORTING
          tcode     = l_tcode
        TABLES
          dynprotab = bdc_tab.
      bdc_open_flag = 'X'.
    ENDFORM.                               "bdc_insert using tcode
          FORM SET_PID_DELETE                                           *
    FORM set_pid_delete.
       Set Delete Ind on the items covered by the prev trans
      REFRESH tiseg. CLEAR tiseg.
      tiseg[] = tiseg2[].
      SORT tiseg BY iblnr zeili.
      loop_cnt = 1.
      LOOP AT tiseg.
        IF loop_cnt = 1.
          PERFORM dynpro USING:
                   'X'   'SAPMM07I'         '0701'    ,
                   ' '   'RM07I-IBLNR'      p_doc#    ,
                   ' '   'RM07I-GJAHR'      p_year    ,   "Sales org
                   ' '   'BDC_OKCODE'       '/00'     .   "Enter
        ENDIF.
        IF tiseg-zeili <> 001.
          PERFORM dynpro  USING:
                   'X'   'SAPMM07I'         '0721'    ,
                   ' '   'BDC_CURSOR'       'ISEG-BSTAR(01)',
                   ' '   'BDC_OKCODE'       '/20'     ,
                   'X'   'SAPMM07I'         '1701'    ,
                   ' '   'BDC_CURSOR'       'RM07I-ZEILE',
                   ' '   'RM07I-ZEILE'      tiseg-zeili    ,
                   ' '   'BDC_OKCODE'       '/00'     .
        ENDIF.
        PERFORM dynpro USING:
                   'X'   'SAPMM07I'         '0721'           ,
                   ' '   'BDC_CURSOR'       'ISEG-BSTAR(01)' ,
                   ' '   'BDC_OKCODE'       '=DP'.             "'/14'    "Set Del ind
        IF loop_cnt = sy-tfill.
          PERFORM dynpro USING:
                   'X'   'SAPMM07I'         '0721'    ,
                   ' '   'BDC_OKCODE'       '/11'     .      "Save
        ENDIF.
        ADD 1 TO loop_cnt.
      ENDLOOP.
      PERFORM call_trans USING 'MI02'.
    ENDFORM.                    "SET_PID_DELETE
          FORM CALL_TRANS                                               *
    -->  TX                                                            *
    *-------Begin of SAP Unicode changes - <23/08/2006>
    FORM call_trans USING tx TYPE char4. " Unicode change
    *-------End of SAP Unicode changes - <23/08/2006>
      CASE tx.
        WHEN 'VA01'.
          ADD 1 TO tx_va01_sub.
        WHEN 'MI02'.
          ADD 1 TO tx_mi02_sub.
      ENDCASE.
        CALL TRANSACTION tx USING bdc_tab
        MODE call_mode
        UPDATE 'S'
        MESSAGES INTO messtab  .
      tx_rc = sy-subrc.                    "Save RC
       Errors, write to BDC session    only on MI02 "12/28/99
      IF sy-subrc <> 0.
       perform bdc_insert using tx.               "12/28/99
        IF tx = 'VA01'.
          ADD 1 TO tx_va01_err.
        ELSEIF tx = 'MI02'.
          ADD 1 TO tx_mi02_err.
          PERFORM bdc_insert USING tx.                          "12/28/99
        ENDIF.
      ELSE.
        CLEAR tx_rc.
        IF tx = 'VA01'.
          ADD 1 TO tx_va01_ok.
        ELSEIF tx = 'MI02'.
          ADD 1 TO tx_mi02_ok.
        ENDIF.
      ENDIF.
        Get messages for OK/Err tx's both
      LOOP AT messtab.
        CLEAR txmsg.
        txmsg-tx   = tx.
        IF NOT tx_rc IS INITIAL.
          txmsg-success = 'X'.
        ENDIF.
        PERFORM get_message.
        IF sy-tabix = sy-tfill.
          CONCATENATE '==>' msg INTO txmsg-comments.   "Last rec.
        ELSE.
          txmsg-comments = msg.
        ENDIF.
        CASE tx.
          WHEN 'VA01'.
            txmsg-type = outrec-ord_type.
            txmsg-reason = outrec-ord_rsn.
            txmsg-matnr = outrec-matnr.
            txmsg-zldat = count_date.
        ENDCASE.
        APPEND txmsg.
      ENDLOOP.
      CLEAR txmsg.
       Clear BDC table and Message table for next transaction
      REFRESH: bdc_tab, messtab.
      CLEAR: bdc_tab, messtab.
    ENDFORM.                    "CALL_TRANS
          FORM GET_MESSAGE                                              *
    FORM get_message.
      vmsgno = messtab-msgnr.
      CALL FUNCTION 'WRITE_MESSAGE'
        EXPORTING
          msgid  = messtab-msgid
          msgno  = vmsgno
          msgty  = messtab-msgtyp
          msgv1  = messtab-msgv1
          msgv2  = messtab-msgv2
          msgv3  = messtab-msgv3
          msgv4  = messtab-msgv4
          msgv5  = messtab-fldname
        IMPORTING
          messg  = msg
        EXCEPTIONS
          OTHERS = 1.
    ENDFORM.                               "get_message
          FORM WRAPUP                                                   *
    FORM wrapup.
      IF bdc_open_flag = 'X'.
        CALL FUNCTION 'BDC_CLOSE_GROUP'.
      ENDIF.
      PERFORM write_stats.
    ENDFORM.                    "WRAPUP
          FORM CLOSE_BDC                                                *
    *FORM close_bdc.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
       EXCEPTIONS
         not_open    = 1
         queue_error = 2
         OTHERS      = 3.
    *ENDFORM.                    "CLOSE_BDC
          FORM WRITE_STATS                                              *
    FORM write_stats.
      REFRESH tiseg. CLEAR tiseg.
      tiseg[] = tiseg3[].
      FORMAT COLOR 7  ON.
      WRITE: /3  'PHYSICAL INV DOCUMENT:', p_doc#,
              45 'YEAR:  ', p_year, '      '.
      WRITE: /3  'ORDER TXs SUBd:', tx_va01_sub,
              30 'Errored:', tx_va01_err.
      WRITE: /3  'PID TXs SUBd:  ', tx_mi02_sub,
              30 'Errored:', tx_mi02_err.
      FORMAT COLOR 7 OFF.
      SKIP.
      FORMAT COLOR 4 ON .
      FORMAT INTENSIFIED ON.
      WRITE: /4 'MATERIAL NUMBER', 23 '    QUANTITY', 37 'UOM',
             42 'PLANT', 71 ' '.
      WRITE: /4 '***************', 23 '    *******', 37 '**',
             42 '*****', 71 ' '.
      FORMAT INTENSIFIED OFF.
      SORT tiseg BY ord_type matnr.
      LOOP AT tiseg.
        ON CHANGE OF tiseg-ord_type.
          FORMAT INTENSIFIED OFF.
          WRITE: /6 'ORDER TYPE:', tiseg-ord_type,
                  26 'COUNT DATE:', count_date,
                  52 'CUSTOMER:', tiseg-kunnr.
          FORMAT INTENSIFIED ON.
        ENDON.
        WRITE: /4 tiseg-matnr, 23 tiseg-qty_c, 37 tiseg-uom_conv,
               42 tiseg-werks, 71 ' '.
      ENDLOOP.
      SKIP 2.
      FORMAT COLOR 4 OFF.
      FORMAT INTENSIFIED ON.
      IF tx_va01_err > 0.
        FORMAT COLOR 6 ON.
        WRITE: /2 'Correct ERR in Sales Orders (VA01 Tx) and',
                  'reexecute the program'.
      ENDIF.
      IF tx_mi02_err > 0.
        FORMAT COLOR 6 ON.
        WRITE: /2 'ERR found in executing PID change (MI02 Tx)'.
        IF bdc_open_flag = 'X'.
          WRITE: /2 'Correct ERR and submit the BDC session created'.
        ENDIF.
      ENDIF.
      IF tx_va01_err = 0 AND tx_mi02_err = 0.
        FORMAT COLOR 5 ON INTENSIFIED OFF.
        WRITE: /3 'ALL TRANSACTIONS WERE SUCCESSFUL   '.
      ENDIF.
      FORMAT COLOR 3 ON INTENSIFIED ON.
      ULINE.
      WRITE: /20 'MESSAGES RECEIVED DURING TRANSACTION PROCESSING', 170 ' '.
      WRITE: /2 'TX  ', 8 'ERR?', 15 'ORDER TYPE', 27 'REASON',
             36 'COUNT DATE', 49 'MATERIAL NUMBER',
             69 'MESSAGES RECEIVED FROM TRANSACTION ', 170 ' '.
      WRITE: /2 '***', 8 '**', 15 '********', 27 '*****',
             36 '*********', 49 '**************',
             69 '********************************** ', 170 ' '.
      FORMAT INTENSIFIED OFF.
      LOOP AT txmsg.
        IF txmsg-success = ' '.
          FORMAT COLOR 3 ON.
        ELSE.
          FORMAT COLOR 6 ON.
        ENDIF.
        ON CHANGE OF txmsg-type.
          ULINE.
        ENDON.
        IF txmsg-tx = 'VA01'.
          WRITE: /2 txmsg-tx, 8 txmsg-success, 15 txmsg-type,
                  27 txmsg-reason,  36 txmsg-zldat.
        ENDIF.
        IF txmsg-tx = 'MI02'.
         uline.
         format color 7 on intensified on.
          WRITE: /2 txmsg-tx, 8 'CHANGE PID:', p_doc#, 'YEAR:', p_year.
        ENDIF.
        IF txmsg-tx = 'VA01'.
          WRITE: 49 txmsg-matnr.
        ENDIF.
        IF txmsg-comments(3) = '==>'.
          FORMAT INTENSIFIED ON.
          WRITE 69 txmsg-comments.
          FORMAT INTENSIFIED OFF.
        ELSE.
          WRITE 69 txmsg-comments.
        ENDIF.
      ENDLOOP.
      ULINE.
    ENDFORM.                    "WRITE_STATS
    Ashok...

  • Example of BDC Session method

    Hello Friends,
    Can you guide me how to create BDC with SESSION method.?
    Please mantion examples.
    Thanks in advance.
    Regards,
    nimesh master

    See below example code :
    Call three FM : BDC_OPEN_GROUP,BDC_INSERT and BDC_CLOSE_GROUP.
    Once you execute the program and it creates the session at SM35 Transaction.
    Report     : ZMPPC011
    Type       : Data upload
    Author     : Chetan Shah
    Date       : 05/05/2005
    Transport  : DV3K919557
    Transaction: ??
    Description: This ABAP/4 Program creates new Production Versions
                 (C223). It accepts tab-delimited spreadsheet input and
                 creates BDC sessions.
                        Modification Log
    Date       Programmer    Request #    Description
    06/10/2005 Chetan Shah   DV3K919557   Initial coding
    report zmppc011 no standard page heading line-size 120 line-count 55
       message-id zz.
    pool of form routines
    include zmppn001.
    Define BDC Table Structure
    data: begin of itab_bdc_tab occurs 0.
            include structure bdcdata.
    data: end of itab_bdc_tab.
    Input record layout of Leagcy File
    data: begin of itab_xcel occurs 0,
            matnr(18)  type c,
            werks(4)   type c,
            alnag(2)   type c,
            verid(4)   type c,
            text1(40)  type c,
            bstmi      like mkal-bstmi,
            bstma      like mkal-bstma,
            adatu(10)  type c,
            bdatu(10)  type c,
            stlal(2)   type c,
            stlan(1)   type c,
            serkz(1)   type c,
            mdv01(8)   type c,
            elpro(4)   type c,
            alort(4)   type c,
          end of itab_xcel.
    data: begin of lt_pp04_cache occurs 0,
            matnr like itab_xcel-matnr,
            werks like itab_xcel-werks,
            alnag like itab_xcel-alnag,
            plnnr like mapl-plnnr,
            arbpl like crhd-arbpl,
            ktext like crtx-ktext,
          end of lt_pp04_cache.
    data: v_ssnnr(4)      type n,
          v_lines_in_xcel like sy-tabix,
          v_ssnname       like apqi-groupid,
          v_trans_in_ssn  type i,
         wa_xcel         LIKE itab_xcel,
          l_tabix         like sy-tabix,
          v_matnr         like rc27m-matnr,
          v_plnnr         like mapl-plnnr,
          v_plnal         like mapl-plnal,
          v_tcode         like sy-tcode value 'C223',
          v_plnty         like plas-plnty value 'R',
          v_objty         like crhd-objty value 'A',
          v_plpo_steus    like plpo-steus value 'PP04',
          v_verwe         like crhd-verwe value '0007'.
    Parameters
    selection-screen: skip 3.
    selection-screen: begin of block 1 with frame.
    parameters: p_name        like rlgrap-filename
                              default 'C:\My Documents\InputFile.txt'
                              obligatory,
    bdc session name prefix
                p_bdcpfx(6)   default 'ZPVCRT'
                              obligatory,
    number for transction per BDC session
                p_trnssn      type i
                              default 2000 obligatory,
    retain the BDC session after successfull execution
                p_keep        like apqi-qerase
                              default 'X',
    user who will be executing BDC session
                p_uname       like apqi-userid
                              default sy-uname
                              obligatory.
    selection-screen: end of block 1.
    possible entry list (F4 dropdown) for input file name
    at selection-screen on value-request for p_name.
    *-SELECT FILE FROM USERS LOCAL PC
      call function 'WS_FILENAME_GET'
          exporting
             DEF_FILENAME     = ' '
               def_path         = 'C:\Temp\'
               mask             = ',.,..'
               mode             = 'O'
               title            = 'Select File '(007)
          importing
               filename         = p_name
             RC               =
          exceptions
               inv_winsys       = 1
               no_batch         = 2
               selection_cancel = 3
               selection_error  = 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.
    begin the show
    start-of-selection.
    read data from input file
      perform transfer_xcel_to_itab.
      loop at itab_xcel.
      hang on to xcel line num
        l_tabix = sy-tabix.
      each line in the xcel file marks begining of new prod.version defn
      if num-of-trnas-in-session = 0, create new BDC session
        if v_trans_in_ssn is initial.
          perform bdc_session_open.
        endif.
      begin new bdc script for rtg create trans
      fill in bdc-data for prod.version maintenance screens
        perform bdc_build_script.
      insert the bdc script as a BDC transaction
        perform bdc_submit_transaction.
      keep track of how many BDC transactions were inserted in the BDC
      session
        add 1 to v_trans_in_ssn.
      if the user-specified num of trans in BDC session is reached OR
      if end of input file is reached, close the BDC session
        if v_trans_in_ssn = p_trnssn or
           l_tabix = v_lines_in_xcel.
          perform bdc_session_close.
          clear v_trans_in_ssn.
        endif.
      endloop.
    top-of-page.
      call function 'Z_HEADER'
    EXPORTING
      FLEX_TEXT1       =
      FLEX_TEXT2       =
      FLEX_TEXT3       =
          FORM TRANSFER_XCEL_TO_ITAB                                    *
          Transfer Xcel Spreadsheet to SAP Internal Table               *
    form transfer_xcel_to_itab.
    Read the tab-delimited file into itab
      call function 'WS_UPLOAD'
           exporting
                filename            = p_name
                filetype            = 'DAT'
          IMPORTING
               filelength          = flength
           tables
                data_tab            = itab_xcel
           exceptions
                conversion_error    = 1
                file_open_error     = 2
                file_read_error     = 3
                invalid_table_width = 4
                invalid_type        = 5
                no_batch            = 6
                unknown_error       = 7
                others              = 8.
      if sy-subrc = 0.
      sort the data
        sort itab_xcel by matnr werks.
        clear v_lines_in_xcel.
      if no data in the file - error out
        describe table itab_xcel lines v_lines_in_xcel.
        if v_lines_in_xcel is initial.
          write: / 'No data in input file'.
          stop.
        endif.
      else.
      if file upload failed - error out
        write: / 'Error reading input file'.
        stop.
      endif.
    endform.
          FORM BDC_SESSION_OPEN                                         *
          Open BDC Session                                              *
    form bdc_session_open.
    create bdc session name = prefix-from-selectn-screen + nnnn
      add 1 to v_ssnnr.
      concatenate p_bdcpfx v_ssnnr into v_ssnname.
    open new bdc session
      call function 'BDC_OPEN_GROUP'
           exporting
                client              = sy-mandt
                group               = v_ssnname
                keep                = p_keep
                user                = p_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.
    endform.
          FORM BDC_BUILD_SCRIPT                                         *
          Build BDC                                                     *
    form bdc_build_script.
      data: l_arbpl like crhd-arbpl,
            l_text1 like mkal-text1,
            l_mdv01 like mkal-mdv01,
            l_mapl  like mapl.
    clear bdc-data itab - begin of new bdc transaction
      clear   itab_bdc_tab.
      refresh itab_bdc_tab.
    read material cross reference tables to determine sap part#
      clear : v_matnr, v_plnnr, v_plnal.
      perform read_matnr_cross_ref using itab_xcel-matnr
                                         itab_xcel-werks
                                   changing v_matnr.
    determine the version description to use
      if itab_xcel-text1 is initial.
        l_text1 = itab_xcel-verid.
      else.
        l_text1 = itab_xcel-text1.
      endif.
    determine the routing group# and group ctr# to use
      perform read_routing .
    determine the production line to use
      if itab_xcel-mdv01 is initial.
      if not provided in the file then:
      prod line = work ctr on the last PP04 op of the rtg determined above
        perform read_wc_on_last_pp04 using v_plnnr v_plnal
                                  changing l_mdv01.
      NOTE: when executing the above form\routine, if v_plnnr is initial
            or v_plnal is initial, THEN l_mdv01 will automatically be
            returned blank (ie initial)
      else.
        l_mdv01 = itab_xcel-mdv01.
      endif.
    build bdc script
      perform bdc_build_script_record
    fill in initial screen
              using: 'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=ENTE',
                     ' ' 'MKAL-WERKS'       itab_xcel-werks,
                     ' ' 'MKAL-MATNR'       v_matnr,
                     ' ' 'MKAL_ADMIN-DISPO' space,
                     ' ' 'MKAL-PLNNR'       space,
                     ' ' 'MKAL_ADMIN-STTAG' space,
                     ' ' 'MKAL-PLNNG'       space,
                     ' ' 'MKAL-MDV01'       space,
                     ' ' 'MKAL-PLNNM'       space,
    click create button on initial screen and go to detail screen
                     'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=CREA',
    fill in the detail screen and go back to initial screen
                     'X' 'SAPLCMFV'           '2000',
                     ' ' 'BDC_OKCODE'         '=CLOS',
                     ' ' 'MKAL_EXPAND-MATNR'  v_matnr,
                     ' ' 'MKAL_EXPAND-VERID'  itab_xcel-verid,
                     ' ' 'MKAL_EXPAND-TEXT1'  l_text1,
                     ' ' 'MKAL_EXPAND-BSTMI'  itab_xcel-bstmi,
                     ' ' 'MKAL_EXPAND-BSTMA'  itab_xcel-bstma,
                     ' ' 'MKAL_EXPAND-ADATU'  itab_xcel-adatu,
                     ' ' 'MKAL_EXPAND-BDATU'  itab_xcel-bdatu,
                     ' ' 'MKAL_EXPAND-PLTYG'  v_plnty,
                     ' ' 'MKAL_EXPAND-PLNNG'  v_plnnr,
                     ' ' 'MKAL_EXPAND-ALNAG'  v_plnal,
                     ' ' 'MKAL_EXPAND-STLAL'  itab_xcel-stlal,
                     ' ' 'MKAL_EXPAND-STLAN'  itab_xcel-stlan,
                     ' ' 'MKAL_EXPAND-SERKZ'  itab_xcel-serkz,
                     ' ' 'MKAL_EXPAND-MDV01'  l_mdv01,
                     ' ' 'MKAL_EXPAND-ELPRO'  itab_xcel-elpro,
                     ' ' 'MKAL_EXPAND-ALORT'  itab_xcel-alort,
    save the production version from initial screen
                     'X' 'SAPLCMFV'           '1000',
                     ' ' 'BDC_OKCODE'         '=SAVE'.
    endform.
          FORM BDC_SUBMIT_TRANSACTION                                   *
          Submit BDC Session                                            *
    form bdc_submit_transaction.
    Load BDC script as a trqansction in BDC session
      call function 'BDC_INSERT'
           exporting
                tcode          = v_tcode
           tables
                dynprotab      = itab_bdc_tab
           exceptions
                internal_error = 01
                not_open       = 02
                queue_error    = 03
                tcode_invalid  = 04.
    endform.
          FORM BDC_BUILD_SCRIPT_RECORD                                  *
    form bdc_build_script_record using dynbegin name value.
      clear itab_bdc_tab.
      if dynbegin = 'X'.
        move: name  to itab_bdc_tab-program,
              value to itab_bdc_tab-dynpro,
              'X'   to itab_bdc_tab-dynbegin.
      else.
        move: name  to itab_bdc_tab-fnam,
              value to itab_bdc_tab-fval.
        shift itab_bdc_tab-fval left deleting leading space.
      endif.
      append itab_bdc_tab.
    endform.
          FORM BDC_SESSION_CLOSE                                        *
          Close BDC Session                                             *
    form bdc_session_close.
    close the session
      call function 'BDC_CLOSE_GROUP'
           exceptions
                not_open    = 1
                queue_error = 2
                others      = 3.
      skip 2.
      if sy-subrc ne 0.
        write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
      else.
        write : /  'Session created:', v_ssnname,
                50 '# of transactions:', v_trans_in_ssn.
      endif.
    endform.
    *&      Form  read_routing_cache
    *FORM read_routing_cache USING    pi_matnr
                                    pi_werks
                                    pi_alnag
                                    pi_verid
                                    pi_mdv01.
    DATA: BEGIN OF lt_plpo OCCURS 0,
             vornr LIKE plpo-vornr,
             objty LIKE crhd-objty,
             objid LIKE crhd-objid,
             arbpl LIKE crhd-arbpl,
           END OF lt_plpo,
           l_mapl_plnnr LIKE mapl-plnnr.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
       SELECT plnnr INTO l_mapl_plnnr
         FROM mapl UP TO 1 ROWS
        WHERE matnr = pi_matnr    AND
              werks = pi_werks    AND
              plnty = 'R'         AND
              plnal = pi_alnag    AND
              loekz = space.
       ENDSELECT.
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    *ENDFORM.                    " read_last_pp04_operation_cache
    *&      Form  read_routing
    form read_routing.
      data: begin of lt_mapl occurs 0,
              plnnr like mapl-plnnr,
              plnal like mapl-plnal,
            end of lt_mapl,
            l_arbpl like crhd-arbpl.
    get all the rtg# and grp ctr# from MAPL
      select plnnr plnal
        into corresponding fields of table lt_mapl
        from mapl
       where matnr = v_matnr          and
             werks = itab_xcel-werks  and
             plnty = v_plnty          and     "Rate Routing
             loekz = space.                   "with del flag = OFF
      sort lt_mapl by plnal.
      if not itab_xcel-verid is initial.
      if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#
        if itab_xcel-verid = '0001'.
          read table lt_mapl index 1.
          v_plnnr = lt_mapl-plnnr.
          v_plnal = lt_mapl-plnal.
        else.
      if the verid<>0001 then use the rtg-grp# and grp-ctr# of the routing
      whose work center on the last PP04 operation matches the given verid
          loop at lt_mapl.
            clear l_arbpl.
          get the work center from the last PP04 operation
            perform read_wc_on_last_pp04 using lt_mapl-plnnr
                                               lt_mapl-plnal
                                      changing l_arbpl.
            if itab_xcel-verid = l_arbpl.
              v_plnnr = lt_mapl-plnnr.
              v_plnal = lt_mapl-plnal.
              exit.
            endif.
          endloop.
        endif.
      else.
      do nothing
      endif.
    For version IDs that are other then '0000' or 'ZWIP' :--
      if itab_xcel-verid NE '0000' and
         itab_xcel-verid NE 'ZWIP'.
      if routing group# or group counter was not determined, make the
      valid-to date 99/99/9999 so that the BDC, on execution, errors out.
        if v_plnnr is initial or
           v_plnal is initial.
          itab_xcel-bdatu = '99/99/9999'.
        endif.
      endif.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    endform.                    " read_last_pp04_operation_cache
    *&      Form  read_wc_on_last_pp04
    form read_wc_on_last_pp04 using    pi_plnnr
                                       pi_plnal
                              changing pe_arbpl.
      data: begin of lt_plpo occurs 0,
              vornr like plpo-vornr,
              objty like crhd-objty,
              objid like crhd-objid,
              arbpl like crhd-arbpl,
            end of lt_plpo.
    get all the PP04 operations for the given rtg# & grp-ctr#
      select vornr eobjty eobjid e~arbpl
        into corresponding fields of table lt_plpo
        from plas as b
             inner join plpo as c
                   on bplnty = cplnty and
                      bplnnr = cplnnr and
                      bzaehl = czaehl
             inner join crhd as e
                   on carbid = eobjid
       where b~plnty = v_plnty          and           "Rate Routing
             b~plnnr = pi_plnnr         and
             b~plnal = pi_plnal         and
             c~loekz = space            and           "Oper Del Flag = OFF
             c~steus = v_plpo_steus     and           "PP04
             e~objty = v_objty.                       "WC Obj Type = 'A'
    read the last operation
      sort lt_plpo by vornr descending.
      read table lt_plpo index 1.
      pe_arbpl = lt_plpo-arbpl.
    endform.                    " read_wc_on_last_pp04
    Reward Points if it is useful
    Thanks
    Seshu

  • Hi pls give names of some standard BDC program

    thank you
    ravi

    BDC allows you to perform database updates in the background using standard SAP transactions.
    The resultant entries will be as if the user had manually entered the data via SAP. This means
    that you do not bypass any of the standard SAP consistency checks, authorisations etc.
    There are two main methods of ABAP BDC, these are Call Transaction and Batch Input.  
    Other methods of update include Direct update, Idoc and BAPI.
    e
    Example program  :   1
    Report  ZBDC_EXAMPLE                                                *
    *& Example BDC program, which updates net price of item 00010 of a     *
    *& particular Purchase order(EBELN).                                   *
    REPORT  ZBDC_EXAMPLE  NO STANDARD PAGE HEADING
                          LINE-SIZE 132.
    * Data declaration
    TABLES: ekko, ekpo.
    TYPES: BEGIN OF t_ekko,
        ebeln TYPE ekko-ebeln,
        waers TYPE ekko-waers,
        netpr TYPE ekpo-netpr,
        err_msg(73) TYPE c,
    END OF t_ekko.
    DATA: it_ekko  TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko  TYPE t_ekko,
          it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_error TYPE t_ekko,
          it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_success TYPE t_ekko.
    DATA: w_textout            LIKE t100-text.
    DATA: gd_update TYPE i,
          gd_lines TYPE i.
    *Used to store BDC data
    DATA: BEGIN OF bdc_tab OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    *Used to stores error information from CALL TRANSACTION Function Module
    DATA: BEGIN OF messtab OCCURS 0.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    *Screen declaration
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
                                        TITLE text-001. "Purchase order Num
    SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
                                        TITLE text-002. "New NETPR value
    PARAMETERS:  p_newpr(14)   TYPE c obligatory.  "LIKE ekpo-netpr.
    SELECTION-SCREEN END OF BLOCK block2.
    *START-OF-SELECTION
    START-OF-SELECTION.
    * Retrieve data from Purchase order table(EKKO)
      SELECT ekko~ebeln ekko~waers ekpo~netpr
        INTO TABLE it_ekko
        FROM ekko AS ekko INNER JOIN ekpo AS ekpo
          ON ekpo~ebeln EQ ekko~ebeln
       WHERE ekko~ebeln IN so_ebeln AND
             ekpo~ebelp EQ '10'.
    *END-OF-SELECTION
    END-OF-SELECTION.
    * Check data has been retrieved ready for processing
      DESCRIBE TABLE it_ekko LINES gd_lines.
      IF gd_lines LE 0.
    *   Display message if no data has been retrieved
        MESSAGE i003(zp) WITH 'No Records Found'(001).
        LEAVE TO SCREEN 0.
      ELSE.
    *   Update Customer master data (instalment text)
        LOOP AT it_ekko INTO wa_ekko.
          PERFORM bdc_update.
        ENDLOOP.
    *   Display message confirming number of records updated
        IF gd_update GT 1.
          MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
        ELSE.
          MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
        ENDIF.
    * Display Success Report
    *   Check Success table
        DESCRIBE TABLE it_success LINES gd_lines.
        IF gd_lines GT 0.
    *     Display result report column headings
          PERFORM display_column_headings.
    *     Display result report
          PERFORM display_report.
        ENDIF.
    * Display Error Report
    *   Check errors table
        DESCRIBE TABLE it_error LINES gd_lines.
    *   If errors exist then display errors report
        IF gd_lines GT 0.
    *     Display errors report
          PERFORM display_error_headings.
          PERFORM display_error_report.
        ENDIF.
      ENDIF.
    *&      Form  DISPLAY_COLUMN_HEADINGS
    *       Display column headings
    FORM display_column_headings.
      WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
      SKIP.
      WRITE:2 'The following records updated successfully:'(013).
      WRITE:/ sy-uline(42).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(004), sy-vline,
              (11) 'Old Netpr'(005), sy-vline,
              (11) 'New Netpr'(006), sy-vline.
      WRITE:/ sy-uline(42).
    ENDFORM.                    " DISPLAY_COLUMN_HEADINGS
    *&      Form  BDC_UPDATE
    *       Populate BDC table and call transaction ME22
    FORM bdc_update.
      PERFORM dynpro USING:
          'X'   'SAPMM06E'        '0105',
          ' '   'BDC_CURSOR'      'RM06E-BSTNR',
          ' '   'RM06E-BSTNR'     wa_ekko-ebeln,
          ' '   'BDC_OKCODE'      '/00',                      "OK code
          'X'   'SAPMM06E'        '0120',
          ' '   'BDC_CURSOR'      'EKPO-NETPR(01)',
          ' '   'EKPO-NETPR(01)'  p_newpr,
          ' '   'BDC_OKCODE'      '=BU'.                      "OK code
    * Call transaction to update customer instalment text
      CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
             MESSAGES INTO messtab.
    * Check if update was succesful
      IF sy-subrc EQ 0.
        ADD 1 TO gd_update.
        APPEND wa_ekko TO it_success.
      ELSE.
    *   Retrieve error messages displayed during BDC update
        LOOP AT messtab WHERE msgtyp = 'E'.
    *     Builds actual message based on info returned from Call transaction
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
               EXPORTING
                    msgid               = messtab-msgid
                    msgnr               = messtab-msgnr
                    msgv1               = messtab-msgv1
                    msgv2               = messtab-msgv2
                    msgv3               = messtab-msgv3
                    msgv4               = messtab-msgv4
               IMPORTING
                    message_text_output = w_textout.
        ENDLOOP.
    *   Build error table ready for output
        wa_error = wa_ekko.
        wa_error-err_msg = w_textout.
        APPEND wa_error TO it_error.
        CLEAR: wa_error.
      ENDIF.
    * Clear bdc date table
      CLEAR: bdc_tab.
      REFRESH: bdc_tab.
    ENDFORM.                    " BDC_UPDATE
    *       FORM DYNPRO                                                   *
    *       stores values to bdc table                                    *
    *  -->  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.                               " DYNPRO
    *&      Form  DISPLAY_REPORT
    *       Display Report
    FORM display_report.
      FORMAT COLOR COL_NORMAL.
    * Loop at data table
      LOOP AT it_success INTO wa_success.
        WRITE:/      sy-vline,
                (10) wa_success-ebeln, sy-vline,
                (11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
                (11) p_newpr, sy-vline.
        CLEAR: wa_success.
      ENDLOOP.
      WRITE:/ sy-uline(42).
      REFRESH: it_success.
      FORMAT COLOR COL_BACKGROUND.
    ENDFORM.                    " DISPLAY_REPORT
    *&      Form  DISPLAY_ERROR_REPORT
    *       Display error report data
    FORM display_error_report.
      LOOP AT it_error INTO wa_error.
        WRITE:/      sy-vline,
                (10) wa_error-ebeln, sy-vline,
                (11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
                (73) wa_error-err_msg, sy-vline.
      ENDLOOP.
      WRITE:/ sy-uline(104).
      REFRESH: it_error.
    ENDFORM.                    " DISPLAY_ERROR_REPORT
    *&      Form  DISPLAY_ERROR_HEADINGS
    *       Display error report headings
    FORM display_error_headings.
      SKIP.
      WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
      SKIP.
      WRITE:2 'The following records failed during update:'(008).
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(009), sy-vline,
              (11) 'Netpr'(010), sy-vline,
              (73) 'Error Message'(012), sy-vline.
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_NORMAL.
    ENDFORM.                    " DISPLAY_ERROR_HEADINGS
    Example  :  2
    Goto transaction SHBD enter a recording name and specify the transaction code.
    Enter the test data and save it , it will actomatically create a bdc program.
    now select that recording name and click create program icon and specify the program name.
    This is the program which was created using transaction SHDB for XD01.
    include bdcrecx1.
    parameters: dataset(132) lower case.
    *** DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
    * If it is nessesary to change the data section use the rules:
    * 1.) Each definition of a field exists of two lines
    * 2.) The first line shows exactly the comment
    * '* data element: ' followed with the data element
    * which describes the field.
    * If you don't have a data element use the
    * comment without a data element name
    * 3.) The second line shows the fieldname of the
    * structure, the fieldname must consist of
    * a fieldname and optional the character '_' and
    * three numbers and the field length in brackets
    * 4.) Each field must be type C.
    *** Generated data section with specific formatting - DO NOT CHANGE ***
    data: begin of record,
    * data element: KUN16
    KUNNR_001(016),
    * data element: BUKRS
    BUKRS_002(004),
    * data element: VKORG
    VKORG_003(004),
    * data element: VTWEG
    VTWEG_004(002),
    * data element: SPART
    SPART_005(002),
    * data element: KTOKD
    KTOKD_006(004),
    * data element: ANRED
    ANRED_007(015),
    * data element: NAME1_GP
    NAME1_008(035),
    * data element: SORTL
    SORTL_009(010),
    * data element: NAME2_GP
    NAME2_010(035),
    * data element: STRAS_GP
    STRAS_011(035),
    * data element: PFACH
    PFACH_012(010),
    * data element: ORT01_GP
    ORT01_013(035),
    * data element: PSTLZ
    PSTLZ_014(010),
    * data element: ORT02_GP
    ORT02_015(035),
    * data element: PFORT_GP
    PFORT_016(035),
    * data element: PSTL2
    PSTL2_017(010),
    * data element: LAND1_GP
    LAND1_018(003),
    * data element: REGIO
    REGIO_019(003),
    * data element: SPRAS
    SPRAS_020(002),
    * data element: TELX1
    TELX1_021(030),
    * data element: TELF1
    TELF1_022(016),
    * data element: TELFX
    TELFX_023(031),
    * data element: TELF2
    TELF2_024(016),
    * data element: TELTX
    TELTX_025(030),
    * data element: TELBX
    TELBX_026(015),
    * data element: URL
    KNURL_027(132),
    * data element: STCD1
    STCD1_028(016),
    * data element: STCD2
    STCD2_029(011),
    * data element: BBBNR
    BBBNR_030(007),
    * data element: BBSNR
    BBSNR_031(005),
    * data element: BUBKZ
    BUBKZ_032(001),
    * data element: BRSCH
    BRSCH_033(004),
    * data element: LZONE
    LZONE_034(010),
    * data element: KUKLA
    KUKLA_035(002),
    * data element: BRSCH
    BRSCH_036(004),
    * data element: UMSA1
    UMSA1_037(020),
    * data element: UWAER
    UWAER_038(005),
    * data element: UMJAH
    UMJAH_039(004),
    * data element: JMZAH
    JMZAH_040(006),
    * data element: JMJAH
    JMJAH_041(004),
    * data element: BANKS
    BANKS_01_042(003),
    * data element: BANKK
    BANKL_01_043(015),
    * data element: BANKN
    BANKN_01_044(018),
    * data element: ABLAD
    ABLAD_01_045(025),
    * data element: KNKAL
    KNFAK_01_046(002),
    * data element: CIVVE
    CIVVE_047(001),
    * data element: ANRED_AP
    ANRED_01_048(030),
    * data element: ANRED_AP
    ANRED_02_049(030),
    * data element: NAMEV_VP
    NAMEV_01_050(035),
    * data element: NAMEV_VP
    NAMEV_02_051(035),
    * data element: NAME1_GP
    NAME1_01_052(035),
    * data element: NAME1_GP
    NAME1_02_053(035),
    * data element: TELF1
    TELF1_01_054(016),
    * data element: TELF1
    TELF1_02_055(016),
    * data element: ABTNR_PA
    ABTNR_01_056(004),
    * data element: ABTNR_PA
    ABTNR_02_057(004),
    * data element: AKONT
    AKONT_058(010),
    * data element: DZTERM
    ZTERM_059(004),
    * data element: MAHNA
    MAHNA_060(004),
    * data element: BZIRK
    BZIRK_061(006),
    * data element: AWAHR
    AWAHR_062(003),
    * data element: WAERS_V02D
    WAERS_063(005),
    * data element: KALKS
    KALKS_064(001),
    * data element: LPRIO
    LPRIO_065(002),
    * data element: KZAZU_D
    KZAZU_066(001),
    * data element: ANTLF
    ANTLF_067(001),
    * data element: PERFK
    PERFK_068(002),
    end of record.
    *** End generated data section ***
    start-of-selection.
    perform open_dataset using dataset.
    perform open_group.
    do.
    read dataset dataset into record.
    if sy-subrc <> 0. exit. endif.
    perform bdc_dynpro using 'SAPMF02D' '0100'.
    perform bdc_field using 'BDC_CURSOR'
    'RF02D-KTOKD'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'RF02D-KUNNR'
    record-KUNNR_001.
    perform bdc_field using 'RF02D-BUKRS'
    record-BUKRS_002.
    perform bdc_field using 'RF02D-VKORG'
    record-VKORG_003.
    perform bdc_field using 'RF02D-VTWEG'
    record-VTWEG_004.
    perform bdc_field using 'RF02D-SPART'
    record-SPART_005.
    perform bdc_field using 'RF02D-KTOKD'
    record-KTOKD_006.
    perform bdc_dynpro using 'SAPMF02D' '0110'.
    perform bdc_field using 'BDC_CURSOR'
    'KNA1-KNURL'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNA1-ANRED'
    record-ANRED_007.
    perform bdc_field using 'KNA1-NAME1'
    record-NAME1_008.
    perform bdc_field using 'KNA1-SORTL'
    record-SORTL_009.
    perform bdc_field using 'KNA1-NAME2'
    record-NAME2_010.
    perform bdc_field using 'KNA1-STRAS'
    record-STRAS_011.
    perform bdc_field using 'KNA1-PFACH'
    record-PFACH_012.
    perform bdc_field using 'KNA1-ORT01'
    record-ORT01_013.
    perform bdc_field using 'KNA1-PSTLZ'
    record-PSTLZ_014.
    perform bdc_field using 'KNA1-ORT02'
    record-ORT02_015.
    perform bdc_field using 'KNA1-PFORT'
    record-PFORT_016.
    perform bdc_field using 'KNA1-PSTL2'
    record-PSTL2_017.
    perform bdc_field using 'KNA1-LAND1'
    record-LAND1_018.
    perform bdc_field using 'KNA1-REGIO'
    record-REGIO_019.
    perform bdc_field using 'KNA1-SPRAS'
    record-SPRAS_020.
    perform bdc_field using 'KNA1-TELX1'
    record-TELX1_021.
    perform bdc_field using 'KNA1-TELF1'
    record-TELF1_022.
    perform bdc_field using 'KNA1-TELFX'
    record-TELFX_023.
    perform bdc_field using 'KNA1-TELF2'
    record-TELF2_024.
    perform bdc_field using 'KNA1-TELTX'
    record-TELTX_025.
    perform bdc_field using 'KNA1-TELBX'
    record-TELBX_026.
    perform bdc_field using 'KNA1-KNURL'
    record-KNURL_027.
    perform bdc_dynpro using 'SAPMF02D' '0120'.
    perform bdc_field using 'BDC_CURSOR'
    'KNA1-LZONE'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNA1-STCD1'
    record-STCD1_028.
    perform bdc_field using 'KNA1-STCD2'
    record-STCD2_029.
    perform bdc_field using 'KNA1-BBBNR'
    record-BBBNR_030.
    perform bdc_field using 'KNA1-BBSNR'
    record-BBSNR_031.
    perform bdc_field using 'KNA1-BUBKZ'
    record-BUBKZ_032.
    perform bdc_field using 'KNA1-BRSCH'
    record-BRSCH_033.
    perform bdc_field using 'KNA1-LZONE'
    record-LZONE_034.
    perform bdc_dynpro using 'SAPMF02D' '0125'.
    perform bdc_field using 'BDC_CURSOR'
    'KNA1-JMJAH'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNA1-KUKLA'
    record-KUKLA_035.
    perform bdc_field using 'KNA1-BRSCH'
    record-BRSCH_036.
    perform bdc_field using 'KNA1-UMSA1'
    record-UMSA1_037.
    perform bdc_field using 'KNA1-UWAER'
    record-UWAER_038.
    perform bdc_field using 'KNA1-UMJAH'
    record-UMJAH_039.
    perform bdc_field using 'KNA1-JMZAH'
    record-JMZAH_040.
    perform bdc_field using 'KNA1-JMJAH'
    record-JMJAH_041.
    perform bdc_dynpro using 'SAPMF02D' '0130'.
    perform bdc_field using 'BDC_CURSOR'
    'KNBK-BANKN(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_field using 'KNBK-BANKS(01)'
    record-BANKS_01_042.
    perform bdc_field using 'KNBK-BANKL(01)'
    record-BANKL_01_043.
    perform bdc_field using 'KNBK-BANKN(01)'
    record-BANKN_01_044.
    perform bdc_dynpro using 'SAPMF02D' '0130'.
    perform bdc_field using 'BDC_CURSOR'
    'KNBK-BANKS(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_dynpro using 'SAPMF02D' '0340'.
    perform bdc_field using 'BDC_CURSOR'
    'KNVA-KNFAK(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_field using 'KNVA-ABLAD(01)'
    record-ABLAD_01_045.
    perform bdc_field using 'KNVA-KNFAK(01)'
    record-KNFAK_01_046.
    perform bdc_dynpro using 'SAPMF02D' '0340'.
    perform bdc_field using 'BDC_CURSOR'
    'RF02D-KUNNR'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_dynpro using 'SAPMF02D' '0370'.
    perform bdc_field using 'BDC_CURSOR'
    'KNA1-CIVVE'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_field using 'KNA1-CIVVE'
    record-CIVVE_047.
    perform bdc_dynpro using 'SAPMF02D' '0360'.
    perform bdc_field using 'BDC_CURSOR'
    'KNVK-ABTNR(02)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_field using 'KNVK-ANRED(01)'
    record-ANRED_01_048.
    perform bdc_field using 'KNVK-ANRED(02)'
    record-ANRED_02_049.
    perform bdc_field using 'KNVK-NAMEV(01)'
    record-NAMEV_01_050.
    perform bdc_field using 'KNVK-NAMEV(02)'
    record-NAMEV_02_051.
    perform bdc_field using 'KNVK-NAME1(01)'
    record-NAME1_01_052.
    perform bdc_field using 'KNVK-NAME1(02)'
    record-NAME1_02_053.
    perform bdc_field using 'KNVK-TELF1(01)'
    record-TELF1_01_054.
    perform bdc_field using 'KNVK-TELF1(02)'
    record-TELF1_02_055.
    perform bdc_field using 'KNVK-ABTNR(01)'
    record-ABTNR_01_056.
    perform bdc_field using 'KNVK-ABTNR(02)'
    record-ABTNR_02_057.
    perform bdc_dynpro using 'SAPMF02D' '0360'.
    perform bdc_field using 'BDC_CURSOR'
    'KNVK-NAMEV(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_dynpro using 'SAPMF02D' '0210'.
    perform bdc_field using 'BDC_CURSOR'
    'KNB1-AKONT'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNB1-AKONT'
    record-AKONT_058.
    perform bdc_dynpro using 'SAPMF02D' '0215'.
    perform bdc_field using 'BDC_CURSOR'
    'KNB1-ZTERM'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNB1-ZTERM'
    record-ZTERM_059.
    perform bdc_dynpro using 'SAPMF02D' '0220'.
    perform bdc_field using 'BDC_CURSOR'
    'KNB5-MAHNA'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNB5-MAHNA'
    record-MAHNA_060.
    perform bdc_dynpro using 'SAPMF02D' '0230'.
    perform bdc_field using 'BDC_CURSOR'
    'KNB1-VRSNR'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_dynpro using 'SAPMF02D' '0310'.
    perform bdc_field using 'BDC_CURSOR'
    'KNVV-WAERS'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNVV-BZIRK'
    record-BZIRK_061.
    perform bdc_field using 'KNVV-AWAHR'
    record-AWAHR_062.
    perform bdc_field using 'KNVV-WAERS'
    record-WAERS_063.
    perform bdc_field using 'KNVV-KALKS'
    record-KALKS_064.
    perform bdc_dynpro using 'SAPMF02D' '0315'.
    perform bdc_field using 'BDC_CURSOR'
    'KNVV-LPRIO'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNVV-LPRIO'
    record-LPRIO_065.
    perform bdc_field using 'KNVV-KZAZU'
    record-KZAZU_066.
    perform bdc_field using 'KNVV-ANTLF'
    record-ANTLF_067.
    perform bdc_dynpro using 'SAPMF02D' '0320'.
    perform bdc_field using 'BDC_CURSOR'
    'KNVV-PERFK'.
    perform bdc_field using 'BDC_OKCODE'
    '/00'.
    perform bdc_field using 'KNVV-PERFK'
    record-PERFK_068.
    perform bdc_dynpro using 'SAPMF02D' '1350'.
    perform bdc_field using 'BDC_CURSOR'
    'RF02D-KUNNR'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_dynpro using 'SAPMF02D' '0324'.
    perform bdc_field using 'BDC_CURSOR'
    'KNVP-PARVW(01)'.
    perform bdc_field using 'BDC_OKCODE'
    '=ENTR'.
    perform bdc_transaction using 'XD01'.
    enddo.
    perform close_group.
    perform close_dataset using dataset.
    gIRISH

  • Bdc session sample program

    Hi,
    Please any body send a sample program for bdc session method.
    Thanks,
    sreedhar.

    See the BDC Session method program :
    report zmppc011 no standard page heading line-size 120 line-count 55
       message-id zz.
    pool of form routines
    include zmppn001.
    Define BDC Table Structure
    data: begin of itab_bdc_tab occurs 0.
            include structure bdcdata.
    data: end of itab_bdc_tab.
    Input record layout of Leagcy File
    data: begin of itab_xcel occurs 0,
            matnr(18)  type c,
            werks(4)   type c,
            alnag(2)   type c,
            verid(4)   type c,
            text1(40)  type c,
            bstmi      like mkal-bstmi,
            bstma      like mkal-bstma,
            adatu(10)  type c,
            bdatu(10)  type c,
            stlal(2)   type c,
            stlan(1)   type c,
            serkz(1)   type c,
            mdv01(8)   type c,
            elpro(4)   type c,
            alort(4)   type c,
          end of itab_xcel.
    data: begin of lt_pp04_cache occurs 0,
            matnr like itab_xcel-matnr,
            werks like itab_xcel-werks,
            alnag like itab_xcel-alnag,
            plnnr like mapl-plnnr,
            arbpl like crhd-arbpl,
            ktext like crtx-ktext,
          end of lt_pp04_cache.
    data: v_ssnnr(4)      type n,
          v_lines_in_xcel like sy-tabix,
          v_ssnname       like apqi-groupid,
          v_trans_in_ssn  type i,
         wa_xcel         LIKE itab_xcel,
          l_tabix         like sy-tabix,
          v_matnr         like rc27m-matnr,
          v_plnnr         like mapl-plnnr,
          v_plnal         like mapl-plnal,
          v_tcode         like sy-tcode value 'C223',
          v_plnty         like plas-plnty value 'R',
          v_objty         like crhd-objty value 'A',
          v_plpo_steus    like plpo-steus value 'PP04',
          v_verwe         like crhd-verwe value '0007'.
    Parameters
    selection-screen: skip 3.
    selection-screen: begin of block 1 with frame.
    parameters: p_name        like rlgrap-filename
                              default 'C:\My Documents\InputFile.txt'
                              obligatory,
    bdc session name prefix
                p_bdcpfx(6)   default 'ZPVCRT'
                              obligatory,
    number for transction per BDC session
                p_trnssn      type i
                              default 2000 obligatory,
    retain the BDC session after successfull execution
                p_keep        like apqi-qerase
                              default 'X',
    user who will be executing BDC session
                p_uname       like apqi-userid
                              default sy-uname
                              obligatory.
    selection-screen: end of block 1.
    possible entry list (F4 dropdown) for input file name
    at selection-screen on value-request for p_name.
    *-SELECT FILE FROM USERS LOCAL PC
      call function 'WS_FILENAME_GET'
          exporting
             DEF_FILENAME     = ' '
               def_path         = 'C:\Temp\'
               mask             = ',.,..'
               mode             = 'O'
               title            = 'Select File '(007)
          importing
               filename         = p_name
             RC               =
          exceptions
               inv_winsys       = 1
               no_batch         = 2
               selection_cancel = 3
               selection_error  = 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.
    begin the show
    start-of-selection.
    read data from input file
      perform transfer_xcel_to_itab.
      loop at itab_xcel.
      hang on to xcel line num
        l_tabix = sy-tabix.
      each line in the xcel file marks begining of new prod.version defn
      if num-of-trnas-in-session = 0, create new BDC session
        if v_trans_in_ssn is initial.
          perform bdc_session_open.
        endif.
      begin new bdc script for rtg create trans
      fill in bdc-data for prod.version maintenance screens
        perform bdc_build_script.
      insert the bdc script as a BDC transaction
        perform bdc_submit_transaction.
      keep track of how many BDC transactions were inserted in the BDC
      session
        add 1 to v_trans_in_ssn.
      if the user-specified num of trans in BDC session is reached OR
      if end of input file is reached, close the BDC session
        if v_trans_in_ssn = p_trnssn or
           l_tabix = v_lines_in_xcel.
          perform bdc_session_close.
          clear v_trans_in_ssn.
        endif.
      endloop.
    top-of-page.
      call function 'Z_HEADER'
    EXPORTING
      FLEX_TEXT1       =
      FLEX_TEXT2       =
      FLEX_TEXT3       =
          FORM TRANSFER_XCEL_TO_ITAB                                    *
          Transfer Xcel Spreadsheet to SAP Internal Table               *
    form transfer_xcel_to_itab.
    Read the tab-delimited file into itab
      call function 'WS_UPLOAD'
           exporting
                filename            = p_name
                filetype            = 'DAT'
          IMPORTING
               filelength          = flength
           tables
                data_tab            = itab_xcel
           exceptions
                conversion_error    = 1
                file_open_error     = 2
                file_read_error     = 3
                invalid_table_width = 4
                invalid_type        = 5
                no_batch            = 6
                unknown_error       = 7
                others              = 8.
      if sy-subrc = 0.
      sort the data
        sort itab_xcel by matnr werks.
        clear v_lines_in_xcel.
      if no data in the file - error out
        describe table itab_xcel lines v_lines_in_xcel.
        if v_lines_in_xcel is initial.
          write: / 'No data in input file'.
          stop.
        endif.
      else.
      if file upload failed - error out
        write: / 'Error reading input file'.
        stop.
      endif.
    endform.
          FORM BDC_SESSION_OPEN                                         *
          Open BDC Session                                              *
    form bdc_session_open.
    create bdc session name = prefix-from-selectn-screen + nnnn
      add 1 to v_ssnnr.
      concatenate p_bdcpfx v_ssnnr into v_ssnname.
    open new bdc session
      call function 'BDC_OPEN_GROUP'
           exporting
                client              = sy-mandt
                group               = v_ssnname
                keep                = p_keep
                user                = p_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.
    endform.
          FORM BDC_BUILD_SCRIPT                                         *
          Build BDC                                                     *
    form bdc_build_script.
      data: l_arbpl like crhd-arbpl,
            l_text1 like mkal-text1,
            l_mdv01 like mkal-mdv01,
            l_mapl  like mapl.
    clear bdc-data itab - begin of new bdc transaction
      clear   itab_bdc_tab.
      refresh itab_bdc_tab.
    read material cross reference tables to determine sap part#
      clear : v_matnr, v_plnnr, v_plnal.
      perform read_matnr_cross_ref using itab_xcel-matnr
                                         itab_xcel-werks
                                   changing v_matnr.
    determine the version description to use
      if itab_xcel-text1 is initial.
        l_text1 = itab_xcel-verid.
      else.
        l_text1 = itab_xcel-text1.
      endif.
    determine the routing group# and group ctr# to use
      perform read_routing .
    determine the production line to use
      if itab_xcel-mdv01 is initial.
      if not provided in the file then:
      prod line = work ctr on the last PP04 op of the rtg determined above
        perform read_wc_on_last_pp04 using v_plnnr v_plnal
                                  changing l_mdv01.
      NOTE: when executing the above form\routine, if v_plnnr is initial
            or v_plnal is initial, THEN l_mdv01 will automatically be
            returned blank (ie initial)
      else.
        l_mdv01 = itab_xcel-mdv01.
      endif.
    build bdc script
      perform bdc_build_script_record
    fill in initial screen
              using: 'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=ENTE',
                     ' ' 'MKAL-WERKS'       itab_xcel-werks,
                     ' ' 'MKAL-MATNR'       v_matnr,
                     ' ' 'MKAL_ADMIN-DISPO' space,
                     ' ' 'MKAL-PLNNR'       space,
                     ' ' 'MKAL_ADMIN-STTAG' space,
                     ' ' 'MKAL-PLNNG'       space,
                     ' ' 'MKAL-MDV01'       space,
                     ' ' 'MKAL-PLNNM'       space,
    click create button on initial screen and go to detail screen
                     'X' 'SAPLCMFV'         '1000',
                     ' ' 'BDC_OKCODE'       '=CREA',
    fill in the detail screen and go back to initial screen
                     'X' 'SAPLCMFV'           '2000',
                     ' ' 'BDC_OKCODE'         '=CLOS',
                     ' ' 'MKAL_EXPAND-MATNR'  v_matnr,
                     ' ' 'MKAL_EXPAND-VERID'  itab_xcel-verid,
                     ' ' 'MKAL_EXPAND-TEXT1'  l_text1,
                     ' ' 'MKAL_EXPAND-BSTMI'  itab_xcel-bstmi,
                     ' ' 'MKAL_EXPAND-BSTMA'  itab_xcel-bstma,
                     ' ' 'MKAL_EXPAND-ADATU'  itab_xcel-adatu,
                     ' ' 'MKAL_EXPAND-BDATU'  itab_xcel-bdatu,
                     ' ' 'MKAL_EXPAND-PLTYG'  v_plnty,
                     ' ' 'MKAL_EXPAND-PLNNG'  v_plnnr,
                     ' ' 'MKAL_EXPAND-ALNAG'  v_plnal,
                     ' ' 'MKAL_EXPAND-STLAL'  itab_xcel-stlal,
                     ' ' 'MKAL_EXPAND-STLAN'  itab_xcel-stlan,
                     ' ' 'MKAL_EXPAND-SERKZ'  itab_xcel-serkz,
                     ' ' 'MKAL_EXPAND-MDV01'  l_mdv01,
                     ' ' 'MKAL_EXPAND-ELPRO'  itab_xcel-elpro,
                     ' ' 'MKAL_EXPAND-ALORT'  itab_xcel-alort,
    save the production version from initial screen
                     'X' 'SAPLCMFV'           '1000',
                     ' ' 'BDC_OKCODE'         '=SAVE'.
    endform.
          FORM BDC_SUBMIT_TRANSACTION                                   *
          Submit BDC Session                                            *
    form bdc_submit_transaction.
    Load BDC script as a trqansction in BDC session
      call function 'BDC_INSERT'
           exporting
                tcode          = v_tcode
           tables
                dynprotab      = itab_bdc_tab
           exceptions
                internal_error = 01
                not_open       = 02
                queue_error    = 03
                tcode_invalid  = 04.
    endform.
          FORM BDC_BUILD_SCRIPT_RECORD                                  *
    form bdc_build_script_record using dynbegin name value.
      clear itab_bdc_tab.
      if dynbegin = 'X'.
        move: name  to itab_bdc_tab-program,
              value to itab_bdc_tab-dynpro,
              'X'   to itab_bdc_tab-dynbegin.
      else.
        move: name  to itab_bdc_tab-fnam,
              value to itab_bdc_tab-fval.
        shift itab_bdc_tab-fval left deleting leading space.
      endif.
      append itab_bdc_tab.
    endform.
          FORM BDC_SESSION_CLOSE                                        *
          Close BDC Session                                             *
    form bdc_session_close.
    close the session
      call function 'BDC_CLOSE_GROUP'
           exceptions
                not_open    = 1
                queue_error = 2
                others      = 3.
      skip 2.
      if sy-subrc ne 0.
        write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
      else.
        write : /  'Session created:', v_ssnname,
                50 '# of transactions:', v_trans_in_ssn.
      endif.
    endform.
    *&      Form  read_routing_cache
    *FORM read_routing_cache USING    pi_matnr
                                    pi_werks
                                    pi_alnag
                                    pi_verid
                                    pi_mdv01.
    DATA: BEGIN OF lt_plpo OCCURS 0,
             vornr LIKE plpo-vornr,
             objty LIKE crhd-objty,
             objid LIKE crhd-objid,
             arbpl LIKE crhd-arbpl,
           END OF lt_plpo,
           l_mapl_plnnr LIKE mapl-plnnr.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
       SELECT plnnr INTO l_mapl_plnnr
         FROM mapl UP TO 1 ROWS
        WHERE matnr = pi_matnr    AND
              werks = pi_werks    AND
              plnty = 'R'         AND
              plnal = pi_alnag    AND
              loekz = space.
       ENDSELECT.
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    *ENDFORM.                    " read_last_pp04_operation_cache
    *&      Form  read_routing
    form read_routing.
      data: begin of lt_mapl occurs 0,
              plnnr like mapl-plnnr,
              plnal like mapl-plnal,
            end of lt_mapl,
            l_arbpl like crhd-arbpl.
    get all the rtg# and grp ctr# from MAPL
      select plnnr plnal
        into corresponding fields of table lt_mapl
        from mapl
       where matnr = v_matnr          and
             werks = itab_xcel-werks  and
             plnty = v_plnty          and     "Rate Routing
             loekz = space.                   "with del flag = OFF
      sort lt_mapl by plnal.
      if not itab_xcel-verid is initial.
      if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#
        if itab_xcel-verid = '0001'.
          read table lt_mapl index 1.
          v_plnnr = lt_mapl-plnnr.
          v_plnal = lt_mapl-plnal.
        else.
      if the verid<>0001 then use the rtg-grp# and grp-ctr# of the routing
      whose work center on the last PP04 operation matches the given verid
          loop at lt_mapl.
            clear l_arbpl.
          get the work center from the last PP04 operation
            perform read_wc_on_last_pp04 using lt_mapl-plnnr
                                               lt_mapl-plnal
                                      changing l_arbpl.
            if itab_xcel-verid = l_arbpl.
              v_plnnr = lt_mapl-plnnr.
              v_plnal = lt_mapl-plnal.
              exit.
            endif.
          endloop.
        endif.
      else.
      do nothing
      endif.
    For version IDs that are other then '0000' or 'ZWIP' :--
      if itab_xcel-verid NE '0000' and
         itab_xcel-verid NE 'ZWIP'.
      if routing group# or group counter was not determined, make the
      valid-to date 99/99/9999 so that the BDC, on execution, errors out.
        if v_plnnr is initial or
           v_plnal is initial.
          itab_xcel-bdatu = '99/99/9999'.
        endif.
      endif.
    determine the routing group#
    CLEAR lt_pp04_cache.
    chk if its in the cache first, if not then get it from MAPL table
    and put it in the cache
    READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr
                                       werks = pi_werks
                                       alnag = pi_alnag.
    IF sy-subrc = 0.
      do nothing - lt_pp04_cache header line has rtg#
    ELSE.
      get the routing group # from MAPL
      put it in the cache internal table
       IF NOT l_mapl_plnnr IS INITIAL.
         lt_pp04_cache-matnr = pi_matnr.
         lt_pp04_cache-werks = pi_werks.
         lt_pp04_cache-alnag = pi_alnag.
         lt_pp04_cache-plnnr = l_mapl_plnnr.
         APPEND lt_pp04_cache.
       ENDIF.
    ENDIF.
    if the rtg# was determined AND
    -- the work center was not determined yet AND
    -- work center was really needed for this line in the input file
    then
    -- read the work center from last PP04 operation on the routing
    -- update the cache accordingly
    IF NOT lt_pp04_cache-plnnr IS INITIAL AND
            lt_pp04_cache-arbpl IS INITIAL AND
        ( pi_verid IS INITIAL OR
          pi_mdv01 IS INITIAL ).
      read the last PP04 operation
       CLEAR   lt_plpo.
       REFRESH lt_plpo.
       SELECT vornr eobjty eobjid e~arbpl
         INTO CORRESPONDING FIELDS OF TABLE lt_plpo
         FROM plas AS b
              INNER JOIN plpo AS c
                    ON bplnty = cplnty AND
                       bplnnr = cplnnr AND
                       bzaehl = czaehl
              INNER JOIN crhd AS e
                    ON carbid = eobjid
        WHERE b~plnty = v_plnty             AND
              b~plnnr = lt_pp04_cache-plnnr AND
              b~plnal = lt_pp04_cache-alnag AND
              c~loekz = space               AND
              c~steus = v_plpo_steus        AND
              e~objty = v_objty             AND
              e~werks = lt_pp04_cache-werks AND
              e~verwe = v_verwe.
       SORT lt_plpo BY vornr DESCENDING.
       READ TABLE lt_plpo INDEX 1.
       IF NOT lt_plpo-arbpl IS INITIAL.
         lt_pp04_cache-arbpl = lt_plpo-arbpl.
        read work center description
         SELECT SINGLE ktext INTO lt_pp04_cache-ktext
           FROM crtx WHERE objty = lt_plpo-objty AND
                           objid = lt_plpo-objid AND
                           spras = sy-langu.
        the following read will get the index of the correct record to be
        updated in the cache
         READ TABLE lt_pp04_cache
              WITH KEY matnr = pi_matnr
                       werks = pi_werks
                       alnag = pi_alnag.
         MODIFY lt_pp04_cache
                INDEX sy-tabix
                TRANSPORTING arbpl ktext.
       ENDIF.
    ENDIF.
    endform.                    " read_last_pp04_operation_cache
    *&      Form  read_wc_on_last_pp04
    form read_wc_on_last_pp04 using    pi_plnnr
                                       pi_plnal
                              changing pe_arbpl.
      data: begin of lt_plpo occurs 0,
              vornr like plpo-vornr,
              objty like crhd-objty,
              objid like crhd-objid,
              arbpl like crhd-arbpl,
            end of lt_plpo.
    get all the PP04 operations for the given rtg# & grp-ctr#
      select vornr eobjty eobjid e~arbpl
        into corresponding fields of table lt_plpo
        from plas as b
             inner join plpo as c
                   on bplnty = cplnty and
                      bplnnr = cplnnr and
                      bzaehl = czaehl
             inner join crhd as e
                   on carbid = eobjid
       where b~plnty = v_plnty          and           "Rate Routing
             b~plnnr = pi_plnnr         and
             b~plnal = pi_plnal         and
             c~loekz = space            and           "Oper Del Flag = OFF
             c~steus = v_plpo_steus     and           "PP04
             e~objty = v_objty.                       "WC Obj Type = 'A'
    read the last operation
      sort lt_plpo by vornr descending.
      read table lt_plpo index 1.
      pe_arbpl = lt_plpo-arbpl.
    endform.                    " read_wc_on_last_pp04

  • BDC message

    Hi gurus!
    in BDC , i want to know the transparent table where the message no and its text is stored.
    for eg : -
    Msgid            Msgno       MSGV1           MSGV2
      V1                   311        Fert. Direct      200017287
    here , 200017287 is order no created after running BDC. So i want knw whenever different type of order is created , willl same no [311] will be displayed?

    HI Guru,
      i am sending the code how to handel the message and where to store.
    *Code used to create BDC
    *& Report  ZBDC_EXAMPLE                                                *
    *& Example BDC program, which updates net price of item 00010 of a     *
    *& particular Purchase order(EBELN).                                   *
    REPORT  ZBDC_EXAMPLE  NO STANDARD PAGE HEADING
                          LINE-SIZE 132.
    Data declaration
    TABLES: ekko, ekpo.
    TYPES: BEGIN OF t_ekko,
        ebeln TYPE ekko-ebeln,
        waers TYPE ekko-waers,
        netpr TYPE ekpo-netpr,
        err_msg(73) TYPE c,
    END OF t_ekko.
    DATA: it_ekko  TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko  TYPE t_ekko,
          it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_error TYPE t_ekko,
          it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_success TYPE t_ekko.
    DATA: w_textout            LIKE t100-text.
    DATA: gd_update TYPE i,
          gd_lines TYPE i.
    *Used to store BDC data
    DATA: BEGIN OF bdc_tab OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    *Used to stores error information from CALL TRANSACTION Function Module
    DATA: BEGIN OF messtab OCCURS 0.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    *Screen declaration
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
                                        TITLE text-001. "Purchase order Num
    SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
                                        TITLE text-002. "New NETPR value
    PARAMETERS:  p_newpr(14)   TYPE c obligatory.  "LIKE ekpo-netpr.
    SELECTION-SCREEN END OF BLOCK block2.
    *START-OF-SELECTION
    START-OF-SELECTION.
    Retrieve data from Purchase order table(EKKO)
      SELECT ekkoebeln ekkowaers ekpo~netpr
        INTO TABLE it_ekko
        FROM ekko AS ekko INNER JOIN ekpo AS ekpo
          ON ekpoebeln EQ ekkoebeln
       WHERE ekko~ebeln IN so_ebeln AND
             ekpo~ebelp EQ '10'.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Check data has been retrieved ready for processing
      DESCRIBE TABLE it_ekko LINES gd_lines.
      IF gd_lines LE 0.
      Display message if no data has been retrieved
        MESSAGE i003(zp) WITH 'No Records Found'(001).
        LEAVE TO SCREEN 0.
      ELSE.
      Update Customer master data (instalment text)
        LOOP AT it_ekko INTO wa_ekko.
          PERFORM bdc_update.
        ENDLOOP.
      Display message confirming number of records updated
        IF gd_update GT 1.
          MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
        ELSE.
          MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
        ENDIF.
    Display Success Report
      Check Success table
        DESCRIBE TABLE it_success LINES gd_lines.
        IF gd_lines GT 0.
        Display result report column headings
          PERFORM display_column_headings.
        Display result report
          PERFORM display_report.
        ENDIF.
    Display Error Report
      Check errors table
        DESCRIBE TABLE it_error LINES gd_lines.
      If errors exist then display errors report
        IF gd_lines GT 0.
        Display errors report
          PERFORM display_error_headings.
          PERFORM display_error_report.
        ENDIF.
      ENDIF.
    *&      Form  DISPLAY_COLUMN_HEADINGS
          Display column headings
    FORM display_column_headings.
      WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
      SKIP.
      WRITE:2 'The following records updated successfully:'(013).
      WRITE:/ sy-uline(42).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(004), sy-vline,
              (11) 'Old Netpr'(005), sy-vline,
              (11) 'New Netpr'(006), sy-vline.
      WRITE:/ sy-uline(42).
    ENDFORM.                    " DISPLAY_COLUMN_HEADINGS
    *&      Form  BDC_UPDATE
          Populate BDC table and call transaction ME22
    FORM bdc_update.
      PERFORM dynpro USING:
          'X'   'SAPMM06E'        '0105',
          ' '   'BDC_CURSOR'      'RM06E-BSTNR',
          ' '   'RM06E-BSTNR'     wa_ekko-ebeln,
          ' '   'BDC_OKCODE'      '/00',                      "OK code
          'X'   'SAPMM06E'        '0120',
          ' '   'BDC_CURSOR'      'EKPO-NETPR(01)',
          ' '   'EKPO-NETPR(01)'  p_newpr,
          ' '   'BDC_OKCODE'      '=BU'.                      "OK code
    Call transaction to update customer instalment text
      CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
             MESSAGES INTO messtab.
    Check if update was succesful
      IF sy-subrc EQ 0.
        ADD 1 TO gd_update.
        APPEND wa_ekko TO it_success.
      ELSE.
      Retrieve error messages displayed during BDC update
        LOOP AT messtab WHERE msgtyp = 'E'.
        Builds actual message based on info returned from Call transaction
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
               EXPORTING
                    msgid               = messtab-msgid
                    msgnr               = messtab-msgnr
                    msgv1               = messtab-msgv1
                    msgv2               = messtab-msgv2
                    msgv3               = messtab-msgv3
                    msgv4               = messtab-msgv4
               IMPORTING
                    message_text_output = w_textout.
        ENDLOOP.
      Build error table ready for output
        wa_error = wa_ekko.
        wa_error-err_msg = w_textout.
        APPEND wa_error TO it_error.
        CLEAR: wa_error.
      ENDIF.
    Clear bdc date table
      CLEAR: bdc_tab.
      REFRESH: bdc_tab.
    ENDFORM.                    " BDC_UPDATE
          FORM DYNPRO                                                   *
          stores values to bdc table                                    *
    -->  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.                               " DYNPRO
    *&      Form  DISPLAY_REPORT
          Display Report
    FORM display_report.
      FORMAT COLOR COL_NORMAL.
    Loop at data table
      LOOP AT it_success INTO wa_success.
        WRITE:/      sy-vline,
                (10) wa_success-ebeln, sy-vline,
                (11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
                (11) p_newpr, sy-vline.
        CLEAR: wa_success.
      ENDLOOP.
      WRITE:/ sy-uline(42).
      REFRESH: it_success.
      FORMAT COLOR COL_BACKGROUND.
    ENDFORM.                    " DISPLAY_REPORT
    *&      Form  DISPLAY_ERROR_REPORT
          Display error report data
    FORM display_error_report.
      LOOP AT it_error INTO wa_error.
        WRITE:/      sy-vline,
                (10) wa_error-ebeln, sy-vline,
                (11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
                (73) wa_error-err_msg, sy-vline.
      ENDLOOP.
      WRITE:/ sy-uline(104).
      REFRESH: it_error.
    ENDFORM.                    " DISPLAY_ERROR_REPORT
    *&      Form  DISPLAY_ERROR_HEADINGS
          Display error report headings
    FORM display_error_headings.
      SKIP.
      WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
      SKIP.
      WRITE:2 'The following records failed during update:'(008).
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(009), sy-vline,
              (11) 'Netpr'(010), sy-vline,
              (73) 'Error Message'(012), sy-vline.
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_NORMAL.
    ENDFORM.                    " DISPLAY_ERROR_HEADINGS

  • Materials on BDC

    hi all,
       i want learn BDC from basic .. can any anyone send any nice material so that i can learn BDC very easily
    thanks
    Nikesh

    Hi
    BDC allows you to perform database updates in the background using standard SAP transactions. The resultant entries will be as if the user had manually entered the data via SAP. This means that you do not bypass any of the standard SAP consistency checks, authorisations etc. There are two main methods of ABAP BDC, these are Call Transaction and Batch Input. Other methods of update include Direct update, Idoc and BAPI. Format date field for BDC screen entry
    <u><b>BDC using Call Transaction</b></u>
    STEP 1
    Create recording using SM35(or SHDB).
    STEP 2
    Use recording as a basis to populate the Internal BDC table.
    Check this link for creating record with screens
    http://www.sapdevelopment.co.uk/bdc/bdc_recording.htm
    Checkthis sample coding
    Code used to create BDC
    *& Report  ZBDC_EXAMPLE                                                *
    *& Example BDC program, which updates net price of item 00010 of a     *
    *& particular Purchase order(EBELN).                                   *
    REPORT  ZBDC_EXAMPLE  NO STANDARD PAGE HEADING
                          LINE-SIZE 132.
    * Data declaration
    TABLES: ekko, ekpo.
    TYPES: BEGIN OF t_ekko,
        ebeln TYPE ekko-ebeln,
        waers TYPE ekko-waers,
        netpr TYPE ekpo-netpr,
        err_msg(73) TYPE c,
    END OF t_ekko.
    DATA: it_ekko  TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko  TYPE t_ekko,
          it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_error TYPE t_ekko,
          it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_success TYPE t_ekko.
    DATA: w_textout            LIKE t100-text.
    DATA: gd_update TYPE i,
          gd_lines TYPE i.
    *Used to store BDC data
    DATA: BEGIN OF bdc_tab OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    *Used to stores error information from CALL TRANSACTION Function Module
    DATA: BEGIN OF messtab OCCURS 0.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    *Screen declaration
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
                                        TITLE text-001. "Purchase order Num
    SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
                                        TITLE text-002. "New NETPR value
    PARAMETERS:  p_newpr(14)   TYPE c obligatory.  "LIKE ekpo-netpr.
    SELECTION-SCREEN END OF BLOCK block2.
    *START-OF-SELECTION
    START-OF-SELECTION.
    * Retrieve data from Purchase order table(EKKO)
      SELECT ekko~ebeln ekko~waers ekpo~netpr
        INTO TABLE it_ekko
        FROM ekko AS ekko INNER JOIN ekpo AS ekpo
          ON ekpo~ebeln EQ ekko~ebeln
       WHERE ekko~ebeln IN so_ebeln AND
             ekpo~ebelp EQ '10'.
    *END-OF-SELECTION
    END-OF-SELECTION.
    * Check data has been retrieved ready for processing
      DESCRIBE TABLE it_ekko LINES gd_lines.
      IF gd_lines LE 0.
    *   Display message if no data has been retrieved
        MESSAGE i003(zp) WITH 'No Records Found'(001).
        LEAVE TO SCREEN 0.
      ELSE.
    *   Update Customer master data (instalment text)
        LOOP AT it_ekko INTO wa_ekko.
          PERFORM bdc_update.
        ENDLOOP.
    *   Display message confirming number of records updated
        IF gd_update GT 1.
          MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
        ELSE.
          MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
        ENDIF.
    * Display Success Report
    *   Check Success table
        DESCRIBE TABLE it_success LINES gd_lines.
        IF gd_lines GT 0.
    *     Display result report column headings
          PERFORM display_column_headings.
    *     Display result report
          PERFORM display_report.
        ENDIF.
    * Display Error Report
    *   Check errors table
        DESCRIBE TABLE it_error LINES gd_lines.
    *   If errors exist then display errors report
        IF gd_lines GT 0.
    *     Display errors report
          PERFORM display_error_headings.
          PERFORM display_error_report.
        ENDIF.
      ENDIF.
    *&      Form  DISPLAY_COLUMN_HEADINGS
    *       Display column headings
    FORM display_column_headings.
      WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
      SKIP.
      WRITE:2 'The following records updated successfully:'(013).
      WRITE:/ sy-uline(42).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(004), sy-vline,
              (11) 'Old Netpr'(005), sy-vline,
              (11) 'New Netpr'(006), sy-vline.
      WRITE:/ sy-uline(42).
    ENDFORM.                    " DISPLAY_COLUMN_HEADINGS
    *&      Form  BDC_UPDATE
    *       Populate BDC table and call transaction ME22
    FORM bdc_update.
      PERFORM dynpro USING:
          'X'   'SAPMM06E'        '0105',
          ' '   'BDC_CURSOR'      'RM06E-BSTNR',
          ' '   'RM06E-BSTNR'     wa_ekko-ebeln,
          ' '   'BDC_OKCODE'      '/00',                      "OK code
          'X'   'SAPMM06E'        '0120',
          ' '   'BDC_CURSOR'      'EKPO-NETPR(01)',
          ' '   'EKPO-NETPR(01)'  p_newpr,
          ' '   'BDC_OKCODE'      '=BU'.                      "OK code
    * Call transaction to update customer instalment text
      CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
             MESSAGES INTO messtab.
    * Check if update was succesful
      IF sy-subrc EQ 0.
        ADD 1 TO gd_update.
        APPEND wa_ekko TO it_success.
      ELSE.
    *   Retrieve error messages displayed during BDC update
        LOOP AT messtab WHERE msgtyp = 'E'.
    *     Builds actual message based on info returned from Call transaction
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
               EXPORTING
                    msgid               = messtab-msgid
                    msgnr               = messtab-msgnr
                    msgv1               = messtab-msgv1
                    msgv2               = messtab-msgv2
                    msgv3               = messtab-msgv3
                    msgv4               = messtab-msgv4
               IMPORTING
                    message_text_output = w_textout.
        ENDLOOP.
    *   Build error table ready for output
        wa_error = wa_ekko.
        wa_error-err_msg = w_textout.
        APPEND wa_error TO it_error.
        CLEAR: wa_error.
      ENDIF.
    * Clear bdc date table
      CLEAR: bdc_tab.
      REFRESH: bdc_tab.
    ENDFORM.                    " BDC_UPDATE
    *       FORM DYNPRO                                                   *
    *       stores values to bdc table                                    *
    *  -->  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.                               " DYNPRO
    *&      Form  DISPLAY_REPORT
    *       Display Report
    FORM display_report.
      FORMAT COLOR COL_NORMAL.
    * Loop at data table
      LOOP AT it_success INTO wa_success.
        WRITE:/      sy-vline,
                (10) wa_success-ebeln, sy-vline,
                (11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
                (11) p_newpr, sy-vline.
        CLEAR: wa_success.
      ENDLOOP.
      WRITE:/ sy-uline(42).
      REFRESH: it_success.
      FORMAT COLOR COL_BACKGROUND.
    ENDFORM.                    " DISPLAY_REPORT
    *&      Form  DISPLAY_ERROR_REPORT
    *       Display error report data
    FORM display_error_report.
      LOOP AT it_error INTO wa_error.
        WRITE:/      sy-vline,
                (10) wa_error-ebeln, sy-vline,
                (11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
                (73) wa_error-err_msg, sy-vline.
      ENDLOOP.
      WRITE:/ sy-uline(104).
      REFRESH: it_error.
    ENDFORM.                    " DISPLAY_ERROR_REPORT
    *&      Form  DISPLAY_ERROR_HEADINGS
    *       Display error report headings
    FORM display_error_headings.
      SKIP.
      WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
      SKIP.
      WRITE:2 'The following records failed during update:'(008).
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(009), sy-vline,
              (11) 'Netpr'(010), sy-vline,
              (73) 'Error Message'(012), sy-vline.
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_NORMAL.
    ENDFORM.                    " DISPLAY_ERROR_HEADINGS
    <u><b>bdc session development</b></u>
    Depending on the type of material, the list of selection screens (Basic
    1, Basic 2,...Storage 1..) changes so that it causes havoc when trying
    to run a BDC to change a value on "Storage 1". Is there a function or
    does someone have a way in which they can determine the correct line
    number for Storage 1 irregardless of the material type?
    It will also help us between clients as in one client "Storage 1" will
    be on line 8 while the same material in QAS it will be on line 13.
    use this to delete sessions
    Schedule the session with RSBDCSUB Program
    Regards
    Pavan

  • Need help in transferring data from flatfiles to SAP R/3 tables

    Hi,
    I need to *transfer data in the flatfiles (NON SAP SYSTEM) to SAP R/3 tables*. Can we do it with a help of program ?
    Please help me out
    Thanks and regards,
    Shiva shekar k

    Hi Shiva,
        This code will be helpful to you.
    *Code used to create BDC
    *& Report  ZBDC                                               *
    *& Example BDC program, which updates net price of item 00010 of a     *
    *& particular Purchase order(EBELN).                                   *
    REPORT  ZBDC  NO STANDARD PAGE HEADING
                          LINE-SIZE 132.
    Data declaration
    TABLES: ekko, ekpo.
    TYPES: BEGIN OF t_ekko,
        ebeln TYPE ekko-ebeln,
        waers TYPE ekko-waers,
        netpr TYPE ekpo-netpr,
        err_msg(73) TYPE c,
    END OF t_ekko.
    DATA: it_ekko  TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko  TYPE t_ekko,
          it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_error TYPE t_ekko,
          it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_success TYPE t_ekko.
    DATA: w_textout            LIKE t100-text.
    DATA: gd_update TYPE i,
          gd_lines TYPE i.
    *Used to store BDC data
    DATA: BEGIN OF bdc_tab OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    *Used to stores error information from CALL TRANSACTION Function Module
    DATA: BEGIN OF messtab OCCURS 0.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    *Screen declaration
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
                                        TITLE text-001. "Purchase order Num
    SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
                                        TITLE text-002. "New NETPR value
    PARAMETERS:  p_newpr(14)   TYPE c obligatory.  "LIKE ekpo-netpr.
    SELECTION-SCREEN END OF BLOCK block2.
    *START-OF-SELECTION
    START-OF-SELECTION.
    Retrieve data from Purchase order table(EKKO)
      SELECT ekkoebeln ekkowaers ekpo~netpr
        INTO TABLE it_ekko
        FROM ekko AS ekko INNER JOIN ekpo AS ekpo
          ON ekpoebeln EQ ekkoebeln
       WHERE ekko~ebeln IN so_ebeln AND
             ekpo~ebelp EQ '10'.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Check data has been retrieved ready for processing
      DESCRIBE TABLE it_ekko LINES gd_lines.
      IF gd_lines LE 0.
      Display message if no data has been retrieved
        MESSAGE i003(zp) WITH 'No Records Found'(001).
        LEAVE TO SCREEN 0.
      ELSE.
      Update Customer master data (instalment text)
        LOOP AT it_ekko INTO wa_ekko.
          PERFORM bdc_update.
        ENDLOOP.
      Display message confirming number of records updated
        IF gd_update GT 1.
          MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
        ELSE.
          MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
        ENDIF.
    Display Success Report
      Check Success table
        DESCRIBE TABLE it_success LINES gd_lines.
        IF gd_lines GT 0.
        Display result report column headings
          PERFORM display_column_headings.
        Display result report
          PERFORM display_report.
        ENDIF.
    Display Error Report
      Check errors table
        DESCRIBE TABLE it_error LINES gd_lines.
      If errors exist then display errors report
        IF gd_lines GT 0.
        Display errors report
          PERFORM display_error_headings.
          PERFORM display_error_report.
        ENDIF.
      ENDIF.
    *&      Form  DISPLAY_COLUMN_HEADINGS
          Display column headings
    FORM display_column_headings.
      WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
      SKIP.
      WRITE:2 'The following records updated successfully:'(013).
      WRITE:/ sy-uline(42).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(004), sy-vline,
              (11) 'Old Netpr'(005), sy-vline,
              (11) 'New Netpr'(006), sy-vline.
      WRITE:/ sy-uline(42).
    ENDFORM.                    " DISPLAY_COLUMN_HEADINGS
    *&      Form  BDC_UPDATE
          Populate BDC table and call transaction ME22
    FORM bdc_update.
      PERFORM dynpro USING:
          'X'   'SAPMM06E'        '0105',
          ' '   'BDC_CURSOR'      'RM06E-BSTNR',
          ' '   'RM06E-BSTNR'     wa_ekko-ebeln,
          ' '   'BDC_OKCODE'      '/00',                      "OK code
          'X'   'SAPMM06E'        '0120',
          ' '   'BDC_CURSOR'      'EKPO-NETPR(01)',
          ' '   'EKPO-NETPR(01)'  p_newpr,
          ' '   'BDC_OKCODE'      '=BU'.                      "OK code
    Call transaction to update customer instalment text
      CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
             MESSAGES INTO messtab.
    Check if update was succesful
      IF sy-subrc EQ 0.
        ADD 1 TO gd_update.
        APPEND wa_ekko TO it_success.
      ELSE.
      Retrieve error messages displayed during BDC update
        LOOP AT messtab WHERE msgtyp = 'E'.
        Builds actual message based on info returned from Call transaction
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
               EXPORTING
                    msgid               = messtab-msgid
                    msgnr               = messtab-msgnr
                    msgv1               = messtab-msgv1
                    msgv2               = messtab-msgv2
                    msgv3               = messtab-msgv3
                    msgv4               = messtab-msgv4
               IMPORTING
                    message_text_output = w_textout.
        ENDLOOP.
      Build error table ready for output
        wa_error = wa_ekko.
        wa_error-err_msg = w_textout.
        APPEND wa_error TO it_error.
        CLEAR: wa_error.
      ENDIF.
    Clear bdc date table
      CLEAR: bdc_tab.
      REFRESH: bdc_tab.
    ENDFORM.                    " BDC_UPDATE
          FORM DYNPRO                                                   *
          stores values to bdc table                                    *
    -->  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.                               " DYNPRO
    *&      Form  DISPLAY_REPORT
          Display Report
    FORM display_report.
      FORMAT COLOR COL_NORMAL.
    Loop at data table
      LOOP AT it_success INTO wa_success.
        WRITE:/      sy-vline,
                (10) wa_success-ebeln, sy-vline,
                (11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
                (11) p_newpr, sy-vline.
        CLEAR: wa_success.
      ENDLOOP.
      WRITE:/ sy-uline(42).
      REFRESH: it_success.
      FORMAT COLOR COL_BACKGROUND.
    ENDFORM.                    " DISPLAY_REPORT
    *&      Form  DISPLAY_ERROR_REPORT
          Display error report data
    FORM display_error_report.
      LOOP AT it_error INTO wa_error.
        WRITE:/      sy-vline,
                (10) wa_error-ebeln, sy-vline,
                (11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
                (73) wa_error-err_msg, sy-vline.
      ENDLOOP.
      WRITE:/ sy-uline(104).
      REFRESH: it_error.
    ENDFORM.                    " DISPLAY_ERROR_REPORT
    *&      Form  DISPLAY_ERROR_HEADINGS
          Display error report headings
    FORM display_error_headings.
      SKIP.
      WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
      SKIP.
      WRITE:2 'The following records failed during update:'(008).
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(009), sy-vline,
              (11) 'Netpr'(010), sy-vline,
              (73) 'Error Message'(012), sy-vline.
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_NORMAL.
    ENDFORM.                    " DISPLAY_ERROR_HEADINGS

  • Hi guys please give me sample code for call transaction that handles error

    hi guys, please give me sample code for call transaction that handles error,
    please send me the sample code in which there should be all decleration part and everything, based on the sample code i will develop my code.
    please do help me as it is urgent.
    thanks and regards.
    prasadnn.

    Hi Prasad,
    Check this code.
    Source Code for BDC using Call Transaction
    *Code used to create BDC
    *& Report  ZBDC_EXAMPLE                                                *
    *& Example BDC program, which updates net price of item 00010 of a     *
    *& particular Purchase order(EBELN).                                   *
    REPORT  ZBDC_EXAMPLE  NO STANDARD PAGE HEADING
                          LINE-SIZE 132.
    Data declaration
    TABLES: ekko, ekpo.
    TYPES: BEGIN OF t_ekko,
        ebeln TYPE ekko-ebeln,
        waers TYPE ekko-waers,
        netpr TYPE ekpo-netpr,
        err_msg(73) TYPE c,
    END OF t_ekko.
    DATA: it_ekko  TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko  TYPE t_ekko,
          it_error TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_error TYPE t_ekko,
          it_success TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_success TYPE t_ekko.
    DATA: w_textout            LIKE t100-text.
    DATA: gd_update TYPE i,
          gd_lines TYPE i.
    *Used to store BDC data
    DATA: BEGIN OF bdc_tab OCCURS 0.
            INCLUDE STRUCTURE bdcdata.
    DATA: END OF bdc_tab.
    *Used to stores error information from CALL TRANSACTION Function Module
    DATA: BEGIN OF messtab OCCURS 0.
            INCLUDE STRUCTURE bdcmsgcoll.
    DATA: END OF messtab.
    *Screen declaration
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME
                                        TITLE text-001. "Purchase order Num
    SELECT-OPTIONS: so_ebeln FOR ekko-ebeln OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK block1.
    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME
                                        TITLE text-002. "New NETPR value
    PARAMETERS:  p_newpr(14)   TYPE c obligatory.  "LIKE ekpo-netpr.
    SELECTION-SCREEN END OF BLOCK block2.
    *START-OF-SELECTION
    START-OF-SELECTION.
    Retrieve data from Purchase order table(EKKO)
      SELECT ekkoebeln ekkowaers ekpo~netpr
        INTO TABLE it_ekko
        FROM ekko AS ekko INNER JOIN ekpo AS ekpo
          ON ekpoebeln EQ ekkoebeln
       WHERE ekko~ebeln IN so_ebeln AND
             ekpo~ebelp EQ '10'.
    *END-OF-SELECTION
    END-OF-SELECTION.
    Check data has been retrieved ready for processing
      DESCRIBE TABLE it_ekko LINES gd_lines.
      IF gd_lines LE 0.
      Display message if no data has been retrieved
        MESSAGE i003(zp) WITH 'No Records Found'(001).
        LEAVE TO SCREEN 0.
      ELSE.
      Update Customer master data (instalment text)
        LOOP AT it_ekko INTO wa_ekko.
          PERFORM bdc_update.
        ENDLOOP.
      Display message confirming number of records updated
        IF gd_update GT 1.
          MESSAGE i003(zp) WITH gd_update 'Records updated'(002).
        ELSE.
          MESSAGE i003(zp) WITH gd_update 'Record updated'(003).
        ENDIF.
    Display Success Report
      Check Success table
        DESCRIBE TABLE it_success LINES gd_lines.
        IF gd_lines GT 0.
        Display result report column headings
          PERFORM display_column_headings.
        Display result report
          PERFORM display_report.
        ENDIF.
    Display Error Report
      Check errors table
        DESCRIBE TABLE it_error LINES gd_lines.
      If errors exist then display errors report
        IF gd_lines GT 0.
        Display errors report
          PERFORM display_error_headings.
          PERFORM display_error_report.
        ENDIF.
      ENDIF.
    *&      Form  DISPLAY_COLUMN_HEADINGS
          Display column headings
    FORM display_column_headings.
      WRITE:2 ' Success Report '(014) COLOR COL_POSITIVE.
      SKIP.
      WRITE:2 'The following records updated successfully:'(013).
      WRITE:/ sy-uline(42).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(004), sy-vline,
              (11) 'Old Netpr'(005), sy-vline,
              (11) 'New Netpr'(006), sy-vline.
      WRITE:/ sy-uline(42).
    ENDFORM.                    " DISPLAY_COLUMN_HEADINGS
    *&      Form  BDC_UPDATE
          Populate BDC table and call transaction ME22
    FORM bdc_update.
      PERFORM dynpro USING:
          'X'   'SAPMM06E'        '0105',
          ' '   'BDC_CURSOR'      'RM06E-BSTNR',
          ' '   'RM06E-BSTNR'     wa_ekko-ebeln,
          ' '   'BDC_OKCODE'      '/00',                      "OK code
          'X'   'SAPMM06E'        '0120',
          ' '   'BDC_CURSOR'      'EKPO-NETPR(01)',
          ' '   'EKPO-NETPR(01)'  p_newpr,
          ' '   'BDC_OKCODE'      '=BU'.                      "OK code
    Call transaction to update customer instalment text
      CALL TRANSACTION 'ME22' USING bdc_tab MODE 'N' UPDATE 'S'
             MESSAGES INTO messtab.
    Check if update was succesful
      IF sy-subrc EQ 0.
        ADD 1 TO gd_update.
        APPEND wa_ekko TO it_success.
      ELSE.
      Retrieve error messages displayed during BDC update
        LOOP AT messtab WHERE msgtyp = 'E'.
        Builds actual message based on info returned from Call transaction
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
               EXPORTING
                    msgid               = messtab-msgid
                    msgnr               = messtab-msgnr
                    msgv1               = messtab-msgv1
                    msgv2               = messtab-msgv2
                    msgv3               = messtab-msgv3
                    msgv4               = messtab-msgv4
               IMPORTING
                    message_text_output = w_textout.
        ENDLOOP.
      Build error table ready for output
        wa_error = wa_ekko.
        wa_error-err_msg = w_textout.
        APPEND wa_error TO it_error.
        CLEAR: wa_error.
      ENDIF.
    Clear bdc date table
      CLEAR: bdc_tab.
      REFRESH: bdc_tab.
    ENDFORM.                    " BDC_UPDATE
          FORM DYNPRO                                                   *
          stores values to bdc table                                    *
    -->  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.                               " DYNPRO
    *&      Form  DISPLAY_REPORT
          Display Report
    FORM display_report.
      FORMAT COLOR COL_NORMAL.
    Loop at data table
      LOOP AT it_success INTO wa_success.
        WRITE:/      sy-vline,
                (10) wa_success-ebeln, sy-vline,
                (11) wa_success-netpr CURRENCY wa_success-waers, sy-vline,
                (11) p_newpr, sy-vline.
        CLEAR: wa_success.
      ENDLOOP.
      WRITE:/ sy-uline(42).
      REFRESH: it_success.
      FORMAT COLOR COL_BACKGROUND.
    ENDFORM.                    " DISPLAY_REPORT
    *&      Form  DISPLAY_ERROR_REPORT
          Display error report data
    FORM display_error_report.
      LOOP AT it_error INTO wa_error.
        WRITE:/      sy-vline,
                (10) wa_error-ebeln, sy-vline,
                (11) wa_error-netpr CURRENCY wa_error-waers, sy-vline,
                (73) wa_error-err_msg, sy-vline.
      ENDLOOP.
      WRITE:/ sy-uline(104).
      REFRESH: it_error.
    ENDFORM.                    " DISPLAY_ERROR_REPORT
    *&      Form  DISPLAY_ERROR_HEADINGS
          Display error report headings
    FORM display_error_headings.
      SKIP.
      WRITE:2 ' Error Report '(007) COLOR COL_NEGATIVE.
      SKIP.
      WRITE:2 'The following records failed during update:'(008).
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_HEADING.
      WRITE:/      sy-vline,
              (10) 'Purchase Order'(009), sy-vline,
              (11) 'Netpr'(010), sy-vline,
              (73) 'Error Message'(012), sy-vline.
      WRITE:/ sy-uline(104).
      FORMAT COLOR COL_NORMAL.
    ENDFORM.                    " DISPLAY_ERROR_HEADINGS
    Hope this resolves your query.
    Reward all the helpful answers.
    Regards

Maybe you are looking for

  • Need API for updating vacancy in "DateTrack History of Assignments"

    Hi Friends, I am updating organization,job,location and Grade through hr_assignment_api.update_emp_asg_criteria at assignment level. Here I want to update the vacancy Name located at "DateTrack History of Assignments". WHich API I need to use to upda

  • Unable to see server files in Jdeveloper

    Hi guys, I downloaded jdeveloper 10.1.3.3.0.3 and I am currently running R12 applications. I was able to get everything set up but for some reason I cannot server.xml files. I can see all the items under myprojects folder but the files unde myclasses

  • LIS Reporting

    Dear Gurus, I have configure LIS in the system, after posting the invoice I run the report, mark related checks in customer and in material master. System shows the correct amount of "selling" and "billing quantity" in report MC+E report. but the col

  • Is it possible to have the crop marks where you want when making a PDF?

    Is it possible to have the crop marks where you want when making a PDF? So if I have an Indesign document 84x55 with a 3mm bleed but I want a PDF from that document to crop at 85x55 (adding .5mm to the left and right of the PDF), the crop marks are o

  • Adobe After Effects CS6 Ram Preview Crash Problem

    Hey, Recently my AE cs6 has been crashing when I started to RAM preview and the message that shows up is. "After Effects error: Crash In Progress. last logged message was: <1948><ai.blit.pipe><2> HardwareBlitpipe Disenaged." Specs: AMB 8150 16 GB of