Goods Receipt
A manual stock increase with no purchase order behind it โ inventory rises and posts to an offset account, against a warehouse and never a business partner.
A Goods Receipt records stock arriving into a warehouse when there is no purchase order and no vendor to link it to. It is the manual counterpart of a Goods Receipt PO: where a GRPO says “these goods came from this vendor against this order”, a Goods Receipt says only “this quantity of this item now exists in this warehouse, and here is the reason”.
In the Service Layer this document is the GoodsReceipts service, whose object
code is oInventoryGenEntry (59) โ internally SAP calls it an Inventory
General Entry, an entry of goods into stock. It is created at
/b1s/v1/InventoryGenEntries.
Because there is no trading partner, a Goods Receipt has no CardCode and no
CardName. This is the single most important thing to understand about it: it is
a warehouse-and-item document, not a partner document. The counterparty is not a
customer or a vendor โ it is a general ledger offset account.
When it is used
A Goods Receipt is the right document whenever stock needs to increase for a reason that is not a purchase:
- Found stock โ a physical count reveals more units than the system shows, and the company brings the surplus onto the books (though a formal count-and-post is often preferred for the audit trail).
- Production or assembly output handled outside the production module โ a simple shop assembles a kit and receives the finished item into stock.
- Samples, donations, or free goods received from a supplier with no invoice and no PO to match against.
- Opening balances when first loading a warehouse, or migrating stock from a legacy system, so that the starting quantity and value are established.
- Correcting a shortfall where stock physically exists but was never received through the normal purchasing chain.
If there is a vendor and a purchase order, the correct document is a Goods Receipt
PO (oPurchaseDeliveryNotes, 20) instead โ that one carries the vendor and feeds
the A/P invoice-matching chain. The Goods Receipt exists precisely for the cases
that fall outside that chain.
Key fields
The document has a small header and one or more DocumentLines. The line, not the
header, carries the warehouse and the quantity, so a single Goods Receipt can bring
several items into several warehouses at once.
Header
| Field | Type | Notes |
|---|---|---|
DocEntry | Edm.Int32 | Internal primary key (system-assigned) |
DocNum | Edm.Int32 | User-visible document number |
DocObjectCode | SAPB1.BoObjectTypes | Always oInventoryGenEntry (59) |
DocDate | Edm.String | Posting date โ YYYYMMDD string, not a date type |
Reference2 | Edm.String | Free reference to the originating event or note |
Comments | Edm.String | Free-text reason for the receipt |
JournalMemo | Edm.String | Memo written onto the generated journal entry |
Series | Edm.Int32 | Numbering series |
PriceList | Edm.Int32 | Price list used to value the goods, if not costed by item |
Notably absent: CardCode, CardName, PayToCode, ShipToCode โ there is no
business partner on this document.
Line (DocumentLines)
| Field | Type | Notes |
|---|---|---|
LineNum | Edm.Int32 | Line index (0-based) |
ItemCode | Edm.String | Item being received into stock |
ItemDescription | Edm.String | Item name |
Quantity | Edm.Double | Units received โ the amount stock rises by |
WarehouseCode | Edm.String | Which warehouse the stock lands in โ required |
UnitPrice | Edm.Double | Unit cost used to value the receipt |
LineTotal | Edm.Double | Quantity ร unit cost โ the value posted |
AccountCode | Edm.String | G/L offset account to credit (overrides the default) |
CostingCode | Edm.String | Cost centre / profit-centre dimension |
ProjectCode | Edm.String | Project dimension |
The WarehouseCode is the field that makes this an inventory document: it names the
stock location, and the receipt increases the on-hand quantity of ItemCode in that
warehouse.
GL and stock effect
Stock: the on-hand quantity of each line’s ItemCode in its WarehouseCode
increases by Quantity. This is an unconditional stock-in movement.
Accounting (perpetual inventory): the receipt posts a journal entry that debits the inventory asset and credits an offset account:
DR Inventory (value of goods received)
CR Inventory Offsetting / G/L account (same value)The debit raises the inventory balance-sheet account; the credit lands on the
offsetting account chosen either by the item group’s G/L determination or by the
line’s AccountCode override. Unlike a Goods Receipt PO โ which credits Goods
Received Not Invoiced because an A/P invoice is still expected โ a manual Goods
Receipt has no invoice coming, so it settles straight to an offset/adjustment
account.
The value posted is driven by the item’s valuation method (moving average, standard,
or FIFO) and the UnitPrice on the line. Under non-perpetual inventory no
journal entry is generated at all โ only the quantity changes, and finance values
stock periodically.
Service Layer
| Property | Value |
|---|---|
| Service (entity) | GoodsReceipts |
| Object code | oInventoryGenEntry (59) |
| Create path | POST /b1s/v1/InventoryGenEntries |
| Read one | GET /b1s/v1/InventoryGenEntries(<DocEntry>) |
| Sub-collection | DocumentLines (carries ItemCode, Quantity, WarehouseCode) |
A minimal create payload names only the reason, the item, the quantity, and the warehouse โ no partner:
POST /b1s/v1/InventoryGenEntries
{
"Comments": "Opening balance load โ warehouse 01",
"DocumentLines": [
{ "ItemCode": "A00001", "Quantity": 50, "WarehouseCode": "01", "UnitPrice": 12.5 }
]
}Norma’s connector and mock use the
/b1s/v1/paths shown here. A live SAP B1 on Feature Pack 2405 or later also exposes the same entity under/b1s/v2/; the object code and field shape are identical.
The response returns the assigned DocEntry and DocNum, and โ under perpetual
inventory โ a TransNum pointing at the journal entry the receipt created.