Error in BDC session for tcode MR21

Hello all,
I have to create one BDC session program for change in valuation price.
i have following input parameter :
     Plant  Article                           Price, Dec 2     Price unit
     0690  000000000906671600  00000021207  00100
     the price is  212,07   a decimal sign is not included
i have created one program but its not working.its giving runtime error CONVT_NO_NUMBER
Edited by: Sujeet Mishra on Apr 22, 2009 3:07 PM
LOOP AT it_final.
*perform open_dataset using dataset.
*perform open_dataset using p_file.
perform open_group.
*do.
*read dataset dataset into record.
*if sy-subrc <> 0. exit. endif.
perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
perform bdc_field       using 'BDC_CURSOR'
                              'MR21HEAD-BUDAT'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
*perform bdc_field       using 'MR21HEAD-BUDAT'
                             record-BUDAT_001.
perform bdc_field       using 'MR21HEAD-WERKS'
                              IT_FINAL-WERKS.
*perform bdc_field       using 'MR21HEAD-SCREEN_VARIANT'
                             record-SCREEN_VARIANT_003.
perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
perform bdc_field       using 'BDC_CURSOR'
                              'CKI_MR21_0250-NEWVALPR(01)'.
*perform bdc_field       using 'MR21HEAD-SCREEN_VARIANT'
                             record-SCREEN_VARIANT_004.
perform bdc_field       using 'CKI_MR21_0250-MATNR(01)'
                              IT_FINAL-MATNR.
*perform bdc_field       using 'CKI_MR21_0250-BWTAR(01)'
                             record-BWTAR_01_006.
*perform bdc_field       using 'CKI_MR21_0250-NEWVALPR(01)'
                             IT_FINAL-PRICE.
perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
perform bdc_field       using 'BDC_OKCODE'
                              '=SAVE'.
perform bdc_field       using 'BDC_CURSOR'
                              'CKI_MR21_0250-MATNR(02)'.
*perform bdc_field       using 'MR21HEAD-SCREEN_VARIANT'
                             record-SCREEN_VARIANT_008.
perform bdc_transaction using 'MR21'.
perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
*perform bdc_field       using 'BDC_CURSOR'
                             'MR21HEAD-BUDAT'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
*perform bdc_field       using 'MR21HEAD-BUDAT'
                             record-BUDAT_009.
perform bdc_field       using 'MR21HEAD-WERKS'
                              IT_FINAL-WERKS.
*perform bdc_field       using 'MR21HEAD-SCREEN_VARIANT'
                             record-SCREEN_VARIANT_011.
perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
perform bdc_field       using 'BDC_OKCODE'
                              '=ENTR'.
perform bdc_field       using 'BDC_CURSOR'
                              'CKI_MR21_0250-NEWVALPR(01)'.
*perform bdc_field       using 'MR21HEAD-SCREEN_VARIANT'
                             record-SCREEN_VARIANT_012.
perform bdc_field       using 'CKI_MR21_0250-MATNR(01)'
                              IT_FINAL-MATNR.
*perform bdc_field       using 'CKI_MR21_0250-BWTAR(01)'
                             record-BWTAR_01_014.
perform bdc_field       using 'CKI_MR21_0250-NEWVALPR(01)'
                              IT_FINAL-PRICE.
perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
perform bdc_field       using 'BDC_OKCODE'
                              '=SAVE'.
perform bdc_field       using 'BDC_CURSOR'
                              'CKI_MR21_0250-MATNR(02)'.
*perform bdc_field       using 'MR21HEAD-SCREEN_VARIANT'
                             record-SCREEN_VARIANT_016.
perform bdc_transaction using 'MR21'.
*enddo.
perform close_group.
*perform close_dataset using dataset.
*perform close_dataset using p_file.
ENDLOOP.
Edited by: Sujeet Mishra on Apr 22, 2009 3:09 PM
Edited by: Sujeet Mishra on Apr 23, 2009 5:56 AM

Hello
my amount field code
perform bdc_field       using 'CKI_MR21_0250-NEWVALPR(01)'
                                    IT_FINAL-NEWVALPR.
is giving dump.
my declaration are like below :
Generated data section with specific formatting - DO NOT CHANGE  ***
data: begin of record,
data element: BUDAT
        BUDAT_001(010),
data element: WERKS_D
        WERKS_002(004),
data element: SCREEN_VARIANT
        SCREEN_VARIANT_003(030),
data element: SCREEN_VARIANT
        SCREEN_VARIANT_004(030),
