SAP SD Upload Templates

13 Excel templates for SAP Sales and Distribution: inquiries, quotations, sales orders and order changes, sales contracts, returns orders, credit memo requests, pricing conditions, outbound deliveries, delivery changes, post goods issue, inbound deliveries, shipments and billing documents.

Jump to a template (13)
  1. VA11Inquiry
  2. VA21Quotation
  3. VA01Sales Order
  4. VA02Sales Order Change
  5. VA41Sales Contract
  6. VA01Returns Order
  7. VA01Credit Memo Request
  8. VL01NOutbound Delivery
  9. VL02NOutbound Delivery Change
  10. VL02NPost Goods Issue
  11. VL31NInbound Delivery
  12. VT01NShipment
  13. VF01Billing Document
Sales and distribution templates on GitHubFree under the MIT licence, with a README and FAQ for this area.
View on GitHub →

Loading order and dependencies

The order to cash chain loads in sequence: sales order, then outbound delivery referencing the order, then picking and post goods issue against the delivery, then the billing document. Pricing condition records should exist before the orders that will use them, otherwise every line prices at zero or fails the incompletion check. Inquiries and quotations sit ahead of the order and are optional. Shipments group deliveries that already exist, so they come last.

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

Sales documents load near the end of an SAP data migration, after customers and materials exist. The column to field mapping matches what the SAP Migration Cockpit and LSMW both need for the initial load. Teams use these templates to stage open sales orders and deliveries before an S/4HANA migration go live, then keep them for the mass change work that follows.

VA11Sales and DistributionHeader and detail rows 8 of 21 columns mandatory

SAP Inquiry Upload Template (VA11)

Create customer inquiries in bulk. An H row starts an inquiry and the D rows under it are its items.

Posts throughBAPI_INQUIRY_CREATEFROMDATA2Watch Demo

Structurally identical to the quotation interface with INQUIRY_ in place of QUOTATION_. Every underlying structure is the same.

T-codeVA11

What to watchEvery structure here is identical to the quotation BAPI, but every parameter name differs. INQUIRY_ITEMS_IN, not QUOTATION_ITEMS_IN. Reusing the quotation mapping unchanged is the documented failure mode: it binds to nothing and fails silently.

Mandatory fields 8 fields
ColumnSAP structureSAP fieldNote
Document TypeINQUIRY_HEADER_INDOC_TYPEAF standard inquiry.
Sales OrganizationINQUIRY_HEADER_INSALES_ORG
Distribution ChannelINQUIRY_HEADER_INDISTR_CHAN
DivisionINQUIRY_HEADER_INDIVISION
Sold To PartyINQUIRY_PARTNERSPARTN_NUMBPartner role AG.
ItemINQUIRY_ITEMS_INITM_NUMBER000010, 000020.
MaterialINQUIRY_ITEMS_INMATERIAL
Target QuantityINQUIRY_ITEMS_INTARGET_QTY
VA21Sales and DistributionHeader and detail rows 10 of 26 columns mandatory

SAP Quotation Upload Template (VA21)

Create sales quotations in bulk. An H row starts a quotation and the D rows under it are its items.

Posts throughBAPI_QUOTATION_CREATEFROMDATA2Watch Demo

Structurally the sales order interface with quotation naming. Note the parameter names use ITEMS and SCHEDULES in the plural, unlike the order BAPIs.

T-codeVA21

What to watchThe parameter names differ from the sales order BAPI even though every underlying structure is identical. It is QUOTATION_ITEMS_IN here and ORDER_ITEM_IN there, plural versus singular. A mapping copied from the order template binds to nothing and the quotation is created with only its document type.

Mandatory fields 10 fields
ColumnSAP structureSAP fieldNote
Document TypeQUOTATION_HEADER_INDOC_TYPEAG standard quotation.
Sales OrganizationQUOTATION_HEADER_INSALES_ORG
Distribution ChannelQUOTATION_HEADER_INDISTR_CHAN
DivisionQUOTATION_HEADER_INDIVISION
Sold To PartyQUOTATION_PARTNERSPARTN_NUMBPartner role AG. Goes in the partner table.
Valid FromQUOTATION_HEADER_INQT_VALID_FYYYYMMDD.
Valid ToQUOTATION_HEADER_INQT_VALID_TYYYYMMDD.
ItemQUOTATION_ITEMS_INITM_NUMBER000010, 000020.
MaterialQUOTATION_ITEMS_INMATERIAL
Target QuantityQUOTATION_ITEMS_INTARGET_QTY
VA01Sales and DistributionHeader and detail rows 8 of 26 columns mandatory

