You do not have the following permissions on TableData

When we develop in Microsoft Dynamics NAV, we use a Developer License that has permissions to the standard objects different of the license of the final customer.

Using the customer’s license you may encounter error messages as follows:

You do not have the following permissions on TableData {TableName}: {Read/Insert/Modify/Delete}

An example could be running a Codeunit that modify a record in the standard table 6550 Whse. Item Tracking Line.
You do not have the following permissions on TableData

Considerations:
I’m pretty sure that most of you after will receive an error like this, first will search the table number of the one in the error message. Then you will realize that is in the range of the standard objects (e.g. 6550) and you will start thinking why this error didn’t happen during your tests.

Well, the answer is obvious if you think that probably you tested using the Developer license and that the Customer’s license has different permission to access to the standard objects.

Causes:
Create a new Page using the wizard of type List to show all the fields of the system table Permission Range.
Then run it with the Customer’s license and filter for the object in the error message (i.e. TableData 6550)
Permission Ranges
As you can see, this TableData in the Customer’s license has Insert/Modify/Delete permission as Indirect. This means that you CANNOT do those action directly in that table.

Note: Remind that if you are saving the license in the database or you upload a new license you must restart the instance service.

In the meantime you realized (maybe debugging) that the code that caused this error is in a Codeunit. Bingo!!!

You do not have the following permissions on TableData

Solution:
Open the Codeunit in design and assign in the Properties the correct Permissions to the tables
Permissions

Did my solution solve your problem? Leave a comment.

Working with dates in NAV

To work following the standards avoids future issues.

In this post I’d like to suggest a way to convert dates in NAV.

Working with dates in NAV

A date in your system can have different formats depending on the preferences of your country and language.

You can come across different errors, for example Server and Client with different settings or ambiguous date because valid between two different formats (e.g. 05/04/2015 that could be DD/MM/YYYY or MM/DD/YYYY)

To avoid this confusion there is an International Standard that is the standard XML format that returns the date in the following format

YYYY-MM-DD

In NAV you can use the FORMAT Function (Code, Text) with the following declaration:

String := FORMAT(Value[, Length][, FormatStr/FormatNumber])

and using the FormatStr = 9 to return a string in XML format

FORMAT(varDate,0,9);

Note: Leaving the Length = 0 then the entire value is returned.

This example requires that you create the following variables:

Name DataType Subtype
varDate Date

Example:

varDate := DMY2DATE(5,4,2015);
MESSAGE(FORMAT(varDate,0,9));

It will return
Working with dates in NAV

How to convert from a string in XML format back to a field or variable of type Date?

To convert a string in a date in NAV we need to call the EVALUATE Function with the following declaration:

[Ok :=] EVALUATE(Variable, String[, Number])

It’s interesting that also in this function we can use Number = 9 to set that the string expected will be in XML format.

Using the standard XML format you will work in accordance to the standards and the configuration of your Server or Client, language or preference in your system will not affect your work and each date will be converted always in the same manner.

Remind that you can use the same functions and logic working with DateTime.

Did my post help you? Leave a reply.

HOW TO create NAV Instances with multiple builds in the same machine

The concepts described in this post are applicable to different versions/builds, for the examples I will use an installation of NAV 2013 R2 (7.1.35473) and I will create one or more instances also for the build 7.1.36703 (Cumulative Update 7 – May 2014) in the same server.

HOW TO create NAV Instances with multiple builds in the same machine?

We have to distinguish two different operations:

  1. Creation of the first instance for a different build
  2. Add more instances for this build

HOW TO create the first instance for a different build?

Prerequisites:

After you installed NAV 2013 R2 Server side’s files will be inside the following path:

C:\Program Files\Microsoft Dynamics NAV\71\

Copy the folder 71 in a new folder 71 – Build 36703

C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\

Copy and replace all files from the NST folder, in the Cumulative Update package, to the Service folder in the following path:

C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\Service\

Run Microsoft Dynamics NAV 2013 R2 Administration Shell and execute the following PowerShell CmdLet:

New-Service 'MicrosoftDynamicsNAVServer$NewInstanceName' -BinaryPathName '"C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\Service\Microsoft.Dynamics.Nav.Server.exe" $NewInstanceName /config "C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\Service\Microsoft.Dynamics.NAV.Server.exe.config"' -DependsOn 'HTTP' -Description 'Service handling requests to Microsoft Dynamics NAV application.' -DisplayName 'Microsoft Dynamics NAV Server [NewInstanceName]' -StartupType Manual

Note: you can replace NewInstanceName with your preferred name (there are 3 references) or use another name for the folder “71 – Build 36703” (there are 2 references)

