Inventory journals

Completed

You can use inventory journals in Microsoft Dynamics 365 Supply Chain Management to post physical inventory transactions of various types, such as the posting of issues and receipts, inventory movements, the creation of bills of materials (BOMs), and the reconciliation of physical inventory. You would use these inventory journals in a similar way, but they're divided into different types.

The following types of inventory journals are available:

  • Movement

  • Inventory adjustment

  • Transfer

  • BOM

  • Item arrival

  • Production input

  • Counting

  • Tag counting

Movement journal

When you use an inventory movement journal, you can add cost to an item when you add inventory. However, you must manually allocate the extra cost to a general ledger account by specifying a general ledger offset account when you create the journal. This inventory journal type is useful if you want to overwrite the default posting accounts.

The following video demonstrates the inventory movement journal.

Inventory adjustment journal

When you use an inventory adjustment journal, you can add cost to an item when you add inventory. The system posts the extra cost to a specific general ledger account based on the setup of the item group posting profile.

Use this inventory journal type to update gains and losses to inventory quantities when the item should keep its default general ledger offset account. When you post an inventory adjustment journal, the system posts an inventory receipt or issue, changes the inventory values, and creates ledger transactions.

Transfer journal

You can use transfer journals to transfer items between stocking locations, batches, or product variants with and without cost/financial implications, which all depend on the specific transfer journal line and general setup.

For instance, you can transfer items from one warehouse to another warehouse in the same company. When you use a transfer journal, you must specify the From and To inventory dimensions, such as Site and Warehouse.

The system changes the available inventory for the defined inventory dimensions accordingly. Inventory transfers reflect the immediate movement of material. In-transit inventory isn't tracked. If you need to track in-transit inventory, then you should use a transfer order instead. When you post a transfer journal, the system creates two inventory transactions for each journal line:

  • An inventory issue at the From location

  • An inventory receipt at the To location

BOM journal

When you report a BOM as finished, you can create a BOM journal. By using a BOM journal, you can post the BOM directly. This posting generates an inventory receipt of the product together with an associated BOM and an inventory issue of the products that are included in the BOM. This inventory journal type is useful in simple or high-volume production scenarios where routes aren't required.

Item arrival journal

You can use the item arrival journal to register the receipt of items (for example, from purchase orders). You can create an item arrival journal as part of arrival management from the Arrival overview page. Alternatively, you can manually create a journal entry from the Item arrival page.

If you turn on the item arrival journal name to check for picking locations, Supply Chain Management looks for a location for received items and, if room is available, it generates location destinations for the incoming items.

Production input journal

Production input journals work like the item arrival journals, but you use them for production orders.

Counting journal

Counting journals help you correct the current available inventory that's registered for items or groups of items. Then, you can use the counting journal to post the actual physical count so that you can make the required adjustments for reconciling the differences.

You can associate counting policies with counting groups to help group items that have various characteristics so that you can include those items in a counting journal. For example, you can set up counting groups to count items that have a specific frequency or to count items when stock falls to a predefined level.

By creating lines on the Tag counting page, you place a tag number on each inventory item, such as a number from 1 to 500.

During the count, you can enter the item number and the quantity on a corresponding tag. Then, you can use the tag as the basis for input in the tag counting journal. After you post the tag counting journal, the system creates a new counting journal on the Counting page.

The new journal is based on the tag counting journal lines that you create. To tag-count items by a specific inventory dimension, select the dimension on the Display dimension page that displays when you create the tag counting journal.

For example, to count items in a specific warehouse, select the Warehouse checkbox. If you select the Lock items during count slider on the Inventory and warehouse management parameters page, you can't physically update items during counting. However, the system doesn't lock items in tag counting journals during counting. It doesn't create inventory transactions until you post the tag counting lines and transfer them to a counting journal. If you randomly enter tags, and you want to identify missing tags, select the Tag column header to sort the lines by tag.

Tag counting journal

