跳轉到

程式資訊

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

總務請購轉總務採購

功能簡介

「總務請購轉總務採購」是一支批次轉單的模態視窗,把已建立、還沒被採購完的請購需求單一次帶進採購單。它不是獨立的主選單程式,而是從G採購單(GPURCH)畫面按工具列的擴充功能 1(請購轉採購)叫出來的小視窗,視窗標題顯示 Requisition To Purchasing

採購人員的用途很單純:

  1. 查出區間內還沒被採購完的請購明細。
  2. 勾選要轉的請購單。
  3. Save 轉檔,系統會依廠商代號拆單,自動產生一張或多張採購單,並把畫面切回採購單、帶出剛轉出的單據。

與一般採購單的關係

本視窗只負責「把請購需求帶進採購單」這一步。轉檔成功後的採購單修改、審核、列印仍在G採購單完成。本視窗本身沒有列印、刪除、審核功能。

前置需求

  • 權限:需具備G採購單GPURCH)的編輯權限,因為本視窗是從採購單畫面的擴充功能進入、轉出的也是採購單;本視窗沒有自己的主選單權限項。
  • 基礎資料:可轉出的資料量取決於下列維護狀況——
資料 影響的結果
請購需求單(GREQMA,含明細廠商代號、預訂交期、金額) 是否出現在可轉清單;無廠商代號的明細不會被轉
廠商資料(SPDATA 廠商簡稱、收付條件號) 轉出採購單主檔帶出的廠商簡稱/收付條件號
員工檔(請購人員) 清單上的 Name(姓名)
倉儲代號 採購單主檔帶入的倉儲代號(沿用來源請購單)

本位幣轉單

轉出的採購單一律以本位幣Context.Env.LocalCurrency)、匯率 = 1採購別 = 1(一般採購)公司代碼 = 1 建立(程式寫死)。若需外幣採購,請於轉檔後在G採購單上自行調整幣別與匯率。

操作步驟

本視窗共有兩個頁籤:Request To Purchasing(主作業)與 Locked Source(無法轉單清單)。

步驟一 查詢可轉的請購單

  1. G採購單畫面按 擴充功能 1,開啟本視窗。
  2. 視需要縮小查詢範圍:
    • Request No(請購單號) 起~迄:預設 1zzzzzzzzzzzzzz(等於全部)。
    • Request Date(請購日期) 起~迄:預設當年 1/1 ~ 今天
  3. Query 查詢。上方 Master 清單列出符合條件的請購單,點選某一列時下方 Detail 顯示該單的明細。

查詢條件其實由後端固定

後端 SP(DARB_TUR_GPPTOPU)內建固定篩選:轉出備註為空、需求數量 > 已訂購數量、廠商代號非空、未結案。畫面上的單號/日期區間,是在程式端對 SP 回傳結果再做一次過濾用來縮小清單,並非送進 SP 的條件(單號/日期區間仍會傳入 SP 供記錄追蹤)。

步驟二 勾選要轉的請購單

  1. 在 Master 清單最左欄 Selected 勾選要轉的請購單(可複選)。
  2. 想一次處理時,按底部的:
    • All:全部勾選。
    • None:全部取消勾選。

步驟三 執行轉檔

  1. 確認勾選無誤後,按右下角 Save(位於 SqlEditTurn 工具列)執行轉檔。
  2. 轉檔成功後視窗關閉,系統自動把G採購單畫面切換並帶出剛轉出的採購單,可直接接著修改、審核、列印。
  3. 若要放棄,按 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(如 RequestNoVendorNameSKURequestQuantity…)綁定,但對應的資料來源(Twork_gen_vw_gppurmaSourceTwork_gen_vw_gppurdeSource)僅有中文屬性名(請購單號、廠商簡稱、品號、數量…)。兩者不一致時欄位會顯示空白,唯一確定可用的是 Master 最左欄的 Selected 勾選框(綁 SysIsChosen)。本頁欄位名稱以設計意圖描述,實際顯示請以 runtime 驗收為準。

欄位連動與附加功能

這一節把「按某按鈕/勾選後系統實際做什麼」逐條列出,全部依現行 C# 程式(GpptopuViewModelGpptopuBll)與 VFP 原始邏輯(gpptopu1.prg)整理。

開窗與離開後的自動連動

  • 從採購單擴充功能 1 開啟:本視窗由G採購單ExtendedFunction1()WindowHelper().OpenWindow(WindowName.Gpptopu) 叫出,是個獨立模態視窗。
  • 轉檔成功後自動帶單Save 成功時,視窗會把新採購單的 Pkid 記在 GpptopuViewModel.Pkid;視窗關閉、回到採購單畫面時,採購單程式以該 Pkid 自動 DataNavigateHelper.NavigateAsync,直接顯示剛轉出的採購單,免去手動再查(帶完後旗標重置為 −1)。
  • Exit 離開:直接 Close() 關閉視窗,不做任何轉檔,採購單畫面維持原狀。

查詢(Query)會做的事

當你按 Query,系統(QueryExecute → SpecialAdeQuery)會:

  1. 呼叫後端 SP DARB_TUR_GPPTOPU,取回兩個結果集:第 1 個是鎖定清單(放到 Locked Source 頁籤),第 2 個是主子合併的請購資料(gppurma JOIN gppurde 單表)。
  2. 把主子合併的單表依請購單號拆回 Master/DetailSplitMasterDetail),子檔的 pkid 取結果欄「請購pkid」、序號取「請購序號」,並在程式端再用畫面的請購單號/請購日期區間過濾一次(InQueryRange)。
  3. 對每張 Master,用請購人員代號帶出 Name(姓名)
  4. 查完若 Master 有資料,自動選取第一列Master[0]),下方 Detail 隨即顯示其明細。
  5. 點選 Master 任一列時,Detail 會即時換成該單的明細(以 pkid 從 lookup 取);若取消選取則 Detail 清空。

