Most of the times, when a question arise about why NAV suggest such a planning proposal, it arises the question on how planning parameters are determined by the given company. When we talk about planning parameters, we refer to: reorder point, reorder quantity and safety stock.
The safety stock is the quantity a company would like to hold on stock to address uncertainty. Lets come back later to this.
Reorder point is based on certainty. For a company, the certainty is based on the demand profile. So, if we have historical data which defines that the average demand is X during the vendor lead time, we should set this reorder point to a minimum of that average demand. In other words:
- we know that vendor lead time is 7 days
- the average demand during 7 days is about 125 pieces
- reorder point should be 125
Once we determine this reorder point, it will act as a trigger so when stock is on or below that stock level, it will generate an action for planners to create a replenishment. In other words, if our stock falls below 125 pieces, we need to replenish since it will take 7 days for the vendor to complete our order and we need to ensure we have enough in stock to cover the demand within those 7 days.
Of course, there are industries where uncertainty needs to be planned for. In this case, we use the safety stock and the reorder point will be increased to account for: average demand during lead time + safety stock.
The reorder quantity is calculated depending on the specific item type, ordering costs, or other consideration. In some cases, we reorder as much quantity as we can allocate in the warehouse space we have for this bin (maximum quantity). In other cases, this is based on the economic order quantity where we need to determine the optimal quantity to be ordered.
In any case, planning parameters have to be thought, agreed and continuosly verified. In other case, NAV planning will not be able to provide realistic results when planning parameters are not based on what your business is about.
Not sure if you are familiar with this. But, I believe it worths covering it …
Have you ever realized NAV Planning goes through different steps or phases of the planning? StartOver, MatchDates, MatchQty, CreateSupply, ReduceSupply, CloseDemand, CloseSupply, CloseLoop. All these steps are being performed on the PlanItem procedure from CU99000854. The way planning goes through each of these steps depends on the reordering policy. But basically:
First state is StartOver which determines if there is any demand to plan for. If so, it try to determines if there is any supply. If this is the case, next state would be MatchDates. If no supply exists, next state would be CreateSupply. If there is no other demand to plan for, next state would be ReduceSupply (if any exists) or CloseLoop (to finalize the loop through all states).
MatchDates state. This is about matching demand and supply dates to make sure that both can be plan together (ie. supply can be used to meet demand). If cannot be met, next state would be CreateSupply (another supply needs to be created). If it can, the existing untracked quantity in the supply needs to be reduced and state would be ReduceSupply.
MatchQty state. If supply quantity is not enough, it needs to be closed (no more available) through CloseSupply state. If this is a supply where quantity can be increased, then CloseDemand state can be next.
CreateSupply state. This is the step where supply will be created depending on the policy.
ReduceSupply state. Here, the untracked (unnecessary) quantity will be reduced from the supply. Next state would be to close the supply.
CloseDemand state. In here, the demand will be closed which means that demand has been planned for. The next thing (state) to do here would be StartOver to start the planning of another demand.
CloseSupply state. This is similar than CloseDemand state but from the supply perspective. If supply has been entirely planned, another supply needs to be considered and StartOver state will be next.
CloseLoop state. This is where planning finalizes. Before doing that, it will determine if ROP has been crossed. If so, it will be planned for again by going through the StartOver state.
Hopefully someone finds the above info useful. Think about a sequence of steps before plan can be considered as finalized. These sequences of steps are being done in the PlanItem procedure through a WHILE loop until plan is done.
This post is not for the reader to use the suggested code but to test it and enhance it as required. Yeap, this is a disclaimer so reader knows that testing should always be done. Also, the below code is not completed but might provide a good idea on how to enhance NAV planning with Jobs material planning.
What I would like to cover here is how to integrate MRP with Jobs so material required for jobs create action messages. Before that, we might need to refresh how CU99000854 determines where the demands are coming from. This was covered on my earlier post about CU 99000854 (Demand Types). As a remider, logic is on function DemandToInvProfile. Here it goes through the different types of demand (Service, Sales, Production, …) and make planning aware of them.
Back to our topic, this same function is where we need to add code so MRP is aware that Job Planning Lines carry demands (material requirements). As an example, the piece of code we could consider is the following:
// Copyright © Microsoft Corporation. All Rights Reserved.// This code released under the terms of the // Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)…JobPlanningLine.SETCURRENTKEY(Type,”No.”,”Variant Code”,”Location Code”,”Planning Date”);JobPlanningLine.SETRANGE(Type,JobPlanningLine.Type::Item);JobPlanningLine.SETRANGE(“No.”,Item.”No.”);Item.COPYFILTER(“Location Filter”,JobPlanningLine.”Location Code”);Item.COPYFILTER(“Variant Filter”,JobPlanningLine.”Variant Code”);JobPlanningLine.SETFILTER(“Planning Date”,’>%1&<=%2',0D,ToDate);
IF JobPlanningLine.FIND('-') THENREPEATInventoryProfile.INIT;InventoryProfile."Line No." := NextLineNo;InventoryProfile.TransferFromJobPlanningLine(JobPlanningLine);IF InventoryProfile.IsSupply THENInventoryProfile.ChangeSign;InventoryProfile.INSERT;UNTIL JobPlanningLine.NEXT = 0;…
What we are doing above is using the job planning lines of type "Item" to be considered as demand and use the planning date as due date for the demand.
Going forward, reader could take it from here to finalize the development.
You can use links on your task pages to guide users to additional information. The links can be the URL addresses of web sites or links to documents on a computer.
In the following example, you can see how to add a link to a customer card task page. The link is then viewable both from the customer card and the customer list.
1. Open a customer card to which you want to add a link to a document or URL.
2. If the Links FactBox is not displayed on the page, customize the page to display Links.
3. In Links, click Actions , and then click New.
4. In the Link Address field, enter an address for the file or website, such as C:\My Documents\invoice1.doc, or www.microsoft.com.
5. Fill in the Description field with information about the link.
6. Click Save.
7. In Links, click on the link in the Link Address field. The appropriate program, such as Microsoft Word or Microsoft Internet Explorer, opens and displays the link target.
For more information about usability and the RoleTailored client, see the blog post Useful, Usable, and Desirable.
Do you like that song? "Unforgettable", Nat King Cole, 1954. And yes, you are right: this is nothing to be with NAV. But, I was asked to start posting on this blog and wanted to explain what my posts would be about.
"Unforgettable" is what SCM (Supply Chain Management) is about when you come to the ERP arena. Most of the times, we go into the technical details of the NAV implementation and we forget what is the ultimate goal: a tool to boost the productivity, a tool to expand or extend the limits on how companies can reach or provide services. In other words, do not forget that NAV needs to be optimal for your company productivity.
Just to ensure we all readers of this blog have common understanding, SCM is considered from a APICS definition to be all those tools which enables to increase customer satisfaction while minimizing inventory and reducing costs. From a Dynamics NAV perspective, granules which relate to SCM are those which map the following business processes:- Sales & Purchase Profit (sales and purchase order management)- Inventory Optimization (planning, inventory management)- Warehouse Management- Cost Reduction (Cost method and application)- Service Management
Now, that I introduced myself, I will be posting my first post following ...
We are almost ready with Microsoft Dynamics NAV 2009 R2 - and we can't wait to tell you about it! This release has even more focus on improving business productivity for partners and customers. Take a minute to consider the possibilities and new opportunities that Microsoft Dynamics NAV 2009 R2 offers your business with features like built-in integration with Microsoft Dynamics CRM, new cloud opportunities, RoleTailored client access for remote and roaming users, Microsoft Application Virtualization support, and Online Payment Service for Microsoft Dynamics NAV. What's more - there are some really cool business data visualization capabilities and many of the new features and enhancements will make it easier for you to grow your business by providing even better solutions for customers. Partners can go to PartnerSource and read more about Key Highlights here. You can also read the updated Statement of Direction Addendum. The date for Worldwide General Availability of Microsoft Dynamics NAV 2009 R2 is December 15, 2010. Stay tuned for more news!
You can expand and collapse FastTabs on a page. When a FastTab is collapsed, not all fields in the FastTab are displayed in the header of the FastTab. You can customize any FastTab so that the most important fields are shown on the header when the FastTab is collapsed. This will provide you with a summary of the information from the FastTab.
1. To start customizing a FastTab, open the page that you want to customize, and then click Customize .
2. Click Customize This Page.
3. In the left column, click FastTabs.
4. Under Show FastTabs in this order, select the FastTab that you want to customize.
5. Click Customize FastTab...
6. To promote a field to the FastTab header, choose the field under Fields shown and then click Importance > Promoted.
7. To remove the field from the FastTab header, choose the field under Fields shown and then click Importance > Standard.
8. Click OK to close the Customize windows.
Now when you collapse the FastTab you see the promoted fields.
When a new contact is created in Dynamics NAV, you may want to synchronize that contact to Outlook. Sometimes it could happen that during the next synchronization attempt, this specific contact seems to duplicate somehow. This blog describe how this could happen and what you could do to prevent this. This blog will also describe how the synchronization works in detail. A future blog will describe what to do when this situation has occurred.
If you create a new contact in Dynamics NAV and synchronize that contact to Outlook via a normal synchronization, then a new contact will be created in the dedicated Outlook Synchronization folder in Outlook. Dynamics NAV must know that this process finished successfully, so what happens next is that a Unique Identifier is sent back from Outlook to Dynamics NAV. This Unique Identifier is stored in table 5302.
When the contact is created in Outlook but the Unique Identifier is not sent back to Dynamics NAV, during the next synchronization attempt, a duplication could occur.
Most of the time, this happens when the user does not know the synchronization is running in the background.
E.g.:
NOTE: using the “Schedule automatic synchronization every” in general is a bad idea because with a scheduled synchronization and with the current Outlook Synchronization solution, the progress bar and summary window will not be shown to the Outlook Synchronization user in Outlook!
With Office 2010 it is very easy to close Outlook –even when the synchronization is running! If the Unique Identifier is not sent back to Dynamics NAV, a previous attempt to synchronize new items to Outlook and the other way around will duplicate the synchronized data in Dynamics NAV or Outlook! The same scenario applies if the Outlook Synchronization User uses a laptop and closes the lid of the laptop (when he does not know the synchronization is running). Of course, this scenario could also happen if Outlook suddenly crashes; e.g. during a power failure, etc.
There are many reason why a duplication could occur, but in general an Outlook Synchronization User should know that the Outlook Add-In is running in the background and therefore, we now do not recommend to disable the “Show synchronization progress” option and the “Show synchronization summary” option. Enabling these options again would prevent the most common cause why a duplication could occur.
Regards,
Marco Mels CSS EMEA
This posting is provided "AS IS" with no warranties, and confers no rights
When moving to the RoleTailored client some people have experienced difficulties with grouping in RDLC reports in cases where the requirements are just a bit more complex than a basic grouping functionality.
I must admit that at the first glance it does not seem simple, but after a little research it does not look dramatically complex either. That motivated me to write this blog post and share my findings with all of you NAV report developers.
So let's take a look at the task we are trying to accomplish.
I have a master table, which contains a list of sales people - SalesPerson. The sales people sell software partially as on-premises software and partially as a subscription. There are two tables, which contain data for these two types of sale: OnPremisesSale and SubscriptionSale.
The example is artificial and is meant only to show different tricks on how to do grouping. The picture below shows the data for this report:
For each sales person I need to output both sales of on-premises software and subscription sales and show the total sales. Something that looks like the following:
Now we have all required information, let's start solving the task.
1. First, I create an NAV report. Add all necessary data items, establish data item links for the proper joining of the data, and place all needed fields on the section designer in order to get them inside RDLC report.See the picture below.
2. Next, I go to RDLC designer in Visual Studio. First I pick a list control, put the SalesPerson_Name field in the list, and set the grouping based on the SalesPerson_SalesPersonId field.3. After that, I place a row with column captions on top of the list.
Design in Visual Studio as shown below.
4. Now I need to place two tables inside the list- one for the on-premises software and one for the subscriptions. A list can display detail rows or a single grouping level, but not both. We can work that around this limitation by adding a nested data region. Here I place a rectangle inside the list and place two tables inside this rectangle, one for On-Premises and one for Subscriptions. In each table, I add header text and add the CustomerName and Amount fields.
5. I also add two text boxes for the sum of amount - one inside the rectangle to show total sales for the sales person and one outside to show the overall amount. Both contain the same formula: =SUM(Fields!SubscriptionSale_Amount.Value) + SUM(Fields!OnPremisesSale_Amount.Value)
The picture below shows the result of this design:
6. It looks more or less correct, but there are uneven strange empty spaces between rows. In order to detect the root cause of this problem let's add visible borders to our tables. Change the BorderStyle property to Solid for one of the tables and to Dashed for another.
So the result will look like this:
7. This result indicates that our report has two problems:
So I will make two fixes in order to address these two bugs:
As an addition, I will make some minor changes to improve the report's readability: change fonts, font size, font style, and add separator lines.
All these modifications will produce the following output:
That is exactly it what I wanted to achieve at the beginning.
I also have some tips, which might be helpful in your future reporting endeavors:
- Yuri Belenky
This post shows how to include an external .NET assembly in your report layout when designing reports for RTC. The focus here is NOT how to build a .NET assembly, but how you can include such an assembly in your report design. But still, we will begin by creating our own .NET assembly for use in the layout.
To keep it simple, let's make a .NET assembly to just add up two numbers:
The whole project should look like this now:
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace MyReportAssembly{ public class AddNumbers { public int AddFunction(int i, int j) { return (i + j); } }}
That's all the functionality we need - as mentioned we want to keep it simple!
But we need to make a few more changes to the project before we can use it:
In Project Properties, on the Signing tab, select "Sign the assembly", select a New key (give it any name), and untick password protection.
To allow this assembly to be called from the report layout you must set this property in Assemblyinfo.cs. So, in Assemblyinfo.cs, add these lines:
using System.Security;
[assembly: AllowPartiallyTrustedCallers]
Full details of why you need those two lines here: "Asserting Permissions in Custom Assemblies"
When I built this project using Visual Studio 2010, I was not able to install the assembly. And when trying to include it in my report layout I got this error: "MyReportAssembly.dll does not contain an assembly.". So if you will be using the installation instructions below, and you are using Visual Studio 2010, then change "Target Framework" to ".NET Framework 3.5" under Project Properties on the Application tab. This is the default target framework in Visual Studio 2008. Visual Studio 2010 defaults to version 4.0. I'm sure there are better ways to instlal this and still build it for .NET 4, but that's outside of the current scope. Also if it later complains about reference to Microsoft.CSharp, then just remove that from the project under references.
When this is done, build your project to create MyReportAssembly.dll
Again, the focus here is not on buildign and installing .NET assemblies, and I am no expert in that, so this is probably NOT the recommended way to install a .NET assembly, but it works just for the purpose of being able to see it in the report layout:
Start an elevated Visual Studio Command prompt, and go to the folder where your net MyReportAssembly.dll is (C:\Users\[UserName]\Documents\visual studio 2010\Projects\MyReportAssembly\MyReportAssembly\bin\Debug\). Then run this command:
gacutil /i MyReportAssembly.dll
It can be uninstalled again with this command:
gacutil /uf MyReportAssembly
After installing it, open this folder in Windows Explorer:
c:\Windows\Assembly
and check that you have the MyReportAssembly there. If not, then check if the section above about compiling it to .NET 3.5 applies to you.
Finally - How to use an exterenal .NET assembly in report layout
So now we finally come to the point of this post: How do you use your new assembly in the report layout:
Public Function Addnumbers(Num1 as Integer, Num2 as Integer) as Integer Dim MyAssembly as MyReportAssembly.AddNumbers MyAssembly = new MyReportAssembly.AddNumbers() Return MyAssembly.AddFunction(Num1,Num2)End Function
Then call this function nby adding this Expression to a TextBox:
=Code.Addnumbers(1,2)
And, finally, if you run the report like this, you would get the error "xyz, which is not a trusted assembly.". So back in the classic report design, in report properties, you just have to set the property EnableExternalAssemblies = Yes, and the report should run.
That was a lot of work for just adding up two numbers, but hopefully is shows what steps are needed to open up your report layout to endless opportunities. Note: I have no ideas if this will work with visual assemblies or anything which contains any UI at all. Any experiences with this, feel free to add to the end of this post.
As always, and especially this time since I'm in no way a c# developer:
These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.
Additional Information
If you plan to look further into this, then here are some recommended links:
"Using Custom Assemblies with Reports"
"Deploying a Custom Assembly"
If your assembly calls other services, it is likely you need to consider passing on the user's credentials. For more information on that, here is a good place to begin:
"Asserting Permissions in Custom Assemblies"
Lars Lohndorf-Larsen
Microsoft Dynamics UK
Microsoft Customer Service and Support (CSS) EMEA