SAP Sales Order Upload Template (VA01)

Create sales orders in bulk. An H row starts an order and the D rows under it are its items.

Posts throughBAPI_SALESORDER_CREATEFROMDAT2Watch Demo

The standard sales order interface. Same pricing, same availability check and same credit check as VA01.

T-codeVA01

What to watchPartners are not optional and they are not on the header structure. The sold-to party goes into ORDER_PARTNERS with partner role AG, not into ORDER_HEADER_IN. A file that puts the customer number on the header and nowhere else produces an order with no sold-to and fails.

Step by step VA01 upload guide

Mandatory fields 8 fields
ColumnSAP structureSAP fieldNote
Order TypeORDER_HEADER_INDOC_TYPEOR standard order.
Sales OrganizationORDER_HEADER_INSALES_ORG
Distribution ChannelORDER_HEADER_INDISTR_CHAN
DivisionORDER_HEADER_INDIVISION
Sold To PartyORDER_PARTNERSPARTN_NUMBPartner role AG. Goes in ORDER_PARTNERS, not the header.
ItemORDER_ITEMS_INITM_NUMBER000010, 000020.
MaterialORDER_ITEMS_INMATERIALMust exist in the sales area.
QuantityORDER_SCHEDULES_INREQ_QTYGoes in the schedule line, not the item.
VA02Sales and DistributionHeader and detail rows 3 of 20 columns mandatory

SAP Sales Order Change Upload Template (VA02)

Change existing sales orders in bulk. An H row identifies the order, D rows are the items being changed.

Posts throughBAPI_SALESORDER_CHANGEWatch Demo

The change counterpart to the sales order create BAPI. It uses a two part update convention that is unlike the MM change BAPIs.

T-codeVA02

What to watchUPDATEFLAG takes a letter, not an X. It is I to insert, U to update and D to delete, and it sits at the front of every X structure in this BAPI. A template that labels the column X and fills it with X will not update anything. The other fields in those structures are ordinary X flags, so the two conventions sit side by side in one row.

Mandatory fields 3 fields
ColumnSAP structureSAP fieldNote
Sales DocumentSALESDOCUMENTVBELNThe order being changed. Must exist.
ItemORDER_ITEM_INITM_NUMBER000010. Also the key in the X structure.
Update FlagORDER_ITEM_INXUPDATEFLAGI insert, U update, D delete. A letter, not an X.
VA41Sales and DistributionHeader and detail rows 10 of 29 columns mandatory

SAP Sales Contract Upload Template (VA41)

Create customer contracts with their validity and target quantities. An H row is the contract, D rows are the items.

Posts throughBAPI_CONTRACT_CREATEFROMDATAWatch Demo

A sales order shaped interface with one extra table for the contract data, and no schedule lines at all.

T-codeVA41

What to watchThe contract validity is not on the header. BAPISDHD1 has one hundred and twenty two fields and not one of them is a contract start or end date. They live in CONTRACT_DATA_IN, keyed by item number, with header level validity carried on the row whose item number is zero. A sheet modelled as header plus items will produce contracts with no validity period at all.

Mandatory fields 10 fields
ColumnSAP structureSAP fieldNote
Contract TypeCONTRACT_HEADER_INDOC_TYPEQP quantity contract, WK1 and WK2 value contracts.
Sales OrganizationCONTRACT_HEADER_INSALES_ORG
Distribution ChannelCONTRACT_HEADER_INDISTR_CHAN
DivisionCONTRACT_HEADER_INDIVISION
Sold To PartyCONTRACT_PARTNERSPARTN_NUMBPartner role AG.
Contract StartCONTRACT_DATA_INCON_ST_DATHeader validity. Sent on the row whose item number is zero. YYYYMMDD.
Contract EndCONTRACT_DATA_INCON_EN_DATHeader validity. YYYYMMDD.
ItemCONTRACT_ITEMS_INITM_NUMBERSix digits, in tens.
MaterialCONTRACT_ITEMS_INMATERIAL
Target QuantityCONTRACT_ITEMS_INTARGET_QTYThere are no schedule lines, so the quantity lives here.
VA01Sales and DistributionHeader and detail rows 9 of 23 columns mandatory

