程式資訊
- 程式 ID:
GPPTOPU - 所屬子系統:C.總務管理
- 狀態:stable
總務請購轉總務採購¶
功能簡介¶
「總務請購轉總務採購」是一支批次轉單的模態視窗,把已建立、還沒被採購完的請購需求單一次帶進採購單。它不是獨立的主選單程式,而是從G採購單(GPURCH)畫面按工具列的擴充功能 1(請購轉採購)叫出來的小視窗,視窗標題顯示 Requisition To Purchasing。
採購人員的用途很單純:
- 查出區間內還沒被採購完的請購明細。
- 勾選要轉的請購單。
- 按
Save轉檔,系統會依廠商代號拆單,自動產生一張或多張採購單,並把畫面切回採購單、帶出剛轉出的單據。
與一般採購單的關係
本視窗只負責「把請購需求帶進採購單」這一步。轉檔成功後的採購單修改、審核、列印仍在G採購單完成。本視窗本身沒有列印、刪除、審核功能。
前置需求¶
- 權限:需具備G採購單(
GPURCH)的編輯權限,因為本視窗是從採購單畫面的擴充功能進入、轉出的也是採購單;本視窗沒有自己的主選單權限項。 - 基礎資料:可轉出的資料量取決於下列維護狀況——
| 資料 | 影響的結果 |
|---|---|
| 請購需求單(GREQMA,含明細廠商代號、預訂交期、金額) | 是否出現在可轉清單;無廠商代號的明細不會被轉 |
| 廠商資料(SPDATA 廠商簡稱、收付條件號) | 轉出採購單主檔帶出的廠商簡稱/收付條件號 |
| 員工檔(請購人員) | 清單上的 Name(姓名) 欄 |
| 倉儲代號 | 採購單主檔帶入的倉儲代號(沿用來源請購單) |
本位幣轉單
轉出的採購單一律以本位幣(Context.Env.LocalCurrency)、匯率 = 1、採購別 = 1(一般採購)、公司代碼 = 1 建立(程式寫死)。若需外幣採購,請於轉檔後在G採購單上自行調整幣別與匯率。
操作步驟¶
本視窗共有兩個頁籤:Request To Purchasing(主作業)與 Locked Source(無法轉單清單)。
步驟一 查詢可轉的請購單¶
- 在G採購單畫面按
擴充功能 1,開啟本視窗。 - 視需要縮小查詢範圍:
- Request No(請購單號) 起~迄:預設
1~zzzzzzzzzzzzzz(等於全部)。 - Request Date(請購日期) 起~迄:預設當年 1/1 ~ 今天。
- Request No(請購單號) 起~迄:預設
- 按
Query查詢。上方 Master 清單列出符合條件的請購單,點選某一列時下方 Detail 顯示該單的明細。
查詢條件其實由後端固定
後端 SP(DARB_TUR_GPPTOPU)內建固定篩選:轉出備註為空、需求數量 > 已訂購數量、廠商代號非空、未結案。畫面上的單號/日期區間,是在程式端對 SP 回傳結果再做一次過濾用來縮小清單,並非送進 SP 的條件(單號/日期區間仍會傳入 SP 供記錄追蹤)。
步驟二 勾選要轉的請購單¶
- 在 Master 清單最左欄 Selected 勾選要轉的請購單(可複選)。
- 想一次處理時,按底部的:
All:全部勾選。None:全部取消勾選。
步驟三 執行轉檔¶
- 確認勾選無誤後,按右下角
Save(位於 SqlEditTurn 工具列)執行轉檔。 - 轉檔成功後視窗關閉,系統自動把G採購單畫面切換並帶出剛轉出的採購單,可直接接著修改、審核、列印。
- 若要放棄,按
Exit離開,不會產生任何採購單。
依廠商自動拆單
同一張請購單若明細含多家廠商,轉檔時會依廠商代號各拆成一張採購單;每張採購單的明細序號從 1 重新編號。
Locked Source 頁籤(無法轉單清單)¶
按 Query 後,凡是符合條件卻無法取得編輯通行證(被其他人或其他流程鎖定)的請購單會列在此頁籤,欄位有 Editing User(修改人員)/Request No(請購單號)/Request User(請購人員)/Warehouse Code(倉儲代號)。頁籤標題會在筆數大於 0 時顯示鎖定筆數,提醒這些單暫時無法轉出。
欄位說明¶
查詢條件¶
| 欄位 | 必填 | 說明 / 格式 / 預設 |
|---|---|---|
| Request No(請購單號)起/迄 | — | 字串區間;預設起 1、迄 zzzzzzzzzzzzzz(涵蓋全部) |
| Request Date(請購日期)起/迄 | — | 短日期(yyyy/MM/dd);預設起 = 當年 1/1、迄 = 今天 |
Master(請購單)清單¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| Selected(選擇) | ✔ | 勾選要轉的請購單;勾選時對應內部 選擇 = "Y"、取消為空字串 |
| Request No(請購單號) | — | 請購單號 |
| WarehouseCode(倉儲代號) | — | 倉儲代號,轉出時帶入採購單主檔 |
| RequestDate(請購日期) | — | 請購日期 |
| Request User(請購人員) | — | 請購人員代號 |
| Name(姓名) | — | 查詢後由請購人員代號帶出的員工姓名(DescriptionHelper.GetEmployeeName) |
Detail(請購明細)清單(整列唯讀)¶
| 欄位 | 說明 |
|---|---|
| Line No(序號) | 請購明細序號(取 SP 回傳的「請購序號」) |
| VendorCode(廠商代號) | 轉單拆單的依據;空白者不轉 |
| VendorName(廠商簡稱) | 廠商簡稱 |
| SKU(品號) | 品號 |
| SKU Description(品名) | 品名 |
| UOM(單位) | 計量單位 |
| Request Quantity(數量) | 請購數量(轉出時整筆沿用) |
| Unit Price(單價) | 單價 |
| Currency Amount Without Tax(原幣未稅金額) | 原幣未稅金額 |
| Amount Without Tax(本幣未稅金額) | 本幣未稅金額 |
| ETA(預訂交期) | 預訂交期(強制唯讀) |
欄位顯示尚未驗收(runtime 未驗)
Master/Detail 兩個清單的欄位目前用英文 binding path(如 RequestNo、VendorName、SKU、RequestQuantity…)綁定,但對應的資料來源(Twork_gen_vw_gppurmaSource/Twork_gen_vw_gppurdeSource)僅有中文屬性名(請購單號、廠商簡稱、品號、數量…)。兩者不一致時欄位會顯示空白,唯一確定可用的是 Master 最左欄的 Selected 勾選框(綁 SysIsChosen)。本頁欄位名稱以設計意圖描述,實際顯示請以 runtime 驗收為準。
欄位連動與附加功能¶
這一節把「按某按鈕/勾選後系統實際做什麼」逐條列出,全部依現行 C# 程式(GpptopuViewModel/GpptopuBll)與 VFP 原始邏輯(gpptopu1.prg)整理。
開窗與離開後的自動連動¶
- 從採購單擴充功能 1 開啟:本視窗由G採購單的
ExtendedFunction1()以WindowHelper().OpenWindow(WindowName.Gpptopu)叫出,是個獨立模態視窗。 - 轉檔成功後自動帶單:
Save成功時,視窗會把新採購單的Pkid記在GpptopuViewModel.Pkid;視窗關閉、回到採購單畫面時,採購單程式以該Pkid自動DataNavigateHelper.NavigateAsync,直接顯示剛轉出的採購單,免去手動再查(帶完後旗標重置為 −1)。 Exit離開:直接Close()關閉視窗,不做任何轉檔,採購單畫面維持原狀。
查詢(Query)會做的事¶
當你按 Query,系統(QueryExecute → SpecialAdeQuery)會:
- 呼叫後端 SP
DARB_TUR_GPPTOPU,取回兩個結果集:第 1 個是鎖定清單(放到 Locked Source 頁籤),第 2 個是主子合併的請購資料(gppurma JOIN gppurde 單表)。 - 把主子合併的單表依請購單號拆回 Master/Detail(
SplitMasterDetail),子檔的pkid取結果欄「請購pkid」、序號取「請購序號」,並在程式端再用畫面的請購單號/請購日期區間過濾一次(InQueryRange)。 - 對每張 Master,用請購人員代號帶出 Name(姓名)。
- 查完若 Master 有資料,自動選取第一列(
Master[0]),下方 Detail 隨即顯示其明細。 - 點選 Master 任一列時,Detail 會即時換成該單的明細(以
pkid從 lookup 取);若取消選取則 Detail 清空。
全選 / 全不選¶
- 按
All(SelectAllExecute):把 Master 每一列的 Selected 設為勾選(選擇 = "Y")。 - 按
None(UnselectAllExecute):把 Master 每一列的 Selected 取消(選擇 = "")。
轉檔(Save)的計算與拆單規則¶
按 Save 時(AllowSave → SetUpdateSource),系統只處理 Selected = 勾選(選擇 == "Y") 的請購單,並依下列規則產生採購單:
- 依廠商拆單:把每張已勾選請購單的明細依廠商代號分群,每一群(每家廠商)產生一張採購單主檔。廠商代號為空白的群會被略過(
continue),不會建立採購單。 - 採購單主檔帶出的預設值(每張新單):
- 採購日期 = 今天(
yyyy/MM/dd)。 - 匯率 = 1、幣別 = 本位幣、採購別 = 1(一般採購)、公司代碼 = 1。
- 倉儲代號 = 來源請購單的倉儲代號。
- 廠商代號 = 該群的廠商;廠商簡稱/收付條件號由廠商資料(
DescriptionHelper.GetVendor)帶出。 - 請購單號 = 來源請購單號(保留來源關聯)。
- 採購日期 = 今天(
- 採購單明細帶出的值(逐筆對應請購明細):
- 序號:依採購單號規則由 1 重新編號(長度取
SheetNoMethod.GetLineNoLength)。 - 品號/品名/數量/單位/單價/廠商品號/預訂交期/需求部門:直接沿用請購明細。
- 原幣未稅/本幣未稅 = 請購明細的金額。
- 同時保留訂單 pkid/請購 pkid,建立採購→請購→訂單的勾稽鏈。
- 序號:依採購單號規則由 1 重新編號(長度取
VFP 原版可手改採購數量、會重算金額(新版尚未提供)
VFP 原始 GPPTOPU1 表單的明細有一欄可編輯的採購數量(預設=數量-已訂購數量):
- 改值後會在
LostFocus以「採購數量 × 單價」重算金額、「採購數量 × 含稅單價」重算含稅金額。 - 存檔前
Valid檢核「採購數量需介於 0 與(數量-已訂購數量)之間」,否則跳「請輸入正確的數量」。 - 只有採購數量 > 0 的列才會被轉出。
目前新版 C# 視窗的 Detail 為整列唯讀,整單依請購明細原數量轉出,尚未提供逐列改採購數量的功能。若需部分數量採購,請於轉出後在採購單上調整。
VFP 原版的綠底提示(新版未沿用)
VFP 版會把「採購數量 > 0」的明細列底色標成淺綠,方便一眼看出哪些會被轉出。新版 Detail 為唯讀、整單轉出,故未保留此底色提示。
Locked Source(無法轉單)的判定¶
- 後端 SP 的第 1 個結果集即為「符合轉單條件、但無法取得通行證」的請購單(被鎖定/他人編輯中,
getpass = 'N')。 - 這些單會列在 Locked Source 頁籤、頁籤標題顯示筆數,且不會出現在可勾選的 Master 清單,避免轉到被鎖定的單。
常見問題¶
按 Query 查不到任何請購單?
後端固定條件相當嚴格,請逐項確認該請購單:轉出備註為空、需求數量 > 已訂購數量、明細廠商代號非空、且尚未結案。任何一項不符就不會出現。此外,畫面的請購單號/請購日期區間也會在收到 SP 結果後再過濾一次,可先把區間放寬到預設值(1~zzzzzzzzzzzzzz、當年 1/1~今天)重查。
某筆明細沒被轉成採購單?
轉檔依廠商代號拆單,廠商代號空白的群會被直接略過。請回請購需求單補上該明細的廠商代號後再轉。
請購單出現在 Locked Source、無法勾選?
代表該單正被其他人或其他流程鎖定(無法取得編輯通行證),系統刻意把它擋在可轉清單之外。請等對方釋放後再按 Query 重查。
轉出的採購單為什麼是本位幣、匯率 1?
這是程式設計:所有轉出採購單一律以本位幣、匯率 = 1、採購別 = 1、公司代碼 = 1建立。若要外幣採購,請於轉檔後在G採購單自行修改幣別與匯率。
想只採購一部分數量(不是全部),可以嗎?
目前新版視窗的明細為唯讀,會以請購原數量整筆轉出,尚未開放逐列調整採購數量(詳見欄位連動與附加功能的說明)。請先整單轉出,再到採購單上修改數量。
轉完後採購單畫面沒有自動帶出新單?
自動帶單發生在 Save 成功並回傳新採購單 Pkid 之後。若你是按 Exit 離開,或本次沒有任何可轉資料(沒勾選、或勾選的單其明細廠商代號全為空),畫面就不會切換。請確認有勾選且 Save 成功。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/C-GeneralAffair/images/):
gpptopu-step1.png— Request To Purchasing 頁籤:查詢條件 + Master/Detail 清單全貌gpptopu-step2.png— Master 清單勾選 Selected 與底部All/None按鈕gpptopu-step3.png— 轉檔成功後採購單畫面自動帶出新採購單gpptopu-locked.png— Locked Source(無法轉單)頁籤