SAP purchase requisition automation means raising requisitions, the internal request to buy, from data rather than typing each line into ME51N. PostNow runs it from Excel: every requisition line is a row, and the add-in posts the set with the standard BAPI_PR_CREATE, attaching each line's account assignment, checking the values, and committing the requisitions in one run, with any SAP error put into plain language.

SAP purchase requisition automation infographic showing how requisitions are created from Excel and routed by account assignment.
Creating SAP purchase requisitions from a spreadsheet with the right cost routing.

This is a twelve-step worked example of creating purchase requisitions from Excel to SAP, whether each row stands alone or several lines roll up into one requisition. Keep the mapping and you have a requisition Excel template ready for the next demand list. It works on classic ECC and on S/4HANA, where procurement still raises requisitions behind ME51N and the same Enjoy BAPI. Past a one-time setup, whoever runs the load needs no ABAP and no developer.

Why create requisitions from Excel instead of keying ME51N

Raising a requisition manually in ME51N means setting the document type, then adding each line with its material, plant, quantity, delivery date, and account assignment so the cost lands in the right place. One or two lines is quick. A maintenance plan, a project's demand list, or a department's monthly requests becomes a long sheet of lines keyed one at a time, and a wrong account assignment or a missing plant only shows once the line is rejected.

Creating purchase requisitions from Excel changes the shape of the work. The demand already sits in a spreadsheet, often out of planning or a budget file, and each line posts in a single governed run. For a routine bulk requisition creation or a one-off mass purchase requisition upload, the awkward parts, picking the function, mapping the line and account-assignment fields, getting dates right, and reading MM messages, are taken care of. The twelve steps that follow cover the whole flow.

Before you start: what you need

  • Your requisition lines in Excel, one per row, with a column for each field and, where lines roll up, a shared requisition reference so they group together.
  • SAP authorization to create requisitions, the access you would use for ME51N, across the document types, plants, and purchasing groups you are loading.
  • PostNow in Excel, linked through to your SAP system. Its function modules are deployed to SAP once at setup; after that, the requisition loads run from the task pane.
🧭
A request, not an order. A requisition is raised before any commitment and often before a vendor is chosen, so the account assignment, a cost center, an asset, or a project, matters more than a price. The order that may follow is covered in the purchase order guide.
🔧
Installed once. PostNow's function modules are deployed to SAP a single time alongside your Basis or ABAP team. None of the requisition loads below need any further development.

Your requisition Excel template: the fields SAP expects

A requisition is, in the main, a set of lines, each carrying what to buy and where to charge it, so the template is line-centric. These are the fields a requisition load depends on; carry them, and confirm the materials, plants, and cost objects they name already exist.

Excel columnSAP fieldWhy it matters
Document typeDOC_TYPESets the requisition type and number range, NB by default
MaterialMATERIALThe item requested; or a short text plus material group for a non-stock line
PlantPLANTWhere the material is needed; must exist (T001W)
Quantity / delivery dateQUANTITY / DELIV_DATEHow much is needed and by when
Account assignment categoryACCTASSCATK for cost center, A for asset, P for project; routes the cost
Purchasing groupPUR_GROUPWho is responsible for procuring the line (T024)
⚠️
What stalls most requisition loads: an account assignment category without the cost object it needs, a material missing in the requesting plant, or a delivery date in the past. Step 9 checks the material, plant, and cost object against live SAP, and Step 7 formats the dates and numbers, so nothing has to be patched up manually.
⚙️
Which BAPI creates a requisition? SAP recommends the Enjoy call. BAPI_PR_CREATE builds the requisition around PRITEM line items, each with its account assignment in PRACCOUNT and a parallel PRITEMX structure flagging which fields to write, and it returns the new requisition number. The document is only persisted once BAPI_TRANSACTION_COMMIT runs. Step 2 has PostNow's function finder pick BAPI_PR_CREATE, pull its structures in, and take care of the commit.

The purchase requisition load, step by step