Mostly, retail companies use inventory tag counting. You would use tag counting journals to assign a numbered tag to a count lot. The tag should contain a tag number, item number, and item quantity. To ensure that people, use a tag only once and that they use all tags, you need to make sure that every item number has a unique set of tags that has its own number sequence.

You can set three status values for each tag:

  • Used - The item number is counted for this tag.

  • Voided - The item number is voided for this tag.

  • Missing - The item number is missing for this tag.

When you post a tag counting journal, the system creates a new counting journal based on the tag counting journal lines.

Warehouse management on-hand entries cleanup job

The Maximum execution time for the warehouse management on-hand entries cleanup job feature lets you establish the maximum time allowed for processing the on-hand entries cleanup job. If the job doesn't complete before the specified number of hours, it saves the work that's completed so far and then exits. This capability is especially relevant for implementations that have high inventory usage. In this case, you should schedule the job to run at times when the system is as lightly loaded as possible. Enter a value of zero (0) or leave it blank to allow the batch job to continue running until it finishes.

When you're calculating available inventory, the number of records in the involved tables influences the queries' performance. One way to improve this performance is to decrease the quantity of records that the database considers.

For items that allow warehouse management processing, the InventSum and WHSInventReserve tables store on-hand inventory data. Deleting these records can significantly improve on-hand calculations (also referred to as WHS items).

The on-hand entries cleanup job deletes records in the WHSInventReserve and InventSum tables where all field values are zero (0). You can delete these records because they don't contribute to the on-hand inventory information. The job deletes only records that are below the Location level.

Schedule and configure the cleanup job

The on-hand entries cleanup job is available in Inventory management > Periodic tasks > Clean up > Warehouse management on-hand entries cleanup. To control the scope and schedule for running the job, use the standard job settings. The following settings are also available:

  • Delete if not updated for this many days - Enter the minimum number of days that the job must wait until someone deletes an on-hand entry that has dropped to zero. This approach can help you reduce the risk of deleting on-hand entries that are still in use. Enter 0 (zero) or leave the field blank if you want cleanup to occur as soon as possible.

  • Maximum execution time (hours) - Enter the maximum cleanup job time in hours. If the job doesn't finish before this time passes, the system saves the work that it's done so far and then closes. This capability is particularly relevant for inventory-intensive implementations. You should schedule the cleanup when the system load is as light as possible. If you want the batch job to continue until completed, enter 0 (zero) or leave the field blank.

Screenshot of the Warehouse management on-hand entries cleanup page with the parameters highlighted.

While you might be able to run the job during regular business hours, we suggest that you run it outside of work hours. Doing so helps prevent conflicts when a user works with a record that's in the process of being cleaned.

If the job attempts to remove a record for an item that's currently in use, a deadlock error occurs for the cleanup job. If a user attempts to access a record that's already cleaned, then the error message appears.

When the job runs, the commit size is 101. In other terms, deletions take place in groups of 101. However, because specific deletions are set-based, situations might occur where the same operation deletes more than 100 records. When this scenario happens, lock escalations might occur. Lock escalations mean that you have too many locks on specific rows in a table. After you exceed the maximum allowed number of locks by row, the system locks the entire table.

Archive historical inventory journal records

Over time, your organization will accumulate a large volume of inventory journal records. While these records aren't necessary for daily operations, they may still be needed for purposes such as historical reporting, auditing, or machine learning. Storing these records in the active system can result in increased storage costs and can negatively affect system performance and usability.

This feature allows your organization to use an archival framework to archive historical inventory journal records based on specific rules. Once archived, these records are removed from the day-to-day working environment and stored in a Dataverse-managed data lake. This process improves system performance by reducing storage load and operating costs while keeping the records available in a read-only format for when they're needed.

Administrators can set up logical rules to determine when and how inventory journal records should be archived from the active Supply Chain Management database to the Dataverse-managed data lake. The archived records remain accessible for purposes such as historical reporting, auditing, machine learning, and legal claims, without impacting the performance of the system’s day-to-day operations.