Skip to Content
author's profile photo Former Member
Former Member

hi

How do you send files to the legacy systems from SAP and vice versa? How does one know that the legacy files have come on to the SAP server you are working on?

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

1 Answer

  • author's profile photo Former Member
    Former Member
    Posted on Jan 29, 2008 at 09:59 AM

    for both these u have different methods..

    for transferring data from SAP to legacy u can use BAPI

    and for transferring data from legacy to SAP u can use BDC

    Now in respect of BDC i can give u some details.

    BDC or Batch Input Program Tips and Tricks

    What is BDC?

    Batch Data Communication or BDC is a batch interfacing technique that SAP developed. It is mainly used for uploading data into the SAP R/3 system. BDC works by simulating the user input from transactional screen via an ABAP program.

    The data input data file will come in the form of a flat file which the user save as file type txt file or prn file from the Microsoft Excel program. An Abaper will create a program to read the text file and upload into the SAP system.

    Normally, the tcode SHDB will be used to record the transaction code the user used. After, the simulation, the Abaper can generate a sample program and modify from there. It makes the programming easier and faster.

    Learning BDC Programming

    I want to learn how to upload data using BDC. If I have a excel data file how will upload it using BDC. I don't know the full process of doing it, if someone help me in this. I want it using BDC session process and processing that session. I was trying to upload material master other day. But could not follow the process of uploading using BDC though I know LSMW. Please explain me the BDC process in details with examples.

    For a BDC upload you need to write a program which created BDC sessions.

    Steps:

    1. Work out the transaction you would use to create the data manually.

    2. Use transaction SHDB to record the creation of one material master data.

    Click the New recording button or the Menu - Recording - Create

    3. Save the recording, and then go back a screen and go to the overview.

    4. Select the recording and click on Edit - Create Program. Give the program a Z name, and select transfer from recording.

    5. Edit the program. You will see that all the data you entered is hard-coded into the program. You need to make the following changes:

    5.1 After the start-of-selection, Call ws_upload to upload the file (the excel file needs to be saved as TAB separated).

    5.2 After the open-group, Loop on the uploaded data. For each line, perform validation checks on the data, then modify the perform bdc_field commands to use the file data.

    5.3. After perform bdc_transaction, add the endloop.

    Execute the program. It will have options to create a batch session or to process directly.

    These are all my finds . Might be it will be useful to you.

    Direct call of transactions, session handling:

    /nxxxx This terminates the current transaction, and starts transaction xxxx

    /n This terminates the transaction. This generally corresponds to pressing F15 to go back.

    /nend This termiantes all separate sessions and logs off (corresponds to System - Logoff).

    /nex This terminates all separate sessions and logs off immediately (without any warning!).

    /oxxxx This opens a new session and starts transaction xxxx in This session.

    /o This lists existing sessions and allows deletion or opening of a new session.

    /i This terminates the current session (corresponds to System End

    /i1, /i2,... This terminates the session with the number given.

    .xyzw Fast path: 'xyzw' refers to the underlined letters in the menus. This type of navigation is uncommon and is provided more for emergencies (such as a defective mouse).

    Batch

    The following commands can be entered in correction mode ('Process in foreground' or 'Display errors only') when processing a batch input session:

    /n This terminates the current batch input transaction and characterizes it as

    /bdel This deletes the current batch input transaction.

    /bend This terminates batch input processing and sets the session to Failed

    /bda This switches from Display errors only to Process in foreground

    /bde This switches from Process in foreground to Display errors only

    ABAP/4

    /h This switches into debugging mode.

    /hs This switches into debugging mode and activates the debugging of system functions.

    Buffer

    WARNING: Resetting buffers can significantly change the performance of the entire system for a long time.

    It should therefore only be used where there is a good reason tdso. As of release 3.0B system administator authorization is required (authorization object (S_ADMI_FCD). The action is noted in the system log.

    /$SYNC This resets all buffers of the application server

    /$CUA This resets the CUA buffer of the application server

    /$TAB This resets the TABLE buffers of the application server

    /$NAM This resets the nametab buffer of the application server

    /$DYNP This resets the screen buffer of the application server

    What is recording?

    As the word record implies, it mean recording the keystroke of the user input of a SAP transaction screen.

    Why it is used?

    It is normally used for mass update or uploading of data to the system.

    What is its need?

    It help to save time for the users who need to mass change the system data. For e.g. tax rate change announce by the country government.

    How it is related with bdc?

    It is related to bdc because bdc programming allows recording of user inputs.

    Difference Between Batch Input and Call Transaction in BDC

    What is the difference between batch input and call transaction in BDC?

    Session method.

    1) synchronous processing.

    2) can tranfer large amount of data.

    3) processing is slower.

    4) error log is created

    5) data is not updated until session is processed.

    Call transaction.

    1) asynchronous processing

    2) can transfer small amount of data

    3) processing is faster.

    4) errors need to be handled explicitly

    5) data is updated automatically

    Batch Data Communication (BDC) is the oldest batch interfacing technique that SAP provided since the early versions of R/3. BDC is not a typical integration tool, in the sense that, it can be only be used for uploading data into R/3 and so it is

    not bi-directional.

    BDC works on the principle of simulating user input for transactional screen, via an ABAP program.

    Typically the input comes in the form of a flat file. The ABAP program reads this file and formats the input data screen by screen into an internal table (BDCDATA). The transaction is then started using this internal table as the input and executed in the background.

    In ‘Call Transaction’, the transactions are triggered at the time of processing itself and so the ABAP program must do the error handling. It can also be used for real-time interfaces and custom error handling & logging features. Whereas in

    Batch Input Sessions, the ABAP program creates a session with all the transactional data, and this session can be viewed, scheduled and processed (using Transaction SM35) at a later time. The latter technique has a built-in error processing mechanism too.

    Batch Input (BI) programs still use the classical BDC approach but doesn’t require an ABAP program to be written to format the BDCDATA. The user has to format the data using predefined structures and store it in a flat file. The BI program then reads this and invokes the transaction mentioned in the header record of the file.

    Direct Input (DI) programs work exactly similar to BI programs. But the only difference is, instead of processing screens they validate fields and directly load the data into tables using standard function modules. For this reason, DI programs are much faster (RMDATIND - Material Master DI program works at least 5 times faster) than the BDC counterpart and so ideally suited for loading large volume data. DI programs are not available for all application areas.

    ABAP Tips by : Anshu Kumar

    Differences between bdc session method and call transaction method.

    The most important aspects of the batch session interface are: - Asynchronous processing - Transfers data for multiple transactions - Synchronous database update During processing, no transaction is started until the previous transaction has been written to the database. - A batch input processing log is generated for each session - Sessions cannot be generated in parallel

    The most important aspects of the CALL TRANSACTION USING interface are: - Synchronous processing - Transfers data for a single transaction - Synchronous and asynchronous database updating both possible The program specifies which kind of updating is desired. - Separate LUW for the transaction The system performs a database commit immediately before and after the Batch Input Session:

    - It is a sequence of transactions, which is generated when user run a particular program.

    - It contains the accounting documents that are to be created. The SAP system stores these transactions until you decide to process them online.

    - It does not update transaction figures until the session has been processed. Using this technique, you can transfer large amounts of data to the SAP system in a short time.

    Three processing modes of executing Batch Input Session :-

    (1) Run Visibly : You can correct faulty transactions online & work step-by-step through the transactions not yet executed.

    (2) Display Errors only : You can correct faulty transactions online. Transactions not yet executed, but without error, run in the background.

    (3) Run in Background : Recommended by SAP. *-- Pradnya

    CALL TRANSACTION USING statement. - No batch input processing log is generated.

    Explain in detail with example what is batch input session?

    BDC program for Purchase Info Records

    &----


    *& REPORT ZMM0069 *

    &----


    *& Module : MM |

    *& Application : The program loads the Purchasing Inforecords |

    *& |

    ----


    *| Modification Log |

    *| -


    |

    *| Programmer Date CC# Chg.Ref Description of

    *| Change |

    *| -


    -


    -


    -


    -


    |

    *| Rajesh Singh 23-AUG-2005 Initial

    *| development. |

    ----


    REPORT zmm0069 NO STANDARD PAGE HEADING

    MESSAGE-ID z0

    LINE-SIZE 132

    LINE-COUNT 65(2).

    ----


    • Internal Tables *

    ----


    *Internal table for the purchasing info records fields.

    DATA: BEGIN OF i_inforecord OCCURS 0,

    matnr(18),

    lifnr(10),

    uom(3),

    ekgrp(3),

    planned_time(3),

    under_tol(3),

    over_tol(3),

    qty(10),

    price_cat(5),

    inco(3),

    designation(28),

    netpr(13),

    scale_qty1(10),

    scale_pr1(13),

    scale_qty2(10),

    scale_pr2(13),

    scale_qty3(13),

    scale_pr3(10),

    scale_qty4(13),

    scale_pr4(10),

    scale_qty5(13),

    scale_pr5(10),

    scale_qty6(13),

    scale_pr6(10),

    scale_qty7(13),

    scale_pr7(10),

    scale_qty8(13),

    scale_pr8(10),

    scale_qty9(13),

    scale_pr9(10),

    scale_qty10(13),

    scale_pr10(10),

    END OF i_inforecord.

    • Internal table for Old and New Vendor number

    DATA : BEGIN OF i_lfb1 OCCURS 1,

    lifnr(10),

    altkn(10),

    END OF i_lfb1.

    • Declare internal table for Call Transaction and BDC Session

    DATA: i_bdc_table LIKE bdcdata OCCURS 0 WITH HEADER LINE.

    ----


    • Global Variables *

    ----


    DATA: g_counter(2) TYPE n,

    g_field_name(18) TYPE c,

    zc_yes TYPE syftype VALUE 'X'.

    ----


    • Selection Screen *

    ----


    SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.

    PARAMETERS: p_fname1 TYPE localfile .

    SELECTION-SCREEN SKIP 1.

    SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002.

    PARAMETERS: p_rloc1 AS CHECKBOX DEFAULT 'X'.

    SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-003.

    PARAMETERS p_group(12) OBLIGATORY DEFAULT 'ZPURCHINFO'.

    SELECTION-SCREEN END OF BLOCK c.

    SELECTION-SCREEN END OF BLOCK b.

    SELECTION-SCREEN END OF BLOCK a.

    **WRITE the report header

    TOP-OF-PAGE.

    INCLUDE zheading.

    ----


    • Start of selection *

    ----


    START-OF-SELECTION.

    • Load Input file

    PERFORM f_load_input_file.

    • Create BDC records.

    PERFORM create_bdc_records .

    &----


    *& Form Create_BDC_records

    &----


    • Perform the BDC for the records in the internal table

    ----


    FORM create_bdc_records .

    IF NOT i_inforecord[] IS INITIAL.

    • Open BDC session

    PERFORM open_bdc_session.

    SELECT lifnr altkn FROM lfb1 INTO TABLE i_lfb1

    FOR ALL ENTRIES IN i_inforecord

    WHERE altkn = i_inforecord-lifnr.

    • Sorting the Internal table for better performance

    SORT i_lfb1 BY altkn.

    LOOP AT i_inforecord.

    ***Mapping Old Vendor number to the new Vendor number

    READ TABLE i_lfb1 WITH KEY altkn = i_inforecord-lifnr BINARY

    SEARCH.

    IF sy-subrc EQ 0.

    i_inforecord-lifnr = i_lfb1-lifnr.

    ENDIF.

    CLEAR i_bdc_table[].

    PERFORM insert_screen_header.

    • call transaction 'ME11' using i_bdc_table

    • mode 'A'.

    • CLEAR i_bdc_table.

    ENDLOOP.

    CLEAR i_inforecord[].

    PERFORM close_bdc_session.

    • Release the BDC sessions created

    PERFORM release_bdc.

    ENDIF.

    ENDFORM. " open_group

    &----


    *& Form bdc_dynpro_start

    &----


    • Start the screen for the transfer of fields

    ----


    FORM bdc_dynpro_start USING p_g_program_1

    p_g_screen.

    CLEAR i_bdc_table.

    i_bdc_table-program = p_g_program_1.

    i_bdc_table-dynpro = p_g_screen.

    i_bdc_table-dynbegin = 'X'.

    APPEND i_bdc_table.

    ENDFORM. " bdc_dynpro_start_start

    &----


    *& Form bdc_insert_field

    &----


    • Insert field *

    ----


    FORM bdc_insert_field USING f_name f_value.

    IF f_value <> space.

    CLEAR i_bdc_table.

    i_bdc_table-fnam = f_name.

    i_bdc_table-fval = f_value.

    APPEND i_bdc_table.

    ENDIF.

    ENDFORM. "bdc_insert_field

    &----


    *& Form open_bdc_session

    &----


    • Open a BDC session

    ----


    FORM open_bdc_session .

    • Open BDC session and create and update records

    CALL FUNCTION 'BDC_OPEN_GROUP'

    EXPORTING

    client = sy-mandt

    • DEST = FILLER8

    group = p_group

    • HOLDDATE = FILLER8

    keep = 'X'

    user = sy-uname

    • RECORD = FILLER1

    • PROG = SY-CPROG

    • IMPORTING

    • QID =

    EXCEPTIONS

    client_invalid = 1

    destination_invalid = 2

    group_invalid = 3

    group_is_locked = 4

    holddate_invalid = 5

    internal_error = 6

    queue_error = 7

    running = 8

    system_lock_error = 9

    user_invalid = 10

    OTHERS = 11

    .

    IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    ENDFORM. " create_bdc_session

    &----


    *& Form insert_screen_header

    &----


    • Screen flow for the transfer of fields

    ----


    FORM insert_screen_header .

    • First Screen 100

    PERFORM bdc_dynpro_start USING 'SAPMM06I' '0100'.

    PERFORM bdc_insert_field USING:'BDC_CURSOR' 'EINA-LIFNR',

    'BDC_OKCODE' '/00',

    'EINA-LIFNR' i_inforecord-lifnr,

    'EINA-MATNR' i_inforecord-matnr,

    'EINE-EKORG' '1000',

    'RM06I-NORMB' zc_yes.

    ****----


    *******

    • Next Screen 101

    PERFORM bdc_dynpro_start USING 'SAPMM06I' '0101'.

    PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'EINA-MAHN1',

    'BDC_OKCODE' '/00',

    'EINA-MEINS' i_inforecord-uom.

    ****----


    *******

    *Next Screen 102

    PERFORM bdc_dynpro_start USING 'SAPMM06I' '0102'.

    PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'EINE-INCO2',

    'EINE-APLFZ' i_inforecord-planned_time,

    'EINE-EKGRP' i_inforecord-ekgrp,

    'EINE-NORBM' i_inforecord-qty.

    PERFORM bdc_insert USING 'EINE-UEBTK' ' '.

    PERFORM bdc_insert_field USING:'EINE-PEINH' i_inforecord-scale_qty1,

    'EINE-BPRME' i_inforecord-uom,

    'EINE-UNTTO' '5',

    'EINE-UEBTO' '25',

    'EINE-MEPRF' i_inforecord-price_cat,

    'EINE-NETPR' i_inforecord-netpr,

    'EINE-INCO1' i_inforecord-inco,

    'EINE-INCO2' i_inforecord-designation.

    • Checking for Scale quantities

    IF i_inforecord-scale_qty2 = space.

    PERFORM bdc_insert_field USING 'BDC_OKCODE' '=BU'.

    PERFORM insert_bdc_new.

    ELSE.

    PERFORM bdc_insert_field USING 'BDC_OKCODE' '=KO'.

    ****----


    *******

    • Next Screen 201

    PERFORM bdc_dynpro_start USING 'SAPMV13A' '0201'.

    PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'RV13A-DATAB',

    'BDC_OKCODE' '=PSTF'.

    ****----


    *******

    • Next Screen 201

    PERFORM bdc_dynpro_start USING 'SAPMV13A' '0201'.

    PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'KONP-KSCHL(01)',

    'BDC_OKCODE' '=PSTF',

    'RV130-SELKZ(01)' zc_yes.

    ****----


    *******

    • LAST SCREEN 303

    PERFORM bdc_dynpro_start USING 'SAPMV13A' '0303'.

    PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'KONM-KBETR(03)',

    'BDC_OKCODE' '=SICH'.

    • Counter to Loop the Item level entry

    g_counter = 0.

    PERFORM scale_entry USING i_inforecord-scale_qty2

    i_inforecord-scale_pr2.

    PERFORM scale_entry USING i_inforecord-scale_qty3

    i_inforecord-scale_pr3.

    PERFORM scale_entry USING i_inforecord-scale_qty4

    i_inforecord-scale_pr4.

    PERFORM scale_entry USING i_inforecord-scale_qty5

    i_inforecord-scale_pr5.

    PERFORM scale_entry USING i_inforecord-scale_qty6

    i_inforecord-scale_pr6.

    PERFORM scale_entry USING i_inforecord-scale_qty7

    i_inforecord-scale_pr7.

    PERFORM scale_entry USING i_inforecord-scale_qty8

    i_inforecord-scale_pr8.

    PERFORM scale_entry USING i_inforecord-scale_qty9

    i_inforecord-scale_pr9.

    PERFORM scale_entry USING i_inforecord-scale_qty10

    i_inforecord-scale_pr10.

    PERFORM insert_bdc_new.

    ENDIF.

    ENDFORM. " insert_screen_header

    &----


    *& Form insert_bdc

    &----


    • Insert BDC

    ----


    FORM insert_bdc_new .

    CALL FUNCTION 'BDC_INSERT'

    EXPORTING

    tcode = 'ME11'

    • POST_LOCAL = NOVBLOCAL

    • PRINTING = NOPRINT

    • SIMUBATCH = ' '

    • CTUPARAMS = ' '

    TABLES

    dynprotab = i_bdc_table

    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.

    CLEAR i_bdc_table[].

    ENDFORM. " insert_bdc

    &----


    *& Form close_bdc_session

    &----


    • Close the BDC session

    ----


    FORM close_bdc_session .

    CALL FUNCTION 'BDC_CLOSE_GROUP'

    EXCEPTIONS

    not_open = 1

    queue_error = 2

    OTHERS = 3.

    IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    ENDFORM. " close_bdc_session

    &----


    *& Form f_load_input_file

    &----


    • Upload the file

    ----


    FORM f_load_input_file.

    • Check always Local file for upload

    IF p_rloc1 = zc_yes.

    CALL FUNCTION 'WS_UPLOAD'

    EXPORTING

    filename = p_fname1

    filetype = 'DAT'

    TABLES

    data_tab = i_inforecord

    EXCEPTIONS

    conversion_error = 1

    file_open_error = 2

    file_read_error = 3

    invalid_type = 4

    no_batch = 5

    unknown_error = 6

    invalid_table_width = 7

    gui_refuse_filetransfer = 8

    customer_error = 9

    OTHERS = 10.

    IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    STOP.

    ENDIF.

    ENDIF.

    *

    ENDFORM. " f_load_input_file

    &----


    *& Form release_bdc

    &----


    • Release the session

    ----


    FORM release_bdc.

    SUBMIT rsbdcsub WITH mappe EQ p_group

    WITH von EQ sy-datum

    WITH bis EQ sy-datum

    WITH fehler EQ '.'

    EXPORTING LIST TO MEMORY

    AND RETURN.

    ENDFORM. " release_bdc

    &----


    *& Form scale_entry

    &----


    • Populate the Scale quantities

    ----


    • -->P_SCALE_QTY

    • -->P_SCALE_PRICE

    ----


    FORM scale_entry USING p_scale_qty

    p_scale_price.

    • Increment the Counter

    g_counter = g_counter + 1.

    IF p_scale_qty <> space.

    CONCATENATE 'KONM-KSTBM(' g_counter ')' INTO g_field_name.

    PERFORM bdc_insert_field USING g_field_name p_scale_qty.

    CONCATENATE 'KONM-KBETR(' g_counter ')' INTO g_field_name.

    PERFORM bdc_insert_field USING g_field_name p_scale_price.

    ENDIF.

    ENDFORM.

    &----


    *& Form bdc_insert

    &----


    • To uncheck the Unlimited (UEBTK)

    ----


    FORM bdc_insert USING f_name f_value.

    CLEAR i_bdc_table.

    i_bdc_table-fnam = f_name.

    i_bdc_table-fval = f_value.

    APPEND i_bdc_table.

    ENDFORM. " bdc_insert

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.