Lay out and open your sheet

Put each requisition line on a row under headers like Document Type, Material, Plant, Quantity, Delivery Date, Account Assignment, Cost Object, and Purchasing Group, adding a shared Requisition Ref where lines should roll up. Open the workbook and raise the PostNow task pane beside it.

The PostNow pane is open beside your requisition lines.

Choose the requisition BAPI

A standard call does the posting, so there is nothing to record. In the function finder, pick what the task calls for:

  • For new requisitions, take BAPI_PR_CREATE, the Enjoy requisition BAPI SAP recommends over the older call
  • Each line carries its own account assignment, so the cost object travels with the item
  • The requisition is saved only on commit, which PostNow issues after each successful post

Confirm the function and PostNow brings in its item and account-assignment structures, ready to line up with your columns, so ME51N stays shut.

SAP purchase requisition automation: Function finder with BAPI_PR_CREATE selected and its item and account structures
Select the requisition BAPI and pull in its structures
BAPI_PR_CREATE is chosen and its structures are ready to map.

Look over the structures it returns

What comes back is line-centric: a light header, the line items, their account assignment, and the result. Because it mirrors how a requisition is built, a glance shows what belongs to each line:

Header
PRHEADERThe light requisition header; most of the data sits on the lines.
Lines
PRITEM / PRITEMXMaterial, plant, quantity, delivery date, document type, and the change flags.
PRACCOUNTThe account assignment, cost center, asset, or project, for each line.
Result
RETURN + requisition numberThe message per requisition, and the number the call hands back.

That tells you, before any mapping, which columns sit on the line and which set its account assignment.

Open the Mapping Designer

Picking the BAPI loads the Mapping Designer with a line for every item and account-assignment field. Two things matter here:

  • Extensions are detected. Append fields your system adds to the requisition item are pulled in automatically.
  • You can add your own. Anything missed you place manually, so standard and custom fields ride in one load.
SAP purchase requisition automation: Mapping Designer listing requisition item and account-assignment fields (view 1 of 2)SAP purchase requisition automation: Mapping Designer listing requisition item and account-assignment fields (view 2 of 2)
Item and account-assignment fields, ready to map
Item and account fields, plus any extensions, are listed.

Match columns with Mapping AI AI

Now attach the structures to your data. Mapping AI proposes an Excel column for each line and account-assignment field, reading your headers or a screenshot you drop in, and you confirm or adjust, useful when a line mixes purchasing fields with a cost object.

Each field shows a suggested column to accept or change.

Auto Map and stamp the headers

Run Auto Map to fix the mapping and write SAP-tagged headers across the sheet. Each field is bound to its column, and where lines should roll up you set the requisition grouping here. From this point the workbook is the template.

SAP purchase requisition automation: Auto Map result: requisition columns mapped and headers synced into the sheet (view 1 of 2)SAP purchase requisition automation: Auto Map result: requisition columns mapped and headers synced into the sheet (view 2 of 2)
Columns mapped and headers synced back to Excel
The header row now carries its SAP field tags.

Set formatting and the X indicators

A field's properties decide how its value is sent: leading zeros on material numbers, upper case on codes, a date format on the delivery date, the right decimals on quantity, defaults, and regex.

For changes, the parallel PRITEMX structure decides what is written: the field changes only when its indicator is raised. Rather than ticking those manually, PostNow spots the fields you have edited and raises their indicators automatically, so amending a batch of requisitions stays limited to the values you changed.

SAP purchase requisition automation: Field properties with delivery-date format and quantity decimals, change indicators marked
Formatting rules, with the change indicators set for you
Numbers are padded, dates are formatted, and amendments carry their indicators.

Vet the lines in Excel first

There is a good case for checking first: a procurement error usually arrives as a short code after a line has already failed. Validate pulls the check forward, measuring every row against SAP's length, format, and required-field rules and marking the cells at fault, so the sheet is clean before any line goes.

