Techno-functional Dynamics 365 F&S Data Model Explanations for Reporting, Part 3 of 25 – Working with Item Receipt Tables

Techno-functional Dynamics 365 F&S Data Model Explanations for Reporting, Part 3 of 25 – Working with Item Receipt Tables

Things have changed a lot since I started blogging over a decade ago.  There are so many wonderful topics to blog and learn on today; it seems like one doesn’t even know where to start.  To make the process more friendly, I’ve introduced a new sort of post — the hybrid video/blog tutorial.  In this series, we will produce a video and blog for every topic covered.  Some very talented developers from my team have contributed their expertise to assist with this content/video approach to ensure that we keep our quality and quantity high.  I hope you all sincerely enjoy the new approaches that we’ve innovated..  And as always, don’t hesitate to reach out to me.. I’m always here to help. — Brandon Ahmad

Using the Microsoft Dynamics 365 data model to create a product receipt

Now that you’ve learned how to register or reserve any purchased item from your inventory, it’s time to generate your first product receipt. Creating receipts is important and informative, as it confirms your customers have received your products. ​Receipts​ also allow you to process your purchase order lines (POs) for invoicing. Make no mistake, you can gather an amazing amount of information from receipts – if you know what to look for. After you generate the product receipt, the system creates an unchangeable voucher document. This document generates physical inventory transactions. The Dynamics 365 data model gives you a unified, ‘bird’s-eye-view’ over your product receipts. This streamlined system efficiently combines Dynamics 365 data model ERP functionality for clear oversight of changes within your physical, on-hand inventory. The most notable change is an increase in your inventory levels.

Dynamics 365 data model functional walkthrough: Manually create a product receipt

Remember, the first stage of this process occurs when a warehouse receives the product and it’s called product​ receipt registration.​ It often helps to visualize the physical processes happening behind the scenes as we cover the product receipt process. This is especially true if the following steps and functions seem difficult to grasp.

Item Receipt

Now, let’s perform the function:

Step 1:

Click on the ​Receive​ tab and check out the list of options under ‘GENERATE.’ Go ahead and click on ​Product Receipt​.

Dynamics 365 Data Model Item Receipt Tables Step 1

Step 2:

When you click ​Product receipt​, a form opens up. Make sure all printing options have ‘No’ selected. Enter the vendor’s product receipt number under ‘Product receipt.’ Then click ​OK​.

Dynamics 365 Data Model Item Receipt Tables Step 2

One thing to note here is that you don’t actually have to get your product receipt number from your ​vendor​. If it makes more sense, you can use your own self-maintained system and create your own numbers. Just make sure it’s organized.

If you are a developer wishing to learn more than it may be wise to check out our Boot Camp, which takes you from zero to hero with some serious hands-on lab action.

Step 3:

Once you’ve posted your product receipt, you can easily return to it at any time. Just click on the ​Receive ​tab and then click the ​Product receipt​ button under ‘JOURNALS.’

Dynamics 365 Data Model Item Receipt Tables Step 3

The  Dynamics  365  data  model  and  the receipt tables process: Technical walkthrough

Now let’s look at how the Dynamics 365 data model uses tables to make the product receipt process more streamlined. Following tables are involved in this process, and they display a number of fields that provide you with helpful insights.

Entity Relationship Diagram:

There are important tables involved in the product receipt process. The following ERD diagram illustrates how this process works.


Dynamics 365

You can also process receipts by using X++ code. Here is a runnable class (job) that processes the receipt:

class ibPurchaseOrderLearningDemo
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
        PurchId         purchId;
        PurchTable      purchtable;
        PurchFormLetter purchFormLetter;
        purchId         = "00000275";               //replace this Purchase order number with yours.
        purchtable      = PurchTable::find(purchId);
        //Validate if Purchase order is in Confirmed state.
        if(purchtable.DocumentState != VersioningDocumentState::Confirmed)
            throw error(strFmt("The purchase order should be in confirmed state.")); 
        purchFormLetter = purchFormLetter::construct(DocumentStatus::PackingSlip);
            strFmt("GRN-%1", purchtable.PurchId),   // enter your Product Receipt number here
        info(strFmt("Product Receipt posted successfully."));


