跳轉到

程式資訊

  • 程式 ID:GSTKBAS_1
  • 所屬子系統:C.總務管理
  • 狀態:stable

總務倉庫關帳(Warehouse Closing Book)

功能簡介

「總務倉庫關帳」是總務(C 模組)的倉庫月結關帳作業視窗(程式 ProgramClass GSTKBAS_1,視窗標題 Warehouse Closing book):輸入要結算的關帳日期後,系統先對該月份跑成本稽核,通過後列出可關帳的倉庫,由使用者勾選欲關帳的倉庫並執行月結。關帳完成後,被勾選倉庫的關帳日期會被寫回,倉庫即進入下一個開帳月份。

本視窗不是從主選單獨立開啟,而是由 G倉庫表(GSPLACE) 工具列的延伸功能叫出——它是 GSPLACE 倉庫主檔維護的關帳搭檔。倉管/總務人員在維護完倉庫資料後,於月底以此視窗統一對倉庫執行關帳。

與庫存模組倉庫關帳的關係

庫存模組(H)也有一支幾乎相同的「倉庫關帳」視窗(程式 STKBAS_1,位於 庫存模組)。本頁的 GSTKBAS_1 是總務模組自己的關帳程式,擁有獨立的 ProgramClass,資料來源走總務的倉庫檢視表 Twork_gen_vw_gstkbas,兩者各自獨立、不要混為同一支。

視窗存放位置的小提醒

本視窗的 XAML(TsErp.Erp.Views/C.GeneralAffair/Gstkbas_1.xaml)雖然實體放在 C.GeneralAffair 資料夾,其 x:Class 命名空間卻是 TsERP.H.Inventory(歷史遺留)。這只是程式碼組織細節,不影響使用;本頁仍屬總務模組。

前置需求

  • 權限:開啟本視窗需具備 G倉庫表(GSPLACE) 的瀏覽與修改權限——本視窗由 GSPLACE 的延伸功能開啟,授權檢查由 GSPLACE 端負責(關帳上傳所用的 UploadPrgClass 也是 GSPLACE)。
  • 基礎資料:關帳能否進行,取決於下列資料的維護與計算狀態——
資料 影響的結果
倉庫主檔(G倉庫表 GSPLACE) Master 清單列出可關帳的倉庫;其開帳月份決定可關帳區間
成本計算與成本稽核(K 成本管理) 關帳前的稽核項目 K-020-003/004/005 必須全部 OK,否則擋下查詢、無法關帳
系統檢查項定義(檢視表 Twork_sys_vw_checkm) 左側 Check Item 清單與各項說明來源(撈 SystemCheckItemNo like 'K-020%' 再篩三項)
預存程序 DARB_TUR_GSTKBAS(須在 proc_param 登錄) 查詢倉庫與鎖定清單;未部署/未登錄時查詢失敗

操作步驟

本視窗有兩個頁籤:Closing Book(關帳作業)與 Locked Source(被鎖定中的倉庫清單)。主要流程都在 Closing Book 頁完成。

從 GSPLACE 延伸功能開啟關帳視窗

步驟① 開啟關帳視窗

  1. 從主選單開啟 C.總務 → G倉庫表(GSPLACE)。
  2. 點選工具列的延伸功能鈕(對應 GsplaceViewModel.ExtendedFunction1),系統開啟 Warehouse Closing book 視窗。

步驟② 輸入關帳日期並查詢

  1. 在上方的 Closing Date(關帳日期) 輸入要結算的日期。預設帶入今天(DateTimeWrapper.TodayYYYYMMDD());系統取其前 7 碼(yyyy/MM)作為關帳月份。
  2. 按 查詢(QueryButton)。系統會:

    1. 先跑成本稽核:抓 K-020 系列檢查項,篩出 K-020-003/004/005 三項,對關帳月份逐項執行檢查,結果列在左側 Check Item 清單。
    2. 稽核全部通過(每項 Output 為 OK)才繼續;任一項未過會跳「資料不正確」並中止查詢。
    3. 呼叫 SP DARB_TUR_GSTKBAS 取回兩組資料:被他人鎖定編輯中的倉庫(填入 Locked Source 頁)與可關帳的倉庫(填入 Master)。

    稽核未過無法關帳

    若該月成本還不能結算,按 查詢 會直接跳「資料不正確」並停在原畫面,Master 不會有任何倉庫。請先到 成本管理 完成該月成本計算與檢查,待 K-020-003/004/005 全部 OK 後再回來查詢。