No format issues remain in the summary.

Confirm against live SAP

Good formatting is no guarantee a value exists, a cost center can read fine and be locked or absent. To test it, open the field's properties, enable field validation, and supply the check table and field, a material against MARA, a plant against T001W, or a cost center against CSKS. Select the cell, run Validate master data, and PostNow checks live SAP for the value before you depend on it.

⚙️
Validation has to be enabled. The lookup runs only when field validation is on and a table and field are named. Leave it off and the cell is judged on format alone, never checked against SAP.
Material, plant, and cost object references check out in live SAP.

Shape the load with loops and conditions

When the file needs structure beyond a flat list, set it up first:

  • Loops: the create call steps down your line rows, and where you have grouped them, the lines sharing a reference roll up into one requisition.
  • IF conditions: handle only the lines that qualify, for instance posting a line only where a quantity is present, or skipping rows flagged as already ordered.
Lines are sequenced for the call and your conditions are set.

Set the scope, post, and review AI

Choose the range with Run Scope, a single line first, then the rest, and press Run. A few aids:

  • Run log: results appear live and drop into a log column beside each row in Excel.
  • Payload view: open the exact data sent to SAP for any requisition, so a failure is never a guess.
  • AI error review: AI Review reads the procurement message and lays out, in plain words, what blocked the line and where to look.
  • RETURN per requisition: the BAPI reports per document, and PostNow writes the new requisition number back beside the line it belongs to.
Requisitions post, their numbers return to Excel, and any failure carries a readable explanation.

Publish and roll it out to the team

When the run comes back clean, publish. The configuration becomes a script the team runs unchanged, they open it, paste their lines, and post, with no mapping to rebuild and no need to know the BAPI underneath. A one-time build becomes the standard way to raise requisitions.

🔗
Chain it from demand to order. A Chain links published scripts and passes values along, raise the requisition, then convert it into a purchase order. A demand-to-order step runs as one job rather than several manual loads, and a step can be made conditional so it only fires when the data calls for it.
The script is live and the team can raise requisitions themselves.

Let's talk

Bring a real demand list and a live SAP connection to a working session. We will map the lines and their account assignment, validate, and post the requisitions for real, with AI taking the strain. No slide decks.

Frequently asked questions

What is SAP purchase requisition automation?
It is creating purchase requisitions in SAP through a programmatic call rather than keying each one in ME51N. With PostNow the requisition lines stay in Excel and post in one governed run via BAPI_PR_CREATE, while AI maps the fields, checks the values, and explains any MM error.
How do you create purchase requisitions in SAP from Excel?
List one requisition line per row covering the document type, material, plant, quantity, delivery date, and account assignment, map your columns to the SAP fields, validate, then post in a single run. PostNow calls BAPI_PR_CREATE and commits the document, so there is no ME51N keying and no ABAP.
Which BAPI creates SAP purchase requisitions?
BAPI_PR_CREATE, the Enjoy requisition BAPI, creates requisitions around PRITEM line items with a parallel PRITEMX indicator structure and a PRACCOUNT account assignment, returning the new requisition number. It is persisted by BAPI_TRANSACTION_COMMIT, which PostNow runs for you.
What is the difference between a purchase requisition and a purchase order?
A purchase requisition is an internal request to buy, raised before any commitment and often without a firm vendor, where the account assignment decides where the cost will land. A purchase order is the firm order placed on a chosen vendor. This guide loads requisitions; the purchase order guide covers the order that may follow.
Is there a template for creating purchase requisitions in SAP?
Yes, your spreadsheet is the template: one row per requisition line with its material, plant, quantity, dates, and account assignment. PostNow saves the finished mapping, so the same requisition Excel template serves every later load and can be shared with the team.

Related SAP automation solutions

This guide is part of PostNow's SAP automation library. Explore related topics and business areas.

Related topics
SAP Process AutomationExcel to SAP AutomationSAP Automation Tools
By business area
SAP Procurement Automation