Corfu Navision 2016, Development Tips, How To, Information, Inventory, Tip & Tricks

How Inventory is Calculated in Navision 2016

Today we will see terms used for Inventory and how Inventory is calculated in Navision.


You can find details of Inventory on Item Card itself. Also how much Inventory is available or required at different area in ERP.


If you open Item Availability by Location you will find in more details. When you drilldown you can find in more details from where these figure comes from.

Scheduled Receipts:

Here all the entries from below area is included:

a) Purchase Orders

b) Transfer Orders

c) Firm Planned Production Order

d) Release Production Order

e) Assembly Orders

How Navision calculates?

AvailType::”Scheduled Order Receipt”:
InsertEntry(DATABASE::”Purchase Line“,Item.FIELDNO(“Qty. on Purch. Order”),PurchLine.TABLECAPTION,Item.”Qty. on Purch. Order“);
InsertEntry(DATABASE::”Prod. Order Line“,Item.FIELDNO(“FP Order Receipt (Qty.)”),STRSUBSTNO(Text002,ProdOrderLine.TABLECAPTION),Item.”FP Order Receipt (Qty.)“);
InsertEntry(DATABASE::”Prod. Order Line“,Item.FIELDNO(“Rel. Order Receipt (Qty.)”),STRSUBSTNO(Text003,ProdOrderLine.TABLECAPTION),Item.”Rel. Order Receipt (Qty.)“);
InsertEntry(DATABASE::”Transfer Line“,Item.FIELDNO(“Qty. in Transit”),Item.FIELDCAPTION(“Qty. in Transit”),Item.”Qty. in Transit“);
InsertEntry(DATABASE::”Transfer Line“,Item.FIELDNO(“Trans. Ord. Receipt (Qty.)”),Item.FIELDCAPTION(“Trans. Ord. Receipt (Qty.)”),Item.”Trans. Ord. Receipt (Qty.)“);
InsertEntry(DATABASE::”Sales Line“,0,SalesLine.TABLECAPTION,Item.”Qty. on Sales Return“);
InsertEntry(DATABASE::”Assembly Header“,Item.FIELDNO(“Qty. on Assembly Order”),AssemblyHeader.TABLECAPTION,Item.”Qty. on Assembly Order“);

Planned Receipts:

Here all the entries from below area is included:

a) Planned Production Order

b) Planning Worksheet

c) Requisition Worksheet

How Navision calculates?

AvailType::”Planned Order Receipt”:
InsertEntry(DATABASE::”Requisition Line“,Item.FIELDNO(“Purch. Req. Receipt (Qty.)”),ReqLine.TABLECAPTION,Item.”Purch. Req. Receipt (Qty.)“);
InsertEntry(DATABASE::”Prod. Order Line“,Item.FIELDNO(“Planned Order Receipt (Qty.)”),STRSUBSTNO(Text000,ProdOrderLine.TABLECAPTION),Item.”Planned Order Receipt (Qty.)“);

Gross Requirement:

Here all the entries from below area is included:

a) Sales Order

b) Transfer Order

c) Firm Planned Production Order Components

d) Released Production Order Components

e) Job Planning Lines

f) Service Orders

g) Assembly Orders Components

How Navision calculates?

AvailType::”Gross Requirement”:
InsertEntry(DATABASE::”Sales Line“,Item.FIELDNO(“Qty. on Sales Order”),SalesLine.TABLECAPTION,Item.”Qty. on Sales Order“);
InsertEntry(DATABASE::”Service Line“,Item.FIELDNO(“Qty. on Service Order”),ServLine.TABLECAPTION,Item.”Qty. on Service Order“);
InsertEntry(DATABASE::”Job Planning Line“,Item.FIELDNO(“Qty. on Job Order”),JobPlanningLine.TABLECAPTION,Item.”Qty. on Job Order“);
InsertEntry(DATABASE::”Prod. Order Component“,Item.FIELDNO(“Scheduled Need (Qty.)”),ProdOrderComp.TABLECAPTION,Item.”Scheduled Need (Qty.)“);
InsertEntry(DATABASE::”Planning Component“,Item.FIELDNO(“Planning Issues (Qty.)”),PlanningComponent.TABLECAPTION,Item.”Planning Issues (Qty.)“);
InsertEntry(DATABASE::”Transfer Line“,Item.FIELDNO(“Trans. Ord. Shipment (Qty.)”),Item.FIELDCAPTION(“Trans. Ord. Shipment (Qty.)”),Item.”Trans. Ord. Shipment (Qty.)“);
InsertEntry(DATABASE::”Purchase Line“,0,PurchLine.TABLECAPTION,Item.”Qty. on Purch. Return“);
InsertEntry(DATABASE::”Assembly Line“,Item.FIELDNO(“Qty. on Asm. Component”),AssemblyLine.TABLECAPTION,Item.”Qty. on Asm. Component“);

