程式資訊
- 程式 ID:
ORMASTTOPP - 所屬子系統:G.採購付款
- 狀態:stable
訂單轉請購¶
功能簡介¶
「訂單轉請購」把未結案、尚有未請購數量的銷售訂單明細整批帶進來,依「廠商代號」分組後一次轉成多張請購單(PPURCH)。它是給採購人員用的轉單視窗:當業務已經接了訂單、需要向外部廠商採購對應的料件時,不必逐筆手 key 請購單,從這裡指定客戶、補上每列的廠商代號,按 儲存 就能自動建立請購單。
這支視窗不是獨立選單程式,而是從請購單畫面的延伸功能叫出來的;轉單存檔後會回填請購單主檔的 pkid,讓請購單畫面自動跳到剛建立的那張單。
前置需求¶
- 權限:採購模組底下「請購單(PPURCH)」的新增權限——本視窗實際寫入的是請購單,存檔走
ProgramClass.PPURCH。 - 基礎資料:轉單結果的完整度取決於下列資料的維護狀況——
| 資料 | 影響的結果 |
|---|---|
| 銷售訂單([ORMAST],未結案且明細有未請購數量) | 查詢出來的可轉明細;查無資料時清單為空 |
| 客戶主檔 | 透過客戶代號篩選訂單;客戶代號是查詢的必要條件 |
| 廠商主檔([SPDATA]) | 每列補上廠商代號後帶出廠商簡稱、稅別;轉單依廠商分組 |
| 廠商報價(已於報價單/採購單建立) | 自動帶出該料件對該廠商的最新單價(見欄位連動與附加功能) |
使用者參數 6009(請購部門) |
轉出的請購單主檔「請購部門」預設值 |
| 幣別匯率資料 | 請購單主檔的匯率(訂單頭匯率 ≤ 0 時退回 1) |
操作步驟¶
本視窗有兩個頁籤:訂單轉請購單(主畫面)與鎖住資料(別人正在編輯、暫時無法轉的訂單)。
步驟一 查詢可轉訂單¶
- 在上方客戶代號欄輸入或查詢客戶(右側唯讀框會顯示客戶簡稱)。
- 按
查詢。系統呼叫DARB_TUR_ODTOPP,撈出該客戶未結案、且明細「數量 − 請購數量 > 0」、明細未結案的訂單。 - 結果分兩處顯示:
- 訂單轉請購單頁籤:上半部格線是可轉的訂單(一張訂單一列),下半部格線是選取訂單的明細列。
- 鎖住資料頁籤:別人正在改、目前無法取得放行碼的訂單,僅供唯讀檢視(頁籤標題會顯示筆數)。
為什麼有些訂單在「鎖住資料」
轉單採用放行碼(鎖定)機制避免兩人同時轉同一張訂單。若某訂單正被他人開啟編輯,系統取不到放行碼,就把它列在「鎖住資料」頁籤、不放進可轉清單。等對方放開後重新查詢即可。
步驟二 勾選訂單、補廠商代號¶
- 在上半部訂單清單,逐列勾選 Selected 核取方塊;或用畫面左下角的
全選/全不選一次處理。 - 點選某張訂單後,下半部會顯示該訂單的明細列。逐列在 VendorCode(廠商代號) 欄輸入或查詢廠商。
- 廠商代號是轉單的關鍵:沒有廠商代號的明細列不會被轉出。
- 輸入廠商代號後,系統會自動帶出單價(詳見欄位連動與附加功能)。
- 其餘欄位(品號、品名、數量、單位、訂單單價、預定交期等)均為唯讀,沿用訂單明細的內容。
步驟三 儲存(轉單)¶
- 確認勾選與廠商代號都填妥後,按右下角
儲存。 - 存檔前系統會逐列檢視被勾選訂單的明細:凡廠商代號空白者,跳出提示「序號:N,沒有輸入廠商代號」。此提示僅作提醒——它不會中止存檔,沒填廠商代號的明細列會在轉單時被自動略過、不轉出。
- 接著系統依「同一張訂單內 × 同一廠商代號」分組,一組產生一張請購單:
- 請購單主檔帶入:請購日期=今天、請購人員=目前登入者、請購部門=參數
6009、倉儲/幣別/匯率取自訂單頭、廠商代號=該組廠商、稅別取自廠商主檔、轉入備註=「<訂單編號>之訂單」。 - 明細逐列帶入品號、品名、數量、單位、單價、廠商品號、預訂交期,並自動算匯率與金額。
- 請購單主檔帶入:請購日期=今天、請購人員=目前登入者、請購部門=參數
- 存檔成功後,視窗關閉,請購單畫面會自動導向剛建立的那張請購單。
列印¶
列印請購單尚未提供
VFP 舊版在存檔成功後會詢問「是否列印請購單」,可直接預覽列印剛轉出的請購單。新版 C# 目前尚未實作這段轉單後即時列印;如需列印,請改到請購單列印以轉入備註或單號查詢後列印。
欄位說明¶
查詢條件¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 客戶代號 | ✔ | 篩選要轉單的客戶;可用查詢鈕選取,右側顯示客戶簡稱(唯讀) |
訂單清單(上半部格線,皆唯讀)¶
| 欄位 | 說明 |
|---|---|
| Selected | 核取方塊;勾選代表此訂單要轉單 |
| 訂單編號 | 銷售訂單單號 |
| 受訂日期 | 訂單日期 |
| 客戶代號/客戶簡稱 | 該訂單客戶 |
| 客戶訂單號 | 客戶端的訂單號 |
| Warehouse(倉庫代號) | 訂單頭倉儲,轉入請購單主檔 |
| 幣別/匯率 | 訂單頭幣別與匯率,轉入請購單主檔 |
訂單明細(下半部格線)¶
| 欄位 | 可編輯 | 說明/格式/預設 |
|---|---|---|
| 序號 | — | 訂單明細序號 |
| VendorCode(廠商代號) | ✔ | 轉單依此分組;空白者不轉出。輸入後自動帶單價 |
| 客戶品號 | — | 帶入請購單明細的廠商品號欄 |
| 品號/品名 | — | 來自訂單明細 |
| 數量 | — | 待請購數量(來自訂單明細) |
| 單位 | — | 料件單位 |
| 單價 | — | 採購單價,由廠商代號自動帶出(可為 0) |
| 訂單單價 | — | 原銷售訂單單價,僅供參考 |
| 原幣金額/本幣金額 | — | 畫面上的金額欄;金額實際是在按儲存轉單時才於請購單明細上算出(SetAmount()),本視窗明細列本身不即時計算 |
| 預定出貨日(ETD) | — | 轉入請購單明細的「預訂交期」 |
| 預定交期(ETA) | — | 訂單明細交期,僅供參考 |
鎖住資料頁籤¶
| 欄位 | 說明 |
|---|---|
| 修改人員 | 目前正在編輯該訂單、導致無法放行的使用者 |
| 請購單號/請購人員/倉庫代號 | 該筆鎖住來源的相關資訊(唯讀) |
欄位連動與附加功能¶
這一節把「輸入某欄位/按某按鈕後系統會做什麼」全部列出,皆對應實際程式碼。
輸入客戶代號後按「查詢」¶
- 系統以客戶代號為條件呼叫轉單查詢預存程序
DARB_TUR_ODTOPP,查詢條件固定為:該客戶、訂單未結案、明細數量 − 請購數量 > 0、明細未結案。 - 回傳兩個結果集:第一個是無法取得放行碼的訂單(放進「鎖住資料」頁籤、唯讀),第二個是可轉的訂單明細(放進主畫面)。
- 主畫面把可轉明細去重成「訂單頭」清單(上半部)並建立「訂單編號 → 明細」對照,點不同訂單即切換下半部明細。
- 查詢完成後,若有可轉訂單,預設選取第一張並顯示其明細。
在明細列輸入「廠商代號(VendorCode)」後¶
- 系統立即以該料件品號+輸入的廠商代號,呼叫報價查詢(
DARB_BIZ_SPPDT,同時看採購單與報價單),抓該廠商對該料件的最新報價。 - 比對規則:在符合「廠商代號相同、且該列數量 ≥ 報價的最低採購量」的報價中,取最大的「最低採購量」那筆(量越大的階梯價通常越便宜),把它的單價自動填進該列單價。
- 若報價回傳的廠商代號與你輸入的略有不同(例如系統正規化後的代號),會以報價回傳的廠商代號回寫該列。
- 找不到符合的報價時,單價維持 0,不會報錯(可手動處理或先轉單後到請購單調整)。
全選/全不選按鈕¶
全選:把上半部訂單清單所有列的 Selected 設為勾選。全不選:把所有列的 Selected 取消。- 兩者只影響「要不要轉這張訂單」,不影響明細層的廠商代號。
按「儲存」時的檢核與轉單邏輯¶
- 缺廠商提醒(不擋存檔):逐一檢視被勾選訂單的明細,凡廠商代號空白者跳出提示「序號:N,沒有輸入廠商代號」。程式內部
AllowSave顯示完提示後一律回傳true,所以這個訊息只是提醒、不會中止存檔。 - 分組產生請購單:把每張勾選訂單的明細,剔除無廠商代號者(
NeedDelete=廠商代號空白)後,依「廠商代號」分組,一組對應一張請購單主檔(PPURMA)+其明細(PPURDE)。 - 主檔欄位帶值:公司代碼=1、請購日期=今天、請購人員=登入者、請購部門=參數
6009、倉儲/幣別取自訂單頭(幣別空白時退回本位幣)、匯率=訂單頭匯率(≤ 0 時退回 1)、廠商代號=該組廠商、稅別取自廠商主檔、轉入備註=「<訂單編號>之訂單」。 - 明細欄位帶值與金額計算:序號自動補 3 位流水號、品號/品名/數量/單位/單價沿用、廠商品號取自客戶品號、預訂交期取自 ETD;之後呼叫
SetFxRate()設匯率、SetAmount()算原幣/本幣金額。
存檔後回填請購單畫面¶
- 轉單成功後,本視窗把新建立的請購單主檔
pkid記下來。 - 呼叫端(請購單畫面的延伸功能)讀到這個
pkid後,會自動把請購單畫面導向剛轉出的那張單,方便立即檢視或續編。
VFP 與新版差異(製程別篩選)
VFP 舊版查詢面板有起始/截止訂單編號與製程別條件,並只撈該製程別的明細。新版改以客戶代號為主要查詢條件、不分製程別。對照舊系統時,這是刻意的查詢條件差異,不是缺漏。
常見問題¶
輸入客戶代號按查詢後,清單是空的?
請確認該客戶有未結案的訂單,且訂單明細還有未請購數量(數量 − 請購數量 > 0)、明細也未結案。已全數請購或已結案的訂單不會出現。另外若訂單正被他人編輯,會被歸到「鎖住資料」頁籤而非可轉清單。
按儲存時跳「沒有輸入廠商代號」是擋住了嗎?
沒有。這個提示不會中止存檔,只是告訴你哪幾列因為沒填廠商代號而會被略過。沒填廠商代號的明細列不會被轉出;若整張訂單都沒填,這張訂單等於沒有可轉內容(不會產生請購單)。要把這些列也轉出去,請在下半部明細逐列補上 VendorCode 後再存檔。
補了廠商代號,單價卻是 0?
單價來自廠商報價。系統只會帶「該品號+該廠商、且報價最低採購量 ≤ 本列數量」的最新報價。若該組合沒有報價,單價維持 0。請先到廠商報價建立報價,或先轉單、再到請購單手動填單價。詳見欄位連動與附加功能。
為什麼一張訂單轉出來變成好幾張請購單?
這是設計。轉單依「廠商代號」分組,同一張訂單若明細指定了不同廠商,就會各自成一張請購單(向不同廠商各下一張)。同廠商的多筆明細則合併在同一張請購單。
轉完想列印剛建立的請購單?
新版尚未提供「轉單後即時列印」。請到請購單列印,以轉入備註(「<訂單編號> 之訂單」)或請購單號查詢後列印。
某張訂單一直卡在「鎖住資料」?
代表該訂單正被「修改人員」欄顯示的使用者開啟編輯,系統取不到放行碼。請對方關閉後,重新按 查詢 即可。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/G-Purchasing/images/):
ormasttopp-step1.png— 主畫面:上半部訂單清單+下半部明細+客戶代號查詢列ormasttopp-step2.png— 明細列填入廠商代號、自動帶出單價的狀態ormasttopp-step3.png— 「鎖住資料」頁籤(顯示無法取得放行碼的訂單)