Jump to a template (24)
- MM01Material Master Create
- MM02Material Master Change
- MM17Material Mass Maintenance
- MM01Extend Material to Plant, Storage Location and Sales Org
- MM06Flag Material for Deletion
- MSC1NBatch Master Create
- CS01Bill of Material
- CS02Bill of Material Change
- CT04Characteristic Create
- CL20NObject Classification and Characteristic Values
- VK11Sales Pricing Conditions
- KS01Cost Center Create
- KS02Cost Center Change
- KA01 / KA06Cost Element Create
- KL01Activity Type Create
- KP26Activity Type Price Planning
- KP06Cost Center Primary Cost Planning
- KO01Internal Order Create
- CJ20NProject Definition and WBS Elements
- AS01Asset Master Create
- IL01Functional Location
- IE01Equipment Master
- FI01Bank Master Create
- PA30HR Master Data Infotype Maintenance
Loading order and dependencies
Master data has dependencies and they bite in a predictable order. Characteristics before classification, because a class cannot reference a characteristic that does not exist. Materials before bills of material, batches and classification. Cost elements and activity types before cost centre planning. Asset classes before asset masters. Functional locations before equipment. Projects before anything that account assigns to a WBS element. Load in that order and most of the failures that usually appear in a first cutover simply do not happen.
Use this sequence whenever these files serve as SAP migration templates in an S/4HANA migration, and again for mass loads after go live.
Using these templates with the SAP Migration Cockpit or LSMW
An SAP data migration project usually starts with master data, and these workbooks fit that stage. SAP designed the SAP Migration Cockpit for the initial load into a new system, so the column to field mapping here is the same mapping the Cockpit and LSMW both need. Teams use them as the collection and cleansing layer before an S/4HANA migration go live, then keep them for the mass change work that follows.
SAP Material Master Upload Template (MM01)
Create material master records with the views your columns populate. One row is one material in one plant.
BAPI_MATERIAL_SAVEDATAWatch DemoThe standard interface for creating and changing material master data. The same BAPI serves MM01, MM02 and MM17.
What to watchEvery data structure has a partner X structure, and the X structure is what makes a field count. Send PLANTDATA-DISMM without setting PLANTDATAX-DISMM to X and the value is silently ignored. On a change that means nothing happens. On a create it means the field comes out empty.
Mandatory fields 6 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Industry Sector | HEADDATA | IND_SECTOR | M mechanical, C chemical, P pharma. |
| Material Type | HEADDATA | MATL_TYPE | FERT, ROH, HALB, HAWA, DIEN. |
| Material Description | MATERIALDESCRIPTION | MATL_DESC | Max 40 characters. |
| Base Unit of Measure | CLIENTDATA | BASE_UOM | Must exist in T006. |
| Material Group | CLIENTDATA | MATL_GROUP | Must exist in T023. |
| Plant | PLANTDATA | PLANT | The plant the plant level views are created for. |
SAP Material Master Change Upload Template (MM02)
Change fields on materials that already exist. A change edits fields inside a view. It does not create the view.
BAPI_MATERIAL_SAVEDATAWatch DemoThe same interface as MM01. On a change, the X structures do the real work: they are what separates a field you are changing from one you are leaving alone.
What to watchEvery data structure has a partner X structure, and the X structure is what makes a field count. Send PLANTDATA-DISMM without setting PLANTDATAX-DISMM to X and the value is silently ignored. On a change that means nothing happens. On a create it means the field comes out empty.
Mandatory fields 2 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Material | HEADDATA | MATERIAL | Must already exist. |
| Plant | PLANTDATA | PLANT | Required for any plant level field. |
SAP Material Mass Maintenance Upload Template (MM17)
The bulk field sweep. Same one field across many materials, where MM17 on screen becomes unwieldy.
For the SAP transaction itself, see how MM17 works.
BAPI_MATERIAL_SAVEDATAWatch DemoMM17 on screen and this BAPI reach the same place. The BAPI route gives you per-row validation and a per-row result, which the screen does not.
What to watchEvery data structure has a partner X structure, and the X structure is what makes a field count. Send PLANTDATA-DISMM without setting PLANTDATAX-DISMM to X and the value is silently ignored. On a change that means nothing happens. On a create it means the field comes out empty.
Mandatory fields 1 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Material | HEADDATA | MATERIAL | Must already exist. |
SAP Material Extension to a New Plant or Sales Org Upload Template (MM01)
Give an existing material a new plant, storage location or sales organisation view. One row is one extension.
BAPI_MATERIAL_SAVEDATAWatch DemoThe same interface as material create. Extending is just sending the organisational key with the views you want and nothing else.
What to watchAn extension is not a separate operation in SAP. You call the same create interface, send the material number with only the new organisational key, and flag only the views you are adding. Send a view flag without its X structure and nothing is written for that view. Send data for a view you did not flag on HEADDATA and it is ignored without a message.
Mandatory fields 1 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Material | HEADDATA | MATERIAL | Must already exist. |
SAP Material Deletion Flag Upload Template (MM06)
Flag materials for deletion at client, plant or storage location level. One row is one material at one level.
BAPI_MATERIAL_SAVEDATAWatch DemoThe same interface as any material change. The deletion flag is an ordinary field, which means it needs its X flag like any other.
What to watchThe deletion flag is an ordinary field, so it obeys the ordinary rule: without its X flag set it is silently ignored. A deletion run that reports success and flags nothing is almost always this. And the level matters: a client level flag affects every plant, a plant level flag affects one.
Mandatory fields 2 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Material | HEADDATA | MATERIAL | Must already exist. |
| Deletion Flag | CLIENTDATA | DEL_FLAG | X sets the flag. Blank with the X indicator set clears it. |
SAP Batch Master Upload Template (MSC1N)
Create batch master records. One row is one batch of one material in one plant.
BAPI_BATCH_CREATEWatch DemoA compact interface. Note that BATCH and BATCHATTRIBUTES genuinely appear on both the importing and exporting side, which is legal and confirmed by working code.
What to watchClassification does not happen unless you ask for it. BATCHCONTROLFIELDS-DOCLASSIFY and -CLASS_NUM are what create the classification values. Leave them out and the BAPI creates the batch record cleanly and silently skips the characteristics, which is usually the whole point of the batch.
Mandatory fields 1 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Material | MATERIAL | MATERIAL | Must be batch managed. |
SAP Bill of Material Upload Template (CS01)
Create material BOMs. An H row is the BOM header and the D rows under it are its components.
CSAP_MAT_BOM_CREATEWatch DemoThis is a function module, not a BAPI. It predates the BAPI conventions entirely, has no RETURN table, and raises a classic ABAP exception instead.
What to watchThere is no RETURN table on this module, so the usual BAPI error handling finds nothing and treats every failure as a success. Failures raise the ERROR exception, so SY-SUBRC must be checked. And commit works differently: the module carries its own FL_COMMIT_AND_WAIT flag, which defaults to blank, so with the default the caller must commit. Samples that omit both are why many BOM loads appear to succeed and persist nothing.
Mandatory fields 10 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Material | MATERIAL | MATNR | The header material the BOM belongs to. |
| Plant | PLANT | WERKS | |
| BOM Usage | BOM_USAGE | STLAN | 1 production, 3 universal. |
| Valid From | VALID_FROM | DATUV | YYYYMMDD. |
| Base Quantity | I_STKO | BASE_QUAN | The quantity the component quantities relate to. |
| Base Unit | I_STKO | BASE_UNIT | |
| Item Number | T_STPO | ITEM_NO | 0010, 0020. Space them so items can be inserted later. |
| Item Category | T_STPO | ITEM_CATEG | L stock, N non-stock, T text. |
| Component Quantity | T_STPO | COMP_QTY | |
| Component Unit | T_STPO | COMP_UNIT |
SAP Bill of Material Change Upload Template (CS02)
Change existing material bills of material in bulk. An H row identifies the BOM, D rows are the items.
CSAP_MAT_BOM_MAINTAINWatch DemoAn API function module rather than a BAPI, which means no BAPIRET2, no X structures, and a commit that happens by default.
What to watchThe quantity and date fields here are batch input character fields, not typed numbers and dates. COMP_QTY is CHAR 18, COMP_SCRAP is CHAR 6 and VALID_FROM is CHAR 10, all on data elements whose names end in _BI. They have to be formatted in the calling user's own decimal and date notation, so twelve and a half is 12,5 for one user and 12.5 for another, and a date is 24.09.2026 rather than 20260924.
Mandatory fields 7 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Material | MATERIAL | MATERIAL | The material the BOM belongs to. |
| Plant | PLANT | PLANT | |
| BOM Usage | BOM_USAGE | BOM_USAGE | 1 is production. |
| Alternative | ALTERNATIVE | ALTERNATIVE | 01 unless there are several. |
| Valid From | VALID_FROM | VALID_FROM | In the user's date format, for example 01.05.2026. |
| Item Number | T_STPO | ITEM_NO | The new or retained item number. Four characters. |
| Item Category | T_STPO | ITEM_CATEG | L stock item, N non stock, T text. |
SAP Characteristic Upload Template (CT04)
Create classification characteristics with their allowed values. An H row is the characteristic, D rows are its allowed values.
BAPI_CHARACT_CREATEWatch DemoThe classification interface. Allowed values are split across separate tables by data type, which is the thing that catches people.
What to watchAllowed values are split across three tables by data type, and their descriptions sit in a fourth. A single allowed-values column routed to the wrong table for the declared data type produces a characteristic with no value list and no error. This template carries a Data Type column on the header so the loader can route correctly.
Mandatory fields 4 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Characteristic Name | CHARACTDETAIL | CHARACT_NAME | Sits inside the detail structure, not as a separate parameter. |
| Description | CHARACTDESCR | Description text, one row per language. | |
| Data Type | CHARACTDETAIL | DATA_TYPE | Decides which value table the allowed values go to. |
| Length | CHARACTDETAIL | LENGTH | Number of characters or digits. |
SAP Material Classification Upload Template (CL20N)
Assign objects to classes and set their characteristic values. An H row is the class assignment, D rows are the values.
BAPI_OBJCL_CREATEWatch DemoThree value tables, and which one a value goes in depends on the characteristic's own data type, not on what the value looks like.
What to watchThe three value tables split by the characteristic's data type in CT04, not by how the value looks in your sheet. CHAR and BOOL go to the character table, CURR to the currency table, and NUM, DATE and TIME all go to the numeric table, whose VALUE_FROM field is a floating point number. A date characteristic therefore cannot be sent as 20260924. Pipe everything into the character table and every numeric, date and currency characteristic is lost.
Mandatory fields 5 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Object Key | OBJECTKEYNEW | OBJECT | The concatenated key. A material number alone for class type 001. |
| Object Table | OBJECTTABLENEW | OBJECTTABLE | MARA for materials, MCH1 for batches. |
| Class | CLASSNUMNEW | CLASSNUM | Up to eighteen characters. |
| Class Type | CLASSTYPENEW | CLASSTYPE | 001 is the material class type. |
| Characteristic | ALLOCVALUESCHAR | CHARACT | Up to thirty characters. Must exist in CT04. |
SAP Sales Pricing Conditions Upload Template (VK11)
Create sales condition records in bulk. One row is one condition record and one validity period.
BAPI_PRICES_CONDITIONSWatch DemoA condition interface with its own naming convention, its own operation codes, and one field that is unlike anything else in SAP.
What to watchVARKEY is a flat 100 character field into which the entire key of the target condition table has to be packed, in the exact field sequence and exact lengths of that table, with no delimiters. It is not a list of fields. Get the packing wrong by one character and the record lands against the wrong key with no error.
Mandatory fields 9 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Operation | TI_BAPICONDCT | OPERATION | 009 create, 004 change, 003 delete. Set the same code in all three tables. |
| Application | TI_BAPICONDCT | APPLICATIO | V for sales, M for purchasing. |
| Condition Usage | TI_BAPICONDCT | COND_USAGE | A for pricing. |
| Condition Table | TI_BAPICONDCT | TABLE_NO | 305, 304 and so on. Decides the VARKEY layout. |
| Condition Type | TI_BAPICONDCT | COND_TYPE | PR00 price, K007 customer discount. |
| Valid From | TI_BAPICONDCT | VALID_FROM | YYYYMMDD. |
| Valid To | TI_BAPICONDCT | VALID_TO | YYYYMMDD. |
| Amount | TI_BAPICONDIT | COND_VALUE | A 9 decimal BAPI amount. Negative for discounts. |
| Rate Unit | TI_BAPICONDIT | CONDCURR | A currency, or a percentage marker for percentage conditions. |
SAP Cost Center Upload Template (KS01)
Create cost centers in bulk. One row is one cost center and one validity interval.
BAPI_COSTCENTER_CREATEMULTIPLEWatch DemoA list-based BAPI. You pass a table of cost centers and one controlling area for the whole call.
What to watchTwo things to know before you run: CONTROLLINGAREA is passed once for the whole call, so every row in the file must belong to the same controlling area. And VALID_FROM and VALID_TO are per-row with no default, so a blank validity interval creates an unusable record rather than defaulting to something sensible.
Mandatory fields 11 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Controlling Area | CONTROLLINGAREA | CO_AREA | Passed once for the whole file. Every row must match. |
| Cost Center | COSTCENTERLIST | COSTCENTER | |
| Valid From | COSTCENTERLIST | VALID_FROM | No default. YYYYMMDD. |
| Valid To | COSTCENTERLIST | VALID_TO | No default. Often 99991231. YYYYMMDD. |
| Name | COSTCENTERLIST | NAME | Short name, max 20 characters. |
| Description | COSTCENTERLIST | DESCRIPT | Max 40 characters. |
| Person Responsible | COSTCENTERLIST | PERSON_IN_CHARGE | |
| Cost Center Category | COSTCENTERLIST | COSTCENTER_TYPE | 1 production, 2 service, F production. |
| Hierarchy Area | COSTCENTERLIST | COSTCTR_HIER_GRP | Must be an existing node in the standard hierarchy. |
| Company Code | COSTCENTERLIST | COMP_CODE | |
| Currency | COSTCENTERLIST | CURRENCY |
SAP Cost Center Change Upload Template (KS02)
Change existing cost centers in bulk. One row is one cost center and one validity interval.
BAPI_COSTCENTER_CHANGEMULTIPLEWatch DemoThe change counterpart to the create BAPI. It works differently from most change interfaces, and the difference matters.
What to watchThis BAPI has NO X structures. Most SAP change interfaces use paired X structures to say which fields you mean. This one uses a single RESET_FILLED_FIELDS switch for the entire call instead. A template built on the usual X-column mental model will be wrong here, and the wrong switch setting either wipes populated fields or refuses to clear them.
Mandatory fields 4 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Controlling Area | CONTROLLINGAREA | CO_AREA | Passed once for the whole file. |
| Cost Center | COSTCENTERLIST | COSTCENTER | Must already exist. |
| Valid From | COSTCENTERLIST | VALID_FROM | Identifies the time slice. YYYYMMDD. |
| Valid To | COSTCENTERLIST | VALID_TO | YYYYMMDD. |
SAP Cost Element Upload Template (KA01 / KA06)
Create primary and secondary cost elements. One row is one cost element and one validity interval.
BAPI_COSTELEM_CREATEMULTIPLEWatch DemoA list-based CO interface. Note the real function module name is BAPI_COSTELEM_CREATEMULTIPLE, not BAPI_COSTELEMENT_CREATEMULTIPLE, which exceeds the 30 character ABAP limit and does not exist.
What to watchThis structure uses ABAP field names, not the English BAPI style. The cost element is KSTAR, the validity is DATAB and DATBI, the name is KTEXT and the description is KLTXT. Building the template by analogy with the cost center BAPI, which uses COSTCENTER, VALID_FROM, NAME and DESCRIPT, produces columns that map to nothing.
Mandatory fields 7 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Controlling Area | COAREA | CO_AREA | Passed once for the whole file. Note the parameter is COAREA, not CONTROLLINGAREA. |
| Cost Element | COSTELEMENTLIST | KSTAR | ABAP field name, not COSTELEMENT. |
| Valid From | COSTELEMENTLIST | DATAB | ABAP field name, not VALID_FROM. YYYYMMDD. |
| Valid To | COSTELEMENTLIST | DATBI | ABAP field name, not VALID_TO. YYYYMMDD. |
| Name | COSTELEMENTLIST | KTEXT | Max 20 characters. |
| Description | COSTELEMENTLIST | KLTXT | Max 40 characters. |
| Category | COSTELEMENTLIST | KATYP | 1 primary, 43 secondary for internal activity allocation. |
SAP Activity Type Upload Template (KL01)
Create activity types. One row is one activity type and one validity interval.
BAPI_ACTTYPE_CREATEMULTIPLEWatch DemoA list-based CO interface. The real function module name is BAPI_ACTTYPE_CREATEMULTIPLE, not BAPI_ACTIVITYTYPE_CREATEMULTIPLE, which exceeds the 30 character ABAP limit and does not exist.
What to watchThe allocation cost element must already exist. It has to be a secondary cost element of category 43, in the same controlling area, with a validity window that covers the activity type's own. Loading activity types and their cost elements in the same run, in the wrong order, fails here and the message does not always say why.
Mandatory fields 9 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Controlling Area | COAREA | CO_AREA | Passed once for the whole file. |
| Activity Type | ACTIVITYTYPELIST | ACTTYPE | |
| Valid From | ACTIVITYTYPELIST | VALID_FROM | YYYYMMDD. |
| Valid To | ACTIVITYTYPELIST | VALID_TO | YYYYMMDD. |
| Name | ACTIVITYTYPELIST | NAME | Max 20 characters. |
| Description | ACTIVITYTYPELIST | DESCRIPT | Max 40 characters. |
| Activity Unit | ACTIVITYTYPELIST | ACT_UNIT | H, MIN, EA. |
| Activity Type Category | ACTIVITYTYPELIST | ACTIVITY_CAT | 1 manual entry and manual allocation. |
| Allocation Cost Element | ACTIVITYTYPELIST | ALLOC_COST_ELEM | Must be an existing secondary cost element of category 43. |
SAP Activity Price Planning Upload Template (KP26)
Plan activity quantities, capacities and prices by cost centre and activity type. An H row is the planning header, D rows are the combinations.
BAPI_COSTACTPLN_POSTACTOUTPUTWatch DemoFour parallel data tables joined by a fifth index table. This is the shape of the whole CO planning family and it is the thing people get wrong.
What to watchINDEXSTRUCTURE is not bookkeeping, it is the join. The four data tables are not matched by position. Each row of INDEXSTRUCTURE names one COOBJECT row, one value row and one CONTRL row by their index numbers. Supply the data tables without it and the call returns cleanly having planned nothing.
Mandatory fields 13 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Controlling Area | HEADERINFO | CO_AREA | |
| Fiscal Year | HEADERINFO | FISC_YEAR | YYYY. |
| Period From | HEADERINFO | PERIOD_FROM | 001 for a full year plan. |
| Period To | HEADERINFO | PERIOD_TO | 012 for a full year plan. |
| Version | HEADERINFO | VERSION | 0 is the operational plan version. |
| Object Index | COOBJECT | OBJECT_INDEX | Sequential. Named by INDEXSTRUCTURE. |
| Cost Center | COOBJECT | COSTCENTER | |
| Activity Type | COOBJECT | ACTTYPE | Six characters. |
| Value Index | TOTVALUE | VALUE_INDEX | Sequential. Named by INDEXSTRUCTURE. |
| Planned Quantity | TOTVALUE | ACTVTY_QTY | The activity quantity for the year. |
| Unit of Measure | TOTVALUE | UNIT_OF_MEASURE | The activity unit, for example H for hours. |
| Currency | TOTVALUE | CURRENCY | |
| Attribute Index | CONTRL | ATTRIB_INDEX | Sequential. Named by INDEXSTRUCTURE. |
SAP Cost Centre Cost Planning Upload Template (KP06)
Plan primary costs by cost centre and cost element. An H row is the planning header, D rows are the cost element lines.
BAPI_COSTACTPLN_POSTPRIMCOSTWatch DemoThe same four table plus index shape as activity price planning, but with different table types. They are not interchangeable.
What to watchThe two planning BAPIs look interchangeable and are not. INDEXSTRUCTURE is BAPIACPSTRU in both, but the object, value and control tables here are the BAPIPCP types, not the BAPIACP types, and the field sets genuinely differ. BAPIPCPOBJ has an order and a WBS element; BAPIACPOBJ has neither. A template built for one will not feed the other.
Mandatory fields 10 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Controlling Area | HEADERINFO | CO_AREA | |
| Fiscal Year | HEADERINFO | FISC_YEAR | YYYY. |
| Period From | HEADERINFO | PERIOD_FROM | |
| Period To | HEADERINFO | PERIOD_TO | |
| Version | HEADERINFO | VERSION | 0 is the operational plan version. |
| Object Index | COOBJECT | OBJECT_INDEX | Sequential. Named by INDEXSTRUCTURE. |
| Value Index | TOTVALUE | VALUE_INDEX | Sequential. Named by INDEXSTRUCTURE. |
| Cost Element | TOTVALUE | COST_ELEM | Ten characters, zero padded. |
| Transaction Currency | TOTVALUE | TRANS_CURR | |
| Attribute Index | CONTRL | ATTRIB_INDEX | Sequential. Named by INDEXSTRUCTURE. |
SAP Internal Order Upload Template (KO01)
Create internal orders with their settlement rules. An H row is the order, D rows are its settlement rules.
BAPI_INTERNALORDER_CREATEWatch DemoAn unusually small interface. Note the I_ and E_ prefixes on the master data parameters, which are not the usual BAPI convention and are frequently mistyped.
What to watchThe parameter names carry I_ and E_ prefixes, which almost no other BAPI does. It is I_MASTER_DATA going in and E_MASTER_DATA coming back, not MASTER_DATA in both directions. A mapping written from the usual convention will not bind.
Mandatory fields 5 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Order Type | I_MASTER_DATA | ORDER_TYPE | Drives number range and settlement behaviour. |
| Description | I_MASTER_DATA | ORDER_NAME | Max 40 characters. |
| Controlling Area | I_MASTER_DATA | CO_AREA | |
| Company Code | I_MASTER_DATA | COMP_CODE | |
| Currency | I_MASTER_DATA | CURRENCY |
SAP Project and WBS Element Upload Template (CJ20N)
Create project definitions with their work breakdown structures. An H row is the project, D rows are the WBS elements.
BAPI_PROJECT_MAINTAINWatch DemoA method driven interface with paired update tables. Every data table has a twin whose fields are all flags, and the twin has no key of its own.
What to watchThe update table has no key. Its first field, confusingly called WBS_ELEMENT, is itself a CHAR 1 flag rather than a WBS identifier, so nothing in that table says which element a row of flags belongs to. It is matched against the data table positionally, row for row. Filter, sort or skip a row in one table and not the other and the flags land on the wrong elements, silently, because every value involved is a valid X or blank.
Mandatory fields 6 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Project Definition | I_PROJECT_DEFINITION | PROJECT_DEFINITION | Up to twenty four characters. Must fit the project coding mask. |
| Description | I_PROJECT_DEFINITION | DESCRIPTION | Forty characters. |
| Company Code | I_PROJECT_DEFINITION | COMP_CODE | |
| Controlling Area | I_PROJECT_DEFINITION | CONTROLLING_AREA | |
| Project Profile | I_PROJECT_DEFINITION | PROJECT_PROFILE | Seven characters. Decides most of the defaults. |
| WBS Element | I_WBS_ELEMENT_TABLE | WBS_ELEMENT | The readable form. Up to twenty four characters. |
SAP Asset Master Upload Template (AS01)
Create fixed asset master records with their depreciation areas. An H row is the asset, D rows are its depreciation areas.
BAPI_FIXEDASSET_CREATE1Watch DemoThe asset master interface. Almost everything is an importing structure with a paired X structure, and the depreciation areas are the only real table.
What to watchTwo X traps on this one. Every data structure needs its X partner flagged or the value is silently ignored. And in DEPRECIATIONAREASX the first field AREA is NOT a flag: it stays NUMC 2 and must carry the real depreciation area number, so the X row can be matched to its data row.
Mandatory fields 7 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Company Code | KEY | COMPANYCODE | |
| Asset Class | GENERALDATA | ASSETCLASS | Drives number range, account determination and depreciation defaults. |
| Description | GENERALDATA | DESCRIPT | Max 50 characters. |
| Cost Center | TIMEDEPENDENTDATA | COSTCENTER | |
| Depreciation Area | DEPRECIATIONAREAS | AREA | 01 book depreciation. Also the join key in the X table. |
| Depreciation Key | DEPRECIATIONAREAS | DEP_KEY | |
| Useful Life Years | DEPRECIATIONAREAS | ULIFE_YRS |
SAP Functional Location Upload Template (IL01)
Create functional locations. One row is one location. Load top down, parents before children.
BAPI_FUNCLOC_CREATEWatch DemoA compact interface with no TABLES parameters at all. General technical object data and functional location specific data are two separate importing structures.
What to watchA documented SAP behaviour worth knowing before you load a hierarchy. When you set DATA_SPECIFIC-SUPFLOC, the BAPI marks the data origin of maintenance plant, planning plant, cost center and company code as maintained directly, not inherited from the superior location. The child looks correct but is permanently detached from the parent's data propagation. SAP KBA 1704117 documents this.
Mandatory fields 5 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Functional Location | EXTERNAL_NUMBER | FUNCLOC | Must match the structure indicator mask, separators included. |
| Structure Indicator | DATA_SPECIFIC | STRIND | |
| Category | DATA_SPECIFIC | CATEGORY | Functional location category. |
| Description | DATA_GENERAL | DESCRIPT | Max 40 characters. |
| Maintenance Plant | DATA_GENERAL | MAINTPLANT |
SAP Equipment Master Upload Template (IE01)
Create equipment master records. One row is one piece of equipment.
BAPI_EQUI_CREATEWatch DemoThe sibling of the functional location BAPI, sharing the same general data structure. Installation is handled by its own structure, not by the specific data.
What to watchDo not map a functional location column to DATA_SPECIFIC-READ_FLOC or superior equipment to -READ_SUPEQ. The READ_ prefix marks those as output only fields. Installation is driven by DATA_INSTALL and VALID_DATE. A template that maps to the READ_ fields creates unattached equipment with no error message at all.
Mandatory fields 4 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Valid From | VALID_DATE | INST_DATE | Valid from date for the time segment. YYYYMMDD. |
| Equipment Category | DATA_SPECIFIC | EQUICATGRY | M machines, P production resources. |
| Description | DATA_GENERAL | DESCRIPT | Max 40 characters. |
| Maintenance Plant | DATA_GENERAL | MAINTPLANT |
SAP Bank Master Upload Template (FI01)
Create bank master records. One row is one bank, keyed by country and bank key.
BAPI_BANK_CREATEWatch DemoA small interface with no TABLES parameters. The whole address structure is only 11 fields.
What to watchRETURN on this BAPI is an exporting structure, not a table. Code written from the usual BAPI pattern that passes TABLES return will not bind, and an error handler that loops a message table finds nothing and treats every failure as a success.
Mandatory fields 4 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Bank Country | BANK_CTRY | BANK_CTRY | ISO country code. |
| Bank Key | BANK_KEY | BANK_KEY | Routing number, sort code or Bankleitzahl. Text format. |
| Bank Name | BANK_ADDRESS | BANK_NAME | Max 60 characters. |
| City | BANK_ADDRESS | CITY |
SAP HR Infotype Upload Template (PA30)
Create, change and delimit employee infotype records. One row is one infotype operation.
HR_INFOTYPE_OPERATIONWatch DemoNot a BAPI. A function module with an untyped record parameter, a single message back, and a commit that happens unless you switch it off.
What to watchThe parameter texts for the two validity dates are transposed in SAP standard: the parameter typed ENDDA is described as the validity begin and the one typed BEGDA as the validity end. The types are right and only the descriptions are wrong, so anyone generating column headings from the SE37 documentation labels the two date columns the wrong way round. Go by BEGDA and ENDDA, never by the description.
Mandatory fields 5 fields
| Column | SAP structure | SAP field | Note |
|---|---|---|---|
| Infotype | INFTY | INFTY | Four digits. 0002 personal data, 0006 addresses, 0008 basic pay. |
| Personnel Number | NUMBER | PERNR | Eight digits. |
| Validity Begin | VALIDITYBEGIN | BEGDA | Data element BEGDA. Ignore the transposed parameter text. YYYYMMDD. |
| Validity End | VALIDITYEND | ENDDA | Data element ENDDA. 99991231 for an open ended record. YYYYMMDD. |
| Operation | OPERATION | ACTIO | INS create, MOD change, DEL delete. There is no CHG. |
After the template
Posting these templates to SAP
Filling in a template is the easy half. PostNow.ai is the other half: it loads the sheet, checks every row against your live SAP system, and posts it through the same SAP interface named on the template, under your own SAP user and authorisations. Nothing is written that you could not write yourself in the SAP GUI, and every row that fails is reported with the SAP message that caused it.
- Load the sheet
- Check every row in live SAP
- Post through the SAP interface
FAQ
Frequently asked questions
What is the mandatory field list for creating a material master in SAP?
It depends on the views you are creating, which is why the material template has a flag per view. At minimum the basic view needs material number, industry sector, material type, description and base unit of measure. The full mandatory list per view is in the template and on its Field Guide tab, mapped to the BAPI_MATERIAL_SAVEDATA structures.
How do I extend an existing material to a new plant or sales organisation?
Use the same create interface and send only the new organisational key with the views you are adding. Extending a material is not a separate operation in SAP: you call BAPI_MATERIAL_SAVEDATA with the material number, set the flag for the view you are adding, and existing views are left untouched. There is a dedicated template for this on this page.
How do I upload master data to SAP from Excel without writing an upload program?
PostNow.ai takes the filled template, checks every row against your live SAP system, and posts it through the standard SAP interface named on the template. There is no custom ABAP, no transport and no recording to maintain. It runs under your own SAP login, so it can only create what you are authorised to create.
Why do characteristic values need three different tables?
Because SAP splits them by the characteristic's data type rather than by how the value looks. Character and boolean values go to one table, currency values to another, and numeric, date and time values all go to a third where the field is a floating point number. A date characteristic therefore cannot be passed as a formatted date. The classification template handles this split for you.
Can I change master data in bulk as well as create it?
Yes. This page includes separate templates for creating, changing, mass maintaining and flagging for deletion, because SAP uses different behaviour for each. Change interfaces in particular ignore any field whose update flag is not set, so a change template that only carries the changed columns will appear to succeed and alter nothing.
What order should master data be loaded in during a migration?
Characteristics, then classes and classification, then materials, then batches and bills of material. On the finance side: cost elements and activity types, then cost centres, then internal orders and projects. Asset classes before asset masters, functional locations before equipment. Each template on this page names what has to exist before it.
Do these templates work for a mass change after go live, not just for migration?
Yes, and that is where most of them get used. Migration tools are built for the initial load into a new system, so the mass changes that follow (a material group realignment, a price list update, a cost centre restructure) usually need a different route. PostNow.ai posts these same templates through the SAP change interfaces at any point in the system's life.
Can I use these as S/4HANA migration templates?
Yes, as the data collection and cleansing layer of an S/4HANA migration, although they are not the SAP Migration Cockpit's own staging templates. Each one maps every column to the structure and field of a standard SAP interface that exists on both ECC and S/4HANA, so the same file serves the go live load and the mass changes after it. Load them in the order given in the Loading order and dependencies section on this page.
Keep going