程式資訊
- 程式 ID:
BOM_BOTM - 所屬子系統:D.工程資料
- 狀態:stable
BOM 底階用料查詢¶
功能簡介¶
「BOM 底階用料查詢」把一段品號區間內的每個品號,沿著 BOM 結構一路展開到最低階(底層)零件,列出該品號最終要用到哪些「不再往下分解」的物料、各用多少、以及這些零件的主要供應廠商與基本屬性。
它回答的問題是:「這個成品(或半成品)拆到最底,實際是由哪些採購件/原料組成的?」——中間的半成品階層會被穿透,只保留最末端的用料。適合工程師、製程規劃與採購人員在估料、核對 BOM、或盤點底階零件時使用。
與其他 BOM 查詢的差異
本頁只做「結構展開」,不算成本、不結合訂單/預示需求。若要看標準製造成本請用 BOM 成本展開;若要由下而上反查某品號被哪些母件用到、彙總總用量,請用 BOM 用途查詢。它用的底階展開預存程序(DARB_QRY_BOM_BOTM)與客戶報價單展材料、生產計劃查詢展用量是同一支,只是本頁固定以基準數量 1 展開、純看結構。
前置需求¶
- 權限:D.工程資料 →
D-070 BOM 底階用料查詢的瀏覽(與列印)權限。 - 基礎資料:展開結果的完整度取決於下列主檔的維護狀況——
| 資料 | 影響的結果 |
|---|---|
| BOM 主檔(Bom) | 展開路徑與底階零件清單;BOM 沒建到底,就只展開到目前的末階 |
| 品項主檔(B 模組) | 上層/底階零件的品名、單位、材質、ABC 分類、容器別、包裝量 |
| 廠商主檔與 BOM 供應商設定 | 底階零件的廠商代號 1/2/3、廠商簡稱、供應比例 |
| 群組設定 | 群組代號與群組說明 |
操作步驟¶
本表單為唯讀查詢,沒有新增/修改/刪除,操作集中在「設定品號區間 → 查詢 → 看上下兩個格線」。
步驟① 設定品號區間¶
- 在條件面板輸入起始品號與截止品號(兩欄之間以
~表示區間)。 - 兩欄皆套用品號搜尋樣式(
SKUSearch),可用 BOM 品號搜尋帶出品號。 - 預設起始品號為空字串、截止品號為
zzzz,即「全部品號」。 - 區間以品號字串大小比對(
起始品號 ≤ 品號 ≤ 截止品號)。只想查單一品號時,把起訖填同一個品號即可。
步驟② 執行查詢¶
- 按工具列的
查詢。系統對區間內的每個品號做 BOM 底階展開,結果分為上下兩個格線。 - 上方(組件清單):每一列是一個「被查詢的品號」(查詢組件號),列出它的品名、停用、群組代號、群組說明與零件編號。
- 下方(底階零件明細):點選上方任一列,下方即顯示該品號展開到最低階的所有底階零件——品號、品名、用量、單位、組件編號、查詢組件號與零件編號等。

