程式資訊
- 程式 ID:
INVENT_PRIME - 所屬子系統:D.工程資料
- 狀態:stable
品號基本資料(Prime 版型)¶
功能簡介¶
「品號基本資料(Prime 版型)」是 品號基本資料(庫存主檔) 的另一套畫面版型。兩支程式共用同一張品號主檔(Source Twork_bom_vw_inventSource)與同一份自訂分類明細(Twork_bom_vw_itemspecSource),但 Prime 版改用 Basic / Processing / Purchase / Price / Other / Statistics 六個分頁的英文欄位排版,把品號的工程、採購、品管、價格、成本、包裝、Web 行銷等所有屬性攤在同一支表單上維護;畫面右側再掛六個查詢分頁,方便邊維護品號邊看它的報價/訂單/進貨等單據。(其中 Processing 分頁目前在 XAML 中設為隱藏,Price 分頁則受檢視價格權限控管,詳見各分頁說明。)
此版型適合需要一次檢視/維護完整品號屬性(含外銷與電商欄位)的物料、工程或業務人員使用。它與庫存主檔的關係是:
- 兩支都是 SKU(品號)主檔的維護程式,資料同源——同一個品號不論從哪一支進去都是同一筆資料。
- 差別只在欄位的排版方式與顯示語系;Prime 版多了 Other 分頁的「Marketplace(電商)特徵」「Web 上架」等延伸欄位,但少了庫存主檔的新增預設值、擴充功能鈕與「派工(WKPAPER)」查詢分頁(詳見欄位連動與附加功能)。
目前版型的已知狀態(beta)
Prime 版的程式(ProgramClass.INVENT_PRIME、Invent_primeViewModel、Invent_primeSave)已建立並可載入,但 Invent_prime.xaml 的欄位仍維持英文標籤與英文 binding 路徑(例如主檔的 SKU、OldSKU、SKUDescription、UnitOfMeasurement…,以及 Self-Defined 明細格的 Item/ItemContent),而資料來源 Twork_bom_vw_inventSource/Twork_bom_vw_itemspecSource 的屬性名已全面中文化(品號、舊品號、品名、單位、分類、分類內容…)。兩者對不上,因此主檔欄位區與 Self-Defined 明細格在目前版本不會顯示/寫入資料(欄位空白)。在版型完成中文化前,品號的日常維護請改用功能完整、binding 正確的 品號基本資料(庫存主檔)。本頁以「程式碼實際具備的行為」為準說明,凡涉及上述英文 binding 欄位之處,皆以此警告為前提。
前置需求¶
- 權限:D.BOM →
品號基本資料(Prime 版型)的瀏覽權限;新增/修改/刪除需對應的編輯權限。Price(價格)分頁另外受「檢視價格權限」控管——Invent_primeViewModel啟動時呼叫Context.User.GetViewPricePermission,沒有該品號程式的檢視價格權限時,Price 分頁維持隱藏(PriceTabVisibility = Collapsed)。 - 真實成本欄:瀏覽清單的真實成本欄受權限備註控管,無權者看到的值會被歸零(見進入瀏覽時的真實成本遮罩)。
- 基礎資料:品號屬性的下拉選項與連動結果,取決於下列主檔/參數的維護狀況——
| 資料 | 影響什麼 |
|---|---|
| 群組資料維護(INVGRPM) | 群組代號對應的自訂分類(Self-Defined)清單——決定 Setting 會展開哪些分類與可選內容 |
單位下拉(Cmb_C104) |
單位(Unit Of Measurement)的可選清單,由 VM 建構時載入 UnitSource |
| 廠商主檔(spdata) | 採購分頁三家供應廠商(廠商代號 1~3)與廠商簡稱,並決定主要供應商 |
| BOM 表(BOM)/製程 | BOM 代碼、製程代碼,以及成本展開 |
| 部門主檔 | 生產部門、調自部門等部門欄位的對應名稱 |
右側查詢分頁與權限
Prime 版的六個查詢分頁(Quotation/Sales Order/Shipping/Vendor Quote/Purchasing/Receiving)在畫面上固定存在、不依權限隱藏——它們各自轉接到 CUPDMA/ORMAST/出貨/SPPDT/PURCH/進貨 程式。是否查得到資料仍取決於你對那支來源程式的瀏覽權限。(庫存主檔則是「沒權限就不顯示該分頁」,兩者行為不同。)
操作步驟¶
品號的新增、修改、刪除、查詢都走系統共用的工具列(Ade 編輯列),流程與其他主檔一致。
查詢與切換品號¶
- 在工具列輸入或挑選 SKU(品號),或用上一筆/下一筆按鈕翻動。
- 切換品號後,系統會把目前品號自動帶入右側六個查詢分頁的起訖條件(
BeginningSKU/EndingSKU都設成同一個品號),這樣切到任一查詢分頁時看到的就是這個品號的相關單據(見切換品號時的連動)。
新增品號¶
- 按工具列
新增。 - 在 Basic 分頁輸入 SKU(品號)、SKU Description(品名) 等基本欄位,再依需要切到各分頁補齊工程、採購、品管、包裝、價格等屬性。
- 按
儲存。存檔前系統會自動補算停用日期、品名、包裝量與重量(見存檔前自動補算)。
資料同源,且 Prime 版新增不帶預設值
從 Prime 版新增的品號,等同在 品號基本資料(庫存主檔) 也能查到的同一筆品號——不要把兩支當成兩份資料各建一次。另外,Prime 版沒有庫存主檔新增時自動帶單位/品別/來源別/ABC 預設值的 AfterAddNew,新增時這些欄位是空的,需自行輸入。
修改品號¶
- 查到要改的品號,按
修改。 - 進入修改狀態時,系統會依該品號的群組代號重新載入自訂分類(Self-Defined)每列的可選內容(ContentList),讓既有的分類明細能正確下拉。
- 改完按
儲存。
刪除品號¶
- 查到品號後按
刪除,再確認。 - 自訂分類明細(itemspec)若「分類」為空,會被視為空列、存檔時自動跳過(
NeedDeleteFunction回傳 true),不會誤刪也不會留下空白列。
維護自訂分類(Self-Defined)¶
- 在 Basic 分頁下方的 Self-Defined 區,按
Setting。 - 系統會依目前品號的群組代號,從群組資料叫出該群組設定的所有自訂分類,並把每個分類的第一個可選內容當預設值帶入;原本的明細列會先全部標記刪除再重建(見自訂分類(Self-Defined))。
- 逐列在分類內容下拉挑選要記錄的值,存檔即寫回。
小技巧
Setting 帶出的分類清單來自 群組資料維護(INVGRPM)。若某品號展不出任何自訂分類,多半是它的群組代號沒設,或該群組沒有定義自訂分類項目。
欄位說明¶
主檔欄位非常多,下表只列關鍵欄位與其預設/格式;其餘屬性多為直接輸入。括號內為畫面英文標籤對應的 Source 中文屬性。
Basic(基本)分頁¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| SKU(品號) | ✔ | 主鍵,最長 30 字 |
| Old SKU(舊品號) | — | 沿用舊系統品號,最長 30 字 |
| SKU Description(品名) | — | 最長 200 字;留白時存檔自動以品號補上 |
| Is Disabled / Disable Date(停用/停用日期) | — | 停用設 Y 且停用日期空白時,存檔自動帶今天;改回 N 時自動清空停用日期 |
| Group Code(群組代號) | — | 決定自訂分類(Self-Defined)清單,最長 10 字 |
| ABCClassification(abc 分類) | — | 可選空白/A/B/C(ABCClassificationSource) |
| Unit Of Measurement(單位) | — | 取自單位下拉(Cmb_C104),最長 10 字 |
| UnitPackage / ShipPackage(包裝量_包/包裝量_箱) | — | 與最小包裝數、小包裝件數、內箱箱數連動自動計算(見下節) |
Processing(工程)分頁 (目前版型隱藏)¶
Processing 分頁目前隱藏
在現行 Invent_prime.xaml 中,Processing 分頁的 TsTabItem 設為 Visibility="Collapsed",畫面上不會顯示這個分頁,下列欄位目前無法在 Prime 版維護。需要維護工程資料請改用 品號基本資料(庫存主檔)。
| 欄位 | 必填 | 說明 |
|---|---|---|
| Bom Code / Component Code(bom代碼/製程代碼) | — | 連到 BOM 與製程,最長 30 字 |
| Engineering Drawing No(工程圖號)、Version(版次)、Document No / Name(文件編號/名稱) | — | 工程文件資訊 |
| Design Change Code / Date / Data(設變編號/設變導入日/設變資料) | — | 設計變更紀錄 |
| Production Department(生產部門)、Production Ratio(生產量比率)、Production Lot(生產批量) | — | 生產屬性 |
| Is Indivisible / Is Reverse Entry / Is Tax Refund(不可分割/倒沖入帳/退稅識別) | — | 單字元旗標 |
Purchase(採購)分頁¶
| 欄位 | 必填 | 說明 |
|---|---|---|
| Vendor 1~3 / Ratio(廠商代號 1~3/廠商 1~3 比例) | — | 三家供應廠商與供應比例;比例最高者為主要供應商(GetVendorCode) |
| Defact Rate / Control Lot Num(不良率/管制批數) | — | 品管參數 |
| HSF / REACH / RoHS / RoHSLevel(hsf/reach/rohs/rohs 等級) | — | 有害物質管制旗標 |
| Is Sampling / AQL / Inspection Level / Rules(批次取樣/允收水準/檢驗水準/檢驗規範) | — | 進料檢驗設定 |
| Purchase Policy / Type / Urgency(採購政策/採購別/採購緊急度) | — | 採購策略 |
| Min/Max Purchase Qty、EOQ、Repurchase/Fixed Purchase Qty、Daily Usage(最小/最大採購量、經濟採購量、再採購點、固定採購量、日用量) | — | MRP/補貨參數 |
Price(價格)分頁 (需檢視價格權限)¶
| 欄位 | 必填 | 說明 |
|---|---|---|
| Special Price / On Sale Price 1,2 / Selling Price / List Price / Audit Price(特殊價/特價 1,2/業務成本/標準訂價/稽核價) | — | 售價類欄位 |
| Material / Labor / Indirect / Outsourcing / Setup Cost、Standard / Average / True Cost(材料/人工/間接/委外/整備成本、標準/平均/真實成本) | — | 成本類欄位;真實成本受權限遮罩 |
Other(其他)分頁¶
| 欄位 | 必填 | 說明 |
|---|---|---|
| Size / Characteristics / Test Condition / Notes(尺寸/特性/測試條件/備註) | — | 文字描述 |
| Marketplace Product Feature 01~10 | — | 電商商品特徵欄位 |
| Web Always Available / Display Order / Is Display / Is Hot Item … | — | 電商上架屬性 |
Self-Defined(自訂分類)明細¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| 分類(畫面 Item) | — | 來自群組設定,空白列存檔時跳過 |
| 分類內容(畫面 ItemContent) | ✔ | 下拉自該分類的可選內容(ContentList),預設帶第一個值 |
欄位連動與附加功能¶
這一節整理 Prime 版實際會「自動發生」的行為,來源為 Invent_primeViewModel、Invent_primeSave 與 Source Twork_bom_vw_inventSource/Twork_bom_vw_itemspecSource。
存檔前自動補算(HandleDataBeforeEndEdit)¶
按 儲存 時,Invent_primeSave 在寫入前會對主檔依序做四件事:
- 停用日期(
SetDisabledDate):當你把停用設為Y而停用日期還是空的,系統自動把停用日期填成今天;當你把停用改回N,停用日期自動清空。 - 品名補預設(
SetSKUDescription):當品名留白,系統自動以品號當品名,避免品名空白。 - 包裝量重算(
SetPackageQuantity):以最小包裝數、小包裝件數、內箱箱數重算內箱包裝數與整箱包裝量(公式見下)。 - 重量重算(
SetWeight):以單重、整箱包裝量、箱重重算淨重與毛重。
包裝數量連動¶
品號主檔 Source 上備有 最小包裝數Binding/小包裝件數Binding/內箱箱數Binding 三個連動屬性,其 setter 會在被寫入時即時呼叫 SetPackageQuantity 重算:
- 內箱包裝數 = 最小包裝數 × 小包裝件數
- 包裝量_箱 = 內箱包裝數 × 內箱箱數
- 重算包裝量後,會接著呼叫
SetWeight重算重量(見下)。
存檔時 HandleDataBeforeEndEdit 也一定會再算一次 SetPackageQuantity。
目前版型未綁到這些連動屬性
現行 Invent_prime.xaml 的包裝欄位綁的是 QuantityOfInnerBoxBinding、QuantityPerInnerBox 等英文 binding 路徑,並未綁到上述中文連動屬性(最小包裝數Binding…),因此編輯畫面欄位不會即時觸發重算;只有存檔時的 SetPackageQuantity 會作用。版型完成中文化後才會恢復即時連動。
重量連動¶
Source 上的 單重Binding/箱重Binding 連動屬性,其 setter 會即時呼叫 SetWeight(包裝量被重算時也會連帶呼叫):
- 淨重 = 單重 × 包裝量_箱
- 毛重 = 淨重 + 箱重
存檔時 HandleDataBeforeEndEdit 也會再算一次 SetWeight。與包裝連動相同,現行 XAML 的重量欄位綁的是英文路徑(NetWeight/GrossWeight),即時連動同樣受英文 binding 問題影響。
材積連動¶
Source 上的 箱高Binding/箱長Binding/箱寬Binding 連動屬性,其 setter 會即時呼叫 CalculateVolume:
- 材積(CBM) = 箱高 × 箱長 × 箱寬 × 0.0000353,四捨五入到小數 2 位(
RoundAwayFromZero)。
同樣地,現行 XAML 材積相關欄位綁的是英文路徑(Volume 等),即時連動受英文 binding 問題影響。
主要供應廠商判定(GetVendorCode)¶
採購分頁登錄的三家廠商(廠商代號 1~3)與其供應比例,提供品號主檔 Source 一個 GetVendorCode 方法:比例最高的那家即為主要供應廠商(並列時依序號 1→2→3 取先比到的)。此方法不在 Prime 表單內觸發,而是供下游程式(例如進貨相關的領/撥單 Ngtrna)在沒有指定廠商時,據以帶出該品號的主要供應商。
自訂分類(Self-Defined)¶
- 按
Setting(SelfDefinedExecute):依目前品號的群組代號呼叫群組查詢(GrpmBll.GetSelfDefined),把該群組定義的每個自訂分類重建成明細列,並把各分類的第一個可選內容當預設值。執行前會先把現有明細列全部標記刪除(增刪修=D),等於「以群組設定為準重新展開」。此鈕只在非瀏覽狀態(新增/修改)且已有主檔資料時才動作。 - 進入修改狀態時:
AdeViewModel.Status變為Edit時,系統依群組代號重新載入每列的可選內容(ContentList),確保既有明細的下拉選項正確。
切換品號時的連動(AfterMoverRecord)¶
每次移動到另一筆品號,系統會:
- 若目前停在 Statistics 分頁,重新查詢該品號的統計資料(
InventStatisticsViewModel.Query)。 - 把目前品號帶入六個查詢分頁的起訖條件(
BeginningSKU/EndingSKU),使 Quotation/Sales Order/Shipping/Vendor Quote/Purchasing/Receiving 都對齊這個品號。
Prime 版的差異:不取作業者姓名
庫存主檔在 AfterMoverRecord 還會呼叫 GetDescription 帶出 BOM/圖製作者姓名,Prime 版沒有這一步。
編輯狀態下停用查詢分頁¶
當主檔進入新增/修改狀態(AdeViewModel.Status 非 Normal)時,六個查詢分頁的 ViewModel 會被設為 IsEnabledByAdeStatus = false(停用);回到瀏覽狀態才重新開放。避免在編輯中誤觸右側查詢。
切換分頁時自動查詢¶
切換右側分頁(TabSelectedItem)時,若該分頁的 ViewModel 實作 ITabQuery,系統會自動執行一次 Query() 帶出該品號的資料;同時依分頁是否為品號主檔調整主鍵欄(Pkid)的顯示。
進入瀏覽時的真實成本遮罩(AfterBrowse)¶
載入瀏覽清單時,若使用者的權限備註未包含「真實成本」欄名,系統會把瀏覽清單的真實成本欄整欄歸零顯示(UpdateFieldToZero)——避免無權者在清單上看到真實成本數字。
查詢分頁(右側六頁)¶
Quotation/Sales Order/Shipping/Vendor Quote/Purchasing/Receiving 六個分頁是內嵌的查詢視窗,分別轉接到 CUPDMA/ORMAST/出貨/SPPDT/PURCH/進貨 等程式,以目前品號為條件查出相關單據;它們在 VM 建構時就把「結束客戶/廠商代號」帶到該庫最大值(GetMaxCustomer/GetMaxVendor),切換品號時再對齊起訖 SKU。
Prime 版尚未提供的庫存主檔功能
相較於 品號基本資料(庫存主檔),Prime 版(Invent_primeViewModel)沒有實作 IAdd(新增預設值 AfterAddNew)、IOther1/IOther2(擴充功能鈕 ExtendedFunction1/2,含特殊編輯 SpecialEdit),也沒有「派工(WKPAPER)」查詢分頁。需要這些行為時請改用庫存主檔。
常見問題¶
Basic/Processing 等分頁的欄位、Self-Defined 明細格全部空白、打不進去?
這是目前版型的已知狀態:主檔分頁的欄位是英文 binding(SKU、SKUDescription…),Self-Defined 明細格也是英文 binding(Item、ItemContent),對不上已中文化的資料來源屬性(品號、品名、分類、分類內容…),因此不顯示也不寫入。請改用 品號基本資料(庫存主檔) 維護品號。詳見頁首的 beta 警告。
看不到 Price(價格)分頁?
Price 分頁受「檢視價格權限」控管。VM 啟動時若 GetViewPricePermission 回 false,分頁維持隱藏(PriceTabVisibility = Collapsed)。請洽系統管理員為你開啟該品號程式的檢視價格權限。
按 Setting 卻展不出任何自訂分類?
Self-Defined 清單來自品號的群組代號所對應的群組設定。請確認:① 該品號有設群組代號;② 該群組在 群組資料維護(INVGRPM) 有定義自訂分類項目。另外 Setting 只在新增/修改狀態下、且已有主檔資料時才會動作,瀏覽狀態按了沒反應是正常的。
改了包裝數或單重,淨重/毛重/材積沒跟著變?
重算掛在 Source 的 *Binding 連動屬性上(最小包裝數Binding、單重Binding、箱高Binding…)。重點是現行 Invent_prime.xaml 綁的是英文 binding 路徑(QuantityOfInnerBoxBinding、NetWeight、Volume…),並未綁到這些中文連動屬性,所以在 Prime 版的畫面上編輯時不會即時連動;不過存檔時 HandleDataBeforeEndEdit 仍會呼叫 SetPackageQuantity/SetWeight 各算一次(材積 CalculateVolume 則只有連動屬性會觸發)。若需要即時連動,請改用 品號基本資料(庫存主檔)。
停用日期為什麼自己被填上/被清掉?
這是設計行為(SetDisabledDate):把停用設為 Y 且停用日期空白時,存檔自動帶今天;把停用改回 N 時自動清空停用日期。
Prime 版和庫存主檔是兩筆不同的品號資料嗎?
不是。兩支共用同一張品號主檔(Twork_bom_vw_inventSource),資料完全同源,只是畫面版型不同。同一個品號不論從哪一支查詢都是同一筆。
新增品號時單位/品別/來源別/ABC 沒有預設值?
Prime 版沒有庫存主檔的 AfterAddNew,新增時不會自動帶這些預設值,需自行輸入或改用庫存主檔新增。
相關功能¶
- 品號基本資料(庫存主檔) — 功能完整、建議日常使用的同源品號主檔
- 群組資料維護(INVGRPM) — 自訂分類(Self-Defined)的來源
- BOM 表 — 品號的用料結構
- D-Bom 模組首頁
- E-SalesOrder 模組 — 客戶報價(CUPDMA)/訂單(ORMAST)查詢分頁來源
- G-Purchasing 模組 — 廠商報價(SPPDT)/採購(PURCH)查詢分頁來源
- H-Inventory 模組 — 進貨等庫存相關功能
需補截圖清單
以下截圖待版型完成中文化、runtime 驗收後補拍(放 docs/D-Bom/images/):
invent_prime-step1.png— 六個主檔分頁全貌(Basic / Processing / Purchase / Price / Other / Statistics)invent_prime-step2.png— Basic 分頁主要欄位與 Self-Defined(含Setting鈕)invent_prime-step3.png— 右側查詢分頁(以 Purchasing 或 Sales Order 為例)