程式資訊
- 程式 ID:
BOM_CHK1 - 所屬子系統:D.工程資料
- 狀態:stable
BOM 階層檢查¶
功能簡介¶
「BOM 階層檢查」是一支單欄條件的查詢報表,用來找出 BOM(Bill of Materials,物料清單)結構中展開層數過深或形成循環的組件。
系統會從每個成品往下逐階展開其 BOM,當某個組件的展開層數達到你指定的層數門檻時,就把它列出來。實務上,正常的產品 BOM 不會無止盡地往下展;如果展開層數異常地深、甚至展不完,多半代表 BOM 設定有問題(例如 A 用到 B、B 又回頭用到 A 的循環引用,或多餘的中間階層)。生管、BOM 維護人員可在大量建檔或匯入 BOM 後,用這支程式做一次結構健檢。
查完若一筆都沒有,代表在你設定的層數門檻下沒有異常結構,系統會直接提示「所有資料皆正確」。
前置需求¶
- 權限:D.BOM →
D-080 BOM階層檢查的瀏覽權限。 - 基礎資料:本程式直接讀現有 BOM 結構做展開,查詢結果的意義取決於下列資料——
| 資料 | 影響什麼 |
|---|---|
| BOM 表 | 唯一的資料來源;展開的階層、用到的組件全部來自 BOM 建檔 |
| 品號主檔(品名) | 結果清單顯示的 品名 欄 |
備註
這支程式只查不改——它不會修正 BOM,只負責把可疑的組件挑出來。挑出來之後要到 BOM 表 去調整實際結構。
操作步驟¶
本程式採「左側條件面板 + 右側結果清單」的標準查詢版面,整個流程只有一個條件、一個動作。
- 在左側條件面板的 BOM層數 欄輸入要檢查的層數門檻。
- 此欄在開啟畫面時預設帶入系統的 BOM 最大層數(
BomMaxLevel,目前為20),游標焦點也會自動落在這個欄位。 - 欄位最多 2 位數,輸入超過上限會自動壓回上限、輸入負數會自動歸 0(詳見欄位連動與附加功能)。
- 此欄在開啟畫面時預設帶入系統的 BOM 最大層數(
- 按工具列的
查詢。系統依你輸入的層數展開所有 BOM,把達到門檻的組件列在右側清單。 - 檢視右側清單的三個欄位:組件編號、品名、層數,據此回 BOM 表 檢查並修正可疑結構。
- 需要時可在結果格線上按右鍵匯出 Excel,把待查清單帶出去逐筆核對。
小技巧
把 BOM層數 調小(例如 10),可以更早攔截到「結構偏深」的組件;維持預設 20(系統最大展開層數)則主要用來抓展不完/循環的異常結構。改完層數再按一次 查詢 即可重算。

欄位說明¶
查詢條件¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| BOM層數 | ✔ | 要檢查的展開層數門檻。整數、最多 2 位(TsNumericTextBox,離開欄位時才寫回)。預設=系統 BOM 最大層數 BomMaxLevel(目前 20);可輸入 0~20,超出範圍自動修正 |
結果清單¶
格線為唯讀(IsReadOnly),三個欄位皆不可編輯。
| 欄位 | 說明 |
|---|---|
| 組件編號 | 被判定為層數過深/異常的組件品號(內部屬性 查詢組件號) |
| 品名 | 該組件的品名 |
| 層數 | 該組件在 BOM 展開時所在的層數 |
欄位連動與附加功能¶
這一節把「輸入某欄位/按某動作後系統會做什麼」逐條列出,全部來自程式碼實作(Bom_chk1ConditionViewModel、Bom_chk1ViewModel、Bom_chkBll、Bom_chkParameters)。
開啟畫面時(預設值與焦點)
- 條件面板載入時,查詢參數
Bom_chkParameters在建構子就呼叫ResetToDefault(),把 BOM層數 設成系統參數BomMaxLevel(目前20)。 - 焦點透過
FocusExtension.IsFocused自動落在 BOM層數 欄,讓你可以直接改值或直接按查詢。
輸入 BOM層數 時(即時校正)
BOM層數 欄採 UpdateSourceTrigger=LostFocus——也就是你輸入後離開欄位時才把值寫回。寫回的同時,Level 屬性的 setter 會自動把值限制在合理範圍:
- 輸入負數 → 自動歸為
0。 - 輸入大於上限(大於
BomMaxLevel=20)的值 → 自動壓回上限20。 - 介於 0~20 之間 → 照你輸入的值採用。
因此這個欄位不可能送出超出範圍的值,你不需要自己記得上限是多少。
為什麼要離開欄位值才會生效
因為寫回採 LostFocus,邊打字邊改不會即時校正;改完層數後請先點到別處(或直接按 查詢),讓欄位完成寫回與校正,再執行查詢。
按「查詢」時(核心邏輯)
Query()以目前參數 new 一個Bom_chkBll並呼叫GetSqlData()。- BLL 內另有一道保險:若傳入層數小於 0,會先強制改成
20再查(與欄位校正雙重把關)。 - 把層數當參數,透過
Log_Sys_Exec呼叫後端預存程序DARB_QRY_BOM_CHK1展開所有 BOM。 - 後端回傳「達到該層數門檻」的組件清單(
QryPoco),填入右側 組件編號/品名/層數 三欄。 - 查無異常時的提示:當後端回傳結果以
OK開頭(執行成功)且清單為 0 筆時,系統會跳出資訊視窗顯示訊息AllDataIsCorrect「所有資料皆正確」,代表在這個層數門檻下沒有發現過深或循環的 BOM 結構。
匯出 Excel
- 右側為標準的
TsRadGridView結果格線,可在格線上按右鍵把目前清單匯出成 Excel,方便逐筆比對與修正。
沒有新增/修改/刪除/列印按鈕
本程式定位是純查詢健檢工具,只提供查詢(frontmatter features 僅列「查詢」)。XAML 畫面上只有一個唯讀格線,沒有新增、修改、刪除等編輯動作,也沒有掛專屬報表(.frx);要動 BOM 結構請改用 BOM 表。
常見問題¶
查詢後跳出「所有資料皆正確」是什麼意思?
代表後端展開成功、而且在你設定的 BOM層數 門檻下沒有任何達到門檻的組件——也就是沒有過深或循環的 BOM 結構。這是正常且良好的結果,不是錯誤。
為什麼我輸入很大的層數,結果都被改成 20?
BOM層數 欄上限是系統的 BOM 最大展開層數(BomMaxLevel,目前 20)。輸入超過 20 會自動壓回 20、輸入負數會自動歸 0,這是欄位的即時校正設計,目的是不讓查詢送出超出系統可展開範圍的層數。詳見欄位連動與附加功能。
我改了層數但結果好像沒變?
這個欄位是離開欄位(LostFocus)才寫回的。改完數字後請先點到別的地方,或直接按 查詢(按鈕同時會讓欄位失焦),讓新值完成寫回與校正後再執行查詢。
結果清單空白、但又沒跳出「所有資料皆正確」?
「所有資料皆正確」只在後端回傳成功(以 OK 開頭)且 0 筆時才會出現。若清單空白又沒有這個提示,通常是後端執行未回成功(例如連線或預存程序 DARB_QRY_BOM_CHK1 尚未部署/權限不足)。請聯絡系統管理員確認該預存程序已正確部署。
查出來的組件要怎麼修?這支程式可以直接改 BOM 嗎?
不行。本程式只負責把可疑組件挑出來,不提供編輯(格線唯讀)。請記下 組件編號,到 BOM 表 檢查該組件往下的結構,看是否有循環引用(A→B→A)或多餘的中間階層,再在那裡修正。
想更嚴格地抓「結構偏深」的料,該怎麼設?
把 BOM層數 調小(例如 10)再查,門檻越低越容易把層數偏深的組件攔下來;維持預設 20 則主要用來找展不完/循環的極端異常。改完層數要再按一次 查詢 才會重算。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/D-Bom/images/):
bom_chk1-step1.png— 左側 BOM層數 條件面板 + 右側查詢結果清單(含組件編號/品名/層數三欄)的整體畫面