In case of error, to delete this service use the following PowerShell CmdLet:

sc.exe delete 'MicrosoftDynamicsNAVServer$NewInstanceName'

Note: don’t remove the instance using Microsoft Dynamics NAV 2013 R2 Administration because, this is the Default instance for this build and it will be removed the Service folder from the 71 – Build 36703 folder.

HOW TO add more instances for this build?

In my example the name will be SecondInstanceName

Method 1:
Using Microsoft Dynamics NAV 2013 R2 Administration tool create a new instance with name SecondInstanceName.

Copy the SecondInstanceName folder from

C:\Program Files\Microsoft Dynamics NAV\71\Service\Instances\

to

C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\Service\Instances\

Note: if the subforder Instances doesn’t exist create it.

Using Microsoft Dynamics NAV 2013 R2 Administration tool delete the instance with name SecondInstanceName.

Run Microsoft Dynamics NAV 2013 R2 Administration Shell and execute the following PowerShell CmdLet:

New-Service 'MicrosoftDynamicsNAVServer$SecondInstanceName' -BinaryPathName '"C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\Service\Microsoft.Dynamics.Nav.Server.exe" $SecondInstanceName /config "C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\Service\Instances\SecondInstanceName\SecondInstanceName.config"' -DependsOn 'HTTP' -Description 'Service handling requests to Microsoft Dynamics NAV application.' -DisplayName 'Microsoft Dynamics NAV Server [SecondInstanceName]' -StartupType Manual

The difference with the previous command is only that now we will refer to the config file inside the Instances folder.

Note: you can replace SecondInstanceName with your preferred name (there are 5 references) or use another name for the folder “71 – Build 36703” (there are 2 references)

The last step is to correct the config files inside the SecondInstanceName folder:

  • SecondInstanceName.config – correct the paths in appsettings and tenants node replacing “71” with “71 – Build 36703”
  • CustomSettings.config – insert the correct values and ports and don’t foget to refer to the Default instance for this build in the following key:
    <add key="ServerInstance" value="NewInstanceName" />

Method 2 (by ROEL BERGS):

  1. Change a registry key to the path of the new build
  2. create the SecondInstanceName using Microsoft Dynamics NAV 2013 R2 Administration tool or PowerShell (CmdLet New-NAVServerInstance). This method will create the Instance foder in the correct path.
  3. Changed the registry key value back to the default path.

Following and example of the PowerShell script (run Microsoft Dynamics NAV 2013 R2 Administration tool as Administrator):

$nstDefaultPath = "C:\Program Files\Microsoft Dynamics NAV\71\Service\"
$nstPath = "C:\Program Files\Microsoft Dynamics NAV\71 - Build 36703\Service\"

#Switch registry to correct path
set-itemproperty -path "HKLM:\SOFTWARE\Microsoft\Microsoft Dynamics NAV\71\Service" -name "Path" -value $nstPath

New-NAVServerInstance "SecondInstanceName" -DatabaseName "DBNAME" -DatabaseServer "SQLSERVER" -ClientServicesPort 7046 -SOAPServicesPort 7047 -ODataServicesPort 7048 -ManagementServicesPort 7045

#Switch registry to default
set-itemproperty -path "HKLM:\SOFTWARE\Microsoft\Microsoft Dynamics NAV\71\Service" -name "Path" -value $nstDefaultPath

Note: don’t foget to insert set the corret values in the parameters and you can replace SecondInstanceName with your preferred name (there is 1 reference) or also use another name for the folder “71 – Build 36703” (there is 1 reference).

The last step is to correct the config file inside the SecondInstanceName folder:
CustomSettings.config – insert the correct values and ports and don’t foget to refer to the Default instance for this build in the following key:

<add key="ServerInstance" value="NewInstanceName" />

Did my HOW TO help you? Leave a reply.

This message occurred because a nonzero value was found

—————————
Microsoft Dynamics NAV Development Environment
—————————
You cannot delete or change the type of the {FieldName} field (in the {TableName} table) before the value in the field is reduced to 0 (zero) or ” (blank) in all records. This message occurred because a nonzero value was found for the record {PKFieldName}='{PKFieldValue}’ in company {CompanyName}.
—————————
OK
—————————

This message occurred because a nonzero value was found

Cause:
To change the definition of a field this doesn’t have to contain data.

Solution:
Delete all the values in the {FieldName} column (of the {TableName} table) for all the companies.
Note: the error message will show the first value the system will find, remember that you have to delete values also in the other companies.

HOW TO change data for all Companies?