SAP Returns Order Upload Template (VA01)

Create customer returns in bulk. An H row starts a return and the D rows under it are its items.

Posts throughBAPI_SALESORDER_CREATEFROMDAT2Watch Demo

The same interface as a sales order. What makes it a return is the document type and the reference to the original order.

T-codeVA01

What to watchOrder reason is what makes a return reportable. On most configurations it is mandatory on the header for document type RE, and it is the field the business reads afterwards to understand why goods came back. A bulk return load with everything defaulted to one reason code destroys that analysis.

Mandatory fields 9 fields
ColumnSAP structureSAP fieldNote
Document TypeORDER_HEADER_INDOC_TYPERE returns order.
Sales OrganizationORDER_HEADER_INSALES_ORG
Distribution ChannelORDER_HEADER_INDISTR_CHAN
DivisionORDER_HEADER_INDIVISION
Sold To PartyORDER_PARTNERSPARTN_NUMBPartner role AG.
Order ReasonORDER_HEADER_INORD_REASONWhy the goods came back. Usually mandatory on a return.
ItemORDER_ITEMS_INITM_NUMBER000010, 000020.
MaterialORDER_ITEMS_INMATERIAL
Return QuantityORDER_SCHEDULES_INREQ_QTYGoes in the schedule line.
VA01Sales and DistributionHeader and detail rows 9 of 25 columns mandatory

SAP Credit Memo Request Upload Template (VA01)

Raise credit memo requests for approval and later billing. An H row is the request, D rows are the items.

Posts throughBAPI_SALESORDER_CREATEFROMDAT2Watch Demo

The sales order interface with a different document type and an order reason, and with the quantity in a different place.

T-codeVA01

What to watchThe quantity does not go where it does on a sales order. Credit and debit memo request item categories are not schedule line relevant, so there is no schedule line to carry it and the quantity has to sit in TARGET_QTY on the item with its flag set in the X structure. Check the item category in VOV7 on your own system: if yours is schedule line relevant, fill both.

Mandatory fields 9 fields
ColumnSAP structureSAP fieldNote
Document TypeORDER_HEADER_INDOC_TYPEThe sales document type. Confirm it in TVAK.
Sales OrganizationORDER_HEADER_INSALES_ORG
Distribution ChannelORDER_HEADER_INDISTR_CHAN
DivisionORDER_HEADER_INDIVISION
Sold To PartyORDER_PARTNERSPARTN_NUMBPartner role AG.
Order ReasonORDER_HEADER_INORD_REASONThree characters. Why the credit is being given.
ItemORDER_ITEMS_INITM_NUMBERSix digits, in tens.
MaterialORDER_ITEMS_INMATERIAL
Target QuantityORDER_ITEMS_INTARGET_QTYNot the schedule line. This is the credited quantity.
VL01NSales and DistributionOne row per record 6 of 10 columns mandatory

SAP Outbound Delivery Upload Template (VL01N)

Create outbound deliveries from sales order items. One row is one sales order item to be delivered.

Posts throughBAPI_OUTB_DELIVERY_CREATE_SLSWatch Demo

A deliberately small interface. It takes shipping point, a due date and a list of sales order items, and works out the rest.

T-codeVL01N

What to watchRead the result from the DELIVERIES and CREATED_ITEMS tables, not from the DELIVERY export field. The BAPI can split one call into several deliveries, and when it does, the single export field is not the answer. Reading it alone is how a load appears to create one delivery when it created four.

Step by step VL01N upload guide

