How to mass create GL accounts in SAP with FS00
FS00 in SAP is the central transaction for G/L account master data. One save creates the chart of accounts segment (account number, account group, P&L or balance sheet, descriptions) and the company code segment (currency, tax category, open item management, field status group). SAP's G/L account BAPIs read accounts but do not create them, so to load a chart of accounts from Excel, PostNow.ai records FS00 once and replays it for every row: one Excel row per account and company code. Validate checks the sheet offline, Debug replays a few accounts in SAP GUI, and Run writes SAP's message back to each row.
- Create both segments. SAP posts to an account in a company code only once its company code segment exists, so an account with chart data only cannot be posted to anywhere.
- Decide the posting behaviour up front. Open item management, the reconciliation account type and the P&L or balance sheet choice are hard to change once the account carries postings.
This page covers one job: creating G/L account master records in bulk. Where G/L accounts sit among the other objects, and the order to load them in, is in SAP master data mass upload. The journals and invoices that post to these accounts are in SAP FICO mass posting, and the cost centers that P&L postings need are in KS01 mass cost center creation.
How PostNow.ai mass creates G/L accounts from Excel
PostNow.ai runs an FS00 mass upload as a recorded template: a designer records and maps FS00 once against your SAP system and publishes the template, and the finance team runs its account lists through it, each user under their own SAP login on their own computer.
- Record FS00 once. From the PostNow.ai ribbon, the designer records the creation of one account in FS00 and fills every field the file will carry, on the Type/Description, Control Data and Create/bank/interest tabs. Recording mode uses PostNow.ai's
ZPOSTNOW_*objects, installed once in SAP. 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. - Map every recorded field. In the Mapping Designer each recorded field becomes an Excel column or a fixed value. Chart of accounts and company code are usually fixed per template; account number, account group, descriptions, field status group and the indicators are columns. Check recording flags any screen the replay would leave without an OK-code and offers to add
/00. - Record one template per account pattern. A recording replays the screens it saw. Account groups with a different field status show different fields, and on S/4HANA an account of type Primary Costs or Revenue shows a cost element category that a balance sheet account does not. Typical templates are P&L accounts, balance sheet accounts and clearing accounts with open item management.
- Validate the sheet. Validate checks every cell offline: required fields, length and allowed values, such as an allow-list of account groups and field status groups, or X or blank in an indicator column. Whether an account number fits its group's interval is SAP's answer, and it comes when SAP processes the row.
- Debug a few accounts, then Simulate. Debug replays rows in the foreground in SAP GUI, every screen or only the screens with errors, so you watch three accounts go through before the file. Simulate plays every row's screens with the save removed and reports screen errors per row; the checks SAP makes at save come with Run.
- Run and read the Run Log. Run creates each account under the user's own SAP login and writes SAP's message, with user, time and system, to that row's Run Log. Retry Failed re-posts only rows whose Run Log starts with ERROR, scanning from the current Start Row. If someone clicks Run again on the same sheet, PostNow.ai first lists the rows already posted and offers Skip posted rows, Post again or Cancel.
Where the controller wants to see new accounts before they exist, an approval policy on the template holds the run until an approver has reviewed the rows in the PostNow.ai portal. The approval is tied to that exact data, so a sheet changed after approval needs approval again.
Chart of accounts segment and company code segment
In a PostNow.ai FS00 template, each row carries both segments of one account for one company code, because FS00 saves them together. SAP keeps them apart: the chart of accounts segment is shared by every company code that uses the chart, and the company code segment is what lets one company code post to the account.
| Segment | SAP table | Typical fields | Maintained alone in |
|---|---|---|---|
| Chart of accounts | SKA1, texts in SKAT | Account number, account group, P&L statement or balance sheet account (on S/4HANA the G/L account type), short and long text, group account number | FSP0 |
| Company code | SKB1 | Account currency, only balances in local currency, tax category, posting without tax allowed, reconciliation account for account type, open item management, line item display, sort key, field status group, post automatically only | FSS0 |
The company code segment is not optional. SAP Help states that an account needs a master record in the company code before you can post to it there, and that the account must already exist in the chart of accounts. A file that creates only chart data gives you accounts that every journal in that company code rejects.
Count the rows before you build the sheet. Four hundred new accounts for three company codes is 400 FS00 creations plus 800 company code extensions. The first company code comes with the creation; the other two are a separate job with a separate recording (see extending accounts to a new company code).
Descriptions are per language. The texts are stored per language in SKAT. A recording fills them in the logon language of the user who runs the template; other languages go in through the Key word/translation tab, which is one more set of columns and one more thing to record.
Account group: number interval and field status
In a PostNow.ai FS00 template the account group is a column with an allow-list, because SAP uses it for two checks at creation. The account groups of each chart of accounts are defined in OBD4.
- Number interval. Each group has a from-to range. When an account is created, SAP checks that its number lies in the interval of the group, and a number outside it stops the save with
FH 013"Account group … only defined for accounts from … to …". A number inside the wrong block of a well-planned chart loads without any message, so the number plan deserves a person's review. - Field status of the master record. The group decides which master record fields are required, optional or hidden in FS00. That is why a template recorded with one group may meet a required or hidden field on another group's account: record per group pattern, or check each group in Debug.
- Changing the group later is possible. SAP Help describes assigning a different account group to an existing account, which changes its field status and number interval; the interval only matters when an account is created. A wrong group is therefore a master data correction, not a reason to delete the account; it is still one more change to explain to audit, so choose the group at creation.
P&L statement account or balance sheet account
PostNow.ai sends this choice as one column of the chart of accounts segment, and SAP derives the account's year-end behaviour from it. It is decided once for the whole chart, so it is the same in every company code.
| Account kind | At year-end | Typical company code settings |
|---|---|---|
| Balance sheet account | The balance is carried forward on the same account | Open item management on clearing accounts such as GR/IR; account currency set to match bank accounts |
| Reconciliation account (a balance sheet account) | Carried forward, like any balance sheet account | Reconciliation account for account type D (customers), K (vendors) or A (assets). It is posted through the subledger, not directly in a journal |
| P&L statement account | The balance goes to the retained earnings account set by its P&L statement account type (OB53) | Tax category for expense and revenue accounts; on S/4HANA a CO object on every posting to a Primary Costs or Revenue account |
Two SAP messages show why this column needs a second look. FH 018 "Reconciliation account only allowed for balance sheet account" stops a reconciliation type on a P&L account. FH 601 "Change the balance sheet control only if nothing has been posted yet" blocks the switch between P&L and balance sheet once the account has postings (it is an error message by default).
Settings to get right before the first posting
PostNow.ai writes the company code settings exactly as each row states them, so reviewing these columns is the part of an FS00 mass upload that deserves the controller's time. Four of them are hard to change once postings exist.
| Setting | What it decides | Changing it after postings |
|---|---|---|
| Open item management | Items on the account are cleared against each other: GR/IR, bank clearing, payroll clearing | A program run (FAGL_ACTIVATE_OP), not a field change. The balance must be zero, so the program can post it to a transfer account and, if you choose, back again; the account needs line item display |
| Line item display | Individual items can be listed per account | Required for open item management, so switch it on wherever open items are planned |
| Reconciliation account for account type | The account is the control account of a customer, vendor or asset subledger | FH 110 "Modifications to reconciliation account not permitted": SAP KBA 3226451 (filed for S/4HANA Cloud Public Edition) allows removing the indicator only with no open items and a zero balance, and advises a new account |
| P&L or balance sheet (on S/4HANA, the G/L account type) | Carry-forward and, on S/4HANA, whether the account is a cost element | FH 601 once posted; on S/4HANA FH 212 once CO postings exist (below) |
| Field status group | Which fields are required, optional or hidden on every posting line to the account | A wrong group fails or under-documents journals until it is corrected in FS00 |
| Tax category, posting without tax allowed | Which tax codes, input, output or none, postings to the account may carry | Check it against the tax codes the posting files will use |
The field status group works on postings, not on the master record. Defined per field status variant in OBC4, it decides, for example, whether a journal line to this account must carry a cost center, a text or an assignment. A wrong group does not stop the account from being created; it shows up in the first FB01 or FB50 upload that posts to it.
G/L accounts in S/4HANA: account types and cost elements
On S/4HANA, PostNow.ai records the same FS00, with one more decision per account: the G/L account type. Cost elements are no longer separate master records, so the type also decides whether the account is a cost element.
| G/L account type | Used for | Controlling |
|---|---|---|
Balance Sheet Account (X) | Assets, liabilities, reconciliation and clearing accounts | No cost element |
Nonoperating Expense or Income (N) | P&L items outside the operating business, such as exchange rate gains and losses | No cost assignment needed |
Primary Costs or Revenue (P) | Operating expenses and revenues | Acts as a primary cost element; every posting needs a CO object such as a cost center, order, project or profitability segment. Cost element category, for example 01 primary costs or 11 revenues |
Secondary Costs (S) | Internal flows inside Controlling: assessments, internal activity allocation | Acts as a secondary cost element, categories such as 42 assessment or 43 internal activity allocation |
Cash Account (C, from S/4HANA 2020) | Bank G/L accounts used in bank account master data, with a G/L account subtype such as bank reconciliation account or bank subaccount | No cost element; record cash accounts in their own template, because the subtype is one more field |
- FS00 replaces KA01 and KA06. The cost element transactions
KA01–KA03andKA06are not available on S/4HANA; primary and secondary cost elements are created as G/L accounts in FS00, with the cost element category on the Control Data tab. An ECC file that loads accounts in FS00 and cost elements in KA01 becomes one S/4HANA file. - One more column, one more screen. Types
PandSneed the cost element category, which a balance sheet account does not have. Keep cost-type accounts in their own template so the recording matches the screens. - Cost element validity is gone. Cost elements are no longer time-dependent; default account assignments are maintained in
OKB9. - Choose the type before the first CO posting. SAP KBA 3084792 (filed for S/4HANA Cloud Public Edition) describes
FH 212"Cost elements cannot be deleted because transaction data exists" when a Primary Costs account is changed to Nonoperating: the change is refused once CO postings exist, even at zero balance, and SAP recommends creating a new account.
For an S/4HANA migration project, SAP also offers the Migration Cockpit objects "FI - G/L account" and "FI - G/L account - extend existing record by new org levels" (SAP KBA 2848568). How the cockpit compares with an Excel route is in SAP Migration Cockpit.
Posting route: FS00 recording or GL_ACCT_MASTER_SAVE_RFC
PostNow.ai creates G/L accounts through a recorded FS00 template, because SAP's G/L account BAPIs only read. BAPI_GL_ACC_GETDETAIL, BAPI_GL_ACC_GETLIST, BAPI_GL_ACC_EXISTENCECHECK and BAPI_GL_ACC_GETBALANCE return account data and balances; none of them creates an account, and SAP's own data transfer documentation for G/L account master data names batch input as the transfer method.
| Route | How it works | When it fits |
|---|---|---|
| PostNow.ai: recorded FS00 template | The FS00 screens are replayed for each row with that row's values, so FS00's own checks apply to every account | Creating accounts, extending them with an FSS0 recording, and changing them with a recording of FS00 in change mode, on ECC and S/4HANA |
PostNow.ai: GL_ACCT_MASTER_SAVE_RFC in BAPI mode | The designer finds the module by name in BAPI search and maps its parameters like a BAPI's | Where your SAP team already uses this module and has checked it in SE37 (below) |
| SAP Migration Cockpit | "FI - G/L account" and its extension object, loaded from SAP's file template or staging tables | An S/4HANA migration project run by the migration team |
LSMW with RFBISA00 | SAP's standard batch input program for G/L account master data | ECC loads that IT builds and runs |
OB_GLACC11 / OB_GLACC12 | SAP's mass maintenance of chart of accounts data and company code data | Setting one field on many existing accounts; not for creating them |
Before you use GL_ACCT_MASTER_SAVE_RFC
GL_ACCT_MASTER_SAVE_RFC is not one of the BAPI_GL_ACC_* BAPIs. SAP KBA 3589646 refers to it as a standard BAPI and describes the runtime error ITAB_ILLEGAL_SORT_ORDER in CL_FINS_SGLACCT_MASTER_REPLI when G/L account master data is created on SAP S/4HANA; the resolution is in the full KBA on SAP for Me. The KBA describes the error; it does not document the module's interface. We found no SAP source for the module's remote-enabled flag, and its sibling GL_ACCT_MASTER_SAVE is reported in user forums as not remote-enabled. So check three things first:
- In
SE37, the Attributes tab shows Remote-Enabled Module forGL_ACCT_MASTER_SAVE_RFCin your release. - The resolution of KBA 3589646 is applied where your release needs it, and you know whether it commits on its own or expects
BAPI_TRANSACTION_COMMIT, because that decides what a test run can roll back. - A handful of accounts created with it in a test client look right in FS00, in both segments, before a production file runs.
Extending G/L accounts to a new company code
PostNow.ai handles an extension as its own template: a recording of FSS0, the company code segment alone, with one row per account per new company code. The chart of accounts data already exists, so the row carries only the company code number, the account number and the company code fields.
- Keep creates and extensions in separate files. A create row for an account that already exists in the chart returns
FH 059"Account … has already been created in chart of accounts …", and an extension row for an account that is not yet in the chart fails because there is no chart data to extend. A file that mixes them returns errors that contradict each other. - Same chart of accounts only. A company code uses one operational chart of accounts (assigned in
OB62). An extension adds that company code to accounts of its own chart; a company code on another chart needs those accounts created in that chart. - Copy the settings deliberately. An extension is where the open item and reconciliation settings of the first company code are most often copied without thought. Review those columns per company code, as for a create.
- S/4HANA Cloud Public Edition. SAP KBA 2833324 points to the Mass Copy function of the Manage G/L Account Master Data app for copying accounts between company codes.
SAP GL account automation: templates finance can run again
SAP GL account automation with PostNow.ai means the FS00 templates are built once and reused for every new account request, instead of rebuilt for each project. New accounts arrive with a new company code, a reporting change, an acquisition or a migration, and each wave runs through the same published templates.
- Designers build, operators run. Operators get a run-only ribbon: no recording, no mapping, only the published template and their own SAP login.
- The chart's rules sit in the template. Allow-lists for account group, field status group and tax category, fixed chart of accounts and company code, required columns: Validate stops a row that breaks them before SAP sees it.
- Approval before Run. The controller approves the exact rows in the PostNow.ai portal; a changed sheet needs approval again.
- A record per row. The Run Log keeps SAP's message with user, time and system for every account, and SAP writes its change documents for each account as it does for manual maintenance.
How published templates, roles and the central library work across a team is described in Excel to SAP automation.
Worked example: 30 new accounts for company codes 1010 and 1710
PostNow.ai handles this with three published templates and three runs. Controlling needs 24 new expense accounts for a new cost reporting structure, and accounting needs 6 payroll and GR/IR-type clearing accounts. Company codes 1010 and 1710 both use chart of accounts YCOA on S/4HANA.
| Template | Rows | Fixed values | Columns filled |
|---|---|---|---|
| FS00 create, cost accounts | 24 | Chart YCOA, company code 1010, type Primary Costs or Revenue | Account number, account group, short and long text, cost element category 01, tax category, field status group |
| FS00 create, clearing accounts | 6 | Chart YCOA, company code 1010, type Balance Sheet Account | Account number, account group, texts, open item management X, line item display X, sort key, field status group |
| FSS0 extension | 30 | Company code 1710 | Account number and the company code fields, reviewed for 1710 |
- Validate. Three cells are flagged: a field status group typed as
G0O1that is not on the allow-list, a blank tax category on an expense row where the template makes it required, and aYin the open item column, which accepts only X or blank. All three are fixed in the sheet. - Debug. Three accounts from each create template run in the foreground. The cost accounts show the cost element category on the Control Data tab; the clearing accounts show both indicators set.
- Run the creates. 28 of 30 accounts are created. Two expense accounts numbered
81000010and81000011returnFH 013: the account group for P&L accounts in this chart covers60000000to79999999. The controller renumbers them71000010and71000011, and Retry Failed creates both. - Run the extension. All 30 accounts are extended to company code 1710, each row with SAP's message in its Run Log.
- Check. The G/L accountant opens one account of each template in FS00 for both company codes and compares both segments with the sheet. The journal template that will post to the new accounts has already been proved with them in the quality system.
Each account can be traced from its Excel row to SAP's message, user and time, and the same three templates are ready for the next request.
FS00 upload errors and the fix
PostNow.ai writes SAP's message to each failed row's Run Log, so the fix starts from the message text. These are the messages an FS00 mass upload meets most, plus two that appear later, at posting:
| Message | What it means | Fix |
|---|---|---|
FH 013 Account group … only defined for accounts from … to … | The account number lies outside the interval of its account group | Correct the number or the group; the intervals are in OBD4 |
FH 048 Enter an account group | The account group reached FS00 empty | Make the column required in the template, so Validate stops the row |
FH 059 Account … has already been created in chart of accounts … | A create row for an account that exists in the chart | Move the row to the extension template, or remove it if the company code segment exists too |
FH 018 Reconciliation account only allowed for balance sheet account | A reconciliation type on a P&L account | Correct the account kind or clear the reconciliation column |
00 349 Field … does not exist in the screen … | The replay met a screen without a recorded field: another account group's field status or another account type | Give that pattern its own template, and watch it once in Debug |
At posting: F5 507 G/L account … is not defined in chart of accounts … | A posting file names an account that was never created, often a typo or a missing leading digit | Check the number in the posting file against the Run Log of the create |
| At posting: the account fails in one company code only | The account has no company code segment there | Run the extension template for that company code |
| Run Log: UNKNOWN (PostNow.ai) | SAP's answer was lost after the row was sent, so the account may exist | Display the account in FS00 before running the row again; Retry Failed leaves UNKNOWN rows alone |
Checklist before an FS00 mass upload
PostNow.ai checks formats and allowed values and keeps operators on the published template; this list covers the decisions that stay with the controller and the G/L team.
- Creates and extensions are in separate files, one template per account pattern.
- Every account number lies in the interval of its account group.
- P&L or balance sheet, and on S/4HANA the G/L account type, is agreed for every account.
- Cost-type accounts carry a cost element category.
- Open item management is set on clearing accounts only, and line item display on every account that gets open item management.
- Reconciliation types are only on balance sheet accounts meant to control a subledger.
- Field status group and tax category match how the account will be posted.
- Account group, field status group and tax category columns have allow-lists in the template.
- The templates have been proved in a test client: accounts created, checked in FS00, and one journal posted to each pattern.
- Debug has replayed a few rows of each template in the target system.
What to plan for in an FS00 mass upload
PostNow.ai creates G/L accounts through FS00 itself, so SAP's own account group, interval and consistency checks decide every result.
- Run SAP's checks before the file. Validate checks the sheet in Excel; interval and consistency checks start when SAP processes the row, so Debug a few rows and prove each template in a test client.
- Spot-check after the run. Recorded runs use synchronous update, so each row's message in the Run Log is SAP's final answer. Display a sample in FS00 after the run to confirm the settings.
- Replay templates after an upgrade. A recording replays screens; after an S/4HANA conversion or a release upgrade, run each template in Debug and re-record any whose screens changed before operators run it.
- Load in dependency order. G/L accounts come before the assets and postings that refer to them, and cost-type postings also need their cost centers; the full order is in SAP master data mass upload.
- Keep re-runs in the same workbook. The re-post check reads this sheet's Run Log, and UNKNOWN rows are checked in SAP before anyone runs them again.
Recording rules, OK-codes and screen pitfalls are in the SAP BDC recording guide, and the BAPI-or-recording decision for other objects is in BAPI vs BDC in SAP.
