跳轉到

程式資訊

  • 程式 IDBOM_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 表 去調整實際結構。

操作步驟

本程式採「左側條件面板 + 右側結果清單」的標準查詢版面,整個流程只有一個條件、一個動作。

  1. 在左側條件面板的 BOM層數 欄輸入要檢查的層數門檻。
    • 此欄在開啟畫面時預設帶入系統的 BOM 最大層數BomMaxLevel,目前為 20),游標焦點也會自動落在這個欄位。
    • 欄位最多 2 位數,輸入超過上限會自動壓回上限、輸入負數會自動歸 0(詳見欄位連動與附加功能)。
  2. 按工具列的 查詢。系統依你輸入的層數展開所有 BOM,把達到門檻的組件列在右側清單。
  3. 檢視右側清單的三個欄位:組件編號品名層數,據此回 BOM 表 檢查並修正可疑結構。
  4. 需要時可在結果格線上按右鍵匯出 Excel,把待查清單帶出去逐筆核對。

小技巧

BOM層數 調小(例如 10),可以更早攔截到「結構偏深」的組件;維持預設 20(系統最大展開層數)則主要用來抓展不完/循環的異常結構。改完層數再按一次 查詢 即可重算。

BOM 階層檢查條件與結果

欄位說明

查詢條件

欄位 必填 說明/格式/預設
BOM層數 要檢查的展開層數門檻。整數、最多 2 位(TsNumericTextBox,離開欄位時才寫回)。預設=系統 BOM 最大層數 BomMaxLevel(目前 20);可輸入 0~20,超出範圍自動修正

結果清單

格線為唯讀(IsReadOnly),三個欄位皆不可編輯。

欄位 說明
組件編號 被判定為層數過深/異常的組件品號(內部屬性 查詢組件號
品名 該組件的品名
層數 該組件在 BOM 展開時所在的層數

欄位連動與附加功能

這一節把「輸入某欄位/按某動作後系統會做什麼」逐條列出,全部來自程式碼實作(Bom_chk1ConditionViewModelBom_chk1ViewModelBom_chkBllBom_chkParameters)。

開啟畫面時(預設值與焦點)

  • 條件面板載入時,查詢參數 Bom_chkParameters 在建構子就呼叫 ResetToDefault(),把 BOM層數 設成系統參數 BomMaxLevel(目前 20)。
  • 焦點透過 FocusExtension.IsFocused 自動落在 BOM層數 欄,讓你可以直接改值或直接按 查詢

輸入 BOM層數 時(即時校正)

BOM層數 欄採 UpdateSourceTrigger=LostFocus——也就是你輸入後離開欄位時才把值寫回。寫回的同時,Level 屬性的 setter 會自動把值限制在合理範圍:

  • 輸入負數 → 自動歸為 0
  • 輸入大於上限(大於 BomMaxLevel=20)的值 → 自動壓回上限 20
  • 介於 0~20 之間 → 照你輸入的值採用。

因此這個欄位不可能送出超出範圍的值,你不需要自己記得上限是多少。

為什麼要離開欄位值才會生效

因為寫回採 LostFocus,邊打字邊改不會即時校正;改完層數後請先點到別處(或直接按 查詢),讓欄位完成寫回與校正,再執行查詢。

按「查詢」時(核心邏輯)

  1. Query() 以目前參數 new 一個 Bom_chkBll 並呼叫 GetSqlData()
  2. BLL 內另有一道保險:若傳入層數小於 0,會先強制改成 20 再查(與欄位校正雙重把關)。
  3. 把層數當參數,透過 Log_Sys_Exec 呼叫後端預存程序 DARB_QRY_BOM_CHK1 展開所有 BOM。
  4. 後端回傳「達到該層數門檻」的組件清單(QryPoco),填入右側 組件編號/品名/層數 三欄。
  5. 查無異常時的提示:當後端回傳結果以 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/):

  1. bom_chk1-step1.png — 左側 BOM層數 條件面板 + 右側查詢結果清單(含組件編號/品名/層數三欄)的整體畫面