Mandatory fields 6 fields
ColumnSAP structureSAP fieldNote
Shipping PointSHIP_POINTSHIP_POINTPassed once for the whole file. Every row must match.
Due DateDUE_DATEDUE_DATESelection date for the whole call. YYYYMMDD.
Sales OrderSALES_ORDER_ITEMSREF_DOCThe order being delivered.
Sales Order ItemSALES_ORDER_ITEMSREF_ITEM000010, 000020.
Delivery QuantitySALES_ORDER_ITEMSDLV_QTYIn sales units.
Sales UnitSALES_ORDER_ITEMSSALES_UNIT
VL02NSales and DistributionHeader and detail rows 2 of 20 columns mandatory

SAP Outbound Delivery Change Upload Template (VL02N)

Change existing outbound deliveries. An H row identifies the delivery, D rows are the items being changed.

Posts throughBAPI_OUTB_DELIVERY_CHANGEWatch Demo

A control-structure interface rather than an X-flag one. The control structures use named booleans and lead with real keys.

T-codeVL02N

What to watchThe delivery number has to be passed three times: as the DELIVERY parameter, in HEADER_DATA and in HEADER_CONTROL. Leave it out of the control structure and the call returns no error and does nothing. And CHG_DELQTY is overloaded: it is the switch for batch and storage location changes too, not only quantity.

Mandatory fields 2 fields
ColumnSAP structureSAP fieldNote
DeliveryDELIVERYDELIV_NUMBAlso written into HEADER_DATA and HEADER_CONTROL.
Delivery ItemITEM_DATADELIV_ITEM000010. Also the key in ITEM_CONTROL.
VL02NSales and DistributionOne row per record 2 of 11 columns mandatory

SAP Post Goods Issue Upload Template (VL02N)

Post goods issue on outbound deliveries in bulk. One row is one delivery.

Posts throughBAPI_OUTB_DELIVERY_CONFIRM_DECWatch Demo

A deliberately small interface for the goods issue step. For a plain PGI the whole payload is four fields.

T-codeVL02N

What to watchFor a plain goods issue the entire payload is four fields: the delivery number three times, and POST_GI_FLG set to X. Leave POST_GI_FLG blank, or leave the delivery number out of HEADER_CONTROL, and the call returns no error and posts nothing. SAP has a Knowledge Base Article dedicated to exactly this.

Mandatory fields 2 fields
ColumnSAP structureSAP fieldNote
DeliveryDELIVERYDELIV_NUMBAlso written into HEADER_DATA and HEADER_CONTROL.
Post Goods IssueHEADER_CONTROLPOST_GI_FLGX. Without this the call does nothing.
VL31NLogistics ExecutionHeader and detail rows 11 of 31 columns mandatory

SAP Inbound Delivery Upload Template (VL31N)

Create inbound deliveries against purchase orders. An H row is the delivery, D rows are the items.

Posts throughBAPI_INB_DELIVERY_SAVEREPLICAWatch Demo

A replica interface: you send the whole document and it is created wholesale. There are no update flags anywhere in it.

T-codeVL31N

What to watchTwo things are not where you would look for them. The header has no date field at all: every date goes in HEADER_DEADLINES as a fourteen digit UTC timestamp with a time type saying which deadline it is and a time zone beside it. And the item has no purchase order field: the link to the order lives in ITEM_REF_PURCHASE_ORDER. Miss either and the delivery is created but useless.

Mandatory fields 11 fields
ColumnSAP structureSAP fieldNote
Delivery RefHEADER_DATADELIV_NUMBYour own key. Repeated on every table row of the delivery.
Delivery TypeHEADER_DATADLV_TYPEEL is the standard inbound delivery type.
Shipping PointHEADER_ORGSHIP_POINT
Time TypeHEADER_DEADLINESTIMETYPEWhich deadline the timestamp is. One row per deadline.
Timestamp UTCHEADER_DEADLINESTIMESTAMP_UTCFourteen digits, YYYYMMDDhhmmss, in UTC.
Time ZoneHEADER_DEADLINESTIMEZONEThe zone the local time was converted from.
ItemITEM_DATAITM_NUMBERSix digits, in tens.
MaterialITEM_DATAMATERIAL
Delivery QuantityITEM_DATADLV_QTYIn sales units.
Purchase OrderITEM_REF_PURCHASE_ORDERDOC_NUMBERNot on the item structure. It goes in the reference table.
PO ItemITEM_REF_PURCHASE_ORDERITM_NUMBER_REFFive digits.
VT01NLogistics ExecutionHeader and detail rows 2 of 29 columns mandatory

