Wednesday, January 15, 2025

D365 SCM Moving average: High-level overview

 Moving average is a costing method that works on average principle, meaning it calculates the average cost of inventory in stock. 

Average cost of each inventory item in stock is re-calculated after receiving inventory via purchase orders or any other inbound documents. So formula is the following:

The moving average cost = the total cost of items purchased / the number of items in stock.

Let's look at the example below:


With these transactions, the moving average cost at the 9/16/2024 was 100$, but at the 9/18/2024 was 120$.
Calculation for the 9/18/2024 = (10000+18000)/(100+150) = 112
If we sell the product, the cost of goods sold would be 112$.

In the scenarios above, the sales order was posted before posting of the invoice for purchase orders
So what will happen when invoice is posted for the purchase order and invoice price has been changed. 

What happens in D365 in this scenarios.
Purchase order transaction:
Let's charge 105.00 per unit for the item, not 100.00 as it was originally in the product receipt.


When we post invoice and invoice price is different, the following voucher will be created:
If the invoiced quantity is still on hand, the full difference between the invoiced amount and the receipt is recognized as an inventory cost.
If only part of the quantity is still on hand, the system performs a proportional calculation at the time of invoicing.

In our scenario, part of the quantity was sold already. The additional cost of 5.00 per unit cannot be related to the sales order, because the sales order is already costed when you receive the invoice for the purchased items. Therefore, the system performs a proportional calculation, and the expense of 400.00 ([105.00 - 100.00] × 80 units) is expensed on the Price difference for moving average account. So 400$ expensed and the remaining 100$ will be recognized as inventory cost and Financial cost that will be posted on transaction is 10100$ instead of 10500.

Moving average cost recalculation:
As soon as we post invoice, Cost is recalculated and now, it is not 112$, but 112.59$.
The calculation is the following: (10100+18000-8960) / (100+150-80) = 112.5882 

Sales order transaction
It does not update/recalculate issue transaction, it does not post adjustment transaction. 

Inventory close does not affect products that have moving average as the inventory model group, and it does not generate any settlements between the transactions. So it means that posted sales orders will stay unchanged. 

Moving average is typically a good fit for the following scenarios: 
- All units of the same product family carry the same cost
- There is no need to recalculate the inventory transactions to adjust the costs on outbound transactions. 
- There is no need in inventory closing
- Data entry on purchase orders is accurate and in timely manner and no significant difference between purchase price and invoice price. 


Sunday, October 27, 2024

Service management dispatch board issues

 I have been trying to resolve Dispatch board for a while and I managed to do it by doing all of the below:

- Create dispatch team and assign workers to dispatch team on the Employee page

- Create each worker as a Resource in the Production module, define the Type = Human resources and specify the calendar. 

- Resource calendar should match calendar in service management parameters

- Activities set to be created when stage changes from planning to in progress in the Service management parameters. Activity type is appointment

- Executed Synchronize resource capacity roll-ups batch job.

- Investigated if there are any issues for Resource Availability page in the Project management and accounting

- Investigated if Activity is created for service order.

- Assigned calendar on the Employee record.

Tuesday, May 7, 2024

Difference between Basic and Advanced warehousing in D365 SCM

Sometimes you need to make decision on whether you want to go with Basic or Advanced warehousing. In this blogpost I tried to summarize the difference between these 2 options. 

Take a look:


There are other considerations against Advance warehouse management in Microsoft Dynamics 365 SCM:

You might not want to use AWMS in the following situations:

  • don't have Warehouse locations
  • don't need to know where exactly your products are in your warehouse
  • small number of products and you know where they are
  • 3rd party provider is carrying the warehouse for your products
  • don't have mobile devices to perform warehousing operations

Things to consider when changing existing item from Basic to Advanced warehousing in D365 SCM

 1. First step is to remove storage dimension group on the Product level (not item level). Otherwise you will get the follwoing message:

The storage dimension group cannot be changed for the item. Remove the existing storage dimension group on the corresponding product before changing the item's storage dimension group.

2. You can only change the item which alreday has location dimension enabled. Otherwise you will get the following message:

You can only change the storage dimension group for items with an active location storage dimension.

If you don't have location dimension enabled, then you will need address this problem first and move your products to location enabled dimension.

You will need to perform the following according to the info shared here: How to change the Storage dimension group on items with existing Inventory transactions - Microsoft Dynamics 365 Blog

