程式資訊
- 程式 ID:
GPURCH - 所屬子系統:C.總務管理
- 狀態:stable
G採購單(Purchase Order)¶
功能簡介¶
「G採購單」是總務模組的雜項採購單據,用來向廠商下單採購進貨用料或一般物料。一張採購單由主檔(一個廠商、一個訂購日期、一種幣別/匯率/收付條件)與多筆明細(每列一個品號/數量/單價/預訂交期)組成。
它的位置在採購流程的中段:上游可由G請購單經請購轉採購(Requisition To Purchasing)批次轉入產生,下游則由進貨單(G進貨單)依本採購單的明細收貨、累計已交數量。採購、總務人員平時就在這支表單維護廠商訂單,並透過列印輸出採購單給廠商。
與「採購單(PURCH)」的關係
本頁是總務模組的 G採購單(GPURCH,C-050),資料來源為 Twork_gen_vw_gpurch 系列。它與G 採購(Purchasing)模組下的採購單(PURCH)是兩支獨立程式,欄位與計稅邏輯雷同但資料表不同,請勿混用。
前置需求¶
- 權限:C.總務 →
C-050 G採購單的新增/修改/刪除/查詢/列印權限。 - 基礎資料:下列主檔須先維護,否則對應欄位無法帶出或存檔會被擋下——
| 資料 | 影響什麼 |
|---|---|
| 廠商主檔(SPDATA) | 廠商代號的有效性、自動帶出收付條件與幣別 |
| 倉儲主檔(GSTKBAS) | 倉儲代號驗證;存檔時倉儲代號不存在會被擋 |
| 收付條件主檔 | 主檔收付條件號與其說明 |
| 幣別/匯率資料 | 幣別的賣出匯率(採購日期當日),決定本幣金額換算 |
| 稅別主檔 | 主檔稅別對應的稅率,存檔時計算稅額 |
| 廠商報價(G採購報價 GSPPDT) | Price Query、Bid 面板帶出的歷史/各廠商最新單價 |
個人參數 4001 |
新增時自動帶入的預設倉儲代號 |
操作步驟¶
新增採購單¶
- 按工具列
新增,系統自動帶入下列預設值(見欄位說明):採購別=1、匯率=1、幣別=本位幣、倉儲代號=個人參數4001、公司代碼=1、採購日期=今天。 - 在 Vendor Code(廠商代號) 輸入或以連結(
KeyField超連結可跳SPDATA)選廠商;輸入後系統自動帶出收付條件號/說明與幣別(詳欄位連動與附加功能)。 - 視需要調整 Order Date(採購日期)、Warehouse(倉儲代號)、Currency(幣別)/Exchange Rate(匯率)、Payment Term(收付條件)、送貨地點、Notes(採購備註)、傳真日期。
- 在下方明細格線逐列輸入:
- 品號(SKU,可用品號查詢欄帶出品名/單位)。
- 數量。
- 單價(受
AllowViewPrice權限控制是否顯示)。 - 預訂交期(新增列預設今天 +14 天)。
- 需求部門(必填,缺漏會擋存檔)。
- 按
儲存。存檔前系統會檢核廠商、日期、幣別、匯率、倉儲、每列預訂交期與需求部門,並重算主檔金額與稅額。
修改採購單¶
- 用工具列導覽鈕或查詢定位到要修改的採購單。
- 按
修改進入編輯狀態。 - 已被進貨收料的明細列(已交數量 > 0)整列鎖定不可編輯(
CanEdit=false),也不可刪除。 - 數量不得改到小於該列已交數量,否則該列出現紅字錯誤、存檔被擋。
刪除¶
- 整張單刪除或單列刪除前,系統會檢查:已交數量 > 0 的明細列不可刪除;採購別為一般採購(1)時,數量為 0 或品號空白的列在存檔時會被自動標記刪除。
列印採購單¶
- 按工具列
列印,開啟採購單列印條件頁。 - 條件預設帶入目前這張單的採購單號起訖。
- 確認
Purchase Order No(採購單號)區間後輸出。
列印報表規劃中
目前 GpurchPrintViewModel 的報表產生邏輯(GetPrintSettings/取數)尚為保留(程式碼註解中),實際 PDF 報表輸出尚未提供。條件頁可開啟,但報表內容待後續接上 TWORK_RPT_GPURCH。
由請購單轉入(延伸功能)¶
按工具列的延伸功能鈕(ExtendedFunction1),開啟請購轉採購視窗,挑選請購來源批次轉成採購單;轉檔完成後系統會自動導覽到新產生的採購單。詳見欄位連動與附加功能。
欄位說明¶
主檔欄位¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| P.O.#(採購單號) | 系統產生 | 唯讀,存檔時自動編號 |
| Branch#(公司代碼) | — | 新增預設 1 |
| Vendor Code(廠商代號) | ✔ | 可連結 SPDATA;輸入後帶出收付條件/幣別 |
| Vendor Name(廠商簡稱) | — | 唯讀,依廠商代號帶出 |
| Order Date(採購日期) | ✔ | ShortDate;新增預設今天 |
| Warehouse(倉儲代號) | ✔ | 新增預設個人參數 4001;存檔驗證須存在於倉儲主檔 |
| Currency(幣別) | ✔ | 新增預設本位幣;取採購日期當日賣出匯率 |
| Exchange Rate(匯率) | ✔ | 新增預設 1;須 > 0,否則擋存檔 |
| Payment Term(收付條件號) | — | 依廠商帶出,可改 |
| 送貨地點 | — | 明細列送貨地點空白時,存檔自動以此帶入 |
| Notes(採購備註) | — | 最長 40 字 |
| 傳真日期 | — | ShortDate |
| Status(結案) | 系統產生 | 唯讀 |
| Req No(請購單號) | 系統產生 | 唯讀,來源請購單號 |
| Total Qty(合計數量) | 系統產生 | 唯讀,= 各明細數量加總 |
| Total Amount(合計金額) | 系統產生 | 唯讀,= 各明細原幣未稅加總;受 AllowViewPrice 控制顯示 |
明細欄位¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 序號 | 系統產生 | 唯讀 |
| 品號(SKU) | ✔ | 品號查詢欄,輸入後帶出品名/單位等 |
| 品名 | — | 唯讀,依品號帶出 |
| 廠商品號 | — | — |
| 數量 | ✔ | 採購數量;變更後重算金額,並檢核不得小於已交數量 |
| 請購單號 | 系統產生 | 唯讀 |
| 單位 | — | 下拉(UOM 清單) |
| Price Query(單價查詢) | — | 按鈕欄,開歷史單價面板;受 AllowViewPrice 控制顯示 |
| 單價 | — | 受 AllowViewPrice 控制顯示;變更後重算原幣/本幣未稅 |
| 原幣未稅 | 系統計算 | 唯讀,= 數量 × 單價(原幣);受 AllowViewPrice 控制顯示 |
| 本幣未稅 | 系統計算 | 唯讀,原幣 × 匯率換算;受 AllowViewPrice 控制顯示 |
| 預訂交期 | ✔ | 新增列預設今天 +14 天;未結案列空白會擋存檔 |
| 回覆日期 | — | 廠商回覆交期 |
| 暫定週數 | — | 整數 |
| 備註 | — | 最長 50 字 |
| 是否結案 | — | 勾選框(Y/N);勾選後存檔會跳提醒確認 |
| 已交數量 | 系統產生 | 唯讀,進貨累計;> 0 時該列鎖定 |
| 需求部門 | ✔ | 數量≠0 且有品號的未結案列必填,否則擋存檔 |
欄位連動與附加功能¶
這一節整理「輸入某欄位/按某鈕後系統會做什麼」,全部來源為實際程式碼。
新增時帶出的預設值(AfterAddNew)¶
當你按 新增,系統在主檔自動填入:
- 採購別 = 1(一般採購)。
- 匯率 = 1。
- 幣別 = 本位幣(
Context.Env.LocalCurrency)。 - 倉儲代號 = 個人參數
4001(每位使用者可設定自己的預設倉)。 - 公司代碼 = 1。
- 採購日期 = 今天。
明細新增列時(SetNewData),預訂交期自動帶今天 +14 天。
小技巧
若新增後倉儲代號是空的或不是你要的倉,請先在系統的個人參數把 4001 設好,之後每張新單都會自動帶入。
輸入廠商代號(廠商代號Binding)¶
當你在 Vendor Code 輸入或選出廠商,系統會以廠商主檔(SPDATA)帶出:
- 收付條件號 ← 廠商設定的收付條件。
- 說明 ← 該收付條件的描述。
- 幣別 ← 廠商幣別;若廠商沒設幣別,回填本位幣。
若查不到該廠商,上述三欄會被清空、幣別回填本位幣。
VFP 另帶但新版尚未提供
VFP 舊版輸入廠商時還會一併帶出送貨地點/交易條件/付款方式/運送方式。新版 C# 目前只帶收付條件與幣別,其餘欄位需手動輸入(屬已知差異,非錯誤)。
幣別與匯率連動¶
- 幣別欄為
TsCurrency控件,會依採購日期取賣出(Sell)匯率自動帶入匯率欄。 - 當匯率被改動,系統立即以新匯率重算整張單的金額(
TaxCalculator.CalculateAmount),主檔合計金額與各列本幣未稅同步更新。
數量/單價輸入後的金額重算¶
- 輸入或修改明細的數量或單價時,該列呼叫
SetCurrencyAmount()重算原幣未稅/本幣未稅。 - 同時主檔的 Total Qty(= 各列數量加總)與 Total Amount(= 各列原幣未稅加總)即時重算。
- 改數量時還會自動觸發
Price Query(帶出該品號的歷史報價,見下)。
數量檢核(不得小於已交數量)¶
輸入數量時系統檢查「數量 ≥ 已交數量」。若把數量改到小於已交數量,該欄會出現紅字錯誤 Quantity must be greater than [Received Quantity],且存檔會被擋下。
Price Query 與 Bid 面板(歷史單價)¶
此功能受 AllowViewPrice(可看價)權限控制,無此權限時相關欄位與面板整組隱藏。
- 按明細列的
Price Query按鈕(或變更數量時自動觸發):系統以該列品號+採購日期+本單廠商,查出同一廠商該品號的歷史報價,顯示在右側特殊查詢頁,並自動切到該頁籤。- 系統會依「採購或報價來源」(個人參數
6006)與「報價有效天數」(6010)過濾有效報價,並挑出符合採購數量的最低採購量對應單價自動帶回該列單價。
- 系統會依「採購或報價來源」(個人參數
- 切換明細列時,下方 Bid 面板(
GUnitPriceSpecialQuery)會列出不同廠商對同一品號的最新報價,供比價參考;按該列的Return按鈕可把那筆報價的單價回填到目前明細列。
結案勾選(是否結案)¶
- 勾選明細列的是否結案後存檔,系統會跳出提醒:偵測到有 N 列已結案,請確認結案正確(
OK / Cancel)。按Cancel取消存檔。 - 一般採購(採購別=1)的列若數量為 0 或品號空白,存檔時會被自動標記刪除。
延伸功能:請購轉採購(ExtendedFunction1)¶
按工具列延伸功能鈕,會開啟請購轉採購(Gpptopu)視窗:
- 在該視窗挑選請購來源並執行轉檔。
- 轉檔成功後,本表單自動以新產生的採購單
Pkid導覽到該張採購單並重新整理畫面,讓你接著補充/確認。
存檔時的計算與驗證(GpurchSave)¶
按 儲存 時,系統依序:
- 檢核主檔:廠商代號、採購日期、幣別不可空白;匯率必須 > 0;倉儲代號必須存在於倉儲主檔。
- 檢核結案列:有結案列時跳提醒確認。
- 檢核未結案列:每列預訂交期不可空白;數量≠0 且有品號的列需求部門必填。
- 檢核刪除/數量:已交數量 > 0 的列不可刪除;任一列數量不可小於已交數量。
- 資料整理(HandleDataBeforeEndEdit):每列重算原幣/本幣金額;一般採購數量 0 或品號空白的列標記刪除;明細送貨地點空白時帶主檔送貨地點。
- 稅額計算(TaxCalculate):主檔依稅別取稅率,呼叫
TaxCalculator加總並回填原幣金額/本幣金額/稅額。
VFP 有、新版尚未提供的功能¶
規劃中/尚未提供(不可在新版操作)
依 VFP 對比,下列功能目前未移植到新版 C#,操作時請勿期待其存在:
- 結案特殊修改鈕(VFP else5):結案單僅能調低單價、改備註與結案旗標,含「特殊修改單價不得大於原單價」防呆。
- 修改交期(VFP PURCH_E 批次改交期)。
- 進貨查詢(VFP GPURCH_S / else6)。
- 反推稅率/反推未稅價按鈕。
- 主檔的交易條件/付款方式/運送方式欄位無 UI。
- 採購單列印報表內容(條件頁可開,報表輸出待接
TWORK_RPT_GPURCH)。
常見問題¶
存檔時一直說「請輸入需求部門」?
一般採購的明細列只要數量不為 0 且有品號,需求部門就是必填。請逐列補上需求部門再存檔;若該列其實不需要,把數量清為 0(一般採購會在存檔時自動移除空列)。
明細列的單價、原幣未稅、本幣未稅都看不到(整欄不見)?
這些價格相關欄位與 Price Query、Bid 面板都受可看價(AllowViewPrice)權限控制。沒有此權限時整組價格欄位會隱藏,請洽系統管理員調整權限。
本幣金額是 0 或沒換算?
本幣金額=原幣 × 匯率。請確認幣別有設定、匯率 > 0(匯率 ≤ 0 會擋存檔)。改了匯率後金額會立即重算;若仍為 0,檢查明細是否有輸入單價與數量。
某個明細列改不動、也刪不掉?
該列若已交數量 > 0(已被進貨收料),整列會鎖定(不可編輯、不可刪除),且數量不得改到小於已交數量。需先處理對應的進貨單才能調整。
倉儲代號存檔時報「請輸入正確資料」?
存檔會比對倉儲主檔,輸入的倉儲代號必須存在。新增時若個人參數 4001 帶出的倉不在倉儲主檔,也會被擋;請改填有效倉儲代號或修正參數。
Price Query/Bid 面板查不到任何單價?
歷史單價來自廠商採購報價(GSPPDT)。請確認該品號+廠商有報價、報價在有效天數(參數 6010)內、且來源類型符合參數 6006 設定;無有效報價時面板為空、單價不會自動帶入。
按了列印,卻印不出採購單內容?
目前列印條件頁可開啟,但實際報表輸出邏輯尚在規劃(程式碼中保留、未接上 TWORK_RPT_GPURCH),因此暫時不會產生 PDF。詳見列印採購單的說明。
相關功能¶
- G請購單(GPPURCH) — 採購單的上游請購來源
- 請購轉採購(GPPTOPU) — 由延伸功能開啟,將請購批次轉成採購單
- 採購單列印(GPURCHPRINT) — 本單的列印條件頁
- G進貨單(GTRRAMA) — 依本採購單收料、回寫已交數量
- G採購報價(GSPPDT) — Price Query/Bid 面板的單價來源
- 廠商主檔 SPDATA — 廠商代號連結目標
- G採購(Purchasing)模組 — 另一支獨立的採購單(PURCH)
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/C-GeneralAffair/images/):
gpurch-step1.png— 新增採購單後的主檔預設值(廠商、幣別、匯率、倉儲)gpurch-step2.png— 明細格線(品號/數量/單價/預訂交期/需求部門)gpurch-step3.png— Price Query 歷史單價面板與下方 Bid 比價面板gpurch-step4.png— 結案勾選後的存檔提醒對話框gpurch-step5.png— 列印條件頁(採購單號起訖)