SAP Shipment Upload Template (VT01N)

Group deliveries into shipments with their legs and forwarding agents. An H row is the shipment, D rows are the deliveries and stages.

Posts throughBAPI_SHIPMENT_CREATEWatch Demo

A shipment item is a delivery number. There is no material anywhere in this interface.

T-codeVT01N

What to watchITEMDATA is not what the name suggests. BAPISHIPMENTITEM has exactly two fields, a delivery number and an itinerary position, and neither is a material or a quantity. A shipment item is a whole delivery. The transport content, meaning origin, destination, legs, agent and distance, lives in STAGEDATA, and the deliveries have to exist before you start.

Mandatory fields 2 fields
ColumnSAP structureSAP fieldNote
Shipment TypeHEADERDATASHIPMENT_TYPEFour characters.
Transport Planning PointHEADERDATATRANS_PLAN_PT
VF01Sales and DistributionOne row per record 3 of 21 columns mandatory

SAP Billing Document Upload Template (VF01)

Create billing documents from deliveries or orders. One row is one reference document to be billed.

Posts throughBAPI_BILLINGDOC_CREATEMULTIPLEWatch Demo

A list-based interface. It takes a table of reference documents and creates a billing document for each, which is why it is named CREATEMULTIPLE.

T-codeVF01

What to watchThis BAPI has no exporting document number, and errors arrive in two places. Success comes back in the SUCCESS table as BILL_DOC, and failures can be in RETURN or in the separate ERRORS table. An empty SUCCESS table is the only reliable signal that nothing was created, so check all three.

Step by step VF01 upload guide

Mandatory fields 3 fields
ColumnSAP structureSAP fieldNote
Reference DocumentBILLINGDATAINREF_DOCThe delivery or order being billed.
Document CategoryBILLINGDATAINREF_DOC_CAC sales order, J delivery. Sits in an append structure.
Sales DocumentBILLINGDATAINDOC_NUMBERUsually the same as the reference document.

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
Start your 14 day free trial Runs under your own SAP login and authorisations.

FAQ

Frequently asked questions

How do I mass create sales orders in SAP from Excel?

Fill the sales order template on this page and post it through BAPI_SALESORDER_CREATEFROMDAT2. The template uses a header row per order with detail rows per item, and it carries the partner, pricing and schedule line fields that a complete order needs. Mandatory fields are listed in the template.

Why does my sales order change fail or do nothing?

The change interface uses a flag structure alongside the data, and one field in it behaves differently from the rest. The update flag takes a letter rather than an X: I to insert an item, U to update one, D to delete one. Putting an X there is the most common reason a bulk order change appears to run and leaves the orders untouched.

How do I upload sales orders and deliveries to SAP without a custom program?

PostNow.ai posts these templates through the standard SAP sales interfaces, validating each row against your live system first. No ABAP, no transport, no screen recording to maintain when a field moves. It runs under your own SAP login, so pricing, credit checks and availability checks all behave exactly as they would in VA01.

Can I load pricing condition records from Excel?

Yes, using the pricing conditions template, which posts through BAPI_PRICES_CONDITIONS. One thing to know: the condition table key is a single flat 100 character field with no delimiters, packed from the key fields in the order the condition table defines. The template keeps those key fields as separate readable columns and packs them for you.

What is the difference between a credit memo request and a credit memo?

A credit memo request is a sales document that goes through approval, and a credit memo is the billing document created from it once released. The template on this page creates the request, which normally arrives blocked for billing so somebody has to approve it. Check the document type your business uses, because the request type and the billing type are different codes.

How do I post goods issue for many deliveries at once?

Use the post goods issue template, which posts through BAPI_OUTB_DELIVERY_CONFIRM_DEC. It takes existing deliveries and confirms them, so the deliveries have to be created and picked first. This page has separate templates for each of those steps.

Can I create billing documents in bulk?

Yes. The billing template posts through BAPI_BILLINGDOC_CREATEMULTIPLE and creates invoices from deliveries or orders that already exist. Since it processes many documents in one call, reading the results per row matters, and PostNow.ai writes the resulting billing document number back beside the row that created it.

Keep going

More SAP upload templates