SAP BAPI Mass Load Runtime and Commit Calculator for ECC
This calculator estimates how long a mass load through BAPIs takes in SAP ECC 6.0, serial or split across parallel asynchronous RFC tasks, and compares it with a BDC CALL TRANSACTION load. It also sizes the rework from failed records so the cutover plan includes it.
Your numbers
Measure on a test run with SE30/SAT or by timing 100 calls.
1 for document BAPIs committed one document at a time.
Your results
Per-call and per-commit timings are your own measured inputs; the BDC factor of 3 and the efficiency are planning assumptions.
Load runtime vs parallel tasks
Sweeps Parallel tasks (server group) from 1 to 20, holding your other inputs fixed.
Want your cutover load plan checked?
Send us your object list, volumes and test timings and we will review commit strategy, parallel tasks and the rework allowance.
Optional. The tool and every export work without this. No spam.
How commits work with BAPIs
Most write BAPIs do not commit. They register their database changes in the update task, and the caller ends the logical unit of work with BAPI_TRANSACTION_COMMIT, ideally with WAIT = 'X' so the program waits until the update has finished and the next call can read the result. If a BAPI returns an error in RETURN, call BAPI_TRANSACTION_ROLLBACK instead. Document BAPIs such as BAPI_PO_CREATE1 or BAPI_GOODSMVT_CREATE are usually committed per document, so a failed record does not roll back good ones and locks are released quickly. BAPI_MATERIAL_SAVEDATA processes one material per call; for mass material loads SAP offers BAPI_MATERIAL_SAVEREPLICA. Read each BAPI's documentation in SE37 for its commit rules.
- BAPI_TRANSACTION_COMMIT with WAIT = 'X' after each document
- BAPI_TRANSACTION_ROLLBACK when RETURN has type E or A
- Check RETURN for every record and log it
The formula
Commits = records / records per commit, rounded up. Serial seconds = records x milliseconds per call / 1000, plus commits x milliseconds per commit / 1000. For BDC, each record costs three times the BAPI call time as a planning assumption for screen processing, and the commit is inside CALL TRANSACTION, so it is not added. Parallel aRFC divides the work across tasks, but not perfectly, so effective parallelism = 1 + (tasks - 1) x efficiency. Runtime = serial seconds / effective parallelism / 60. Errors = records x error rate, rework hours = errors x minutes per fix / 60. Measure call and commit times on 100 records in the target system; they vary by object, customising and number range buffering.
Worked example
20,000 goods movements, 250 ms per BAPI_GOODSMVT_CREATE call, 150 ms per commit, one record per commit: 8,000 seconds serial, about 133 minutes. With 8 parallel tasks at 75% efficiency the factor is 6.25 and the runtime about 21 minutes. The same load by BDC is 15,000 seconds or 250 minutes serial. At a 2% error rate, 400 records fail; at 3 minutes each that is 20 hours of rework, often more than the load itself. The chart shows runtime falling with tasks until locks, number ranges or free work processes limit it, which is the point to stop adding tasks.
Parallel aRFC setup and limits
Define an RFC server group in RZ12 with the application servers and quotas you may use. In the load program call an RFC-enabled wrapper with CALL FUNCTION 'Z_LOAD_PACKAGE' STARTING NEW TASK lv_task DESTINATION IN GROUP 'ZLOAD' PERFORMING on_done ON END OF TASK, and collect results in the callback with RECEIVE RESULTS FROM FUNCTION. Each task runs in a dialog work process, so it is subject to rdisp/max_wprun_time and to the quotas in RZ12; handle the RESOURCE_FAILURE exception by waiting and retrying. Group records so two tasks never update the same material or document, or lock conflicts will turn into errors.
Frequently Asked Questions
Do I need BAPI_TRANSACTION_COMMIT after every BAPI?
For write BAPIs that follow the standard LUW rules, yes: without a commit, the changes are not saved. Use WAIT = 'X' when the next step reads the result, and call BAPI_TRANSACTION_ROLLBACK if RETURN contains an error. Some older BAPIs commit internally, so check the function documentation in SE37.
Which BAPI is used for material creation in SAP ECC?
BAPI_MATERIAL_SAVEDATA creates or changes one material per call, with structures for client, plant, storage location, sales and valuation data and their X flag structures. For many materials at once SAP provides BAPI_MATERIAL_SAVEREPLICA. Both need a commit unless the documentation for your release says otherwise.
Which BAPI is used for goods receipt in SAP?
BAPI_GOODSMVT_CREATE posts goods movements, including goods receipt for a purchase order with movement type 101 and GOODSMVT_CODE '01'. Pass header, code and item tables, check RETURN, and commit with BAPI_TRANSACTION_COMMIT. The material document number comes back in MATERIALDOCUMENT.
BAPI vs BDC in SAP ABAP: which should I use?
Use a BAPI when one exists for the object: it runs without screens, is release stable and returns structured messages. BDC records screen sequences, so it breaks when screens or customising change and is slower. BDC is still used where no BAPI covers a field or transaction, often through LSMW in ECC.
If you want load errors explained and grouped in plain English from the BAPI return logs on your own servers, we can add a private AI layer to your ECC data migration toolkit.
Related Tools
SAP BAPI_GOODSMVT_CREATE ABAP Code Generator
Fill in plant, material, quantity and movement type to get a working ABAP skeleton for posting a goods movement through the standard BAPI.
Developer ToolsSAP ECC BAdI Implementation Method Code Generator (ME_PROCESS_PO_CUST, MB_MIGO_BADI, WORKORDER_UPDATE)
Pick a plant, the field that must be filled and your message class, and get ready-to-paste method code for three common ECC classic BAdIs, with the SE19 steps.
SAPSAP ECC Job Log, Spool and TBTCO Growth Housekeeping Calculator
Enter jobs per day, steps, spool share, average sizes and retention days to see how many job and spool rows you keep and how much TemSe storage they use in the database or file system.
SAPSAP ECC Classic MRP Run (MD01/MDBT) Runtime Simulator
Enter materials in scope, net change share, processing key, measured milliseconds per material and parallel processes to estimate the MRP job runtime and whether it fits the night window.
More Developer Tools tools
See all- SAP ECC Enhancement Transactions and Exit Tables Reference (SMOD, CMOD, SE18, MODSAP, SXC_EXIT)
- SAP ECC Data Dictionary and Repository Tables Reference (DD02L, DD03L, T100, E070, TSTC)
- SAP ECC ABAP Runtime Errors (ST22 Dumps) and Error Log Transactions Reference
- SAP ECC Background Job History ABAP Query Generator (TBTCO + TBTCP)
- SAP ECC Background Job Creation ABAP Generator (JOB_OPEN, SUBMIT, JOB_CLOSE)
- SAP ECC IDoc Segment Data Reader ABAP Generator (EDIDC, EDID4, EDIDS)
- SAP ECC Custom Inbound IDoc Function Module Skeleton Generator
- SAP ECC BAPI_SALESORDER_CHANGE ABAP Generator
- SAP ECC BAPI_PO_CHANGE ABAP Generator
Keep exploring
Free tools
- ABAP BAPI Return Handling and Commit GeneratorWrap any BAPI call with BAPIRET2 error checking, message text building and a safe commit or rollback.
- SAP ECC BAPI_PO_CHANGE ABAP GeneratorGenerate a working ABAP program that changes an SAP purchase order item with BAPI_PO_CHANGE, with POITEM/POITEMX, schedule line date conversion, test run and commit handling.
- SAP ECC BAPI_SALESORDER_CHANGE ABAP GeneratorGenerate a working ABAP program that updates an SAP sales order with BAPI_SALESORDER_CHANGE, with the correct X structures, schedule line handling, error check and commit or rollback.
ERP fixes and how-tos
- How to Use BAPI_TRANSACTION_COMMIT CorrectlyBAPIs never commit their own update. Here is when to call BAPI_TRANSACTION_COMMIT with WAIT, and why a BAPI can run fine and still save nothing.
- SAP MM BAPI for PO Create and Change: BAPI_PO_CREATE1 and BAPI_PO_CHANGEHow to use BAPI_PO_CREATE1 and BAPI_PO_CHANGE: header, item and schedule structures, the X-structures, error handling in RETURN and the commit step.
- How to add AI to SAP ECC 6.0 on-prem without moving data to a cloudReference architecture for a private on-prem AI assistant on SAP ECC 6.0: RFC and BAPI reads, SLT replica, retrieval index, local LLM, permission mirroring.
Integrations
- How to automate email into SAP ECC 6.0Turn inbound emails into SAP ECC 6.0 transactions: customer POs into sales orders, supplier confirmations, RFQs and invoices, with review and BAPI posting.
- How to add AI agents to SAP ECC 6.0How to add AI agents to SAP ECC 6.0: a tool layer over BAPIs, RFC and IDocs, human approval before any posting, and an on-prem model that never leaves your network.