Planned Order Releases:

How Navision calculates?

AvailType::”Planned Order Release”:
InsertEntry(DATABASE::”Requisition Line“,Item.FIELDNO(“Purch. Req. Release (Qty.)”),ReqLine.TABLECAPTION,Item.”Purch. Req. Release (Qty.)“);
InsertEntry(DATABASE::”Prod. Order Line“,Item.FIELDNO(“Planned Order Release (Qty.)”),STRSUBSTNO(Text001,ProdOrderLine.TABLECAPTION),Item.”Planned Order Release (Qty.)“);
InsertEntry(DATABASE::”Requisition Line“,Item.FIELDNO(“Planning Release (Qty.)”),ReqLine.TABLECAPTION,Item.”Planning Release (Qty.)“);

Finally we can calculate Projected Available Inventory as below formula:

Inventory + Scheduled Receipts + Planned Receipts – Gross Requirement

thats all for today, will come with more information in my upcomming posts.


Cues, Query

Using Query Object to Calculate the Cue Data

Today we will learn to create a query to update Cue data.

Creating a Query for Calculating the Cue Data
First, we will create a query object to calculate the number of open sales invoices from table 21 Cust. Ledger Entry.
Create a query for calculating the Cue data as below:
Save the query.

Adding the Table Field for the Cue Data
Next we will add a field to the table Sales Invoice Cue (create new table) for holding the Cue data.

We will add a global function that returns the total amount of sales invoices for the current month from the query object that we created above procedure.

To add C/AL code to the table calculate the Cue data
Add a global function that is called CalcSalesThisMonthAmount as follows:

On the View menu, choose C/AL Globals.

On the Functions tab, in the Name column, enter CalcSalesThisMonthAmount.

Select the new function, and then in the View menu, select Properties.

Set the Local property to No.

In the C/AL Globals window, select the new function, and then choose Locals.

On the Return Value tab, set Name field to Amount and the Return Type field to Decimal.

On the Variables tab, add two variables as shown in the following table:

Name DataType Subtype
CustLedgerEntry Record Cust. Ledger Entry
CustLedgerEntrySales Query Cust. Ledg. Entry Sales

In C/AL code, add the following code on the CalcSalesThisMonthAmount function:

CustLedgerEntrySales.SETRANGE(Document_Type,CustLedgerEntry.”Document Type”::Invoice);



IF CustLedgerEntrySales.READ THEN

Amount := CustLedgerEntrySales.Sum_Sales_LCY;

Save the table.

Adding the Cue to the Role Center Page
To display the Cue fields on the Role Center, We will create a new Page [PageType  = CardPart] name Sales Invoice Cue.

Page Designer should look similar to shown above illustration.

Open the C/AL code for the page, and then add the following code to the OnAfterGetRecord Trigger to assign the Sales This month field to the CalcSalesThisMonthAmount function of table Sales Invoice Cue:

“Sales This Month” := CalcSalesThisMonthAmount;

Also add code to the OnOpenPage Trigger.


Formatting the Cue Data
We does not want to display any decimal places. To achieve this, we set the AutoFormatType Property and AutoFormatExpr Property of the Cue field on the page. As shown above.

To change the data format

In the Properties window, set the AutoFormatType property to 10.

This enables you to create a custom data format.

Set the AutoFormatExpr property to the following text.

‘<precision,0:0><standard format,0>’

<precision,0:0> specifies not to display any decimals places.

<standard format,0> specifies to format the data according to standard format 0.

Close the Properties windows, and then save and compile the page.

Run the Page created above the output should be similar to as below:

Now you can add this CardPart Page to any of your Role Centre Page.