Error when opening Whse. Shipment page

Got following error after creating a Whse. shipment from a sales order in Nav 2017 when opening the Whse. Shipment from page “Whse. Shipment Lines”:

The record that you tried to open is not available. 
The page will close or show the next record.

The first strange thing is, the message is an info box, not an error message. After analysing the data in the sales order and tables Whse. Shipment Header and Whse. Shipment Line no error found. So what’s up? Also debugging did not really help, the debugger did not jump to the line, where the info box is created.

In the end i found out, that the reason for the strange behaviour was following: I created a new location for some tests, but forgot to add my user to the whse. employees, but that was not shown. The causal reason in the code: When opening page 7335 Whse. Shipment from page “Whse. Shipment Lines” following code is called in OnOpenPage trigger:

ErrorIfUserIsNotWhseEmployee() // from table 7320 Whse. Shipment Header
IF USERID = '' THEN BEGIN
  WhseEmployee.SETRANGE("User ID",USERID);
  IF WhseEmployee.ISEMPTY THEN
   ERROR(Text002,USERID);
END;

Nice code, but what happens, if WhseEmployee.ISEMPTY is not empty? No error message is shown, but the info message from above with senseless text, which has nothing to do with the original error. Here it’s not checked, if there is a whse. employee created for the current user and the given location of the sales order. Thx microsoft.

What’s needed to correct the behaviour? Change above code to:

IF USERID = '' THEN BEGIN
  WhseEmployee.SETRANGE("User ID",USERID);
  WhseEmployee.SETRANGE("Location Code","Location Code");
  IF WhseEmployee.ISEMPTY THEN
    ERROR(Text002,USERID);
  END;

You should also change Text002 to “You must first set up user %1 as a warehouse employee for location %2.”.

cheers

Advertisements

Error Microsoft.Dynamics.Nav Types.Exceptions NavNCLFieldNotFoundException occured

Quite strange error occured during an upgrade process from Nav 2009 to Nav 2013 after upgrade step 1, when starting Nav 2013 RTC. The RTC simply crashed. The event log entries are the following:

Application: Microsoft.Dynamics.Nav.Client.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: Microsoft.Dynamics.Nav.Types.Exceptions.NavNCLFieldNotFoundException
Exception Info: Microsoft.Dynamics.Nav.Types.Exceptions.NavNCLFieldNotFoundException
 at Microsoft.Dynamics.Nav.Client.ConnectionStateManager.CallServer[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Microsoft.Dynamics.Nav.Client.CallServerMethod`1, Microsoft.Dynamics.Nav.Client.ServerCallOptions)
 at Microsoft.Dynamics.Nav.Client.ConnectionStateManager.CallServer[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Microsoft.Dynamics.Nav.Client.CallServerMethod`1)
 at Microsoft.Dynamics.Nav.Client.ServerInvocationHandler.CallServer[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Microsoft.Dynamics.Nav.Client.CallServerMethod`1)
 at Microsoft.Dynamics.Nav.Client.ServiceConnection.CallServer[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Microsoft.Dynamics.Nav.Client.CallServerMethod`1)
 at Microsoft.Dynamics.Nav.Client.ServiceConnection.OpenCompany(System.String)
 at Microsoft.Dynamics.Nav.Client.Builder.CompanyInitializer.OpenCompany(System.String)
 at Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSession.OpenCompany(System.String)
 at Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSessionInitializer.InitializeCore()
 at Microsoft.Dynamics.Nav.Client.FormBuilder.BuilderSessionInitializer.Initialize()
 at Microsoft.Dynamics.Framework.UI.Builder.Initialize()
 at Microsoft.Dynamics.Framework.UI.UISession.Initialize()
 at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.InitializeUISession()
 at Microsoft.Dynamics.Framework.UI.Windows.ClientSessionBase.SetupSessions()
 at Microsoft.Dynamics.Framework.UI.Windows.ClientSessionBase.InitCore()
 at Microsoft.Dynamics.Nav.Client.WinClient.NavWinFormsClientSession.InitCore()
 at Microsoft.Dynamics.Framework.UI.ClientSessionCore.Init()
 at Microsoft.Dynamics.Framework.UI.Windows.ClientSessionBase.Run()
 at Microsoft.Dynamics.Nav.Client.WinClient.NavClientErrorHandler.ExecuteAndCatchExceptions(System.Func`1)
 at Microsoft.Dynamics.Nav.Client.WinClient.ExceptionHandler.DoExecute(System.Func`1)
 at Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.RunCore()
 at Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.Run(Boolean)
 at Microsoft.Dynamics.Nav.Client.WinClient.StartWinFormsClient.RunAndDispose()
 at Microsoft.Dynamics.Nav.Client.Program.ExecuteNormally(System.Func`1)
 at Microsoft.Dynamics.Nav.Client.Program.Main(System.String[])

additional:

Name of faulty app: Microsoft.Dynamics.Nav.Client.exe, Version: 7.0.46056.0, time code: 0x57475c32
Name of faulty module: KERNELBASE.dll, Version: 10.0.10586.306, time code: 0x571afb9a
error code: 0xe0434352
error offset: 0x000bdae8
ID of faulty process: 0x292c
Start time of faulty app: 0x01d2334b59f3c13d

The error means: There is a default field or function missing in a master data table needed on load process of RTC.

After debugging and comparing with cronus database, it turned out, the reason was a missing default field in master data table “marketing setup”. after adding that field and other missing default fields and functions in master data setup tables  the RTC started correctly.

The main reason was, that the developer did a very sloppy object upgrade, made not the needed comparision step with cronus database to check which fields are missing, also skipped other needed steps.

So if you get that error, either restart object upgrade or check at least all master data tables (setup tables, config tables, document tables, customer, vendor, item, …).

cheers

Cannot build the page XX. The metadata object Table 0 was not found.

This error can occur during or after an upgrade process.

Cause:
In the source table of the page there is a field with a wrong tablerelation, in that case with value “Table 0”. That can occur, if the selected table in the table relation was moved, removed or renamed, especially, if that table is a custom table or a table part of a module.

Solution:
Edit the source table of that page, check all fields with tablerelations. Replace value “Table 0” with the correct value.

cheers

Cannot create an instance of an Automation Server with CLSID = {GUID}

If you get that kind of error, in most cases that means the automation, which should be registered with that given GUID in your system is missing or misconfigured. In both cases the system does not know the common name of the system. That’s why you get that cryptic message.

aut-serv-err

Solution:

Search the web (e.g. google.com, microsoft.com) to get more information about the automation. The given GUID is unique worldwide! So you’ll get the name for the automation quite easy. The variable name, where the automation is used, is also a hint for the name, also comments in the code.
Then search for the file on the server using windows explorer, where the nav service is installed and where you want to run the nav object (report, table, codeunit, …), if that automation file (dll) is physically installed.

  • If you do not find it, then it’s missing. download it from the vendor or install the missing software, which includes that automation.
  • If you find the file, then it was not registered correctly. In that case you need to run the registry tool regsrv32. First uninstall, then re-install the automation:
    Regsvr32 [/u] [/n] [/i[:cmdline]] <full path to dllname>
    for more details and troubleshooting follow this.

Typical GUIDs according that issue:

  • 000208D5-0000-0000-C000-000000000046: Microsoft.Office.Interop.Excel
  • 248DD896-BB45-11CF-9ABC-0080C7E7B78D: Winsock Control 6.0
  • DB07BCE5-B131-11D3-9219-00002430F8E2: CFront Plus
  • F5078F18-C551-11D3-89B9-0000F81FE221: MS XML 4.0 (or 6.0)

If you can’t find the GUID on the web, then it is probably a custom automation developed by yourself or a vendor years ago.

cheers

How to vote on Microsoft.Connect

Weeks ago i’ve voted for a new dynamics nav feature. It was not easy  to do that. Other people had also problems with that. So for those, who also like to suggest new features or ask for hotfixes, there is a guide:

  • Goto http://connect.microsoft.com/.
  • Sign in with your Live account or create one: Top right corner, drop down list, select `Microsoft Account`. To sign in you need special product permissions. If you get a “Access denied” message, you have to less permissions. Then please contact your nav partner or microsoft support.
  • After logging in, search through the product directory for Dynamics NAV and join the NAV Group. That’s needed for further options.
  • Select then Microsoft Dynamics from the drop down in the top right.
  • There you click “Search existing” and search for “Notifications”, then select the bug/feature from the list.
  • Now you can vote . If you want, you can write a feedback e.g. “That’s an annoying bug, the customers call me every day, …”.

Error: An attempt was made to change an old version of a “Sales Line” record

When posting e.g. a Warehouse Shipment or an other document concerning direct or indirect table “Sales Line”, then following error can occur:

An attempt was made to change an old version of a “Sales Line” record. The record should first be reread from the database. This is a programming error. Identification fields and values: …

Technical Detail:
This error occurs, when “Sales Line”.modify is called.

Reason:
The code was customized. Along the call chain the same “Sales Line” record is modified before the call, where the error occurs. That means there is a customized code (maybe in CU 80 or table “Sales Line”), where some fields are changed, then “Sales Line”.modify is called. After that “Sales Line”.modify is called a second time. That is not allowed.

Solution:
If you did not change the code by yourself, contact the colleague, who made the last changes or contact your NAV Partner. First challenge is to find the position, where “Sales Line”.modify is called first.
Hint: Debug the function, which causes the error and set a breakpoint into trigger OnModifyDatabase in CU 1. This trigger is called each time command modify is called.
When the position is found, change the code. If possible remove the first “Sales Line”.modify call.
Other solution: Reload the “Sales Line” record at the second position (where the error occurs) before calling modify with GET, then write the needed field changes, then call modiy.

cheers

Error: You do not have the following permissions on CodeUnit ApplicationManagement: Execute

If you get following error:

sc13

then your nav user account has to less rights to work with the RTC client. This kind of error is normally shown, when you start the RTC client.

Reasons for that error can be:

  • You work with a database which comes from outside of your windows domain
  • Your permission set was changed

To solve that issue best you open SSMS (Sql Server Management Studio) and view table “User”. Search for your windows/nav account in field “User Name”. To go further you need the value in field “User Security ID”. Remember that value.

sc15

Then edit table “Access Control” and look for the same value in field “User Security ID”.

sc142

Change the “Role ID” value to SUPER, click the ENTER key to assign the change.

After that restart the RTC client and change your user settings as needed.

Cheers