If you want you can create a new field as a copy, create a Report for service to move data in the new field before to delete all the data and change the definition of the field. Then you could restore the original data in the original field.

Did my solution solve your problem? Leave a reply.

The number of records in the table exceeds the maximum number of 5000

Microsoft Dynamics NAV
—————————

The number of records in the table exceeds the maximum number of 5000. Set a filter to decrease the number of records in the table. Exporting too many records at once can affect system performance.
—————————
OK
—————————

The number of records in the table exceeds the maximum number of 5000

Solution:
Open using your preferred ClientUserSettings.config

  • NAV 2013 R2
    Default location is

    C:\Users\<username>\AppData\Roaming\Microsoft\Microsoft Dynamics NAV\71
  • NAV 2013
    Default location is

    C:\Users\<username>\AppData\Roaming\Microsoft\Microsoft Dynamics NAV\70
  • NAV 2009
    On Windows 7, Windows Vista, or Windows Server 2008, the default location is

    C:\Users\<username>\AppData\Local\Microsoft\Microsoft Dynamics NAV

    On Windows Server 2003 or Windows XP, the default location of this file is

    C:\Documents and Settings\<username>\Local Settings\Application Data\Microsoft\Microsoft Dynamics NAV

Where

<username>

is the name of the user.

Change MaxNoOfXMLRecordsToSend property value from 5000 to 2147483647

<add key="MaxNoOfXMLRecordsToSend" value="2147483647" />

If you’ll insert a number bigger that 2147483647 you’ll receive the following error message:

—————————
Microsoft Dynamics NAV
—————————
The MaxNoOfXMLRecordsToSend configuration setting must have a value between -2,147,483,648 and 2,147,483,647.
—————————
OK
—————————

Reference: Configuring the Windows Client

Did my solution solve your problem? Leave a reply.

Shortcut Ctrl+Alt+F1 does not work

If the shortcut Ctrl+Alt+F1 does not work the problem is not linked with the application that you are using but maybe with the computer that you are using, I noticed that is a problem in Dell machines.

Shortcut Ctrl+Alt+F1 does not work

Solution:

Use Ctrl+Alt+WinKey+F1

NOTE (by Daniele Rebussi): This solution applies also when NAV is used via Citrix/VMWare visualization environments, where Ctrl+Alt+F1 combination covers other functionality.

Did my solution solve your problem? Leave a reply.

The client version does not match the server version

—————————
Microsoft Dynamics NAV
—————————
The client version does not match the server version. You can only connect to a server with a matching version.

Client version: {ClientVersionNumber}

Server version: {ServerVersionNumber}
—————————
OK
—————————

The client version does not match the server version

Cause:
I’ve installed more builds of NAV 2013 in the same pc and I receive the error message when I try to run an object from the Microsoft Dynamics NAV Development Environment or activate the Debugger.
To install more builds in the same machine I created a copy of the subfolder 70 and renamed the copy in 70 – 34346.
You should receive the same error message if you install NAV 2013 R2 although it has a subfolder 71.

Solution:
To run an object you could create a different icon to run the correct version of the client before to try to run an object from the Development Environment but this workaround doesn’t work if you want to activate the Debugger.
Create a .reg file, using a text editor like Notepad, for each build or version that you’ve installed.
Each time you have to work with a particolar version or build you have to use the correct reg file to override the registry key.

NAV2013.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DYNAMICSNAV\Shell\Open\Command] 
@="C:\\Program Files (x86)\\Microsoft Dynamics NAV\\70\\RoleTailored Client\\Microsoft.Dynamics.Nav.Client.exe -protocolhandler \"%1\""

NAV2013_34346.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DYNAMICSNAV\Shell\Open\Command] 
@="C:\\Program Files (x86)\\Microsoft Dynamics NAV\\70 - 34346\\RoleTailored Client\\Microsoft.Dynamics.Nav.Client.exe -protocolhandler \"%1\""

NAV2013R2.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DYNAMICSNAV\Shell\Open\Command] 
@="C:\\Program Files (x86)\\Microsoft Dynamics NAV\\71\\RoleTailored Client\\Microsoft.Dynamics.Nav.Client.exe -protocolhandler \"%1\""

NAV2009.reg
NOTE: for the version 2009 or 2009 R2 you have to remove the -protocolhandler parameter

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DYNAMICSNAV\Shell\Open\Command] 
@="C:\\Program Files (x86)\\Microsoft Dynamics NAV\\60\\RoleTailored Client\\Microsoft.Dynamics.Nav.Client.exe \"%1\""

Did my solution solve your problem? Leave a reply.