Closing Book 頁全貌

步驟③ 勾選欲關帳的倉庫

  1. 在右側 Master 資料表格勾選每列的 Select 核取方塊;或用畫面下方的批次按鈕:
    • All:全部勾選(把每列 選擇 設為 Y)。
    • None:全部取消(把每列 選擇 設為 N)。
  2. Warehouse(隸屬倉庫)/Open Date(開帳月份)/Book Closing Date(關帳日期) 三欄為唯讀,僅供確認倉庫代號、開帳月與目前關帳日。

Master 勾選與 All/None 批次按鈕

建議用 All/None 批次按鈕設定勾選

All/None 兩顆按鈕由 ViewModel 直接把每列的 選擇 欄改成 Y/N,最為可靠。逐列核取方塊請參見 欄位連動與附加功能 的說明。

步驟④ 執行關帳(存檔)

  1. 確認勾選無誤後,按畫面右下角的 儲存(SqlEditTurn)執行關帳轉檔。
  2. 存檔前系統會檢核關帳日期不可空白、且至少勾選一筆倉庫,否則擋下並提示。
  3. 關帳成功後,被勾選倉庫的 關帳日期 即被寫入;回到 GSPLACE 主畫面時會自動重新整理(DataNavigateHelper.Renew),倉庫的開帳月份/關帳日期反映最新結果。

Locked Source 頁籤

Locked Source 頁列出「正被其他使用者編輯鎖定中」的倉庫,並在頁籤標題上顯示鎖定筆數(LockedCount,0 筆時不顯示數字)。這些倉庫此刻不能由你關帳,須等對方釋放鎖定。此頁純供檢視,只有離開鈕,無關帳操作。

Locked Source 頁籤

欄位說明

查詢條件

欄位 必填 說明/格式/預設
Closing Date(關帳日期) 是 短日期格式(MaskInfo="ShortDate");預設今天。系統取前 7 碼當關帳月份,並於存檔時把完整日期寫回各勾選倉庫的關帳日期

Master(可關帳倉庫清單)

欄位 可編輯 說明
Select(選擇) ✔ 核取方塊;勾選=Y、取消=N。只有 選擇=Y 的倉庫會被關帳
Warehouse(隸屬倉庫) — 倉庫代號,唯讀
Open Date(開帳月份) — 該倉庫目前的開帳月份,唯讀
Book Closing Date(關帳日期) — 該倉庫目前的關帳日期,唯讀;關帳後更新

Master 與 Source 欄位對照

Master 各列其實是 Gstkbas_1TmpPoco(繼承 Twork_gen_vw_gstkbasSource),底層中文屬性包含 隸屬倉庫/倉庫說明/開帳月份/關帳日期/送貨地點/倉庫分類碼/倉同儲/備註/成本順序/顯示順序/可用 等,但本視窗只顯示倉庫代號、開帳月份、關帳日期三個欄位供關帳確認。

顯示欄位的英文綁定與中文屬性不一致

Master 與 Locked Source 的 Warehouse/Open Date/Book Closing Date 三欄在 XAML 綁定的是 Warehouse/OpenDate/BookClosingDate 這幾個英文路徑,但列物件 Gstkbas_1TmpPoco 只有對應的中文屬性(隸屬倉庫/開帳月份/關帳日期),並沒有同名英文屬性。因此實際執行時這三欄可能顯示空白,屬於與 Select 核取方塊相同類型的綁定/屬性不一致狀況(待 runtime 驗收)。判斷可否關帳請以勾選與下方稽核結果為準。

Check Item(成本稽核結果,左側清單)

欄位 說明
Check Item(SystemCheckItemNo) 檢查項代號,本視窗只取 K-020-003/004/005
Description 檢查項說明
Output 檢查結果;OK 表示通過。任一項非 OK 即無法關帳(IsOK 判定 Output == "OK")
Detail(下方子資料表格) 點選某檢查項列,下方自動顯示該項的明細 DataTable(不通過時的問題清單)