步驟③ 列印 / 匯出¶
- 上、下兩個格線都是
TsRadGridView,可在格線上按右鍵 → 匯出 Excel,把當前內容輸出成試算表。 - 工具列的
列印可把查詢結果輸出成報表(透過系統共用列印機制;本表單HaveReportData永遠為真,故列印恆可用)。
查詢前先設好區間
本表單沒有「自動帶上次條件」的暫存;每次開啟都是預設的全品號區間(空字串 ~ zzzz)。品號很多時建議先縮小起訖品號再查,避免一次展開過多資料。
欄位說明¶
查詢條件(步驟①)¶
| 欄位 | 必填 | 說明 / 格式 / 預設 |
|---|---|---|
| 起始品號 | — | 品號區間下界;套 SKUSearch 搜尋樣式。預設空字串(不限下界) |
| 截止品號 | — | 品號區間上界;套 SKUSearch 搜尋樣式。預設 zzzz(不限上界,等同查全部) |
兩欄都不檢查存在
起訖品號的搜尋框都設定 CheckDataExist="False",即可填入不存在的品號當邊界(用來框區間),系統不會擋。
上方格線(組件清單,每列一個被查品號)¶
| 欄位 | 說明 |
|---|---|
| 查詢組件號 | 被展開的品號(即起訖區間內符合的品號),同時是上下連動鍵 |
| 品名 | 該品號的品名(取自展開結果該組第一筆) |
| 停用 | 該品號是否停用 |
| 群組代號 | 該品號所屬群組代號 |
| 群組說明 | 群組代號對應的說明 |
| 零件編號 | 該品號的零件編號 |
下方格線(底階零件明細,隨上方選取列連動)¶
| 欄位 | 說明 |
|---|---|
| 品號 | 底階零件的品號 |
| 品名 | 底階零件品名 |
| 停用 | 底階零件是否停用 |
| 群組代號 / 群組說明 | 底階零件所屬群組 |
| 數量 | 該底階零件展開後的用量(以單位用量基準 1 逐階相乘累計;格式套 BomQuantity 數值樣式) |
| 單位 | 底階零件單位 |
| 組件編號 | 此底階零件所屬的上層組件編號 |
| 查詢組件號 | 對應上方被查詢的品號(連動鍵) |
| 零件編號 | 底階零件的零件編號 |
其他可用但未排進預設格線的欄位
展開結果(Bom_botmDetailPoco)還帶有含損耗數量、單重、總重、材質、庫存量、容器別、ABC 分類、包裝材料、包裝量(包/箱)、來源別、顯示序號(途程序號)、廠商代號 1~3/廠商簡稱 1~3/廠商 1~3 比例等欄位,資料已隨查詢取回,只是預設未排進畫面格線;如需呈現可調整版型或加欄。另外底階展開預存程序原始回傳的 bomlevel(階層)、損耗率、派工截止點 等欄位本表單未取用。
欄位連動與附加功能¶
這支程式邏輯集中在「查詢」與「上下連動」,以下把實際程式碼裡會發生的事逐條說明:
-
輸入起訖品號 → 組成查詢範圍:按
查詢時(Bom_botmViewModel.Query),系統把條件組成品號 between '起始品號' and '截止品號',搭配展開基準數量1與「今日日期」(DateTimeWrapper.TodayYYYYMMDD()),以事件代碼Bom_chk呼叫底階展開預存程序DARB_QRY_BOM_BOTM。也就是說,用量是以單位 1 為基準往下展開,看的是「每做 1 個此品號需要多少底階零件」,而非結合任何訂單數量。 -
展開到最低階(穿透半成品):預存程序會沿 BOM 階層遞迴,自動跳過中間的半成品階,只回傳「不再往下分解」的底階零件。中間階層的用量會逐層相乘累計到底階零件的數量上。
-
查詢結果在 BLL 內分組成上/下兩份:
Bom_botmBll.GetSources把預存程序回傳的扁平清單,以查詢組件號做ToLookup分組——每個被查品號在上方只出現一列(取該組第一筆的品名、停用、零件編號、群組代號/說明),它底下所有底階零件則整批歸入下方明細清單。 -
上方選一列 → 下方即時換明細:上方每列代表一個被查品號;當你點選上方某列,
SelectedItem的 setter 會以該列的查詢組件號為鍵,從已分組好的detailLookup(記憶體內的ILookup)撈出屬於它的底階零件填入下方格線。若取消選取(無選取列),下方會清空。這個對應在查詢當下一次算好放在記憶體裡,所以切換上方各列時是即時的,不會重打資料庫。 -
三組供應廠商隨查詢帶回、原樣呈現:每個底階零件可帶三組廠商代號/簡稱/供應比例(廠商代號 1/2/3)。
Bom_botmBll把這三組欄位原樣放進明細,本表單不另做「挑最高比例為主要廠商」之類的計算,供應比例只是如實呈現的參考值。GetVendor 在本頁未啟用
底階展開模型
Twork_qry_bom_botm雖有一個GetVendor()(依比例 1≥2≥3 選出主要廠商)的方法,但那是給生產計劃查詢等需要「單一主要供應商」的場景用的;本表單刻意不呼叫它,三組廠商一律平鋪呈現。 -
展開帶入查詢當日日期:呼叫底階展開預存程序時會帶入「今日日期」作為展開基準日,因此與日期相關的欄位(如庫存量)反映的是查詢當下的狀態。
-
可列印並寫入作業紀錄:本表單覆寫
HaveReportData()永遠回傳true,因此工具列的列印可用。列印走系統共用的報表列印路徑(IUpdatePrint/IPrintSource機制),不需在本頁額外設定資料來源;列印(或記錄工作流程)時系統會一併把這次作業寫入作業紀錄(RECORD)。
注意:本頁不做的事
常見問題¶
查詢後上方沒有任何資料?
可能是起訖品號區間內沒有符合的品號,或這些品號根本沒有建 BOM。請確認:(1) 起始/截止品號是否把目標品號夾在區間內(區間以品號字串大小比對);(2) 該品號是否已在 BOM 主檔 建立結構。預設區間是「空字串 ~ zzzz」即全部品號,把起訖清空再查可先確認資料是否存在。
上方有資料,但點某列後下方明細是空的?
代表該品號沒有可展開的底階零件——通常是它本身就是採購件/原料(沒有下階 BOM),或它的 BOM 還沒往下建。請到 BOM 主檔 確認該品號是否真的有下階組成。
展開出來的底階零件比預期少,是不是漏了?
底階展開只會穿透「有建 BOM 的階層」。若中間某個半成品的 BOM 沒建完整,展開就會停在那一階、把它當成底階零件列出,導致更下層的真正原料沒被展開。建議用 BOM 階層檢查 找出沒展開到底的階層後補建 BOM。
底階零件的數量是什麼基準?是訂單數量嗎?
不是。數量是以「上層品號做 1 個」為基準,沿 BOM 逐階相乘累計到底階的用量,與任何訂單/預示數量無關。要由下而上反查某品號被哪些母件用到、彙總總用量請用 BOM 用途查詢;要結合實際需求數量估採購量,請改用 生產計劃查詢。
看不到單價、金額、成本或廠商欄位?
本查詢只做結構展開,刻意不含成本,所以沒有單價/金額欄。廠商代號 1~3、供應比例、含損耗數量、庫存量等欄位其實已隨查詢取回,只是預設格線沒排這些欄(詳見 欄位連動與附加功能);要顯示可調整版型加欄。要看標準製造成本與金額,請改用 BOM 成本展開。
輸入了一個不存在的品號當邊界,會被擋嗎?
不會。起訖品號的搜尋框設定為不檢查存在(CheckDataExist="False"),刻意允許填入不存在的字串當區間邊界(例如用 zzzz 當上界)。
相關功能¶
需補截圖清單
以下截圖待 runtime 驗收後補拍(放 docs/D-Bom/images/):
bom_botm-step1.png— 條件面板(起訖品號)+上下兩個格線連動的全貌(建議點選上方一列、下方顯示其底階零件明細)