跳轉到

程式資訊

  • 程式 IDGSTKBAS_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/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. 稽核全部通過(每項 OutputOK)才繼續;任一項未過會跳「資料不正確」並中止查詢。
    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 批次按鈕設定勾選

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

步驟④ 執行關帳(存檔)

  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),底層中文屬性包含 隸屬倉庫/倉庫說明/開帳月份/關帳日期/送貨地點/倉庫分類碼/倉同儲/備註/成本順序/顯示順序/可用 等,但本視窗只顯示倉庫代號、開帳月份、關帳日期三個欄位供關帳確認。

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

MasterLocked SourceWarehouse/Open Date/Book Closing Date 三欄在 XAML 綁定的是 WarehouseOpenDateBookClosingDate 這幾個英文路徑,但列物件 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()),可直接改成要結算的月份所屬的任一天。

按「查詢」會做兩件事

查詢QueryCommandQueryExecute)時,系統先清空 LockedSourceMaster,再依序:

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

為何 SP 名是 DARB 而不是 TWORK

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

All/None 批次勾選

  • AllSelectAllCommandSelectAllExecute):把 Master 每一列的 選擇 設為 Y
  • NoneUnselectAllCommandUnselectAllExecute):把每一列的 選擇 設為 N

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

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

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

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

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

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

查詢或關帳轉檔進行中,SqlEditTurnViewModel.SetControl 事件會切換 BtnExitIsEnabledSqlEditTurnViewModel_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 頁籤(被鎖定倉庫與鎖定筆數)