Locked Source(被鎖定倉庫,第二頁籤)

欄位 說明
Editing User(修改人員) 正在編輯鎖定該倉庫的使用者(屬性 EditingUser,對應 SP 回傳中文欄「修改人員」)
Warehouse/Open Date/Book Closing Date 倉庫代號、開帳月份、關帳日期,皆唯讀(同上方警告,三欄為英文綁定,runtime 可能空白)

欄位連動與附加功能

這一節把「輸入某欄位/按某按鈕後,系統會做什麼」逐條列出,全部依實際程式碼整理。

開窗即帶入今天

視窗建立時(Gstkbas_1ViewModel 建構式),Closing Date 自動帶入今天的日期(ClosingDate = DateTimeWrapper.TodayYYYYMMDD()),可直接改成要結算的月份所屬的任一天。

按「查詢」會做兩件事

按 查詢(QueryCommand → QueryExecute)時,系統先清空 LockedSource/Master,再依序:

  1. 先跑成本稽核(CheckQuantity → AuditBeforeCalculateSqlBll.CanCalculateCost):
    • 以關帳日期前 7 碼(yyyy/MM)為月份,從檢視表 Twork_sys_vw_checkm 取出所有 SystemCheckItemNo like 'K-020%' 的檢查項,再篩出 K-020-003/004/005 三項。
    • 對每一項呼叫對應的稽核 SP(TWORK_CHECK_<項目編號>),把回傳的明細塞進該項的 Detail、把檢查結果字串塞進 Output。
    • 只要任一項 Output 不是 OK(Checkms.Any(x => !x.IsOK)),整體判定為不可關帳,回傳失敗。
    • 失敗時跳出「資料不正確」訊息(MessageEnum.DataIsIncorrect)並 return,不會去查倉庫清單;但 Check Item 清單仍會顯示各項結果供你判讀是哪一項沒過。
  2. 再查倉庫(SqlEditTurnViewModel.TransferQuery → Gstkbas_1Bll.SpecialAdeQuery):
    • 呼叫 SP DARB_TUR_GSTKBAS(查詢條件固定 1=1),結果第 1 個資料集為被鎖定中的倉庫(含修改人員)填入 LockedSource;第 2 個資料集為可關帳的倉庫填入 Master(Tmp)。
    • 若查詢取不到可用資料(例如倉庫全被鎖定、SpecialAdeQuery 回傳 false),仍會把第 1 個資料集的鎖定清單帶出來顯示在 Locked Source 頁。

為何 SP 名是 DARB 而不是 TWORK

程式註解明確記載:本視窗改接 VFP 原版 SP DARB_TUR_GSTKBAS(回傳 gstkbas.* 加鎖定表的修改人員),舊名 TWORK_TUR_GSTKBAS 的物件在資料庫已不存在。若查詢報「找不到預存程序」,多半是 DARB_TUR_GSTKBAS 尚未部署或未在 proc_param 登錄(見常見問題)。

All/None 批次勾選

  • 按 All(SelectAllCommand → SelectAllExecute):把 Master 每一列的 選擇 設為 Y。
  • 按 None(UnselectAllCommand → UnselectAllExecute):把每一列的 選擇 設為 N。

Master 逐列核取方塊的注意事項

Master 資料表格的 Select 核取方塊在 XAML 是綁定 SysIsChosen 欄;但本視窗的列物件(Gstkbas_1TmpPoco)只有 選擇 屬性、沒有 SysIsChosen 屬性,而存檔判斷與寫回(HaveData/SetUpdateSource)也只看 選擇。因此最可靠的勾選方式是用畫面下方的 All/None 按鈕(它們直接寫 選擇)。若逐列勾選核取方塊後按 儲存 卻被提示「請選擇一筆資料」,請改用 All 全選或再次確認,這屬於核取方塊綁定與儲存欄位不一致的已知狀況。

按「儲存」的關帳檢核與寫回

