將以使用 AL 語言 撰寫一個適用於 Microsoft Dynamics 365 Business Central 的報表 (Report) 程式。
這個報表將假設有一個自定義的 Table 來儲存這些在製品盤點數據。
前提假設 (Assumptions)
- 有一個名為
InProcessInventory的 Table 來儲存這些盤點資料。 - 報表將以
InProcessInventoryTable 為 SourceTable。 - 報表只會顯示清單中的欄位。
AL Language 報表程式碼 (Report Code)
以下是 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 '報表產出總筆數:'; // 顯示在報表上的文字標籤
}需要的 Table 定義 (Table Definition)
為了讓上面的報表能編譯和運行,您需要在 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 Layout 報表布局
RDLC (Report Definition Language Client-side) Layout 是一種 XML 格式的文件,用來定義 Business Central 報表的視覺外觀。它決定了資料集中的欄位如何排列、字體、表格結構、顏色等。
產生和設計 RDLC Layout 是一個開發者或進階使用者需要執行的步驟,主要流程如下:
所需工具 (Required Tools)
設計 RDLC Layout 需要使用外部的報表設計工具:
- SQL Server Report Builder (推薦):
- SQL Server Report Builder 這是一個免費的獨立應用程式,專門用於建立和編輯 RDL/RDLC 報表。
- 如果您使用 Business Central On-Premises 版本,它通常會隨伺服器安裝。
- 如果您使用 Online 版本,需要單獨下載安裝。
- Microsoft Visual Studio 搭配 RDLC Report Designer 擴充功能:
- 如果您已經是 Visual Studio 的使用者,可以透過安裝擴充功能來設計 RDLC。
步驟一:從 AL 程式碼產生 .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)
步驟二:使用 Report Builder 設計 Layout
產生 .rdl 檔案後,您需要使用 Report Builder 或 Visual Studio 來開啟和編輯它,將資料欄位拖曳成表格形式,並使其看起來像您圖片中的樣子。
- 開啟 Report Builder:
- 在您的電腦上啟動 SQL Server Report Builder。
- 開啟
.rdl檔案:- 在 Report Builder 中,選擇 File > Open,然後導航到您 AL 專案中產生的
.rdl檔案 (InProcessInventory.rdl) 並開啟它。
- 在 Report Builder 中,選擇 File > Open,然後導航到您 AL 專案中產生的
- 設計報表:
- Data Explorer (資料集): 您會看到您的報表資料集 (Dataset) 和所有在 AL 程式碼
dataset中定義的欄位。 - 建立表格: 在設計畫布上,插入一個 Table (表格) 物件。
- 拖曳欄位: 將要顯示的欄位(例如:
Status,Department,InvtQty等)從 Data Explorer 拖曳到表格的列中。 - 格式設定:
- 設定表頭 (Header) 的文字、字體和背景色。
- 調整欄寬,以確保所有數據都能正確顯示。
- 將欄位標題改為中文,使其符合您的圖片所示(如:
狀態、部門、盤點數量)。 - 添加總計或頁首/頁尾(如果需要)。
- Data Explorer (資料集): 您會看到您的報表資料集 (Dataset) 和所有在 AL 程式碼
- 儲存為
.rdlc:- 設計完成後,在 Report Builder 中儲存檔案,請確認檔案儲存為
.rdl格式,並將其放在 AL 專案中RDLCLayout屬性所指定的路徑。
- 設計完成後,在 Report Builder 中儲存檔案,請確認檔案儲存為

步驟三:將 Layout 加入專案並發佈
確保設計好的 .rdl 檔案與您的 AL 專案一起發佈。
- 將設計好的
InProcessInventory.rdl檔案放在 AL 專案中適當的路徑下(通常是與.al檔案相同的資料夾)。 - 重新編譯和發佈 Business Central 擴充套件。
現在,當在 Business Central 中執行該報表時,它就會套用設計的 RDLC Layout 來呈現資料。




