How SAP FICO mass posting works
SAP FICO mass posting means creating many finance documents in one run from a file instead of keying them one by one: G/L journals (FB50), supplier invoices without a PO (FB60) or against a PO (MIRO), customer invoices (FB70), asset postings and cost reposting. PostNow.ai runs these finance postings from Excel through the BAPI behind each transaction, mostly BAPI_ACC_DOCUMENT_POST. Validate checks the sheet offline, Simulate lets SAP check every document and rolls it back, and Run writes each document number back to its row.
- The line decides the transaction. A PO behind the invoice means MIRO; a vendor line without a PO means FB60; a customer line means FB70; G/L lines only means FB50.
- Every one of them ends in an FI document. A header plus balanced lines, posted whole or not at all, never deleted, only reversed.
This page is the hub for SAP FICO mass posting: it routes each finance job to its transaction and covers what all of them share. The step-by-step detail for each transaction lives on its own page: FB50 journal entries, FB60 non-PO invoices, MIRO supplier invoices and FB01 documents with posting keys. Finance master data (G/L accounts, cost centers, profit centers, asset masters) is covered in SAP master data mass upload.
SAP FICO mass posting with PostNow.ai, step by step
PostNow.ai turns each finance posting into a published Excel template: a designer maps it once against your SAP system, and accountants run their own files through it every period. The sequence is the same for a journal, an invoice or an asset acquisition.
- Pick the BAPI or start from a free template. Search the BAPI by name in PostNow.ai's BAPI search (for example
BAPI_ACC_DOCUMENT_POSTfor FB50, FB60 and FB70,BAPI_INCOMINGINVOICE_CREATEfor MIRO), or download a free template from SAP upload templates, each already mapped to its BAPI. Mapping AI suggests the column-to-field mapping from your headers; it reads the header names, never the cell values. - Group header and lines. A marker column turns one
Hrow (company code, dates, document type, reference) and theDrows under it into one document. Credits are negative amounts. - Validate the sheet. Validate checks every cell offline, in Excel: required fields, type, length, date format, decimals and allowed values. Nothing is sent to SAP.
- Simulate. PostNow.ai calls the BAPI for every document and then
BAPI_TRANSACTION_ROLLBACKinstead of a commit. SAP's own balance, period, account and cost object checks come back on each row before anything posts. - Run. PostNow.ai posts each document and commits only when SAP returned no error, then writes the document number, user, time and SAP system to the header row. Where an approval policy covers the template, Run waits until an approver in the PostNow.ai portal has released the data.
- Re-run only what failed. Retry Failed re-posts the rows whose Run Log starts with ERROR. If someone clicks Run again on a sheet that already holds posted rows, PostNow.ai asks first: Skip posted rows, Post again or Cancel.