按 儲存(SqlEditTurn)執行關帳時,存檔前驗證(Gstkbas_1Bll.AllowSave)依序:

  1. 關帳日期不可空白(CheckClosingDate)——空白時以 GSPLACE 程式的翻譯文字組出「請輸入關帳日期」提示。
  2. 至少勾選一筆倉庫(HaveData)——若沒有任何一列 選擇=Y,提示「請選擇一筆資料」(MessageEnum.PleaseSelectOneRecord)並擋存。
  3. 驗證通過後整理上傳資料(SetUpdateSource):只取 選擇=Y 的倉庫,對每筆寫入關帳日期(關帳日期 = ClosingDate)、把增刪修標記設為 E(修改),再以這批資料對 Twork_gen_vw_gstkbas 執行上傳關帳。

查詢/存檔期間鎖住關帳日期與離開鈕

查詢或關帳轉檔進行中,SqlEditTurnViewModel.SetControl 事件會切換 BtnExitIsEnabled(SqlEditTurnViewModel_SetControl),暫時把關帳日期輸入框設為唯讀、並鎖住離開鈕,避免作業中途被中斷;作業結束後恢復。

與 GSPLACE 主畫面的連動

本視窗由 G倉庫表(GSPLACE) 的延伸功能(GsplaceViewModel.ExtendedFunction1)以 WindowHelper().OpenWindow(WindowName.Gstkbas_1) 開啟;關帳視窗關閉後若有存檔,GSPLACE 主畫面會自動 DataNavigateHelper.Renew 重新整理,讓倉庫的開帳月份/關帳日期立即反映剛剛的關帳結果。

沒有列印/報表

本視窗為純關帳作業視窗,未實作列印、報表、匯出或簽核功能;操作集中在查詢與勾選關帳兩件事。

常見問題

按「查詢」就跳「資料不正確」,倉庫清單一片空白?

這是成本稽核(K-020-003/004/005)未全部通過所致——表示該關帳月份的成本還不能結算。請看左側 Check Item 清單哪幾項的 Output 不是 OK,點該列看下方 Detail 找出問題資料,到 成本管理 完成成本計算與檢查後再回來查詢。

按「儲存」提示「請選擇一筆資料」?

存檔前會檢查至少要勾選一個倉庫(選擇=Y)。最可靠的做法是按畫面下方的 All 全選(或 None 後再按 All),再按 儲存。逐列勾選 Select 核取方塊若無法生效,請參見欄位連動與附加功能中關於核取方塊綁定的說明。

想關帳的倉庫不在 Master 清單,卻出現在 Locked Source?

該倉庫正被其他使用者編輯鎖定中,目前不能由你關帳。請等對方完成並釋放鎖定後重新 查詢;Locked Source 會顯示是哪位 Editing User(修改人員) 鎖住的,頁籤標題也會顯示鎖定筆數。

查詢報「找不到預存程序」或完全查不到任何倉庫?

本視窗走 SP DARB_TUR_GSTKBAS(VFP 原版)。若該 SP 尚未部署或未在 proc_param 登錄,查詢會失敗。請確認資料庫已建立 DARB_TUR_GSTKBAS 並完成 proc_param 登錄(部署腳本未跑時,總務倉庫關帳查詢/轉檔會失敗)。

關帳日期要填哪一天?是填到月底還是隨便一天?

成本稽核只取關帳日期的前 7 碼(yyyy/MM)當作關帳月份,因此填該月份的任一天皆可;但存檔時會把你填的完整日期寫回各勾選倉庫的關帳日期欄,建議填當次關帳的實際作業日。

為什麼這支視窗不能從主選單直接開?

GSTKBAS_1 設計為 GSPLACE(G倉庫表) 的延伸功能視窗,授權與主檔資料都掛在 GSPLACE 上。請先開 GSPLACE,再從工具列的延伸功能進入關帳視窗。

相關功能


需補截圖清單

以下截圖待功能 runtime 驗收後補拍(放 docs/C-GeneralAffair/images/):

  1. gstkbas_1-step1.png — 從 GSPLACE 延伸功能開啟關帳視窗的入口
  2. gstkbas_1-step2.png — Closing Book 頁全貌(關帳日期 + Check Item 清單 + Master 倉庫清單)
  3. gstkbas_1-step3.png — Master 勾選與 All/None 批次按鈕
  4. gstkbas_1-step4.png — Locked Source 頁籤(被鎖定倉庫與鎖定筆數)