Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

將以使用 AL 語言 撰寫一個適用於 Microsoft Dynamics 365 Business Central 的報表 (Report) 程式。
這個報表將假設有一個自定義的 Table 來儲存這些在製品盤點數據。
InProcessInventory 的 Table 來儲存這些盤點資料。InProcessInventory Table 為 SourceTable。以下是 AL 報表程式碼,檔名可以命名為 Report50100_InProcessInventory.al
report 50100 "In Process Inventory Report"
{
// 設定報表的類別和用途
Caption = '在製品盤點清單';
ApplicationArea = All;
UsageCategory = ReportsAndAnalysis;
// 報表的主要資料來源
// 請將 'InProcessInventory' 替換為您實際的 Table ID 或 Name
DefaultLayout = RDLC;
RDLCLayout = 'InProcessInventory.rdlc'; // 需要自行設計此 RDLC 檔案
dataset
{
// 這是報表的主資料項 (Data Item)
dataitem(InProcInventory; "InProcessInventory") // 假設您使用此 Table Name
{
// 設定篩選條件 (如果需要,可以在這裡加入過濾器)
RequestFilterFields = "Work Center Name", "Item No.", "Operation Status";
// 排序設定
DataItemTableView = sorting("Work Center Name" , "Item No.");
// 定義要在報表中顯示的欄位
column(WorkCenterName; "Work Center Name")
{
Caption = '工作中心名稱';
}
column(ItemNo; "Item No.")
{
Caption = '品號';
}
column(InventoryQty; "Inventory Qty.")
{
Caption = '盤點數量';
}
column(ActualinventoryCount; '')
{
Caption = '實際盤點數量';
}
column(Memo; '')
{
Caption = '備註';
}
trigger OnPreDataItem()
begin
// 設定篩選條件:排除 "Operation Status" 是空字串的記錄
// '<>''' 表示「不等於空字串」。在 AL 語言中,空字串是兩個單引號 '',
// 為了在 SetFilter 字串中表示它,需要使用額外的引號來逸出,所以寫成 '<>''''
// 但更現代且常用的寫法是使用 SetFilter 的格式化功能。
// 更清晰和推薦的寫法 (使用 %1 替換參數)
// 篩選條件是:不等於空值 (Not Equal to Blank)
WorkInProcessInventory.SetFilter("Operation Status", '<>%1', '');
end;
// 計算總筆數的觸發器-處理每一筆資料行時進行計數
trigger OnAfterGetRecord()
begin
// 這裡可以加入任何在取得每筆記錄後需要執行的邏輯
RecordCount += 1; // 每讀取一筆記錄,計數器加 1
end;
// 在資料項處理完畢後的觸發器
trigger OnPostDataItem()
begin
// 在資料項處理完畢後,可以在這裡進行總結或其他操作
// 例如,將計數結果存儲到變數中,以便在報表的其他部分使用
Message('報表產出總筆數: %1 筆', RecordCount); // 顯示總筆數的訊息
end;
}
}
}
// --- 新增一個不需要 SourceTable 的 Data Item 來輸出總數 ---
// 這是一個「虛擬」資料項,用於在報表最後輸出計算結果
dataitem(TotalData; Integer)
{
DataItemTableView = sorting(Number);
MaxIteration = 1; // 確保這個資料項只執行一次
column(TotalRecordCount; RecordCount)
{
}
column(TotalText; TotalText)
{
}
}
}
// 報表的變數區域
var
RecordCount: Integer; // 儲存總筆數的變數
TotalText: Label '報表產出總筆數:'; // 顯示在報表上的文字標籤
}為了讓上面的報表能編譯和運行,您需要在 Business Central 中定義一個包含這些欄位的 Table。以下是假設的 Table 程式碼:
table 50100 "InProcessInventory"
{
Caption = '在製品盤點行';
DataClassification = CustomerContent;
fields
{
field(1; "Work Center Name"; Text[100])
{
Caption = '工作中心名稱';
}
field(2; "Item No."; Code[20])
{
Caption = '品號';
}
field(3; "Inventory Qty."; Decimal)
{
Caption = '盤點數量';
}
field(4; "Scrap Qty."; Decimal)
{
Caption = '報廢數量';
}
// ... 其他必要的欄位 (如 Primary Key 等)
}
keys
{
key(PK; "Work Center Name", "Item No.")
{
Clustered = true;
}
}
}RDLC (Report Definition Language Client-side) Layout 是一種 XML 格式的文件,用來定義 Business Central 報表的視覺外觀。它決定了資料集中的欄位如何排列、字體、表格結構、顏色等。
產生和設計 RDLC Layout 是一個開發者或進階使用者需要執行的步驟,主要流程如下:
設計 RDLC Layout 需要使用外部的報表設計工具:
.rdl 檔案當您在 VS Code 中編寫 AL 報表程式碼並進行編譯 (Build) 時,AL Language 伺服器會根據您在 dataset 區塊中定義的欄位,自動產生一個包含報表資料結構的 .rdl 檔案。
1. 定義 AL 報表物件:
確保您的 AL 程式碼中有以下設定:
report 50100 "In Process Inventory Report"
{
DefaultLayout = RDLC;
RDLCLayout = 'InProcessInventoryList.rdlc'; // 您的檔案名稱
// ... dataset 區塊 (包含所有要顯示的 column)
}2. 編譯專案:
在 VS Code 中,執行 Ctrl + Shift + B (Build) 或 F5 (Publish) 來編譯您的 AL 專案。
3. 找到 .rdl 檔案:
編譯成功後,一個與 RDLCLayout 屬性中定義的檔案名稱相同,但副檔名為 .rdl 的檔案會自動產生在您的專案根目錄或 src 資料夾中(例如:InProcessInventory.rdl)
產生 .rdl 檔案後,您需要使用 Report Builder 或 Visual Studio 來開啟和編輯它,將資料欄位拖曳成表格形式,並使其看起來像您圖片中的樣子。
.rdl 檔案:.rdl 檔案 (InProcessInventory.rdl) 並開啟它。dataset 中定義的欄位。Status, Department, InvtQty 等)從 Data Explorer 拖曳到表格的列中。狀態、部門、盤點數量)。.rdlc:.rdl 格式,並將其放在 AL 專案中 RDLCLayout 屬性所指定的路徑。
確保設計好的 .rdl 檔案與您的 AL 專案一起發佈。
InProcessInventory.rdl 檔案放在 AL 專案中適當的路徑下(通常是與 .al 檔案相同的資料夾)。現在,當在 Business Central 中執行該報表時,它就會套用設計的 RDLC Layout 來呈現資料。