Which transaction for which job
In PostNow.ai each row is posted through the BAPI shown, so the choice you make here decides which template you download or build. What appears on the lines decides the transaction, not the size of the file.
| Finance job | SAP transaction | PostNow.ai posts it through | Guide |
|---|---|---|---|
| G/L journals: accruals, reclassifications, allocations, provisions | FB50 (document type SA) | BAPI_ACC_DOCUMENT_POST, G/L lines only | FB50 mass upload |
| Supplier invoice without a PO: rent, utilities, fees | FB60 (KR) | BAPI_ACC_DOCUMENT_POST with a vendor line | FB60 mass upload |
| Supplier invoice against a PO | MIRO | BAPI_INCOMINGINVOICE_CREATE | MIRO mass invoice posting |
| Customer invoice outside sales: recharges, sundry income | FB70 (DR) | BAPI_ACC_DOCUMENT_POST with a customer line | Below |
| Document with explicit posting keys or mixed account types | FB01 | BAPI_ACC_DOCUMENT_POST or a recorded FB01 | FB01 mass upload |
| Asset acquisition with automatic offsetting entry | ABZON | BAPI_ASSET_ACQUISITION_POST | Below |
| Cost reposting and manual allocation | KB11N, KB15N | BAPI_ACC_PRIMARY_COSTS_POST, BAPI_ACC_MANUAL_ALLOC_POST | Below |
| Reversal of posted documents | FB08, F.80; MR8M for MIRO | BAPI_ACC_DOCUMENT_REV_POST or a recorded FB08 | Below |
Four questions route almost any finance file, and the order matters. Is there a purchase order behind it? Then it is MIRO, because an invoice posted in FB60 against an order leaves the PO history without the invoice and the GR/IR account uncleared. Is there a vendor or customer on the line? Then FB60 or FB70. Do you need to choose posting keys yourself? Then FB01. Do the cost objects the lines reference already exist? If not, the file is not ready, whatever the transaction.
VF01 from the order or delivery, so the sales document flow stays intact; see VF01 mass billing. FB70 is for receivables that have no sales document behind them.Customer invoices in FB70: the FI-only receivable
PostNow.ai posts FB70 customer invoices through BAPI_ACC_DOCUMENT_POST, the same interface as a journal: the customer line goes in ACCOUNTRECEIVABLE and the revenue lines in ACCOUNTGL, each joined to its amount in CURRENCYAMOUNT by ITEMNO_ACC. The free FB70 customer invoice template builds the customer line from the H row and one revenue line from each D row.
- Signs carry debit and credit. The gross amount on the customer line is positive (a debit); the revenue lines are negative; together they add up to zero.
- Document type. FB70 proposes
DRin the standard system. Use your company's document type for manual customer invoices, so the documents land in the right number range. - Tax is a line of its own. The BAPI does not add a tax line from a tax code: pass it in
ACCOUNTTAXwith its amount, and prove it on Simulate before the first full run. - Payment terms and baseline date on the customer line drive the due date and dunning, so map them deliberately instead of relying on the customer master default.
- Credit memos (
FB75) are the same structure with the signs reversed; a separate FB75 template exists.
Asset postings from Excel, and where the asset master fits
PostNow.ai posts asset acquisitions through BAPI_ASSET_ACQUISITION_POST, the BAPI behind ABZON (acquisition with automatic offsetting entry); the free ABZON asset acquisition template has one row per acquisition. The asset must already exist: creating asset masters in bulk (AS01) is a separate job covered in mass create assets in SAP (AS01).
- Use the asset BAPI, not the accounting one.
BAPI_ACC_DOCUMENT_POSTcarries an asset number but no asset transaction type, so it is the wrong route for an acquisition.BAPI_ASSET_ACQUISITION_POSTtakes the transaction type (100for an external acquisition) and the offsetting account. - The asset value date drives depreciation, not the posting date. A wrong value date shifts the depreciation start without any error message.
- Retirements and transfers have their own BAPIs. SAP's asset accounting documentation lists
BAPI_ASSET_RETIREMENT_POSTfor retirements (theABAVNscrapping case, for example) andBAPI_ASSET_TRANSFER_POSTfor transfers, each with a matching_CHECKfunction. Pick them in PostNow.ai's BAPI search and prove them on a few assets in a test client before a full run. - Check every depreciation area after the pilot. SAP KBA 3716976 (S/4HANA) describes
AAPO 704"Depreciation area xx is a parallel area; it cannot be selected", where the BAPI posts the leading area but not the parallel one. Open a pilot asset in the Asset Explorer (AW01N) and confirm the values in each area before the full run.
What every finance mass posting has in common
PostNow.ai treats every finance template the same way because SAP does: FB50, FB60, FB70 and FB01 all create the same FI accounting document, and MIRO and asset postings create one alongside their own. Four properties of that document shape every file.
| Property | What it means for the Excel file |
|---|---|
| A document is a group, not a row | One header and several lines. In a PostNow.ai sheet the H row carries the header and the D rows under it are its lines, so header fields such as posting date exist once per document, never once per line. |
| It must balance | Debits equal credits in document currency. SAP checks this when the document is posted or simulated, so a SUMIF per document reference in the sheet saves a round trip. |
| It posts whole or not at all | A failed document leaves nothing behind in SAP. The row shows SAP's message, you fix it and re-post that document only. |
| It cannot be deleted | A wrong document is corrected by a reversal or a correcting entry, and both stay in the ledger. This is why the pilot on a few documents matters more here than for master data. |
The practical effect is that skills transfer: a team with a working FB50 template already knows the grouping, balance and reversal rules of FB60 and FB70, and only learns the vendor or customer line.
Period control: OB52 and the MM period
PostNow.ai's Simulate returns SAP's period check on every row, but the fix for a closed period sits with whoever owns the close calendar. Two calendars are involved, and backdated files usually fail on the one nobody checked.
- The FI posting period is opened and closed in
OB52per posting period variant and account type (+all,Aassets,Dcustomers,Kvendors,Mmaterials,SG/L accounts). A closed period returnsF5 201"Posting period … is not open". - The MM period is a separate calendar, moved forward with
MMPV;MMRVshows the current period and whether postings to the previous one are allowed. A pure G/L journal ignores it; a MIRO invoice or a goods movement needs both. - The posting date is a decision, not a default. A
=TODAY()formula posts October's accruals into November the moment the run slips past midnight. Type the date, or derive it from a period cell finance owns.
Cost objects, reposting and allocations
PostNow.ai sends whatever cost object the sheet carries (cost center, internal order, WBS element, profit center) and SAP decides whether the line needs one. An expense account that is a cost element needs exactly one real CO object, otherwise SAP stops the document with KI 235 "Account … requires an assignment to a CO object".
- The object must exist and be valid on the posting date. Cost centers are time dependent: a center valid from 1 November cannot take an October posting. On a restructure, create them first with KS01 mass creation, then post.
- Balance sheet lines stay empty. The cost object column applies to P&L lines only, so it is optional in the template and required by SAP per account.
- Moving costs that are already posted is a CO posting, not a journal.
KB11Nreposts primary costs andKB15Nposts a manual allocation; SAP Community answers point toBAPI_ACC_PRIMARY_COSTS_POSTandBAPI_ACC_MANUAL_ALLOC_POSTas their BAPIs. Run a few lines in a test client first and check the result in the cost center line items.
Month-end close postings from Excel
PostNow.ai fits the month-end postings whose amounts are calculated in Excel each period: the model produces this month's figures and the same published template posts them. Postings with fixed amounts or fixed reversal dates are often better left to SAP's own tools.
| Close task | Route | Note |
|---|---|---|
| Accruals and provisions calculated in Excel | PostNow.ai FB50 template, reversed next month from a file | Detail in FB50 mass upload |
| Reclassifications and allocations | PostNow.ai FB50 template (G/L) or KB11N/KB15N BAPIs (CO) | Watch rounding: each receiver rounded to 2 decimals can leave the total 0.01 off |
| Supplier and customer invoices received late | PostNow.ai FB60, MIRO and FB70 templates | MIRO needs the MM period open too |
| Asset acquisitions not yet capitalised | PostNow.ai ABZON template | Asset value date decides depreciation |
| Fixed amount every period | SAP recurring entry: FBD1, then F.14 | F.14 creates a batch input session processed in SM35 |
| Accrual that reverses on a set date | SAP accrual/deferral: FBS1, then F.81 | F.81 reverses on the date stored in each document |
Run the files before the busiest close day, not during it: anything with known values can post early, and a run posted on the last open day leaves no room to reverse and re-post if the pilot shows a problem. After period-end postings, check the result in a financial statement (balance sheet and P&L) in Excel, built from G/L balances by account and split into balance sheet and P&L accounts.
SAP finance automation from Excel: what it covers
PostNow.ai's part of SAP finance automation is the Excel side: the postings above, the finance master data they depend on, and the reports that reconcile them, all under each user's own SAP login. The jobs and where each one is covered:
| Finance area | With PostNow.ai | Where to read more |
|---|---|---|
| Postings | Journals, supplier and customer invoices, asset acquisitions, reversals from Excel templates | This page and the transaction guides above |
| Finance master data | G/L accounts (FS00), cost centers (KS01), profit centers (KE51), asset masters (AS01) created or changed in bulk | SAP master data mass upload, FS00, KS01, profit centers, AS01 |
| Exchange rates | Rates maintained in OB08 (table TCURR) loaded from a sheet through BAPI_EXCHANGERATE_CREATE, picked in the BAPI search. The currency pair's translation ratios must exist, or the rate is not saved. | Tax, currency and rounding below: load the rates before foreign currency postings |
| Changes to existing records | Download current SAP values, edit them in Excel, post the changed rows back | SAP mass change from Excel |
| Reconciliation | Report Library reports such as GL Line Items 360 and AR Open Items + Aging, run into Excel | SAP GL line items report, Report Library |
| Control | Designers publish templates, operators only run them; optional approval before Run; every run in the central audit | Excel to SAP automation |
The wider accounts payable process, from invoice receipt to payment, is covered in accounts payable automation in SAP.
Tax, currency and rounding: what breaks balance
PostNow.ai sends the amounts as the sheet holds them, so a file that balances in Excel can still fail SAP's balance check in Simulate. Three causes account for most of it.
- The tax line.
BAPI_ACC_DOCUMENT_POSThas no counterpart to the "Calculate tax" checkbox on the FB60 and FB70 screens: tax is a line of its own inACCOUNTTAX, with the tax amount and base amount inCURRENCYAMOUNT. A gross vendor or customer amount with net lines and no tax line does not balance. Prove one tax-relevant document on Simulate before the full file. - Foreign currency. A document in a currency other than the company code currency balances in document currency; SAP translates with the rate valid on the translation date, or with an exchange rate you pass. If no rate is maintained for that currency pair and date, the document fails, so load the OB08 rates first.
- Rounding in allocations. A total split by percentage and rounded per receiver can miss by 0.01. Put the difference on the last line with a formula (total minus the sum of the others), so every document still sums to zero.
Worked example: an October close in company code 1010
PostNow.ai handles this with two published templates, one for journals and one for customer invoices. Finance in company code 1010 (EUR) has 18 accrual journals calculated in its accrual model and four recharge invoices to customer 200371 for October 2026.
- Fill the sheets. The FB50 sheet holds 18 H rows (posting date 31.10.2026, type
SA, referencesACCR-2610-001to-018) with their G/L lines; the FB70 sheet holds four H rows (typeDR, customer200371, payment terms0001) with one revenue line each. - Validate. One cell is flagged: a posting date typed as text. It is fixed in Excel.
- Simulate. 16 journals and all four invoices pass. One journal returns
F5 201because its posting date was copied as 01.11.2026 and November is not open yet; one returnsKI 235because an expense line has no cost center. Both are fixed on the row and simulated again. - Run. All 22 documents post. Each H row now holds its document number with user, time and SAP system.
- Reconcile. The GL Line Items 360 report, run for company code 1010, posting date 31.10.2026 and document types SA and DR, totals the same amounts as the accrual model and the recharge list.
- Next month. On 1 November the 18 accrual document numbers go into the reversal file with reversal posting date 01.11.2026.
The two workbooks now hold the calculation, the posted document numbers and the run details, which is what an auditor asks for when they pick a close entry.
When a run goes wrong: reversal, adjustment, compensation
PostNow.ai reverses documents in bulk from a file: the free FB08 reversal template on BAPI_ACC_DOCUMENT_REV_POST, one row per document, or a recorded FB08. Which kind of correction is right is a finance decision, so agree it before the first production run.
- Reversal cancels the whole document.
FB08reverses one,F.80a selection; the document numbers the run wrote back are the selection. The reversal BAPI identifies the original by object type and key (BKPF-AWTYP,AWKEY), not by document number. Several SAP Community answers report it refusing journals posted through the accounting BAPI while others report it working, so reverse a few in a test client first; a recorded FB08 or F.80 does the same job. - MIRO invoices are reversed with
MR8M, not FB08; see MIRO mass invoice posting. - Adjustment posts a correcting entry when only some lines were wrong; the original stays valid.
- Compensation in a later period is often the only route once the original period is closed: a reversal reason that allows a different posting date, or a new journal with flipped signs.
- Cleared items stop a reversal. If a vendor or customer line has been paid or cleared, SAP refuses with "Document already contains cleared items - reversal not possible" until the clearing is reset.
- Size runs so they can be reversed. Split by company code or journal type; a run that would take an afternoon to reverse should have been two runs.
Finance mass posting errors and how to fix them
PostNow.ai writes SAP's messages to each failed document's H row, every error message joined in one cell, so the fix starts from SAP's own text. These are the ones that stop finance runs across all the transactions on this page.
| Message | What it means | Fix |
|---|---|---|
RW 609 Error in document | A wrapper from the accounting interface; the real reason is the next message in the cell | Read the second message and fix that |
F5 702 Balance in transaction currency | The document's lines do not add up to zero | Credits negative; add the tax line; put rounding on the last line |
F5 201 Posting period … is not open | The posting date falls in a period closed in OB52 for that account type | Correct the date, or ask the period owner to open it |
KI 235 Account … requires an assignment to a CO object | An expense line (a cost element) has no cost center, order or WBS element | Fill the cost object column for that line |
F5 727 Maximum number of items in FI reached | More than 999 lines in one document | Split into several balanced documents |
| Run Log: UNKNOWN (PostNow.ai) | SAP's answer was lost after the document was sent, so it may have posted | Look the reference up in FB03 or the GL line items report; post the row again only if the document is not there |
Transaction-specific messages (duplicate invoice checks, MIRO tolerances, withholding tax) are on the FB60 and MIRO pages.
What S/4HANA changes for finance mass posting
PostNow.ai uses the same finance templates on S/4HANA: BAPI_ACC_DOCUMENT_POST, BAPI_INCOMINGINVOICE_CREATE and the asset BAPIs are all there, so a template proven on ECC usually needs new field values, not a new structure.
- One line item table. The universal journal keeps FI and CO line items together in
ACDOCAinstead of separate ledger tables. Reconciliation reports built on old ledger tables need a check; the posting run does not change. - Profit center on every line. Many S/4HANA systems require a profit center on each line, and the segment is usually derived from it; add the column even where ECC derived it later.
- Customers and vendors are business partners. FB60 and FB70 still post to the customer or vendor number, which must exist with its company code data; see SAP business partner automation.
- New asset accounting. SAP's documentation for New Asset Accounting lists the asset posting BAPIs with accounting principle, ledger group and depreciation area fields. Check every area of a pilot asset after the first run.
- API mode. PostNow.ai can also post journals through SAP's SOAP service Journal Entry - Post (Synchronous), with its test-run flag used for Simulate.
Checklist before an SAP FICO mass posting
PostNow.ai checks formats and allowed values and keeps operators on the published template; this list covers the decisions that stay with finance.
- Each document's transaction is right: PO behind it means MIRO, a customer line from sales means VF01.
- Every document's signed amounts add up to zero, checked with a
SUMIFper document reference. - Posting dates are typed values in the target period, open in
OB52, and in the MM period where MIRO is involved. - Cost centers, orders and WBS elements exist and are valid on the posting date.
- Vendors and customers exist in the company code; assets exist before an acquisition is posted.
- Tax-relevant documents carry their tax line and have passed Simulate once.
- Exchange rates for every foreign currency in the file are loaded.
- References are unique to this run, so every document can be found again.
- The correction route is agreed: reversal file, F.80, or a correcting entry.
- Simulate has run clean on the whole file.
What to plan for in finance mass posting
PostNow.ai posts through SAP's own BAPIs, so SAP's balance, period, account and CO checks decide every result.
- Run SAP's checks in Simulate. Validate checks formats, lengths and allowed values in Excel; balance, period and account checks start when Simulate calls SAP.
- Post as named users. Each user posts with their own SAP login and authorisations. For recorded transactions, PostNow.ai logs in to SAP GUI only on the user's own computer, with the user's own stored login, when the user starts the action (Record, Run, Debug or Call Transaction); never on a server, never unattended, never with someone else's login.
- Approve the file, not the run. With an approval policy on the template, the approver releases the exact data; a file changed after approval needs a new approval.
- Keep re-runs in the same workbook. The re-post check reads this sheet's Run Log, so a copied file with the same documents starts without one.
- Name an owner per template. When the chart of accounts or a document type changes, someone re-proves the template on Simulate before the next close.
- Reconcile every run against the source model the same day, while the run is fresh.
Free SAP finance posting templates
PostNow.ai publishes free Excel templates for the finance postings on this page, each with a field guide and its BAPI mapping: FB50 G/L journal entry, FB60 vendor invoice, MIRO supplier invoice, FB70 customer invoice, ABZON asset acquisition and FB08 document reversal. Fill the template, open it in PostNow.ai, Validate, Simulate and Run. The full set is on SAP upload templates.
