SAP BAPIObjectBAPI_FIXEDASSET_CREATE1ModuleFI_FICO

BAPI_FIXEDASSET_CREATE1 — Fixed Asset Master Create BAPI

BAPI_FIXEDASSET_CREATE1 creates a fixed asset master record in Asset Accounting, mirroring transaction AS01. It writes the asset header, time-dependent data (cost center, plant), and depreciation terms per area. It does not post any value and does not commit automatically; the caller must explicitly commit and must loop the full RETURN table, not just its first row, to detect partial failures.

This page covers what BAPI_FIXEDASSET_CREATE1 actually does against ANLA, ANLZ and ANLB, the parameters that carry real create data versus the companion structures that gate whether that data is even used, and the return-handling and commit mistakes that produce asset records with silently defaulted or missing fields. It also separates the functional configuration issues from the developer interface issues that both surface as the same symptom: an asset number returned but wrong data underneath.

Published 16 Sept 2026· 1,159 words

What it does

BAPI_FIXEDASSET_CREATE1 creates a fixed asset master record in Asset Accounting, mirroring transaction AS01, Create Asset. It builds the ANLA header record (asset class, description, capitalization data), the ANLZ time-dependent record (cost center, plant, location, business area) and the ANLB depreciation terms per depreciation area (useful life, depreciation key, start date). It is the standard entry point for mass asset creation from legacy migration loads, batch interface programs, or custom front ends that need to generate assets programmatically instead of stepping through the AS01 screen sequence. It creates the master record only; it does not post any financial value. A separate acquisition posting is required afterward to give the asset an opening balance.

Important parameters

The interface separates data-carrying structures from flag structures that control whether that data is actually applied; missing the second half of the pair is the single most common configuration-looking bug in this BAPI.

  • COMPANYCODE - the company code the new asset belongs to
  • ASSETCLASS - asset class controlling default depreciation terms, screen layout, and account determination for the new asset
  • GENERALDATA - header data structure carrying description, capitalization date and similar ANLA-level fields
  • GENERALDATAIS - companion structure marking which GENERALDATA fields are actually supplied by the caller rather than defaulted
  • TIMEDEPENDENTDATA - structure carrying cost center, plant, location and business area for the asset's current time interval
  • TIMEDEPENDENTDATAIS - companion structure marking which TIMEDEPENDENTDATA fields are actually supplied
  • DEPRECIATIONAREAS - table of depreciation terms per depreciation area: useful life, depreciation key, ordinary depreciation start date
  • ASSETNUMBER - export parameter, the main asset number assigned by the call
  • SUBNUMBER - export parameter, the asset sub-number assigned if applicable
  • RETURN - export table of BAPIRET2 messages covering every validation performed during the create

Commit behaviour

The BAPI does not commit the database change on its own. It performs the create against the update task and leaves the LUW open, exactly like the other classic master-data create BAPIs. The caller must explicitly call BAPI_TRANSACTION_COMMIT afterward. If commit is skipped, the exported ASSETNUMBER may still show a value pulled from the number range check, but the ANLA, ANLZ and ANLB records are never written; a following BAPI_FIXEDASSET_GETDETAIL call for that same number returns nothing. This is a frequent trap when testing in SE37 or in a quick ABAP report: the returned number looks like proof of success, but nothing was actually saved because the session ended without an explicit commit or rollback.

Return handling

RETURN is a table, not a single structure, and one call can return several messages of mixed severity across several depreciation areas or validation checks in a single go. The most common lazy read is checking only the first row for type E or A and ignoring the rest; a create can carry a warning on row one, such as a defaulted insurance value, and an error two rows further down, such as an invalid depreciation key on one area, and code that stops after the first row treats the whole call as successful. Warnings deserve attention too: FI-AA frequently returns type W for a field silently overridden by the asset class default, or for optional data that becomes mandatory later at depreciation run time. Treat E, A, and any message class the business has flagged as fatal as a hard failure, loop the entire table, and log the message number and variables rather than the rendered text, since text is language-dependent and cannot be matched reliably by downstream error handling.

ECC vs S/4HANA

Still functional and still the common integration point for programmatic asset creation on S/4HANA; the underlying asset accounting master data structures did not change enough to retire this BAPI. Newer Fiori apps cover manual single-record asset creation, and API-based alternatives exist for extension scenarios, but for mass migration loads and custom RFC-based interfaces this BAPI remains the pragmatic choice because it is stable and does not require standing up an API client. No official replacement supersedes it for classic BAPI-style integration.

Common pitfalls

Most integration failures with this BAPI look like a successful create with wrong or missing data underneath, rather than a clean hard error.

  • Asset class locked for the company code, or not assigned to that company code's chart of depreciation - the error is buried mid-table while ASSETNUMBER still shows a candidate value
  • GENERALDATAIS or TIMEDEPENDENTDATAIS flags left blank while the matching data field is populated - the field is silently ignored and the asset class default is used instead, producing an asset with the wrong cost center or wrong useful life that only surfaces during the next depreciation run
  • Depreciation area numbers in DEPRECIATIONAREAS not matching the areas actually defined for the company code's chart of depreciation - the area entry can be skipped rather than raising a loud error
  • Number range interval for the asset class exhausted during a bulk migration load, a common cutover-weekend failure when volumes were underestimated
  • Confusing this call with sub-number assignment - it creates a main asset number; posting under an existing main number requires a different interface, and reusing this one against an existing ANLA record produces duplicate main assets instead of sub-numbers
  • Running a batch job without a following BAPI_TRANSACTION_COMMIT, so a job log reporting thousands of assets created has in fact written nothing to the database

Whose problem this is

Functional (FI-AA) owns asset class configuration, depreciation area assignment, number range status, and the screen layout rules that decide which fields the BAPI will actually accept. Development owns the calling program: whether the IS-structures are set correctly, whether RETURN is looped in full, and whether a commit is issued. When an asset comes out with missing or defaulted data, functional needs the exact parameter values passed in; development needs the asset class customizing screenshot before assuming the interface is at fault.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-bapis/bapi-fixedasset-create1ERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.