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