程式資訊
- 程式 ID:
ORMAST - 所屬子系統:E.營業收款
- 狀態:stable
銷售訂單作業¶
功能簡介¶
「銷售訂單作業」是業務人員建立與維護銷售訂單(ORMAST)的核心單據,採主檔+明細結構:表頭記錄客戶、幣別、稅別、收付條件、出貨/請款地址等資訊;明細逐列登錄品號、數量、單價、預訂交期等。本表單位於銷售流程的最前端——訂單成立後,後續的出貨、發票、應收帳款與生產計畫都以這張訂單為來源。
表單同時內建多項自動化:輸入客戶自動帶出幣別/業務員/收付條件/稅別並重算匯率;輸入品號自動帶客戶報價單價;數量/單價/匯率變動即時重算稅額金額。另提供訂單簽核、信用簽核、訂單複製、結案(透過子表單)等延伸功能。
本頁的定位
本頁是銷售訂單作業的完整功能參考,涵蓋新增、修改、刪除、列印以及全部欄位連動與延伸功能;想先了解整體流程可從銷售模組首頁進入。
前置需求¶
- 權限:E.銷售 →
E-060 銷售訂單作業,依操作需要具備新增/修改/刪除/瀏覽/列印權限。金額相關欄位(單價、折扣%、原幣/本幣金額)另受允許檢視價格(AllowViewPrice)權限控管,無此權限者該些欄位自動隱藏。 - 基礎資料:表單帶值與檢核仰賴下列主檔,請先維護完成——
| 資料 | 影響什麼 |
|---|---|
| 客戶主檔(含集團、業務員、收付條件、稅別、幣別) | 輸入客戶後自動帶出的幣別、業務員、收付條件、稅別、聯絡人、電話與匯率 |
| 客戶產品報價(CUPDMA) | 明細輸入品號後自動帶入的單價(依客戶+品號+受訂日期+數量+幣別查報價) |
| 品號主檔(INVENT) | 品號的品名(中文描述)、單位 |
| 倉庫主檔 | 表頭倉庫;預設值取自使用者參數 3010 |
| 稅別與稅率設定 | 稅別說明、稅率(TAXPCT),用於計算稅額 |
| 匯率資料 | 外幣訂單的匯率,預設取受訂日期當天的「買入/帳列」匯率 |
| 收付條件、運送方式、付款方式、交易條件(C201/C202/C203) | 表頭對應下拉的說明文字 |
| 折讓規則(ARAllowan,選用) | 明細的回饋金額(AMTREBATE)計算 |
操作步驟¶
新增訂單¶
- 從主選單進入 E 銷售 → 銷售訂單作業,按工具列
新增。系統自動帶入下列預設值(詳見欄位說明):公司代碼1、幣別為本位幣、匯率1、訂單類別O、訂單別1、受訂日期為今天、倉庫取使用者參數3010。 - 於 Customer Code(客戶代號) 輸入或查詢客戶。選定後系統自動帶出幣別、業務員、收付條件、稅別、聯絡人、電話、交易/付款/運送方式,並依受訂日期重算匯率(詳見欄位連動與附加功能)。
- 視需要調整表頭 Currency(幣別)/Exchange Rate(匯率)、Tax Code(稅別)、Payment Term(收付條件)、Project Code(專案代號)、Customer Order No(客戶訂單號) 等欄位。
- 在下方明細格線逐列輸入:
- SKU(品號):輸入或按查詢鈕,系統自動帶出 品名,並依客戶報價帶入 單價。
- Quantity(數量):輸入後自動重算該列稅額與金額。
- Unit Price(單價):若報價未帶到或要調整可手動輸入,異動後重算金額。
- ETD/ETA(預訂交期):ETA 新增列預設為今天起 10 天後。
- 按
儲存(或工具列存檔)。系統將表頭與明細寫回資料庫並產生訂單號碼。
修改訂單¶
- 用工具列查詢/瀏覽功能定位到要修改的訂單,按
修改。 - 調整表頭或明細欄位;異動幣別/匯率/含稅別/折扣%/專案代號等會觸發自動重算或帶值(見欄位連動)。
- 按
儲存。
已出貨/已揀貨的明細列鎖定
明細列只要 已交數量(Shipped Quantity) 或 揀貨數量(Picked Quantity) 大於 0,該列即進入唯讀狀態,無法再修改。要結案此類明細請改用延伸功能 ⑤ 訂單結案子表單。
刪除¶
- 定位到目標訂單後按
刪除。 - 明細列若品號為空白會被視為空列自動略過(不寫回);訂單事件列(Detail1)若 SKU 為空白同樣略過。
列印¶
按工具列 列印,系統開啟 銷售訂單列印(SalesOrderPrint),並自動把目前這張訂單的訂單號碼帶入列印範圍的起訖(起=迄=目前訂單),可直接預覽/輸出。
欄位說明¶
表頭欄位¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| Sales Order No(訂單號碼) | 系統 | 唯讀,存檔後系統產生 |
| Order Date(受訂日期) | ✔ | 短日期;新增預設今天 |
| Warehouse(倉庫) | ✔ | 新增預設取使用者參數 3010 |
| Customer Code(客戶代號) | ✔ | 輸入後自動帶值,見欄位連動 |
| Group Company(集團代號) | — | 隨客戶帶出;若空白則回填為客戶代號 |
| Currency(幣別) | ✔ | 新增預設本位幣;隨客戶帶出 |
| Exchange Rate(匯率) | ✔ | 新增預設 1;幣別變動由匯率控件帶當日匯率 |
| Ship Via(運送方式碼) | — | 對應 C201 |
| Payment Method(付款方式碼) | — | 對應 C203 |
| Payment Term(收付條件號) | — | 隨客戶帶出,顯示說明 |
| Tax Code(稅別) | — | 隨客戶帶出,連動稅率與稅額 |
| Transaction Term(交易條件碼) | — | 對應 C202 |
| Project Code(專案代號) | — | 新增時輸入會把專案內品號帶入明細空列 |
| Customer Order No(客戶訂單號) | — | 客戶端的採購單號 |
| Is Closed(ORDERCLOSE) | — | 整張訂單結案旗標(Y/N) |
| Currency Amount(總原幣未稅) | 系統 | 唯讀,由明細加總;無檢視價格權限時隱藏 |
| Amount(總本幣未稅) | 系統 | 唯讀,由明細加總;無檢視價格權限時隱藏 |
明細欄位¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| Line No(序號) | 系統 | 列序號 |
| SKU(品號) | ✔ | 輸入後帶品名與報價單價 |
| SKUDescription(品名) | 系統 | 唯讀,隨品號帶出 |
| Stock(庫存) | — | 按鈕欄,開啟庫存查詢(見欄位連動) |
| Customer SKU(客戶品號) | — | 客戶端料號 |
| UOM(單位) | — | 下拉,來源為單位清單 |
| Quantity(數量) | ✔ | 異動後重算稅額金額 |
| Unit Price(單價) | — | 報價帶入,可手改;無檢視價格權限隱藏 |
| Discount Percent(折扣%) | — | 隨表頭 DISCOUPCT 帶下;無檢視價格權限隱藏 |
| CurrencyAmount(原幣未稅) | 系統 | 唯讀,計算結果 |
| Amount(本幣未稅) | 系統 | 唯讀,計算結果 |
| ETD | — | 出貨預定日 |
| ETA(預訂交期) | — | 新增列預設今天 + 10 天 |
| Notes(備註) | — | 最長 30 字 |
| Shipped Quantity(已交數量) | 系統 | 唯讀;> 0 時該列鎖定 |
| Picked Quantity(PICKEDQTY) | 系統 | 唯讀;> 0 時該列鎖定 |
| IsClosed(結案) | — | 該明細列結案旗標(Y/N) |
出貨別(隱藏預設)
新增明細列時,若出貨別為空白,系統自動填 1(這是 SetNewData 帶入的隱藏預設,畫面上未必呈現該欄)。
欄位連動與附加功能¶
這一節是本表單的重點。以下「當你…,系統會…」的行為全部來自程式碼。
表頭欄位連動¶
- 輸入客戶代號(Customer Code)時 — 系統以客戶代號查客戶設定,命中時自動帶入:客戶簡稱、集團代號、業務員(SALES1,業績比例 SALECOMPG1 設為 100)、收付條件號與其說明、幣別、聯絡人、聯絡電話、交易方式碼/交易條件碼、付款方式碼、運送方式碼、稅別(同時設為 TAXCODE1)。接著:
- 依稅別取稅率(TAXPCT1);特例:稅別為
FAL且倉庫為DI時稅率強制為 0。 - 若帶出的幣別為空白,回填為本位幣且匯率設 1;否則呼叫匯率服務,取受訂日期當天的「買入/帳列」匯率寫入 匯率。
- 若集團代號為空白,回填為客戶代號本身。
- 查無客戶時,上述欄位全部清空、幣別回本位幣。
- 依稅別取稅率(TAXPCT1);特例:稅別為
- 輸入集團代號(Group Company)時 — 系統帶出集團公司簡稱顯示於旁。
- 變動幣別或匯率時 — 由幣別控件(TsCurrency)依受訂日期帶當日匯率到匯率欄;匯率欄本身變動則觸發全表稅額金額重算(見下方「重算」)。
- 變動含稅別(含稅/未稅)或匯率時 — 系統呼叫稅額計算器(TaxCalculator)對整張訂單的主檔與所有明細重新計算稅額與金額。
- 變動表頭折扣%(DISCOUPCT)時 — 系統把折扣%同步寫到每一筆明細的 Discount Percent(DISCOUNTPG)。
- 新增模式下輸入專案代號(Project Code)時 — 系統依專案帶出該專案的品號清單,逐一填入明細中「品號為空白」的列(品號 + 品名),方便快速建立整批專案品項。
- 切換到不同訂單(換筆)時 — 系統清空庫存查詢面板,並重新取得專案名稱與稅別說明顯示。
明細欄位連動¶
- 輸入品號(SKU)時 — 透過
SKUBinding設定品號:自動帶出品名等品號描述;若品號真的有變動(與原值不同),呼叫客戶報價程序(DARB_BIZ_CUPDM,依客戶代號+品號+受訂日期+數量+幣別)帶回單價。 - 輸入數量(Quantity)時 — 透過
QuantityBinding寫入數量並立即呼叫稅額計算器重算該列的原幣/本幣未稅、含稅、稅額。 - 輸入單價(Unit Price)時 — 透過
UnitPriceBinding寫入單價並立即重算該列金額與稅額。 - 新增明細列(OnAddListener)時 — 系統把表頭物件掛到該明細列(作為稅率與計算的母單參考),確保新列也能正確套用含稅別與匯率。
- 按明細「Stock(庫存)」按鈕時 — 以該列品號帶入庫存查詢面板、執行查詢,並把右側支援面板切到「特殊查詢」頁,讓你不離開訂單就看該品號庫存。
- 明細列鎖定 — 已交數量或揀貨數量 > 0 的列,
CanEdit為 false,整列唯讀。
工具列延伸功能(ExtensionFunction)¶
| 功能 | 行為 |
|---|---|
| 延伸功能 ① | 開啟訂單簽核(OrderApprove)視窗,關閉後重新整理目前資料 |
| 延伸功能 ② | 開啟 Darb 編輯工具(Darbedittool) 視窗,關閉後重新整理 |
| 延伸功能 ③ | 詢問「Approve Automatically」。選「是」開啟信用簽核(OrderApprove_Credit)視窗並重新整理;選「否」則進入修改模式切換審核人員後存檔——若原審核人員為空白或已是 !! 開頭(未簽核狀態),寫入目前使用者完成簽核;否則前綴 !!(標記為取消簽核) |
| 延伸功能 ④ | 開啟訂單複製(OrderDuplicate)視窗,關閉後重新整理 |
| 延伸功能 ⑤ | 進入修改模式後開啟訂單結案子表單(Ormast_s),可逐列檢視揀/包/出貨進度並對「已部分出貨」的明細做結案 |
延伸功能 ⑤ 訂單結案子表單(Ormast_s)說明¶
- 子表單載入時自動以目前訂單查詢出每筆明細的揀貨、包裝、出貨數量(最多顯示三個出貨批次的日期欄),並計算未交(BO)數量。
- 只有管理員或備註含
SUPERVISOR/CLOSEORDER的使用者,存檔按鈕才會啟用。 - 按
Save:若整張訂單有任何出貨數量,系統把子表單上各列的結案旗標回寫到主表單明細並存檔;若完全沒有出貨,會提示「Line Item can't be closed until part of order ship out!」並取消,不允許結案。
訂單事件(Order Event,Detail1)¶
- 表單維護一份訂單事件清單(Detail1Data),可為各明細品號掛上「事件碼(Event Code)」(來源為訂單事件下拉清單,預設取清單第一筆)。
- 按
套用事件碼(EventCodeApply):把目前選定的事件碼套到所有已存在的事件列。 - 按
取得明細(GetDetail)(限修改/特殊修改狀態):為每一筆「尚未有事件列」的明細品號,新增一筆事件列(帶訂單號碼、明細 pkid、事件碼、SKU)。
其他附加功能¶
- 整箱檢查(FullCasePack) — 逐列檢查訂單數量是否為整箱包裝量(QuantityPerCarton)的整數倍;非整箱者列出
Line#序號 Full case pack is 整箱量訊息,全部符合則提示Each line is full case pack already!。 - 請款地址複製到出貨地址(CopyFromBillTo) — 一鍵把請款(Bill To)名稱、地址、城市、州、郵遞區號、國家複製到出貨(Ship To)對應欄位。
- 回饋金額計算(RebateCalculator,BLL) — 依客戶折讓規則(取最新生效日的扣率),對各明細的原幣未稅算出回饋金額(AMTREBATE);倉庫為
DI用 DI 扣率、其餘用倉庫扣率;特定客戶+品號組合排除不算(程式內建清單)。 - 列印來源(IPrintSource) — 列印時自動把目前訂單號碼帶入列印範圍起訖。
VFP 欄位事件對照
本表單對應的 VFP 舊版 scx_ord 程式碼不在本 repo,欄位事件描述以新版 C# 程式為準;若與舊版操作習慣有差異,以新版行為為主。
常見問題¶
輸入客戶後,幣別、業務員、稅別沒有自動帶出?
自動帶值是以客戶代號查客戶設定,查無資料時系統會把這些欄位清空並把幣別回設為本位幣。請確認:該客戶代號正確且客戶設定(含業務員、收付條件、稅別、幣別)已維護。
明細輸入品號後單價是 0?
單價來自客戶產品報價(CUPDMA),呼叫 DARB_BIZ_CUPDM,以客戶代號+品號+受訂日期+數量+幣別查報價。若該客戶+品號沒有有效報價、或受訂日期不在報價有效範圍內,就帶不到單價,需手動輸入。另外只有在品號真的變動(與原值不同)時才會去抓報價。
金額、稅額一直是 0,或改了匯率金額沒變?
金額與稅額由系統依數量、單價、匯率、含稅別自動計算。請確認已輸入數量與單價;變動含稅別或匯率會觸發整張訂單重算。若仍為 0,請檢查稅別/稅率是否正確設定。另外,單價、折扣%、金額欄位受「允許檢視價格」權限控管,無此權限時這些欄位會隱藏(並非數值為 0)。
某筆明細無法修改(變灰)?
明細列只要已交數量或揀貨數量大於 0 就會鎖定為唯讀。要對已部分出貨的明細結案,請用工具列的訂單結案子表單(延伸功能 ⑤),且操作者需具備管理員或 SUPERVISOR/CLOSEORDER 權限。
結案子表單按存檔卻跳出「until part of order ship out」?
這是設計上的保護:整張訂單若完全沒有任何出貨,不允許把明細結案。請先有實際出貨後再結案。
輸入專案代號沒有自動帶品號?
專案帶品號只在新增模式下作用,且只會填入明細中「品號為空白」的列。若明細已填滿或不在新增狀態,就不會帶入。
相關功能¶
需補截圖清單
以下截圖待 runtime 驗收後補拍(放 docs/E-SalesOrder/images/):
ormast-step1.png— 新增訂單後的表頭全貌(客戶帶值結果)ormast-step2.png— 明細格線(含 SKU 帶品名/單價、數量金額)ormast-step3.png— 工具列延伸功能(簽核/複製/結案入口)ormast-step4.png— 訂單結案子表單(Ormast_s,揀/包/出貨三批次欄)