EDI X12 850 Purchase Order Skeleton Generator
The EDI 850 is the X12 transaction set for a purchase order. This generator produces a compact single-line example you can use to test a connection with a supplier or to learn how the segments fit together.
Fill in
X12 850 (version 005010)
ISA*00* *00* *ZZ*ACMEBUYER *ZZ*SUPPLIERONE *261020*0930*U*00501*000000101*0*T*>~ GS*PO*ACMEBUYER*SUPPLIERONE*20261020*0930*101*X*005010~ ST*850*0001~ BEG*00*SA*PO-450021**20261020~ CUR*BY*USD~ DTM*002*20261120~ PO1*1*500*EA*4.15**BP*PN-48213*VP*V-77120~ PID*F****Machined housing, anodized~ SCH*500*EA***002*20261120~ CTT*1*500~ SE*9*0001~ GE*1*101~ IEA*1*000000101~
This is a test skeleton for one line item, not a full trading partner implementation. Segment order, required elements and qualifiers vary by trading partner implementation guide, so confirm the guide before sending. The ISA fields are fixed width: sender and receiver IDs must be exactly 15 characters, and the control number 9 digits. Never send test data with a production usage indicator.
EDI mapping review
Optional: send us your 850 mapping and we will review it against common rejection causes.
Optional. The tool and every export work without this. No spam.
How to use the generator
Enter the sender and receiver IDs exactly as agreed with your trading partner, padded to 15 characters, then set the date, control number and PO number. Fill in one line item with quantity, unit of measure, price and part numbers. Copy the output into a text file and run it through your EDI translator or VAN test tool. Keep the usage indicator on T for test until both sides have validated the message, then switch to P for production.
- Pad ISA sender and receiver to 15 characters
- Keep usage indicator T while testing
- Match qualifiers to the partner implementation guide
- Increment control numbers per interchange
Segment by segment
ISA and IEA wrap the interchange and GS and GE wrap the functional group. ST and SE wrap the 850 transaction set, and SE01 holds the number of segments from ST to SE inclusive, which is 9 in this skeleton. BEG gives the purpose code, the type of order (SA is stand-alone order), the PO number and the date. PO1 holds the line number, quantity, unit of measure, price and part number qualifiers such as BP for buyer part and VP for vendor part. SCH gives a delivery schedule and CTT counts line items.
Adding more lines
To add lines, repeat the PO1, PID and SCH loop for each item, increment the line number in PO1, and update CTT01 with the number of lines. Then recount the segments between ST and SE and put the new total in SE01. A wrong SE01 count is the most common reason a translator rejects a hand-built file. Add N1 loops for ship-to and bill-to parties if your partner requires them, because this skeleton leaves them out.
Common mistakes
Frequent errors include wrong ISA padding, a segment count in SE that does not match, a date format mismatch between YYMMDD in ISA and CCYYMMDD in GS and BEG, reuse of an interchange control number, and sending a test interchange with a production flag. Another trap is assuming every partner accepts the same qualifiers. Always request the partner's 850 guide and validate against it.
- Recount SE01 after any change
- ISA date is 6 digits, GS and BEG dates are 8
- Do not reuse control numbers
- Validate against the partner guide
Frequently Asked Questions
What does the 850 transaction set do?
The 850 is the X12 purchase order. A buyer sends it to a supplier to order goods or services. The supplier normally replies with an 855 purchase order acknowledgement, and later an 856 advance ship notice and an 810 invoice.
What does SE01 count?
SE01 is the total number of segments in the transaction set, counting the ST segment and the SE segment. If you add or remove a segment between them, update this number or the receiving translator will reject the set.
Why are the ISA IDs padded to 15 characters?
ISA is a fixed-width segment. The sender and receiver ID elements must be exactly 15 characters, so shorter IDs are padded with trailing spaces. A wrong length breaks the interchange and most translators reject it before reading the content.
Is this suitable for production use?
No. It is a teaching and testing skeleton. A production 850 needs partner-specific segments, qualifiers, addresses, terms and often multiple lines. Use your EDI translator and the trading partner guide to build the real mapping.
If your ERP creates POs but your EDI mapping is slow to change, we can help build and test mappings and a read-only monitor that shows which POs were acknowledged.
Related Tools
Purchase Order Acknowledgement Review Checklist
A checklist for reviewing a supplier's order acknowledgement before you accept differences in price, dates, terms or quality requirements.
Developer ToolsSupplier PPM and On-Time Delivery SQL Query Generator
Fill in your receipt table and column names to generate a ready-to-run SQL query for supplier reject PPM and on-time delivery.
Supply Chain & InventoryIncoterms 2020 Buyer and Seller Responsibility Reference
A searchable table of all 11 Incoterms 2020 rules showing where risk transfers and who handles carriage, customs and insurance.
Supply Chain & InventorySingle-Source Supplier Dependency Risk Assessment
Answer ten questions about one supplier and part to get a dependency score and the first mitigation steps to consider.
More Developer Tools tools
See all- SAP Sales Order ABAP SELECT Generator (VBAK, VBAP, VBFA)
- SAP Sales Order Create BAPI ABAP Generator (BAPI_SALESORDER_CREATEFROMDAT2)
- SAP ABAP Open Items SELECT Generator
- SAP ACDOCA SQL Query Generator
- SAP QM Inspection Lot ABAP SELECT Generator
- SAP Quality Notification Pareto SQL Query Generator
- SAP QM Usage Decision BAPI Skeleton
- ABAP Custom Exception Class Generator
- ABAP Unit Test Class Generator