Note: I have tried the steps below and it worked. However I skipped inventory close procedure.
  1. Count inventory down to zero. You will need to temporarily remove any existing reservations, registrations, etc.
  2. Perform an Inventory close (Inventory management > Periodic > Closing and adjustment)
  3. After performing the inventory close, you can change the storage dimension group at the Released item level.
  4. Note that you will not be able to make this change unless the current session date is after the date of Inventory closing.

3. You can only change the item with storage dimensions that matches to the new storage dimensions in terms of inventory parameters. Otherwise you will get the following message:

The settings for active, blank receipt allowed, blank issue allowed, physical inventory, and financial inventory must match the settings of the current storage dimension group.

When you decide what is the best approach for changing your settings in the future, my recommendation is the following:

  • If you are considering Basic or Advanced warehousing, then start with the Basic and later on you will upgrade to the Advanced. You cannot downgrade it from Advanced to Basic. 
  • Start with active Location dimension enabled, it will simplify your life later when you decide to upgrade. For instance, you can use Warehouse=Location (1:1 values) if you don't have any locations yet.
  • Set up storage dimensions smart from the beginning so it does not require any change later. 

That's it!

Thursday, April 11, 2024

Transfer order with Landed cost module in Microsoft Dynamics 365 SCM (D365)

In this blog post I would like to cover one of the most common requirements for transfer orders: how to add transportation cost to the product while you are doing transfers in Supply Chain Management. 

There are few ways how you can do transfers in the system. But almost none of them allow you to add charges. 

Let's review them. 

Transfer journals: this journal even does not have Charges functionality in it. It is simple transfer between some locations. 

Transfer orders: this option does not allow you to add any charges as well. 

Transfer orders with TMS: this option allows you to add changes but only with the posting to the ledger. If you need to add the transportation cost to the item - this option will not work for you. 

Transfer orders with Landed cost: this option allows you to define the transportation cost and add it to the item. We are going to stick with this option and review how it is done in the system

Below is a recap of what is mentioned above


Let's start with the minimum configuration that is required for Landed cost module to achieve the requirement above. 

We will need to have statuses for our voyages. Voyages will be our representation of the movement between 2 locations. So we should have at lest 2 statuses, that will indicate that voyage is shipped and received. 

Voyage statuses


Landed cost parameters

General tab:


Status updates tab:


Feature visibility tab:
This is important parameter that will enable voyages to be created manually. 

Vessels

In our scenario we will be delivering our products by truck. So I am going create just 1 vessel and name it Truck.


Shipping container types

Since we are delivering via Truck and I am not going to create any specific containers types. Let's assume that we are going to have 1 fixed-size box type and name it Default. 


Shipping containers

The same as above, we will have only 1 container and name it Default. 


Cost type codes

Let's assume that for our transportation cost we would like to have 2 charges. 1 charge will be for delivering the goods and 1 charge for loading the product into the truck. In our scenario, we are also would like to increase the cost of our item by this transportation charges. In other words, we would like the handling cost to be absorbed in the inventory value of the item.

Create 2 cost type codes for the scenario above. 

Freight


Labor


That's it about Landed cost module configuration. There are other settings that might affect the process, but in order to make it simple and still achieve the requirement, we will make the minimum config. 

Now it is time to get down to the scenario itself. 

Walk-through

First off, we are going to buy our product and check the cost of the product. 


In this scenario we purchase 35 000 tons of the item with the total amount of 1907666.25 dollars. So our cost of the item is 1907666.25/35000 = 54.50475

Next steps is to create a transfer order to move from one site/warehouse to another one. Go to Inventory management > Outbound orders > Transfer orders


Once the transfer order is created, we need to create a voyage. 

Go to Landed cost > Voyages > All voyages and select New button to create a voyage.

Note: Vessel can be entered manually and it can represent vessel plate number


In the Voyage editor page, select the transfer order that was created and select Add to staging list button. 


Select View staging list button.


Select Add to new shipping container button to pack it to a container. Since we don't have any containers, we will select Default that we have created. 

After that transfer order will be added to the voyage.


Select the voyage ID hyperlink to check the voyage created.


Next is to add transportation costs to the voyage. Select Voyage costs button.

We are going to add to cost type codes for Freight and Labor. 



To review the transportation cost inquiry, go to voyage and select Manage tab > Cost inquiries.


