SAP Document goods_receipt

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.

FieldTypeNotes
DocEntryEdm.Int32Internal primary key (system-assigned)
DocNumEdm.Int32User-visible document number
DocObjectCodeSAPB1.BoObjectTypesAlways oInventoryGenEntry (59)
DocDateEdm.StringPosting date โ€” YYYYMMDD string, not a date type
Reference2Edm.StringFree reference to the originating event or note
CommentsEdm.StringFree-text reason for the receipt
JournalMemoEdm.StringMemo written onto the generated journal entry
SeriesEdm.Int32Numbering series
PriceListEdm.Int32Price 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)

FieldTypeNotes
LineNumEdm.Int32Line index (0-based)
ItemCodeEdm.StringItem being received into stock
ItemDescriptionEdm.StringItem name
QuantityEdm.DoubleUnits received โ€” the amount stock rises by
WarehouseCodeEdm.StringWhich warehouse the stock lands in โ€” required
UnitPriceEdm.DoubleUnit cost used to value the receipt
LineTotalEdm.DoubleQuantity ร— unit cost โ€” the value posted
AccountCodeEdm.StringG/L offset account to credit (overrides the default)
CostingCodeEdm.StringCost centre / profit-centre dimension
ProjectCodeEdm.StringProject 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

PropertyValue
Service (entity)GoodsReceipts
Object codeoInventoryGenEntry (59)
Create pathPOST /b1s/v1/InventoryGenEntries
Read oneGET /b1s/v1/InventoryGenEntries(<DocEntry>)
Sub-collectionDocumentLines (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.