全選 / 全不選

  • AllSelectAllExecute):把 Master 每一列的 Selected 設為勾選(選擇 = "Y")。
  • NoneUnselectAllExecute):把 Master 每一列的 Selected 取消(選擇 = "")。

轉檔(Save)的計算與拆單規則

Save 時(AllowSave → SetUpdateSource),系統只處理 Selected = 勾選(選擇 == "Y" 的請購單,並依下列規則產生採購單:

  1. 依廠商拆單:把每張已勾選請購單的明細依廠商代號分群,每一群(每家廠商)產生一張採購單主檔。廠商代號為空白的群會被略過continue),不會建立採購單。
  2. 採購單主檔帶出的預設值(每張新單):
    • 採購日期 = 今天(yyyy/MM/dd)。
    • 匯率 = 1、幣別 = 本位幣、採購別 = 1(一般採購)、公司代碼 = 1。
    • 倉儲代號 = 來源請購單的倉儲代號。
    • 廠商代號 = 該群的廠商;廠商簡稱/收付條件號由廠商資料(DescriptionHelper.GetVendor)帶出。
    • 請購單號 = 來源請購單號(保留來源關聯)。
  3. 採購單明細帶出的值(逐筆對應請購明細):
    • 序號:依採購單號規則由 1 重新編號(長度取 SheetNoMethod.GetLineNoLength)。
    • 品號/品名/數量/單位/單價/廠商品號/預訂交期/需求部門:直接沿用請購明細。
    • 原幣未稅/本幣未稅 = 請購明細的金額
    • 同時保留訂單 pkid/請購 pkid,建立採購→請購→訂單的勾稽鏈。

VFP 原版可手改採購數量、會重算金額(新版尚未提供)

VFP 原始 GPPTOPU1 表單的明細有一欄可編輯的採購數量(預設=數量-已訂購數量):

  • 改值後會在 LostFocus 以「採購數量 × 單價」重算金額、「採購數量 × 含稅單價」重算含稅金額
  • 存檔前 Valid 檢核「採購數量需介於 0 與(數量-已訂購數量)之間」,否則跳「請輸入正確的數量」。
  • 只有採購數量 > 0 的列才會被轉出。

目前新版 C# 視窗的 Detail 為整列唯讀,整單依請購明細原數量轉出,尚未提供逐列改採購數量的功能。若需部分數量採購,請於轉出後在採購單上調整。

VFP 原版的綠底提示(新版未沿用)

VFP 版會把「採購數量 > 0」的明細列底色標成淺綠,方便一眼看出哪些會被轉出。新版 Detail 為唯讀、整單轉出,故未保留此底色提示。

Locked Source(無法轉單)的判定

  • 後端 SP 的第 1 個結果集即為「符合轉單條件、但無法取得通行證」的請購單(被鎖定/他人編輯中,getpass = 'N')。
  • 這些單會列在 Locked Source 頁籤、頁籤標題顯示筆數,且不會出現在可勾選的 Master 清單,避免轉到被鎖定的單。

常見問題

按 Query 查不到任何請購單?

後端固定條件相當嚴格,請逐項確認該請購單:轉出備註為空、需求數量 > 已訂購數量、明細廠商代號非空、且尚未結案。任何一項不符就不會出現。此外,畫面的請購單號/請購日期區間也會在收到 SP 結果後再過濾一次,可先把區間放寬到預設值(1zzzzzzzzzzzzzz、當年 1/1~今天)重查。

某筆明細沒被轉成採購單?

轉檔依廠商代號拆單廠商代號空白的群會被直接略過。請回請購需求單補上該明細的廠商代號後再轉。

請購單出現在 Locked Source、無法勾選?

代表該單正被其他人或其他流程鎖定(無法取得編輯通行證),系統刻意把它擋在可轉清單之外。請等對方釋放後再按 Query 重查。

轉出的採購單為什麼是本位幣、匯率 1?

這是程式設計:所有轉出採購單一律以本位幣、匯率 = 1、採購別 = 1、公司代碼 = 1建立。若要外幣採購,請於轉檔後在G採購單自行修改幣別與匯率。

想只採購一部分數量(不是全部),可以嗎?

目前新版視窗的明細為唯讀,會以請購原數量整筆轉出,尚未開放逐列調整採購數量(詳見欄位連動與附加功能的說明)。請先整單轉出,再到採購單上修改數量。

轉完後採購單畫面沒有自動帶出新單?

自動帶單發生在 Save 成功並回傳新採購單 Pkid 之後。若你是按 Exit 離開,或本次沒有任何可轉資料(沒勾選、或勾選的單其明細廠商代號全為空),畫面就不會切換。請確認有勾選且 Save 成功。

相關功能


需補截圖清單

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

  1. gpptopu-step1.png — Request To Purchasing 頁籤:查詢條件 + Master/Detail 清單全貌
  2. gpptopu-step2.png — Master 清單勾選 Selected 與底部 AllNone 按鈕
  3. gpptopu-step3.png — 轉檔成功後採購單畫面自動帶出新採購單
  4. gpptopu-locked.png — Locked Source(無法轉單)頁籤