Now, just Ship transfer orders by selecting corresponding menu. 


To reduce the number the steps, we are going to auto receive it. Select auto receive flag to do it. 


If you check the Transfer order itself, transfer order is now in the Received status. 


Let's see the results of the voyage posting. 

From Voyage line select Inventory -> Transactions.

We see that Cost amount is accounted for transportation costs as well. 



Let's calculate this amount. We moved 6900 tons. The cost of the item is 54.50475. 

Step1: 6900*54.50475=376,082.775

Step2: 376,082.775 +131997.00 (Freight cost) = 508,079.775

Step3: 508,079.775 + 13800 (Labor cost) = 521,879.775 = 521,879.78

Select Transactions in financial voucher, you can see that Adjustment has been posted to accumulate the transportation cost. 



Select Voucher transactions.


Here you don't see any transportation costs, amount considering only cost of the item is posted. So where does transportation cost go? 

Select Voyage costs > Estimate adjustments





Select Voucher

Here you can see that it was posted to Debit materials, since we are adding charges to the item and it posts credit into Landed cost clearing account. It is a little bit surprising that it does not pick up accounts from the Credit setup of the Cost type code. It uses clearing account instead. 

Now let's review the cost of the item to see that transportation costs added to the item cost. 


Now we need to clear our clearing account and post charges to the credit accounts that were initially setup in the cost type codes. To do so, go to AP > Invoice journal. Create a new journal. 

We will debit our landed cost clearing account, and credit our expense account for the transportation. 


Do not use Functions -> Select voyage, or do not set any voyages at the bottom. It will create extra GL transactions which we don't need. It will make sense to do it for Purchase orders, but not for Transfer orders.


Lets see all the voucher transactions at once. Now we see that everything is balanced, Landed cost clearing account is balanced to 0. Handling costs increased the inventory and posted to the expenses. 


That's it for today!

Wednesday, February 14, 2024

Cannot open Charge codes page in Microsoft Dynamics 365 SCM

If you experience an issue by trying to open charge codes page and you get an error saying that "The menu item with markuptable could not be opened", you might want to check all the messages in the Action center.  You might see the following issues, like: 

  • Parameter record does not exist.
  • Cannot set 'Tax calculation behavior' setting to option other than 'Don't recalculate' when feature "Enable proper tax calculation for returns with partial quantity" is enabled.

This issue can be solved by disabling some feature. The feature that causes this issue is "Enable proper tax calculation for returns with partial quantity". Once you disable this feature, the issue will disappear. 

That's it!

Wednesday, February 7, 2024

Vendor contact information in Microsoft Dynamics 365 SCM

In this blogpost I would like to review where you can setup some master data for vendor contacts. 

When you try to setup vendor contact (Accounts payable > Vendors > All vendors > Contacts > Add contacts), some of the configuration are presented as lookups. Below are the details, where you can find them in the system. 

  • Personal title: Data is taken from Organization administration > Global address book > Name title and suffix. Records with Type = Title will be available in the lookup
  • Personal suffix: Data is taken from Organization administration > Global address book > Name title and suffix. Records with Type = Suffix will be available in the lookup
  • Job title: Data is taken from Sales and marketing > Setup > Contacts > Contact person titles. Some examples may include the following:

    Title

    Person title alias

    Account Manager

    Account Manager

    Admin

    Admin

    Assistant

    Assistant

    Consultant

    Consultant

    Cust Service

    Cust Service

    Developer

    Developer

    Finance

    Finance

    General

    General

    IT

    IT

    Management

    Management

    Marketing

    Marketing

    Pre-sales

    Pre-sales

    Purchase

    Purchase

    Sales

    Sales

    Technical

    Technical

    Training

    Training

    Warehouse

    Warehouse

  • Function: Data is taken from Sales and marketing > Setup > Contacts > Functions of persons
  • Salutation: Data is taken from Sales and marketing > Setup > Contacts > Salutation
  • Complementary: Data is taken from Sales and marketing > Setup > Contacts > Complimentary close
  • Decision: Data is taken from Sales and marketing > Setup > Contacts > Decision
  • Loyalty: Data is taken from Sales and marketing > Setup > Contacts > Loyalty
  • Character: Data is taken from Sales and marketing > Setup > Contacts > Character
  • Language:  Data is taken from Human resources > Setup > Language codes > Language codes

  That's it!