data element: MATNR
        MATNR_01_005(018),
data element: BWTAR_D
        BWTAR_01_006(010),
data element: VALPR
        NEWVALPR_01_007(015),
data element: SCREEN_VARIANT
        SCREEN_VARIANT_008(030),
      end of record.
End generated data section ***
data: begin of it_final occurs 0,
        BUDAT TYPE MR21HEAD-BUDAT,
        WERKS TYPE MR21HEAD-WERKS,
        SCREEN_VARIANT TYPE MR21HEAD-SCREEN_VARIANT,
        SCREEN_VARIANT_004 TYPE MR21HEAD-SCREEN_VARIANT,
        MATNR TYPE CKI_MR21_0250-MATNR,
        BWTAR TYPE CKI_MR21_0250-BWTAR,
        NEWVALPR TYPE CKI_MR21_0250-NEWVALPR,
        SCREEN_VARIANT_008 TYPE MR21HEAD-SCREEN_VARIANT,
      end of it_final.
please guide me.
thanks,
sujeet
Edited by: Sujeet Mishra on Apr 23, 2009 12:44 PM

Similar Messages

  • Error in BDC session Insert.....

    Hi All,
    Guys iam running BDC pgm for MEK1 create condition records transaction and i get an error while executing through BDC_INSERT. Its an internal error with text "Error in BDC session Insert..".The text file iam using contains 26 line items for the first contract created earlier and 30 line items for the second record. My concern is it only happens for this text file with multiple or more line items.
    While debugging i have observed that after the session has been created the first bdc insert goes well for the first header record and then it fails for the second record with an internal error "Error in BDC session Insert..".
    Does anyone have enountered such issue before or is it related to limited number of line items in MEK1 transaction.
    Any help would be appreciated.
    Thanks,
    Avinash

    report ZSESSION1
           no standard page heading line-size 255.
    *include bdcrecx1.
    DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE .
    TYPES: BEGIN OF TYP_STU,
                   Z_STUDID TYPE ZSTUD1-Z_STUDID,
                   Z_STUDNAME TYPE ZSTUD1-Z_STUDNAME,
                   Z_STUDAGE TYPE ZSTUD1-Z_STUDAGE,
              END OF TYP_STU.
    DATA: IT_STU TYPE STANDARD TABLE OF TYP_STU,
              GW_STU TYPE TYP_STU,
              V_PATH TYPE STRING.
      PARAMETERS  SUREN TYPE  IBIPPARMS-PATH OBLIGATORY.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR  SUREN .
         PERFORM  GETFILE USING SUREN.
    V_PATH = SUREN.
    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        FILENAME                      =  V_PATH
      FILETYPE                      = 'ASC'
      HAS_FIELD_SEPARATOR           = ' '
      HEADER_LENGTH                 = 0
      READ_BY_LINE                  = 'X'
      DAT_MODE                      = ' '
      CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
      REPLACEMENT                   = '#'
      CHECK_BOM                     = ' '
      VIRUS_SCAN_PROFILE            =
      NO_AUTH_CHECK                 = ' '
    IMPORTING
      FILELENGTH                    =
      HEADER                        =
      TABLES
        DATA_TAB                      =  IT_STU
    EXCEPTIONS
       FILE_OPEN_ERROR               = 1
       FILE_READ_ERROR               = 2
       NO_BATCH                      = 3
       GUI_REFUSE_FILETRANSFER       = 4
       INVALID_TYPE                  = 5
       NO_AUTHORITY                  = 6
       UNKNOWN_ERROR                 = 7
       BAD_DATA_FORMAT               = 8
       HEADER_NOT_ALLOWED            = 9
       SEPARATOR_NOT_ALLOWED         = 10
       HEADER_TOO_LONG               = 11
       UNKNOWN_DP_ERROR              = 12
       ACCESS_DENIED                 = 13
       DP_OUT_OF_MEMORY              = 14
       DISK_FULL                     = 15
       DP_TIMEOUT                    = 16
       OTHERS                        = 17
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
       CLIENT                    = SY-MANDT
      DEST                      = FILLER8
       GROUP                     =  'SESSION1'
      HOLDDATE                  = FILLER8
       KEEP                      =  'X'
       USER                      = SY-UNAME
       RECORD                    = FILLER1
       PROG                      = SY-CPROG
      DCPFM                     = '%'
      DATFM                     = '%'
    IMPORTING
      QID                       =
    EXCEPTIONS
      CLIENT_INVALID            = 1
      DESTINATION_INVALID       = 2
      GROUP_INVALID             = 3
      GROUP_IS_LOCKED           = 4
      HOLDDATE_INVALID          = 5
      INTERNAL_ERROR            = 6
      QUEUE_ERROR               = 7
      RUNNING                   = 8
      SYSTEM_LOCK_ERROR         = 9
      USER_INVALID              = 10
      OTHERS                    = 11
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    START-OF-SELECTION.
    LOOP AT IT_STU INTO GW_STU.
    REFRESH BDCDATA.
    *perform open_group.
    perform bdc_dynpro      using 'SAPMSRD0' '0102'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RSRD1-TBMA_VAL'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=EDIT'.
    perform bdc_field       using 'RSRD1-TBMA'
                                  'X'.
    perform bdc_field       using 'RSRD1-TBMA_VAL'
                                  'ZSTUD1'.
    perform bdc_dynpro      using 'SAPLSD41' '2200'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'DD02D-DDTEXT'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=TDED'.
    perform bdc_field       using 'DD02D-DDTEXT'
                                  'Stud details'.
    perform bdc_dynpro      using '/1BCDWB/DBZSTUD1' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'ZSTUD1-Z_STUDAGE'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=SAVE'.
    perform bdc_field       using 'ZSTUD1-Z_STUDID'
                                  GW_STU-Z_STUDID .
    perform bdc_field       using 'ZSTUD1-Z_STUDNAME'
                                  GW_STU-Z_STUDNAME .
    perform bdc_field       using 'ZSTUD1-Z_STUDAGE'
                                 GW_STU-Z_STUDAGE .
    perform bdc_dynpro      using '/1BCDWB/DBZSTUD1' '0101'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/EBACK'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'ZSTUD1-Z_STUDID'.
    perform bdc_dynpro      using 'SAPLSD41' '2200'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'DD02D-DDTEXT'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=WB_BACK'.
    perform bdc_field       using 'DD02D-DDTEXT'
                                  'Stud details'.
    perform bdc_dynpro      using 'SAPMSRD0' '0102'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RSRD1-TBMA_VAL'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=BACK'.
    perform bdc_field       using 'RSRD1-TBMA'
                                  'X'.
    perform bdc_field       using 'RSRD1-TBMA_VAL'
                                  'ZSTUD1'.
    *perform bdc_transaction using 'SE11'.
    CALL FUNCTION 'BDC_INSERT'
    EXPORTING
       TCODE                  = 'SE11'
      POST_LOCAL             = NOVBLOCAL
      PRINTING               = NOPRINT
      SIMUBATCH              = ' '
      CTUPARAMS              = ' '
      TABLES
        DYNPROTAB              = BDCDATA
    EXCEPTIONS
      INTERNAL_ERROR         = 1
      NOT_OPEN               = 2
      QUEUE_ERROR            = 3
      TCODE_INVALID          = 4
      PRINTING_INVALID       = 5
      POSTING_INVALID        = 6
      OTHERS                 = 7
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    ENDLOOP.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
    EXCEPTIONS
       NOT_OPEN          = 1
       QUEUE_ERROR       = 2
       OTHERS            = 3
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    *ENDLOOP.
    *perform close_group.
    *&      Form  bdc_dynpro
          text
         -->P_0207   text
         -->P_0208   text
    *FORM bdc_dynpro  USING    VALUE(P_0207)
                             VALUE(P_0208).
    *ENDFORM.                    " bdc_dynpro
    FORM BDC_DYNPRO USING PROGRAM DYNPRO.
      CLEAR BDCDATA.
      BDCDATA-PROGRAM  = PROGRAM.
      BDCDATA-DYNPRO   = DYNPRO.
      BDCDATA-DYNBEGIN = 'X'.
      APPEND BDCDATA.
    ENDFORM.                    "BDC_DYNPRO
    *&      Form  bdc_field
          text
         -->P_0212   text
         -->P_0213   text
    *FORM bdc_field  USING    VALUE(P_0212)
                            VALUE(P_0213).
    *ENDFORM.                    " bdc_field
    FORM BDC_FIELD USING FNAM FVAL.
      CLEAR BDCDATA.
      BDCDATA-FNAM = FNAM.
      BDCDATA-FVAL = FVAL.
      APPEND BDCDATA.
    ENDFORM .
    FORM GETFILE USING SUREN.
         CALL FUNCTION 'F4_FILENAME'
          EXPORTING
            PROGRAM_NAME        = SYST-CPROG
            DYNPRO_NUMBER       = SYST-DYNNR
          IMPORTING
            FILE_NAME           = SUREN.
            ENDFORM.

  • Report errors from BDC sessions

    Hi Experts,
    I am writing a BDC program that uses the session method for  tcode XD02 
    and after which i am using SUBMIT RSBDCSUB to schedule the sessions as a background job.
    Now if i get errors in the sessions, i can see them in SM35 but
    how do i report them on my report for the user?
    What should i code in my program after the SUMBIT RSBDCSUB to report the errors <b>without using</b> CALL Transaction.
    Thanks
    Dany

    Hi,
    Use addition EXPORTING LIST TO MEMORY with SUBMIT <i>program_name</i> AND RETURN.
    It will export the log to the ABAP  memory. After the session is processed, control will come back to the program. Then, use function module 'LIST_FROM_MEMORY' to get the log into an internal table. Once, your internal table is populated, display it as a list for the user.
    Reward points if the answer is helpful.
    Regards,
    Mukul

  • How to handle the errors in BDC Session method

    Hi All,
    I am uploading Material Master (MM01) records using BDC Session Method.my problem is when i am running the program, all the error records are going to flat file.how can i correcting the error records and after correction how can i re-process the error records.tell me with example.
    i have around 70,000 records in my flat file.

    Hi,
    I am attaching few threads.Hope these will help you.
    If there are any error records in session, all those error records will get poulated in log .SM35 and after the session is completed , u can see error records which can be corrected and reprocessed again
    We have the structures BDCLD and BDCLM, which will capture the log details inthe session. Firstly, sesssion should be processed. After that log will be created. Then caputure the information into an internal table using BDCLM and BDCLD.
    and refer the link.
    error correction in bdc session
    regards
    Madhu

  • Error in BDC session processing

    hi all,
    I am running the BDC session method. while running the session the interface throws warning message. If it gives more than one warning message in background the session goes into error. is there any way to skip these and still continue the processing of session in background

    Praveen,
    By default all the warnings are suppressed irrespective of the number of warnings.
    You must be encountering a error not a warning
    Regards,
    Ravi
    Note : Please mark the helpful answers

  • BDC session method tcode

    hi
    can anyone give me q asked on BDc session metod and call transtion method
    and what is tcode to check the session ..created?
    regards
    Arora

    Hi,
    Check this links..
    http://www.geekinterview.com/Interview-Questions/SAP-R-3/BDC
    http://www.akaas.net/faq/sap/bdc-questions.htm
    http://techpreparation.com/sap-bdc-interview-questions-answers.htm
    http://www.ittestpapers.com/articles/597/1/SAP-BDC-Interview-Questions-and-Answers/Page1.html
    Regards,
    Omkar.

  • Error in BDC program for Block vendor in SAP R/3

    Hello friends,
    I wrote a BDC program to block vendor using FK02.
    When I debug the program in <b>No screen</b> mode
    the program gives a error 'No batch input data for screen SAPMSSY3 0131.
    But the screen name and screen number is not available in the program.
    When I execute without debugging  in No screen mode, the program works correctly.
    When I run in ALL screen mode, the program works correctly and the program does not prompt for SAPMSSY3 0131 screen.
    Is there any solution for this problem.

    check this
    ... MODE mode
    Effect
    The processing mode can take the following values:
    'A' Display screen
    'E' Display only if an error occurs
    'N' Do not display
    <b>'P' Do not display; debugging possible</b>
    If the MODE addition is omitted, then the processing mode is 'A'.
    If a screen is displayed in processing mode 'E' because the system reached the end of the BDC data, the system automatically switches to processing mode 'A'.
    If breakpoints are set in a transaction tcod called using the CALL TRANSACTION tcod USING itab variant, these are not actually reached in 'N' mode. The system tries to insert data in the Debugger screen; the call ends with SY-SUBRC = 1001 and the message "Batch input data is not available for screen SAPMSSY3 0131" (S 00 344).
    Conversely, in 'P' mode, transaction screens are processed in the background (as in 'N' mode) and debugging is possible.
    Regards
    Prabhu

  • ERROR IN BDC SESSION BACK GROUND ( USING PP03 T.CODE)

    Hi Experts,
    When i am executing the session ( pp03 T.Code) ,it is working fine in fore ground as well as in display errors mode. But it is not working in back ground mode.
    it is raising the exception ( cntl-system-error).
    I used flat file which is in the presentation server . I accessed it by gui_upload Function Module.
    <b> I am also getting the error using data sets . After upload the presentation server data into one internal table .I sent it to application server using open data set ( transfer ) , after that i read the application server data using open dataset ( read )
    into another internal table ( i declared with same structure of flat file ) .</b>
    But this time also it is giving same error ( runtime exception).
    Please tell me how can i handle using datasets .  Its Very urgentttttttt
    Please any body help meee ( If any one worked on this (pp03 T.code) ) .
    Send the code  or Inform the full detailsss as soon as possibleeee
    regards ,
    dattu malge.

    Hi,
    Go to the transaction SM35 and select your session and then click the Process Button.
    Here you select the Processing Mode as "Background".
    It is not possible to execute the same session by more than one user at a same time.
    RSBDCSUB is used to automate the processing of Batch input session.
    Cheers,
    Hakim

  • Problem in doing BDC recording for Tcode FAGLSKF

    Hi All,
    I need to make postings for Statistical key figures. For this I need to make postings using transaction FAGLSKF.
    Now my problem is that when I try to make recording for transaction FAGLSKF I could not see the values recorded for ITEM Data Table control.
    Any one having any idea as what I am missing. Your suggestions would be really helpful.
    Regards,
    Lalit

    Hi Poorna,
    Thanks a lot for the valueable feedback.
    I checked the FMs mentioned by you. These FMs make the SKF posting but these FMs do not perform any kind of validations.
    Like for example if I use tcode FAGLSKF and try to make some posting. In case I am giving some invalid input to this transaction ( e.g. wrong Statistical Key Figure Value ) , this t code does not allow us to post and immediateley thorows some error.
    Where as I use FM FAGL_FAGLSKF_PN_POST, this FM makes an entry in the table FAGLSKF_PN without any validations.
    This FM simply insert an entry to the table FAGLSKF_PN.
    Any Idea how to overcome this. I want to make the validations in the same way as done using Tcode FAGLSKF.
    Thanks a lot for your valueable inputs.
    Regards,
    Lalit

  • Error in bdc uploading for transaction F-02

    Hi all,
           Iam uploading transactional data for the transaction F-02 using BDC call transaction.
    I  have recorded all the screens of F-02 and internal table with fields also declared.
    While running the program, it is showing the error saying -- " Input value is longer than screen field "
    In debugging, Iam getting all the data from flat file into the internal table.
    Iam unable to identify where it has gone wrong.
    Can anybody look into it.
    Thanks and Regards,
    Murali Krishna .T

    Moderator message - Please search before asking - post locked
    Rob

  • Warning while processing the BDC session for ME11 - create info records

    Hi,
    I have succesfully created a BDC recording(SHDB) for ME11 transaction. but when I am trying to process the session(SM35) with file having correct data, I an getting a warning message" Please check Unit of measure and conversion factor" eventhogh correct values are being populated in the respective fields. Status of the run is shown as INCORRECT.
        Any pointers on avoiding this warning message would be appreciated.
    PS: I have tried putting an extra OK CODE with enter button, dint work.

    ...try to use transaction SXDA_TOOLS and Object type: BUS3003
    Here you will find the standard batch-input program RM06IBI0

  • Creating session for the Error records

    Hi Guys,
      Iam posting some data using the Custom FM. If i get any errors out of that i need to create a BDC session for those errors.Can anyone throw some light on how to acheive this.
    Regards,
    Kittu.

    HI,
    check this code
    report  zsh_recording_fk01                      .
    tables : lfa1  .  " Vendor Master.
      I N T E R N A L T A B L E - D E C L A R A T I O N                  *
    data : begin of it_tab occurs 0,
               lifnr(16),        "account number of vendor
               ktokk(4),         "Vendor Number
               anred(15),        "Account Group
               name1(35),        "Name
               sortl(10),        "Sort field
               land1(3) ,        "Land
               spras(1),         "Language Key
               kunnr(10),        "customer number
               banks(3),         "Bank country key
               bankl(15),        "Bank Key
               bankn(18),        "Bank Account Number
               koinh(60),        "Account Holder Name
               banka(60),        "Name of bank
               provz(3),         "region
    end of it_tab.
    data : begin of it_tab1 occurs 0,
               banks(3),         "Bank country key
               bankl(15),        "Bank Key
               bankn(18),        "Bank Account Number
               koinh(60),        "Account Holder Name
               banka(60),        "Name of bank
               provz(3),         "region
    end of it_tab1.
    DATA:it_BDCtab LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    ERROR MESSAGE TABLE
    DATA:it_MSGtab LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
    data: program type BDCDATA-PROGRAM,
          dynpro  type BDCDATA-dynpro,
          fnam    type BDCDATA-fnam,
          fval    type BDCDATA-fval.
                  S E L E C T I O N  -  S C R E E N                      *
    selection-screen : begin of block bl1 with frame.
    parameter        : p_file type rlgrap-filename default
    'C:\Vendor.txt.txt' obligatory,
                       p_file1 type rlgrap-filename default
    'C:\Vendor1.txt.txt' obligatory.
    selection-screen : end of block bl1.
               A T  S E L E C T I O N  -  S C R E E N                    *
    at selection-screen on value-request for p_file.
    to get F4 help for p_file
      perform f4_get_help using p_file.
    to get F4 help for p_file
       perform f4_get_help1 using p_file1.
                S T A R T   O F   S E L E C T I O N                      *
    start-of-selection.
    Uploading data from flat file into it_tab
      perform bdc_upload.
      perform bdc_upload1.
      perform populate_bdc.
                 E N D    O F   S E L E C T I O N                        *
    end-of-selection.
    displaying fields which r uploaded from flat file.
      perform display_report.
                 T O P  _  O F _  P A G E                                *
    top-of-page.
    to display header in the report
      perform header.
    *&      Form  f4_get_help
          text
         -->P_P_FILE  text
    form f4_get_help  using    p_p_file.
      call function 'F4_FILENAME'
       exporting
         program_name        = syst-cprog
         dynpro_number       = syst-dynnr
      FIELD_NAME          = ' '
       importing
         file_name           =  p_p_file.
    endform.                    " f4_get_help
    *&      Form  bdc_upload
          text
    -->  p1        text
    <--  p2        text
    form bdc_upload .
      data: v_file type string.
      v_file = p_file.
      call function 'GUI_UPLOAD'
        exporting
          filename                      = v_file
          filetype                      = 'ASC'
      HAS_FIELD_SEPARATOR           = ' '
      HEADER_LENGTH                 = 0
      READ_BY_LINE                  = 'X'
      DAT_MODE                      = ' '
      CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
      REPLACEMENT                   = '#'
      CHECK_BOM                     = ' '
    IMPORTING
      FILELENGTH                    =
      HEADER                        =
        tables
          data_tab                      = it_tab
       exceptions
         file_open_error               = 1
         file_read_error               = 2
         no_batch                      = 3
         gui_refuse_filetransfer       = 4
         invalid_type                  = 5
         no_authority                  = 6
         unknown_error                 = 7
         bad_data_format               = 8
         header_not_allowed            = 9
         separator_not_allowed         = 10
         header_too_long               = 11
         unknown_dp_error              = 12
         access_denied                 = 13
         dp_out_of_memory              = 14
         disk_full                     = 15
         dp_timeout                    = 16
         others                        = 17.
      if sy-subrc <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
    endform.                    " bdc_upload
    *&      Form  display_report
          text
    -->  p1        text
    <--  p2        text
    form display_report .
      uline 1(86).
      loop at it_tab .
        format color 2.
        write :/1   sy-vline,
                2   it_tab-lifnr,
                12  it_tab-ktokk ,
                18  it_tab-anred ,
                30  it_tab-name1 ,
                55  it_tab-sortl ,
                58  it_tab-land1 ,
                72  it_tab-spras ,
                76  it_tab-kunnr ,
                88  it_tab-banks ,
                94  it_tab-bankl ,
                112 it_tab-bankn ,
                132 it_tab-koinh ,
                194 it_tab-banka ,
                256 it_tab-provz ,
                260 sy-vline.
      endloop.
      uline 1(86).
    endform.                    " display_report
    *&      Form  header
          text
    -->  p1        text
    <--  p2        text
    form header .
      uline 1(86).
      format color col_heading.
      write :/1   sy-vline,
              2   'VEN.NO',
              12  'ACC' ,
              18  'TITLE' ,
              30  'NAME' ,
              55  'ST',
              58  'LAND' ,
              72  'L' ,
              76  'CUSTNO',
              88  'CKI',
              94  'BANKKEY',
              112 'B.NO',
              132 'ACC HOLDER NAME',
              194 'BANK NAME',
              256 'reg',
              260 sy-vline.
    endform.                    " header
    *&      Form  populate_bdc
          text
    form populate_bdc .
    loop at it_tab.
      perform build_screen_details using 'SAPMF02K' '0105'.
      perform build_fields using: 'BDC_OKCODE' '/00',
                                  'RF02K-LIFNR' it_tab-lifnr,
                                  'RF02K-KTOKK' it_tab-ktokk.
      perform build_screen_details using 'SAPMF02K'     '0110'.
      perform build_fields using:    'BDC_OKCODE' '/00',
                                   'LFA1-ANRED'  it_tab-anred,
                                   'LFA1-NAME1'  it_tab-name1,
                                   'LFA1-SORTL'  it_tab-sortl,
                                   'LFA1-LAND1'  it_tab-land1,
                                   'LFA1-SPRAS'  it_tab-spras.
      perform build_screen_details using 'SAPMF02K'     '0120'.
      perform build_fields using:    'BDC_OKCODE' '/00'.
      perform build_screen_details using 'SAPMF02K'     '0130'.
      perform build_fields using:    'BDC_OKCODE' '=BANK',
                                     'LFBK-BANKS(01)' it_tab-banks,
                                     'LFBK-BANKL(01)' it_tab-bankl,
                                     'LFBK-BANKN(01)' it_tab-bankn,
                                     'LFBK-KOINH(01)' it_tab-koinh.
      perform build_screen_details using 'SAPLBANK'     '0100'.
      perform build_fields using:    'BDC_OKCODE' '=ENTR',
                                     'BNKA-BANKA'     it_tab-banka,
                                     'BNKA-PROVZ'       it_tab-provz.
      perform build_screen_details using 'SAPMF02K'     '0130'.
      perform build_fields using:    'BDC_OKCODE' '=UPDA'.
    endloop.
      call transaction 'FK01' using it_bdctab mode 'A' update
      'S' messages into it_msgtab.
    clear it_bdctab.
    refresh it_bdctab.
    loop at it_msgtab.
    perform format_message.
    endloop.
    endform.                    " populate_bdc
    *&      Form  build_screen_details
          text
    form build_screen_details  using    p_program type BDCDATA-PROGRAM
                                        p_dynpro  type BDCDATA-dynpro.
      it_BDCtab-PROGRAM  = p_program.    " Program Name
      it_BDCtab-DYNPRO   = p_dynpro.     " Screen Number
      it_BDCtab-DYNBEGIN = 'X'.          " New screen
      Append it_bdctab.
      clear it_bdctab.
    endform.                    " build_screen_details
    *&      Form  build_fields
          text
    form build_fields  using    p_fnam
                                p_fval.
      it_BDCtab-FNAM     = p_fnam.
      it_BDCtab-FVAL     = p_fval.
      Append it_bdctab.
      clear  it_bdctab.
    endform.                    " build_fields
    *&      Form  format_message
          text
    -->  p1        text
    <--  p2        text
    form format_message .
    call function 'FORMAT_MESSAGE'
    EXPORTING
       ID              = SY-MSGID
       LANG            = sy-langu
       NO              = SY-MSGNO
       V1              = SY-MSGV1
       V2              = SY-MSGV2
       V3              = SY-MSGV3
       V4              = SY-MSGV4
    IMPORTING
       MSG             = it_msgtab
    EXCEPTIONS
       NOT_FOUND       = 1
       OTHERS          = 2
    if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    endform.                    " format_message
    *&      Form  bdc_upload1
          text
    -->  p1        text
    <--  p2        text
    form bdc_upload1 .
    data : v_file1 type string.
    v_file1 = p_file1.
    call function 'GUI_UPLOAD'
      exporting
        filename                      = v_file1
       FILETYPE                      = 'ASC'
      HAS_FIELD_SEPARATOR           = ' '
      HEADER_LENGTH                 = 0
      READ_BY_LINE                  = 'X'
      DAT_MODE                      = ' '
      CODEPAGE                      = ' '
      IGNORE_CERR                   = ABAP_TRUE
      REPLACEMENT                   = '#'
      CHECK_BOM                     = ' '
    IMPORTING
      FILELENGTH                    =
      HEADER                        =
      tables
        data_tab                      = it_tab1
    EXCEPTIONS
       FILE_OPEN_ERROR               = 1
       FILE_READ_ERROR               = 2
       NO_BATCH                      = 3
       GUI_REFUSE_FILETRANSFER       = 4
       INVALID_TYPE                  = 5
       NO_AUTHORITY                  = 6
       UNKNOWN_ERROR                 = 7
       BAD_DATA_FORMAT               = 8
       HEADER_NOT_ALLOWED            = 9
       SEPARATOR_NOT_ALLOWED         = 10
       HEADER_TOO_LONG               = 11
       UNKNOWN_DP_ERROR              = 12
       ACCESS_DENIED                 = 13
       DP_OUT_OF_MEMORY              = 14
       DISK_FULL                     = 15
       DP_TIMEOUT                    = 16
       OTHERS                        = 17
    if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    endif.
    endform.                    " bdc_upload1
    *&      Form  f4_get_help1
          text
         -->P_P_FILE1  text
    form f4_get_help1  using    p_p_file1.
    call function 'F4_FILENAME'
    EXPORTING
       PROGRAM_NAME        = SYST-CPROG
       DYNPRO_NUMBER       = SYST-DYNNR
      FIELD_NAME          = ' '
    IMPORTING
       FILE_NAME           = p_p_file1
    endform.                    " f4_get_help1
    Regards,
    Laxmi

  • Passing BAPI  Error Messages to BDC  Session.

    Hi,
    Can any one drive the idea how to convert rather passing BAPI error messages into BDC session.
    regards.

    Naveen,
    I am sure you already have the logic of "If the call transaction is errored out you create a BDC session for the same data".
    Now, when your BAPI fails, irrespective of the error, you need to build the BDCDATA table and pass the data to the session. So, I don't you really need to know the errors and pass them to the BDC Session.
    Check the RETURN table of the BAPI, if it has got E / A / X error types then you can build the BDCDATA table and create the session.
    Regards.
    Ravi
    Note : Please mark the helpful answers and close the thread if the issue is resolved.

  • BDC Session Saves Data Only in Foreground

    I have created a bdc program to create an SM35 session of CA02.  The wierd thing is that the session will run in background with no errors, but the data is not updated.  If I run the session in foreground the data is updated.  Have I overlooked something simple?

    To see what is going on, I commented out the save at the end to force it to error out.  If I run the session in foreground the data is changed.  If I run it in display errors only mode, the data is not changed.  So it seems not to have anything to do with the save at the end.  Perhaps it is now appropriate to post some of the code.
    After the data file is uploaded into the itab and the bdc group has been created, for each routing group I do the following:
      PERFORM dynpro USING:
    * ***   Initial Screen   ***
          'X'   'SAPLCPDI'       '1010',
          ' '   'RC271-PLNNR'    gk_rec-groupnum,
          ' '   'BDC_OKCODE'     '/00',
    * *** Header Overview  ***
          'X'   'SAPLCPDI'       '1200',
          ' '   'BDC_OKCODE'     'MTUE'.     "open material allocation screen
    Then for each material allocation the data file says to delete:
      PERFORM dynpro USING:
    * *** Material Allocation ***
          'X'   'SAPLCZDI'         '1010',
          ' '   'RC27X-ENTRY_ACT'  gv_entry,   "gv_entry holds row number to delete
          ' '   'BDC_OKCODE'       'ENT1',       "position button
          'X'   'SAPLCZDI'         '1010',
          ' '   'BDC_CURSOR'       'MAPL-MATNR(01)',  "place cursor on the line to delete
          ' '   'BDC_OKCODE'       'LOE',                      "delete line
          'X'   'SAPLSPO1'         '0100',
          ' '   'BDC_OKCODE'       'YES'.                      "confirm dialog
    then at the end of the session:
      PERFORM dynpro USING:
            'X'   'SAPLCZDI'       '1010',
            ' '   'BDC_OKCODE'     'BACK', "leave material allocation screen
            'X'   'SAPLCPDI'       '1200',
            ' '   'BDC_OKCODE'     'BU'.  "save
    Then, I insert into the bdc session using tcode ca02.  All this given the following subroutine:
    FORM dynpro USING p_dynbegin TYPE any p_name TYPE any p_value TYPE any.
      CLEAR gk_bdc_tab.
      IF p_dynbegin = 'X'.
        MOVE:  p_name  TO gk_bdc_tab-program,
               p_value TO gk_bdc_tab-dynpro,
               'X'   TO gk_bdc_tab-dynbegin.
      ELSE.
        MOVE:  p_name  TO gk_bdc_tab-fnam,
               p_value TO gk_bdc_tab-fval.
      ENDIF.
      APPEND gk_bdc_tab TO gt_bdc_tab.
    ENDFORM.
    It seems that the cursor isn't specifying the line to delete when run in background.

  • 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.

Maybe you are looking for