How to mass create assets in SAP with AS01
AS01 in SAP creates one asset master record: the asset class, the company code, time-dependent assignments such as cost center and plant, and the depreciation terms for each depreciation area. To mass create assets in SAP from Excel, PostNow.ai calls BAPI_FIXEDASSET_CREATE1, the interface behind AS01, with one header row per asset and one detail row per depreciation area, so a whole asset list becomes an AS01 mass upload in one run. Validate checks the sheet offline, Simulate lets SAP check every asset and rolls it back, and Run writes the new asset number back to each row.
- AS01 creates the record, not the value. The first acquisition posting sets the capitalisation date and the depreciation start date, so a new asset is normally created with both left blank.
- Legacy assets with values take another route. An asset carried over from an old system with its accumulated depreciation is transferred with AS91 or
BAPI_FIXEDASSET_OVRTAKE_CREATE, not created with AS01.
This page covers one job: the SAP asset master upload from Excel, creating fixed asset records in bulk. The cost centers those assets point to are created first, as described in KS01 mass cost center creation. The other master data objects and the order to load them in are in SAP master data mass upload, and the acquisition postings that put a value on each asset are in SAP FICO mass posting.
How PostNow.ai mass creates AS01 assets from Excel
PostNow.ai treats an AS01 mass upload as a template: a designer builds it once against your SAP system and publishes it, and the fixed asset team runs its own asset lists through it, each user under their own SAP login on their own computer.
- Start from the template or the BAPI. Download the free AS01 asset master template, whose columns are already mapped to
BAPI_FIXEDASSET_CREATE1, or search for that BAPI by name in your own system. Find with AI proposes the same BAPI when you describe the job as AS01. - One H row per asset, one D row per depreciation area. A marker column groups an
Hrow (company code, asset class, description, inventory number, cost center, plant, location) with itsDrows (depreciation area, depreciation key, useful life, depreciation start). The D rows fill the BAPI'sDEPRECIATIONAREAStable, so each asset carries as many areas as its chart of depreciation needs. - Let PostNow.ai set the X flags. Each data structure of the BAPI has an X twin that tells SAP which fields to take; a value without its flag is ignored. PostNow.ai sets the flag for every field you map and, at run time, copies the area number into
DEPRECIATIONAREASX-AREA, because thereAREAis the key that ties the flag row to its data row. Review X-pairs shows every pair before the first run. - Validate the sheet. Validate checks every cell offline: required fields, type, length, date format and allowed values, such as an allow-list of asset classes or depreciation keys. Whether a cost center is valid on the date or a class may be used in the company code is SAP's answer, and that comes in Simulate.
- Simulate. PostNow.ai calls
BAPI_FIXEDASSET_CREATE1for every asset and thenBAPI_TRANSACTION_ROLLBACKinstead of a commit, so SAP's own messages appear on each H row and no asset is created. - Run. For each asset PostNow.ai calls the BAPI and commits with
BAPI_TRANSACTION_COMMITonly when SAP returned no error; otherwise it rolls back. In the template's Run Log Message settings, save the BAPI'sASSETexport to an Excel column: each H row then receives the asset number SAP assigned, next to its Run Log entry with user, time and system. - Re-run only what failed. Retry Failed re-posts only the assets marked ERROR. If someone clicks Run again on the same sheet, PostNow.ai first lists the assets whose Run Log already shows a success and offers Skip posted rows before anything is sent to SAP.
Where finance wants a second pair of eyes on new assets, 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.
The asset class decides most of the record
In a PostNow.ai AS01 template the asset class is the column to get right first, because SAP derives most of the asset from it. Once the class is chosen, Customizing has already settled these points:
| Set by the asset class | Where it is maintained | What it means for the file |
|---|---|---|
| Account determination | OAOA | Which balance sheet and depreciation accounts the asset's postings reach. The file names the class, never the accounts. |
| Number range | OAOA | Internal numbering: leave Asset Number blank and SAP assigns it. External numbering: the number in the file must lie in the class's interval. |
| Screen layout | OAOA | Which fields AS01 makes required, optional or hidden for this class. |
| Depreciation terms | OAYZ, per chart of depreciation | The default depreciation key and useful life for each area. Customizing can also stop users from overriding them in AS01. |
Split the file by asset class. Each class has its own screen layout and its own depreciation defaults, so a mixed file has columns that are required on some rows and meaningless on others. Classes for assets under construction and low-value assets are set up differently from ordinary classes; give them their own sheet and their own test.
Agree the depreciation terms with FI-AA before you build the file. Ask for the OAYZ defaults of each class in the company code's chart of depreciation. A D row that repeats the default is fine; a D row that differs should be a decision someone in fixed asset accounting can explain.
Company code, cost center and the time-dependent data
PostNow.ai sends the company code in the BAPI's KEY structure and the assignments in TIMEDEPENDENTDATA: cost center, plant, location, room, business area and profit center. SAP keeps this block as time-dependent data with its own validity, which is why an asset can move to another cost center later without losing its history.
- Create the cost centers first. Every cost center in the file must exist and be valid on the asset's date. SAP checks the cost center in the time-dependent data against its validity period, and one that has ended raises
KI 222"Cost center … does not exist on …". SAP Note 16653 describes the classic case: an asset created early in a new year with a cost center valid only in the previous year. Creating cost centers in bulk is covered in KS01 mass cost center creation. - The company code brings a chart of depreciation. The asset class must have depreciation data for that chart (otherwise
AA 986) and must be allowed in that company code (otherwiseAA 130). - The BAPI does not apply AS01's required-field rules. SAP KBA 2071461 states that
BAPI_FIXEDASSET_CREATE1does not check required asset master fields such as cost center or business area, so an asset can be created without them (SAP KBA 2071461). In PostNow.ai, mark those columns required in the template; Validate then stops a row with a blank cost center before SAP sees it. - Later moves are changes, not creates. Moving existing assets to a new cost center or location is an AS02 change. PostNow.ai's SAP mass change pairs
BAPI_FIXEDASSET_GETDETAILwithBAPI_FIXEDASSET_CHANGEfor that job.
Depreciation areas: one answer per area
In a PostNow.ai AS01 template each depreciation area is a D row under its asset, and each D row becomes one line of the BAPI's DEPRECIATIONAREAS table. Book depreciation in area 01 and, depending on the chart of depreciation, tax, group or cost-accounting areas can each carry a different key, life and start date for the same asset.
| Template column | BAPI field | What it decides |
|---|---|---|
| Depreciation Area | AREA | The valuation the row is for, such as 01 for book depreciation. It is also the key that joins the row to its flag row in DEPRECIATIONAREASX. |
| Depreciation Key | DEP_KEY | The calculation method and the period control, which decides when depreciation starts in the year of acquisition |
| Useful Life Years / Periods | ULIFE_YRS, ULIFE_PRDS | The planned life in this area: 8 years and 6 periods is 102 months in a 12-period year |
| Depreciation Start | ODEP_START_DATE | The ordinary depreciation start in this area; normally set by the first acquisition (see the next section) |
| Scrap Value | SCRAPVALUE | An amount the asset is not depreciated below, where the area uses one |
Ask FI-AA which areas are active in the company code's chart of depreciation, and give every asset one D row for each of those areas, with the terms FI-AA agreed for it. Two areas per asset means two D rows per asset: a 400-asset file with book and tax areas is 400 H rows and 800 D rows.
AS03 to check the depreciation terms of every area.Capitalisation date and depreciation start: which date drives depreciation
In PostNow.ai both dates are optional columns, and for new assets they usually stay empty. Depreciation is driven by the ordinary depreciation start date of each area (ODEP_START_DATE on the D row), not by the capitalisation date (CAP_DATE on the H row).
When the first acquisition is posted, SAP fills in the capitalisation date and the ordinary depreciation start date automatically, using the period control of the depreciation key. SAP KBA 1789106 also states that a start date entered by hand that lies before the first acquisition has no effect: planned depreciation starts only in the period of the posting (SAP KBA 1789106).
| Situation | Capitalisation date | Depreciation start |
|---|---|---|
| New asset, acquisition posted later in SAP | Leave blank; the first acquisition sets it | Leave blank; SAP derives it from the asset value date and the key's period control |
| Start agreed with FI-AA that differs from the acquisition month | Leave blank | Enter it on the D row of each area concerned, no earlier than the first acquisition |
| Legacy asset from an old system | From the legacy register, because no acquisition is posted in SAP | From the legacy register, per area, through the legacy transfer described below |
The free template carries both columns with a note that they are different fields and often different dates. Keep them apart in your own files: a capitalisation date copied into every area's depreciation start makes each area start on that date, whatever the period control of its key would have chosen.
Posting route: AS01 recording or BAPI_FIXEDASSET_CREATE1
PostNow.ai creates assets either way: by calling BAPI_FIXEDASSET_CREATE1 over RFC, or by replaying an AS01 recording. The BAPI is the first choice for a create, because it takes any number of depreciation areas in one table and returns SAP's result for each asset in its RETURN table.
| BAPI parameter | One per | Fields an AS01 upload usually fills |
|---|---|---|
KEY | Asset | COMPANYCODE; ASSET blank for internal numbering; SUBNUMBER |
GENERALDATA + X | Asset | ASSETCLASS, DESCRIPT, SERIAL_NO, INVENT_NO, QUANTITY, BASE_UOM |
POSTINGINFORMATION + X | Asset | CAP_DATE, only where it is known before the acquisition |
TIMEDEPENDENTDATA + X | Asset | COSTCENTER, PLANT, LOCATION, ROOM, BUS_AREA, PROFIT_CTR |
ALLOCATIONS + X | Asset | EVALGROUP1 to EVALGROUP5, INV_REASON |
DEPRECIATIONAREAS + X | Area (D row) | AREA, DEP_KEY, ULIFE_YRS, ULIFE_PRDS, ODEP_START_DATE, SCRAPVALUE |
| Exports | Asset | ASSET and SUBNUMBER: the number SAP assigned, which PostNow.ai saves to an Excel column on the H row |
The BAPI also has optional imports: REFERENCE names an existing asset to use as the model, and CREATESUBNUMBER asks for a sub-number (below). PostNow.ai's Simulate follows the call with BAPI_TRANSACTION_ROLLBACK instead of a commit, so the BAPI's own TESTRUN flag can stay empty.
Recording AS01 instead
A recorded AS01 works too: record one asset in SHDB with the depreciation areas your class uses, map the screen fields to columns, and PostNow.ai replays the recording for every row, as the demo above shows. The BDC recording guide covers how to record so the replay holds, and BAPI vs BDC in SAP compares the two methods.
- Recording mode needs PostNow.ai's
ZPOSTNOW_*objects in SAP, installed once per system. The BAPI route needs no add-on objects: RFC access plus the user's normal Asset Accounting authorisations. - Simulate on a recording walks the AS01 screens without saving, so SAP's save-time checks arrive at Run. Prove the recording on one asset in Debug before the first full file.
- SAP GUI stays with the user. 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.
Asset sub-numbers in bulk (AS11)
AS11 creates a sub-number under an existing main asset, for example a later extension or a component with its own useful life. In the free template the Sub Number column holds 0000 for a main asset. For sub-numbers, BAPI_FIXEDASSET_CREATE1 has a CREATESUBNUMBER flag, and SAP's message BAPI1022 002 "Asset main number not entered" indicates that the main asset number then goes in KEY-ASSET. SAP Community threads report mixed results with the flag, some users getting a new main asset instead, so create one sub-number in the test client and check it in AS03 before you load a file. If the test creates a new main asset, record AS11 and run the sub-numbers as a recording.
Worked example: 18 new machines and forklifts in company code 1010
PostNow.ai handles this with one published AS01 template and one sheet per asset class. The plant in company code 1010 has commissioned 12 machines (asset class 3000 in this system) and 6 forklifts (class 3100). Each asset is depreciated in area 01 (book) and area 15 (tax) of the company code's chart of depreciation. The acquisitions will be posted from the supplier invoices later, so the capitalisation date and the depreciation start stay blank.
| Excel row | Asset Ref | Columns filled |
|---|---|---|
| H | AS-0001 | Company code 1010, class 3000, description "CNC lathe, line 1", inventory number INV-0004412, cost center 1010-410, plant 1010, location Bay 3, asset number blank |
| D | AS-0001 | Area 01, depreciation key LINR, 10 years, 0 periods |
| D | AS-0001 | Area 15, depreciation key LINR, 8 years, 0 periods |
- Validate. Two cells are flagged: a forklift row with no cost center, which the template marks required, and a useful life typed as 7,5. Both are fixed in the sheet.
- Simulate. 11 of the 18 assets pass. All six forklifts return
AA 986: class 3100 has no depreciation data for the company code's chart of depreciation, and FI-AA maintains it inOAYZ. One machine returnsKI 222because cost center 1010-430 ended on 31.12.2025; the plant controller names its successor, 1010-440. A second Simulate is clean. - Run. All 18 assets are created. Each H row now holds its asset number, from
3000412to3000423for the machines and from3100087to3100092for the forklifts, with user, time and system. - Check. The fixed asset accountant opens the first asset in
AS03: class, cost center, and areas 01 and 15 with their keys and lives. The capitalisation date is still empty; the first acquisition posting will set it.
Every asset can be traced from its Excel row to its number in SAP, and the acquisition file for these 18 assets takes its asset numbers straight from the H rows.
Legacy assets with values: AS91, not AS01
PostNow.ai creates new assets through AS01's BAPI; an asset that arrives from a legacy system with its acquisition value and accumulated depreciation goes through SAP's legacy data transfer instead. Created with AS01, it would be a new asset waiting for its first acquisition, and would depreciate from full value as if it had just been bought.
| Step | ECC (classic Asset Accounting) | S/4HANA |
|---|---|---|
| Legacy asset master | AS91, with the takeover values entered in the same transaction | AS91 creates the master data only |
| Takeover values | Entered in AS91; they update the asset only, and the G/L balances are posted separately, typically with OASV | Posted with ABLDT, which posts to the transfer clearing account at once |
| Interface for volume | BAPI_FIXEDASSET_OVRTAKE_CREATE: master and values in one step | The same BAPI; the Migration Cockpit object Fixed asset (incl. balances and transactions) also uses it |
In PostNow.ai the legacy route is a BAPI template like any other: search for BAPI_FIXEDASSET_OVRTAKE_CREATE by name in your system, map the fields, Simulate, then Run. SAP's learning content for S/4HANA describes this BAPI as the tool for large volumes that creates the asset and transfers its values in one step, and says that the values of assets under construction go in its TRANSACTIONS table rather than CUMULATEDVALUES (SAP Learning).
- Fix the transfer date first. In S/4HANA the transfer date is set in Customizing (Asset Data Transfer, Parameters for Data Transfer), and the company code status is set to Asset data transfer not yet completed while the load runs.
- Year-end or mid-year. A transfer at the end of the last closed fiscal year carries cumulative values per area. A transfer during the year also carries the current year's depreciation and transactions; filling those tables for a year-end transfer raises "Table TRANSACTIONS can only be transferred during transfer within the fiscal year" (SAP KBA 2574132, filed for S/4HANA).
- Dates and lives come from the old register. Capitalisation date, depreciation start and the expired useful life are history, so they come from the legacy register, per area.
- Reconcile before sign-off. Acquisition value, accumulated depreciation and net book value per asset class against the legacy register being retired. The cutover plan around it is covered in SAP master data migration and SAP data migration.
AS01 and legacy transfer in S/4HANA
PostNow.ai uses the same AS01 template on S/4HANA: AS01 and BAPI_FIXEDASSET_CREATE1 are both there, and SAP KBA 2071461 on the BAPI's missing required-field checks lists both SAP ERP and SAP S/4HANA.
- Asset values live in the Universal Journal. Acquisitions and depreciation post to
ACDOCA; the classic tables such asANEPandANLCare no longer updated and are read through compatibility views. The asset master record that AS01 creates is the same record. - Legacy transfer is split.
AS91creates the master data, andABLDTposts the values. SAP's learning content notes thatABLDTdoes not support batch input, so values in volume go throughBAPI_FIXEDASSET_OVRTAKE_CREATEor the Migration Cockpit. - Cutover loads can use the Migration Cockpit. Its fixed asset object loads master data and balances from a file or staging tables, as described in SAP Migration Cockpit. Day-to-day asset creation after go-live is the AS01 template's job.
- Re-test the configuration, not just the file. Asset classes, the chart of depreciation and its areas are configuration; confirm them in the S/4HANA system before the first production run.
AS01 upload errors and the fix
PostNow.ai writes SAP's message to each failed asset's H row, so the fix starts from the message text. These are the ones a bulk AS01 run meets most, plus two problems that raise no message at all:
| Message | What it means | Fix |
|---|---|---|
AA 986 Asset class …, chart of dep.-dependent data for chart of dep. … not maint. | The class has no depreciation data for the chart of depreciation of this company code | FI-AA maintains the class in OAYZ for that chart, or the file uses the class meant for this company code |
AA 130 Asset class … cannot be used in company code … | The class is not allowed in this company code | Ask FI-AA which classes the company code uses and correct the class column |
KI 222 Cost center … does not exist on … | The cost center is not valid on the date of the asset's time-dependent data (SAP Note 16653) | Use a cost center valid on that date, or have controlling extend its validity; create missing ones first with KS01 |
AA 221 Reference asset does not exist | The REFERENCE import names an asset that is not in SAP | Correct the reference asset, or leave the reference columns empty |
| No message: asset created without a cost center | The BAPI does not enforce AS01's required fields (SAP KBA 2071461) | Mark cost center and business area required in the template so Validate stops the row |
No message: a value from the file is missing in AS03 | The field was sent without its X flag, so SAP ignored it | Open Review X-pairs and check that every mapped field has its flag; a flag column mapped by hand must hold X on every row |
BAPI1022 017 Table TRANSACTIONS can only be transferred during transfer within the fiscal year | Legacy transfer with BAPI_FIXEDASSET_OVRTAKE_CREATE: current-year tables filled for a year-end transfer (SAP KBA 2574132) | Send cumulative values only, or set the transfer date within the fiscal year |
| Run Log: UNKNOWN (PostNow.ai) | SAP's answer was lost after the asset was sent, so it may have been created | Look for the asset by inventory number or description in SAP before creating the row again; Retry Failed leaves UNKNOWN rows alone |
Checklist before an AS01 mass upload
PostNow.ai checks formats and allowed values and keeps operators on the published template; this list covers the decisions that stay with fixed asset accounting.
- The file holds new assets only; legacy assets with values are in a separate transfer file.
- One sheet per asset class, and every class is allowed in the company code.
- Every cost center exists and is valid on the asset's date.
- Each asset has one D row for every active depreciation area of the chart of depreciation.
- Depreciation keys and useful lives match the class defaults, or the differences are approved.
- Capitalisation date and depreciation start are blank for assets whose acquisition will be posted in SAP.
- Asset Number is blank for internal numbering, or inside the class's interval for external numbering.
- Cost center and the other fields your screen layout requires are marked required in the template.
- The template saves the BAPI's
ASSETexport to an Excel column, so every H row shows its new asset number. - Simulate has run clean on the whole file, and the first created asset has been checked in
AS03.
What to plan for in an AS01 mass upload
PostNow.ai creates assets through SAP's asset interface, so SAP's own class, company code and cost center checks decide every result.
- Run SAP's checks in Simulate. Validate checks formats, lengths and allowed values in Excel; class, chart of depreciation and cost center checks start when SAP sees the asset in Simulate.
- Review the depreciation terms as a person. A wrong key or life passes every check, so someone in fixed asset accounting signs off the D rows against the class defaults.
- Load cost centers before assets. The asset file depends on the cost center file; run them in that order, with the asset run after the cost centers are confirmed in SAP.
- Agree the date policy. New assets take their dates from the first acquisition; legacy assets take them from the old register. Write the rule into the template's field notes so every operator follows it.
- Prove sub-numbers once. Create one sub-number with the BAPI in the test client before a sub-number file, and keep a recorded
AS11template ready as the alternative. - 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 creates them again.
Making a template like this repeatable for a team (designers who build, operators who only run, a published template in the central library) is covered in Excel to SAP automation. Asset masters next to the other master data objects are in SAP master data mass upload, and the acquisition postings that follow (with a vendor in F-90, or against an offsetting account in ABZON) are in SAP FICO mass posting.
Free AS01 asset master upload template
PostNow.ai publishes a free AS01 asset master template: an H row per asset and a D row per depreciation area, three sample assets, a field guide that maps every column to its BAPI_FIXEDASSET_CREATE1 structure and field, and a note on the two X-structure traps. Open it in PostNow.ai to map and simulate it against your own system, or browse the other SAP master data templates.
