程式資訊
- 程式 ID:
GTRINOUT - 所屬子系統:C.總務管理
- 狀態:stable
出入庫申請單¶
功能簡介¶
「出入庫申請單」是總務/倉儲流程裡的領料與出入庫申請單:使用單位在這裡登錄「我要從哪個倉庫、領(或調撥/保留)哪些品項、各多少數量」,做為後續實際撥料的依據。它只負責「申請」,本身不直接異動庫存——填好並(視需要)送審後,由領料申請轉領料(Picking) 程式把申請單挑單、撿料,產生真正會扣帳的領料單 / 倉庫異動單。
申請的用途分為三種(申請原因下拉):
- 樣品:領樣品出庫。
- 調撥申請:把料從一個倉庫調到另一個倉庫。
- 保留:把庫存先保留/預留下來。
適合領料人員、生管、倉管在實際撥料前先把需求建檔;金額相關欄位(單價/原幣未稅)僅供有檢視價格權限者參考,並不影響庫存。
與「序號前置碼」的關係
本表單的序號前置碼沿用 GTRLIMA(倉庫異動單)的單據別規則,因為申請單最終會轉成 GTRLIMA 單據,兩者共用同一套單據別與編號池。詳見欄位連動與附加功能。
前置需求¶
- 權限:C.總務 →
C-140 出入庫申請單的新增/修改/刪除/查詢/列印權限。價格欄位另受「可檢視價格」權限控制(見欄位說明)。 - 基礎資料:下列主檔需先維護,否則欄位帶不出值或存檔被擋——
| 資料 | 影響什麼 |
|---|---|
| 倉庫主檔(總務倉) | 隸屬倉庫、明細倉儲代號 的搜尋與檢核 |
| 倉儲(儲位)主檔 | 明細倉儲代號 下拉,依隸屬倉庫過濾 |
| 部門主檔 | 申請部門(帶部門簡稱,並回填為明細需求部門) |
| 員工主檔 | 申請人員(帶姓名) |
| 品號主檔(料件) | 明細品名/規格/單位/參考單價 自動帶出 |
| 工程(製程)主檔 | 明細工程代號 |
| 單據別(GTRLIMA 規則) | 序號前置碼 下拉與單號產生 |
| 廠商主檔 | 廠商代號(非必填,僅供查價對照) |
操作步驟¶
新增申請單¶
- 按工具列
新增。系統自動帶入預設值(見欄位連動與附加功能):申請日期=今天、申請人員=登入者(帶姓名)、公司代碼=1、幣別=本位幣、匯率=1。 - 選擇序號前置碼(單據別)。申請單號 由系統依此規則於存檔時自動產生,毋須手動輸入。
- 選擇申請原因(樣品/調撥申請/保留)。
- 輸入或搜尋隸屬倉庫(要從哪個倉領料)、申請部門(帶部門簡稱)。
- 視需要輸入廠商代號(僅供查價參考,可留空)。
- 在下方明細逐列輸入:
- 品號(可用搜尋按鈕):輸入後自動帶品名/參考單價。
- 申請量:要領用的數量。
- 倉儲代號:撥出的儲位(依隸屬倉庫過濾)。
- 視需要填工程代號/批號別/批號/備註/用途/預訂交期。
- 按工具列
儲存。系統檢核必填欄位(申請日期、序號前置碼、申請人員、隸屬倉庫、申請部門),並把空品號的明細列自動刪除(VFP 原版另有「申請人員空白時自動補登入者」的處理,存檔即帶值)。
修改 / 刪除¶
- 用工具列翻頁鈕或
查詢移到要處理的單據。 - 按
修改後調整欄位,再儲存。 - 按
刪除可刪除整張單據。
已轉單不可修改
VFP 原版規定:申請單一旦被轉成領料單(轉出備註 已有值),即不允許再修改。轉出/轉入備註皆由系統於轉單時回填,畫面上唯讀。
查詢明細的庫存與轉單情形¶
- 本表單實作 庫存查詢(IStockQuery):選取一筆明細列後,可查該品號目前各倉/儲位的現有數量,協助判斷申請量是否足夠。
- 本表單另實作 申請單查詢(特殊查詢):選取明細列時,系統自動以該列查出此申請項目的領料/轉單歷程,供追蹤這筆申請後續被撿料、出貨的狀況。
列印¶
按工具列 列印 產生出入庫申請單報表(VFP 對應報表 GTRINOUT_P)。
送審與快速審核(規劃中)
VFP 原版工具列另有「工作流程(送審)」與「快速審核」兩顆按鈕,把申請單送進 申請出入單送審 工作流程。新版 C# 的主檔保留了工作流程/審核人員/審核日期/已審核 欄位,但目前 ViewModel 尚未掛上送審與快速審核動作,請以實際畫面上是否出現該按鈕為準。
欄位說明¶
主檔¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 申請單號 | — | 系統產生,唯讀。依序號前置碼 規則於存檔時編號 |
| 申請日期 | ✔ | 新增時預設今天(YYYY/MM/DD) |
| 序號前置碼 | ✔ | 單據別下拉,使用 GTRLIMA 規則。新增可選、修改時鎖定 |
| 申請原因 | — | 下拉:樣品(1)/調撥申請(2)/保留(3) |
| 申請人員 | ✔ | 新增時預設登入者,搜尋帶姓名 |
| 隸屬倉庫 | ✔ | 要領料/調撥的來源倉,總務倉搜尋 |
| 申請部門 | ✔ | 部門搜尋,帶部門簡稱;存檔時回填為明細需求部門 |
| 廠商代號 | — | 廠商搜尋,僅供查價對照,存檔不擋 |
| 轉出備註 / 轉入備註 | — | 唯讀,轉單時由系統回填(內含關聯申請單號) |
| 幣別 / 匯率 | — | 畫面隱藏;新增預設本位幣、匯率 1,存檔時固定為本位幣+1 |
| 原幣金額 / 本幣金額 | — | 由明細原幣未稅合計,存檔時自動加總 |
| 公司代碼 | — | 預設 1 |
明細¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 序號 | — | 列序號 |
| 品號 | ✔ | 搜尋欄;輸入後自動帶品名/參考單價(CheckValidate=False,可輸入非主檔品號但建議用搜尋) |
| 品名 | — | 唯讀,由品號帶出 |
| 規格 | — | 唯讀,隨載入的明細顯示(新版輸入品號時不自動覆寫) |
| 交易別碼 | — | 出入庫交易別代碼,手動輸入 |
| 單位 | — | 下拉(單位清單),手動選擇(新版輸入品號時不自動帶單位) |
| 申請量 | ✔ | 申請數量;變動時重算金額並更新總申請量 |
| 核發量 | — | 唯讀,由後續撿料/撥料流程回填 |
| 單價 | — | 僅「可檢視價格」時顯示;變動時重算金額 |
| 其他金額 | — | 僅「可檢視價格」時顯示 |
| 原幣未稅 | — | 唯讀=單價×申請量+其他金額(四捨五入 2 位) |
| 參考單價 | — | 唯讀,品號標準成本 |
| 倉儲代號 | — | 儲位搜尋,依隸屬倉庫 過濾 |
| 工程代號 | — | 製程/工程搜尋 |
| 批號別 / 批號 | — | 批號管理用 |
| 備註 / 用途 / 預訂交期 | — | 文字/日期,可自由輸入 |
| 是否結案 | — | 唯讀,撥料完成後狀態 |
欄位連動與附加功能¶
這一節把「輸入某欄位 / 按某按鈕後系統會做什麼」逐條列出,全部來源於實際程式碼(C# ViewModel/SaveBll 與 VFP gtrinout class)。
新增時的預設帶值(AfterAddNew)¶
當你按 新增,系統對主檔自動帶入:
- 公司代碼 = 1。
- 申請日期 = 今天(
YYYY/MM/DD)。 - 申請人員 = 登入者代號,並帶出姓名。
- 幣別 = 本位幣、匯率 = 1(畫面雖未顯示幣別,內部仍以本位幣記帳)。
VFP 與新版一致
VFP addagain 新增時帶的值(申請人員=登入者、公司代碼、幣別=指定幣別、匯率=1)與新版相同。隸屬倉庫/序號前置碼 兩版皆未自動帶,需手動選擇。
序號前置碼 → 鎖定與單據別¶
- 修改 模式下,序號前置碼 會被鎖定(
PrefixIsEnabled隨編輯狀態切換),避免改動已決定的單據別;新增時可自由選。 - VFP 原版切換序號前置碼時,僅刷新唯讀的表單名稱(依「交易事項表」帶出該前置碼的交易單事項);原本「自動帶預設交易別碼、刷新明細交易別碼」的程式碼在 VFP 已被註解、實際不執行。新版未顯示表單名稱欄,交易別碼一律手填。
幣別 / 匯率 → 連動明細¶
主檔的幣別/匯率 透過弱事件監聽連動到每一筆明細:
- 當你改主檔幣別,系統把每一列明細的內部幣別(
CurrencyBinding)一起更新。 - 當你改主檔匯率,系統把每一列明細的內部匯率(
ForeignExchangeRateBinding)一起更新,連帶影響本幣未稅換算。 - 新增明細列時,該列會自動承接主檔目前的幣別與匯率。
明細品號 → 自動帶品名 / 參考單價¶
當你在某列輸入或選取品號,系統立即以該品號查詢品號主檔:
- 帶出品名。
- 帶出參考單價(品號標準成本)。
找不到品名?
若品名/參考單價空白,多半是該品號不在品號主檔。本欄允許輸入非主檔品號(CheckValidate=False),但這樣就帶不出品名,建議用搜尋按鈕挑選既有品號。
申請量 / 單價 / 其他金額 → 自動算金額與合計¶
- 改申請量 或單價:系統即時重算該列原幣未稅 =
四捨五入(單價 × 申請量 + 其他金額, 2),再以匯率換算本幣未稅。 - 改申請量:更新整張單的總申請量(TotalQuantity)。
- 原幣未稅變動:更新整張單的總金額(TotalAmount)。
倉儲代號 → 依隸屬倉庫過濾¶
明細倉儲代號 的可選清單會依主檔隸屬倉庫 過濾,只列出該倉底下的儲位,避免挑到別倉的儲位。
價格欄位的權限控制¶
明細的單價/其他金額/原幣未稅/參考單價 等價格欄位,只有具「可檢視價格」權限(AdeViewModel.AllowViewPrice)的使用者才會顯示,否則整欄隱藏。
庫存查詢(IStockQuery)¶
選取一筆明細列後,本表單會把該列當作庫存查詢的鍵,讓你查該品號在各倉/儲位的現有數量。對應 VFP 的「庫存查詢」頁與品號 LostFocus 時呼叫 DARB_QUERY_STK1 查庫存的行為。
申請單查詢 / 轉單歷程(特殊查詢)¶
本表單內嵌一個申請單查詢(Gtrapply_q) 特殊查詢面板。每當你切換選取的明細列,系統自動以該列的 pkid 呼叫 TWORK_QRY_GTRAPPLY,列出此申請項目的領料/轉單歷程——也就是它後續被哪幾張領料單撿走、撥了多少。可用來追蹤一筆申請的執行狀況。
存檔時的整理與檢核(AllowSave / HandleDataBeforeEndEdit)¶
按 儲存 時,系統依序:
- 必填檢核:申請日期、序號前置碼、申請人員、隸屬倉庫、申請部門 任一空白即擋存並提示。
- 清空列刪除:明細中品號 為空的列,自動標記為刪除(不會存進去)。
- 需求部門回填:把主檔申請部門 寫進每一列明細的需求部門。
- 幣別歸位:主檔幣別 固定為本位幣、匯率 固定為 1。
- 金額加總:主檔原幣金額/本幣金額 = 有效明細(未刪除且有品號)的原幣未稅合計。
VFP 有、新版未實作的存檔檢核
VFP allowsave 還會依倉同儲設定檢核明細倉儲代號(需求倉時不得空白、且必須隸屬於正確倉庫),並依交易別/倉同儲設定自動推算每列的轉入倉儲/轉出倉儲。新版 C# 的 SaveBll 目前未移植這段(相關程式碼以註解保留),實際撥倉的轉入/轉出倉儲是在轉領料 撿料階段才決定。
後續:轉成領料單¶
存好的申請單不會自己扣庫存。要實際撥料,須到領料申請轉領料(Picking):
- 它查出申請量 ≠ 核發量(還沒撥完)的申請單。
- 依申請原因 走不同撥料邏輯——樣品走出庫、調撥申請走倉對倉、保留走保留撥法。
- 撿料後產生領料單 / 倉庫異動單(GTRLIMA),並把核發量回填到本申請單。
常見問題¶
存檔時一直跳「請先輸入…」?
出入庫申請單的必填欄位是申請日期、序號前置碼、申請人員、隸屬倉庫、申請部門,缺一不可。其中申請人員在新增時已自動帶登入者,通常是序號前置碼 或申請部門 忘了選。提示訊息會指出缺的是哪一欄。
明細打了品號卻沒帶出品名 / 參考單價?
品名與參考單價來自品號主檔。本欄允許輸入不存在於主檔的品號(不會即時擋),但這樣就查不到品名。請改用品號搜尋按鈕挑選既有品號;若確為新料件,需先在料件主檔建檔。
金額欄位(單價 / 原幣未稅)整欄看不到?
這些是受權限保護的價格欄位,只有具「可檢視價格」權限的帳號才會顯示。沒有該權限屬正常,不影響申請數量與後續撥料。
申請單存好了,倉庫庫存怎麼沒變?
出入庫申請單只是「申請」,本身不異動庫存。要實際扣/撥庫存,須到領料申請轉領料 把這張申請撿料,產生領料單 / 倉庫異動單 後才會動帳,並把核發量 回填到申請明細。
想改一張舊申請單卻被擋住,說已轉單?
一旦申請單被轉成領料單(轉出備註 已有值),即不允許再修改。若確需調整,請循領料單那端處理,或新開一張申請單。
申請原因下拉顯示的是英文(Sample / WarehouseTransfer / Reserve)?
這三個選項分別代表樣品/調撥申請/保留。若畫面顯示為英文鍵名而非中文,是多語對照尚未補齊所致——選項的代碼(1/2/3)與行為不受影響,依序就是樣品、調撥、保留。
相關功能¶
- 領料單 / 倉庫異動單(GTRLIMA) — 申請單撿料後產生的實際異動單
- 領料申請轉領料(Picking) — 把本申請單挑單、撿料、轉成異動單
- 總務倉儲庫存查詢 — 查總務倉的現有庫存
- 總務模組首頁
- 庫存管理模組
- 採購模組
需補截圖清單
以下截圖待 runtime 驗收後補拍(放 docs/C-GeneralAffair/images/):
gtrinout-step1.png— 新增單據、主檔欄位(申請日期/序號前置碼/申請原因/隸屬倉庫/申請部門)全貌gtrinout-step2.png— 明細輸入(品號帶出品名、申請量、倉儲代號)gtrinout-step3.png— 庫存查詢頁 / 申請單查詢(轉單歷程)面板gtrinout-step4.png— 出入庫申請單列印報表(GTRINOUT_P)