Quick answer

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.

postnow.ai — AS01 from Excel● DEMO
Watch PostNow.ai mass create asset master records in AS01 from Excel with a BDC recording.

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.

  1. 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.
  2. One H row per asset, one D row per depreciation area. A marker column groups an H row (company code, asset class, description, inventory number, cost center, plant, location) with its D rows (depreciation area, depreciation key, useful life, depreciation start). The D rows fill the BAPI's DEPRECIATIONAREAS table, so each asset carries as many areas as its chart of depreciation needs.
  3. 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 there AREA is the key that ties the flag row to its data row. Review X-pairs shows every pair before the first run.
  4. 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.
  5. Simulate. PostNow.ai calls BAPI_FIXEDASSET_CREATE1 for every asset and then BAPI_TRANSACTION_ROLLBACK instead of a commit, so SAP's own messages appear on each H row and no asset is created.
  6. Run. For each asset PostNow.ai calls the BAPI and commits with BAPI_TRANSACTION_COMMIT only when SAP returned no error; otherwise it rolls back. In the template's Run Log Message settings, save the BAPI's ASSET export 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.
  7. 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 classWhere it is maintainedWhat it means for the file
Account determinationOAOAWhich balance sheet and depreciation accounts the asset's postings reach. The file names the class, never the accounts.
Number rangeOAOAInternal numbering: leave Asset Number blank and SAP assigns it. External numbering: the number in the file must lie in the class's interval.
Screen layoutOAOAWhich fields AS01 makes required, optional or hidden for this class.
Depreciation termsOAYZ, per chart of depreciationThe 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 (otherwise AA 130).
  • The BAPI does not apply AS01's required-field rules. SAP KBA 2071461 states that BAPI_FIXEDASSET_CREATE1 does 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_GETDETAIL with BAPI_FIXEDASSET_CHANGE for 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 columnBAPI fieldWhat it decides
Depreciation AreaAREAThe 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 KeyDEP_KEYThe calculation method and the period control, which decides when depreciation starts in the year of acquisition
Useful Life Years / PeriodsULIFE_YRS, ULIFE_PRDSThe planned life in this area: 8 years and 6 periods is 102 months in a 12-period year
Depreciation StartODEP_START_DATEThe ordinary depreciation start in this area; normally set by the first acquisition (see the next section)
Scrap ValueSCRAPVALUEAn 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.

⚠
A wrong key or useful life raises no error. SAP accepts any life and any key the area allows, creates the asset and depreciates it on those terms from the first acquisition onwards. Whether ten years should have been eight is a business decision, so a person checks it: compare the D rows with the class defaults before the run, and after it open a sample of assets in 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).

SituationCapitalisation dateDepreciation start
New asset, acquisition posted later in SAPLeave blank; the first acquisition sets itLeave 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 monthLeave blankEnter it on the D row of each area concerned, no earlier than the first acquisition
Legacy asset from an old systemFrom the legacy register, because no acquisition is posted in SAPFrom 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 parameterOne perFields an AS01 upload usually fills
KEYAssetCOMPANYCODE; ASSET blank for internal numbering; SUBNUMBER
GENERALDATA + XAssetASSETCLASS, DESCRIPT, SERIAL_NO, INVENT_NO, QUANTITY, BASE_UOM
POSTINGINFORMATION + XAssetCAP_DATE, only where it is known before the acquisition
TIMEDEPENDENTDATA + XAssetCOSTCENTER, PLANT, LOCATION, ROOM, BUS_AREA, PROFIT_CTR
ALLOCATIONS + XAssetEVALGROUP1 to EVALGROUP5, INV_REASON
DEPRECIATIONAREAS + XArea (D row)AREA, DEP_KEY, ULIFE_YRS, ULIFE_PRDS, ODEP_START_DATE, SCRAPVALUE
ExportsAssetASSET 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 rowAsset RefColumns filled
HAS-0001Company 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
DAS-0001Area 01, depreciation key LINR, 10 years, 0 periods
DAS-0001Area 15, depreciation key LINR, 8 years, 0 periods
  1. 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.
  2. 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 in OAYZ. One machine returns KI 222 because cost center 1010-430 ended on 31.12.2025; the plant controller names its successor, 1010-440. A second Simulate is clean.
  3. Run. All 18 assets are created. Each H row now holds its asset number, from 3000412 to 3000423 for the machines and from 3100087 to 3100092 for the forklifts, with user, time and system.
  4. 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.

StepECC (classic Asset Accounting)S/4HANA
Legacy asset masterAS91, with the takeover values entered in the same transactionAS91 creates the master data only
Takeover valuesEntered in AS91; they update the asset only, and the G/L balances are posted separately, typically with OASVPosted with ABLDT, which posts to the transfer clearing account at once
Interface for volumeBAPI_FIXEDASSET_OVRTAKE_CREATE: master and values in one stepThe 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 as ANEP and ANLC are no longer updated and are read through compatibility views. The asset master record that AS01 creates is the same record.
  • Legacy transfer is split. AS91 creates the master data, and ABLDT posts the values. SAP's learning content notes that ABLDT does not support batch input, so values in volume go through BAPI_FIXEDASSET_OVRTAKE_CREATE or 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:

MessageWhat it meansFix
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 codeFI-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 codeAsk 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 existThe REFERENCE import names an asset that is not in SAPCorrect the reference asset, or leave the reference columns empty
No message: asset created without a cost centerThe 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 AS03The field was sent without its X flag, so SAP ignored itOpen 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 yearLegacy 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 createdLook 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.

  1. The file holds new assets only; legacy assets with values are in a separate transfer file.
  2. One sheet per asset class, and every class is allowed in the company code.
  3. Every cost center exists and is valid on the asset's date.
  4. Each asset has one D row for every active depreciation area of the chart of depreciation.
  5. Depreciation keys and useful lives match the class defaults, or the differences are approved.
  6. Capitalisation date and depreciation start are blank for assets whose acquisition will be posted in SAP.
  7. Asset Number is blank for internal numbering, or inside the class's interval for external numbering.
  8. Cost center and the other fields your screen layout requires are marked required in the template.
  9. The template saves the BAPI's ASSET export to an Excel column, so every H row shows its new asset number.
  10. 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 AS11 template 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.

Frequently asked questions

How do I mass create assets in SAP from Excel?
With PostNow.ai, put one header row per asset (company code, asset class, description, cost center, plant) and one detail row per depreciation area (area, depreciation key, useful life) in a template mapped to BAPI_FIXEDASSET_CREATE1, such as the free AS01 template. Validate checks the sheet offline, Simulate lets SAP check every asset and rolls it back, and Run creates the assets and writes each new asset number back to its row.
What is AS01 in SAP?
AS01 is the Asset Accounting transaction that creates an asset master record. It holds the asset class, the company code, general data such as description and inventory number, time-dependent assignments such as cost center and plant, and the depreciation terms for each depreciation area. AS02 changes an asset, AS03 displays it and AS11 creates a sub-number.
Which BAPI creates an asset master record?
BAPI_FIXEDASSET_CREATE1. The asset goes in KEY, GENERALDATA, POSTINGINFORMATION, TIMEDEPENDENTDATA and ALLOCATIONS, each with an X structure that flags the fields to take, and the depreciation terms go in the DEPRECIATIONAREAS table, one line per area. The new number comes back in the ASSET export, and the call is committed with BAPI_TRANSACTION_COMMIT. Legacy assets with values use BAPI_FIXEDASSET_OVRTAKE_CREATE instead.
AS01 or AS91: which one for legacy assets?
AS91. AS01 creates a new asset that waits for its first acquisition, so a legacy asset created there would depreciate from full value. In ECC, AS91 also takes the takeover values; in S/4HANA, AS91 creates the master data and ABLDT posts the values. For volume, BAPI_FIXEDASSET_OVRTAKE_CREATE creates the legacy asset and transfers its values in one step.
Which date drives depreciation: the capitalisation date or the depreciation start date?
The ordinary depreciation start date of each depreciation area. When the first acquisition is posted, SAP fills in the capitalisation date and the ordinary depreciation start date from the asset value date and the period control of the depreciation key (SAP KBA 1789106). A start date entered by hand before the first acquisition has no effect, so new assets are normally created with both dates blank.
Do cost centers have to exist before I create assets?
Yes. The cost center in the asset's time-dependent data must exist and be valid on the asset's date, or SAP raises KI 222 "Cost center ... does not exist on ...". Create cost centers first, for example with a KS01 mass upload, and keep in mind that BAPI_FIXEDASSET_CREATE1 can create an asset with no cost center at all (SAP KBA 2071461), so make the column required in your template.
How do I create asset sub-numbers in bulk?
AS11 creates a sub-number under an existing main asset. BAPI_FIXEDASSET_CREATE1 has a CREATESUBNUMBER flag for this, with the main asset number in KEY-ASSET, but SAP Community users report mixed results, so create one sub-number in the test client and check it in AS03 first. If the test creates a new main asset instead, record AS11 and run the sub-numbers in PostNow.ai as a recording.
What changes for asset uploads in S/4HANA?
Creating new assets stays the same: AS01 and BAPI_FIXEDASSET_CREATE1 work as in ECC, and asset values post to the Universal Journal (ACDOCA). Legacy transfer changes: AS91 creates master data only, ABLDT posts the takeover values to the transfer clearing account, and the Migration Cockpit's fixed asset object loads master data and balances at cutover.
Your asset list. SAP's asset rules.

Mass create your next assets in SAP from Excel

Map AS01 once, simulate every asset, then create them and see each asset number on its row.

Start free trial
  • 14-day free trial
  • Works with ECC and S/4HANA
  • Posts under your own SAP login