2015年12月3日 星期四

NAV 2009 Report 利用Integer來達到Group的效果

今天來為各位做Integer Group的介紹,我覺得一個程式開發者,一定要了解什麼是Integer,因為它可以幫助開發者做到很多事情。而為什麼會以NAV 2009來做Demo,因為我覺得NAV 2009以後的版本,因為多了RTC介面,而且Report的設計已經改為在Microsoft Visual Studio上去設計,而NAV 2009因為有 Classic版本,所有的介面Form、Report都在同一個平台上面做開發的動作,以一個程式初學者來說的話,會比較容易上手。

下面開始介紹Integer:

在NAV 2009中雖然有GroupTotalFields的 Properties可以設定

但是Group的欄位必須是Key

以Table 32 Item Ledger Entry為例

這張表的Key如下圖所示


如果今天想使用Location Code來做Group的話,若以不更動這張表的Key為前提,可以透過Integer來做Group的動作

首先宣告Record變數,這邊要設定Temporary屬性為Yes,將TempILE設為暫存資料表,也就是說你可以將TempILE當作是一個系統內的虛擬資料表,可以讓你自由的存取這張資料表,因為他一開始是沒有資料的,你可以將資料暫時存放在此


在Item Ledger Entry - OnPreDataItem()先將TempILE這張虛擬的資料表清空,避免資料一開始不是空的



然後在Item Ledger Entry - OnAfterGetRecord()可以看到我對TempILE的"Location Code"這個欄位下篩選條件,利用"Item Ledger Entry"在OnAfterGetRecord()會迴圈執行的流程,將"Item Ledger Entry"的"Location Code"去尋找TempILE的"Location Code",如果沒有在TempILE找到這筆資料,才會做新增資料的動作,達到以Location Code做Group,若是要同時Group兩個欄位以上的話,額外增加Filter的行數即可。

這邊可以看到我新增了NextEntry這個變數,因為Item Ledger Entry的主鍵是Entry No.,所以這個欄位必須要有值,所以只要每新增一筆資料到TempILE,我就會將NextEntry加一,避免重複插入資料。

在END之後的程式碼主要是用來做Group累加的動作

TempILE.Quantity += "Item Ledger Entry".Quantity;
TempILE."Remaining Quantity" += "Item Ledger Entry"."Sales Amount (Actual)";
TempILE."Invoiced Quantity" += "Item Ledger Entry"."Cost Amount (Actual)";

這邊因為"Sales Amount (Actual)"和"Cost Amount (Actual)"是FlowField,所以不能直接用暫存表累加,這邊透過其他閒置的欄位,像是Remaining Quantity和Invoiced Quantity這種不是FlowField的欄位來代替。

然後新增一個Integer的DataItem來將TempILE的資料用迴圈的方式顯示在Report上


在Integer - OnPreDataItem()可以看到,首先將剛剛新增的資料做一個RESET的動作,將資料全部顯示,然後針對Integer這個DataItem下一個條件,執行1~TempILE的資料數


如果是第一筆資料的話,顯示TempILE的第一筆資料,之後就顯示TempILE的下一筆資料

最後將先前說到的Remaining Quantity和Invoiced Quantity指派回TempILE的"Sales Amount (Actual)"和"Cost Amount (Actual)"欄位

Section的部分,因為是透過Integer這個DataItem顯示資料,所以要利用Integer的Body顯示TempILE的資料


看一下最後執行Report 顯示的結果,將Item Ledger Entry這張資料表相同的Location Code做一個Quantity, Sales Amount, Cost Amount作群組加總的動作。



0 意見 :

張貼留言

Copyright © 2015. Brian的Dynamic Nav學習筆記 - All Rights Reserved | Powered by Blogger | Template Design by Cool Blogger Tutorials | Published by Templates Doctor