The VendPackingSlipJour table contains the posted product receipt headers. Here’s a rundown of what this table does.

  • Checks the received quantity of purchase orders.
  • Provides helpful information related to a purchase order, such as the delivery dates of the purchase order, payment terms, and more.
  • Displays the physically received quantities of various warehouses in a relevant time period.

Check out the following list of important fields that you can find on the ​VendPackingSlipJour table.​​ Along with related technical information, you can find explanations of each field under the ‘Description’ section.

Field Type Description
OrderAccount string This field contains Order Account of a purchase order.
DeliveryPostalAddress int This field contains Delivery Address of a purchase order.
InvoiceAccount string This field contains Invoicing Account of a purchase order.
PackingSlipId string This field contains Packing Slip Id of a purchase order.
PurchaseType enum This field contains Purchase Order Type of purchase order.
PurchId string This field contains Purchase Id of a purchase order.


The VendPackingSlipTrans table is the other important table involved in this process, and this table contains posted product receipt lines. Here’s what this table is responsible for:

  • Displays the inventory transaction details of your purchase order lines.
  • VendPackingSlipTrans is involved in reporting posted purchase order product receipt details.
  • Locates pending purchase order details.

Here’s a list of various fields you can find within the ​VendPackingSlipTrans ​table:

Field Data Type Description
ItemId string This field contains Item Id of purchase order line
PackingSlipId int This field contains Packing Slip Id of purchase order line
PdsCWQty string This field contains CW Quantity of purchase order line
PriceUnit string This field contains Unit Price of Purchase order line
Qty real This field contains Quantity of Purchase Order line


As we have already covered this table in the previous blog, let’s discuss some of the important fields which are affected by this process. This table shows all entries related to receiving and shipping warehouses.

Field Data Type Description
ItemId string The inventory item id of the PO line item is repeated.
PackingSlipId string Link transaction to newly created packing slip transaction.
Qty real The inventory quantity transacted.
DatePhysical dateTime Posting date of physical inventory transaction.
StatusReceipt enum Represents the inventory receiving status in relevant warehouse.


Congratulations! You now know how to create the Product receipt. In this section, you looked at a batch sample transaction in X++ and examined the Dynamics 365 data model behind the transaction. You also explored ​vendpackingslipjour, ​vendpackingsliptrans, and inventtrans ​-  major tables involved in generating and processing receipts.

Although creating a product receipt increases your inventory, these tables also provide you with tons of additional information. You can use these tables to see pending purchase order details, reserve quantities, and much more. There are many different fields in each table, and each provides valuable information. This is just one example of how the Dynamics 365 data model can provide you with valuable insights.

We sincerely hope that you enjoyed part 3 of our exciting series on the Dynamics 365 data model. We aim to provide quality service at all times.  And as always, if you need to reach me, you know how to get in touch by reaching out to me here.  — Brandon Ahmad, founder of InstructorBrandon and Dynatuners




3 thoughts on “Techno-functional Dynamics 365 F&S Data Model Explanations for Reporting, Part 3 of 25 – Working with Item Receipt Tables

  1. Breanna says:

    I’m attempting to add a column to my receipt journal – I can show the Quantity received on the PO lines, but cant add this to the journal. Is this a configuration issue? or will I need development to update the tables?

    • Jorge Rengifo Lead Developer Instructor Brandon
      Jorge Rengifo says:

      Hi Breanna,
      This is a very good question. This will require a small amount of customization due to the parent-child relationship between the PurchTable and the PurchLine table. The advantage, however, is that this is a small customization.
      Or, if you would like to go no-code, you can simply copy the data via OData into an Excel workbook and join it there quite quickly. We’ll make a future blog demonstrating how to do this for our next post. Thank you for asking this question!

Comments are closed.