跳轉到

程式資訊

  • 程式 IDPI
  • 所屬子系統:E.營業收款
  • 狀態:stable

形式發票(Proforma Invoice)

功能簡介

「形式發票」(PI,Proforma Invoice)是出貨/報關前提供給客戶的預估性發票,列出本批交易的品號、數量、單價、金額與付款/交期等條件,作為客戶下單、開立信用狀(L/C)或安排付款的依據。它與商業發票(CI)結構相近,但 PI 是交易成立前的形式文件、不入帳,CI 才是出貨後的正式商業發票。

此表單由負責外銷的業務/船務人員維護:在主檔填客戶、PI 日期、幣別等抬頭資料,在明細逐列輸入品號與數量單價,系統即時加總總數量原幣總金額供核對。

資料表尚未部署

程式(ViewModel / Source / 存檔邏輯)已依 VFP 原版 PI(scx_ord.vcx) 還原完成,故狀態標為 beta;但底層資料表 pi_m / pi_d 的建表 DDL 尚待放行部署。在資料表建立前,本功能無法實際存取資料。下方操作步驟描述的是已實作的程式行為,供部署後對照使用。

前置需求

  • 權限:E.銷售訂單 → E-130 形式發票 的瀏覽/修改/列印權限。
  • 基礎資料:下列主檔/參數會影響欄位帶值與存檔,請先維護——
資料 影響什麼
客戶主檔(客戶資料 客戶代號輸入後自動帶客戶簡稱;存檔驗證客戶代號必填
品號主檔(品號資料 明細品號輸入後帶產品描述(中/英)與單位;查無品號會擋下並提示
幣別與匯率(匯率資料 幣別帶出當日賣出匯率;幣別小數位決定金額加總的進位位數
公司代碼設定(C101) 主檔公司代碼下拉清單
交易條件設定(C202) 交易條件下拉清單;存檔時由代碼帶出交易條件文字

操作步驟

新增一張 PI

  1. 從主選單開啟 E.銷售訂單 → 形式發票
  2. 點工具列 新增
  3. 在上方主檔區輸入抬頭資料:
    1. PINO(PI 單號):由使用者自行輸入(系統不自動編號),不可空白且不可與既有單號重複。
    2. 客戶代號:可直接輸入或按放大鏡查詢;輸入後右側自動顯示客戶簡稱
    3. PI日期:必填。
    4. 公司代碼幣別:由下拉選擇。選定幣別後系統自動帶入該日賣出匯率
  4. 切換到 明細資料編修 頁籤,逐列輸入明細(見欄位連動與附加功能):
    1. 品號:輸入後自動帶產品描述單位
    2. 數量單價:輸入後系統即時重算上方的總數量原幣總金額
    3. 新增列的序號會自動帶下一個流水號(3 位,如 001)。
  5. 視需要切換 頁首資料編修 頁籤補充報價單號/客戶訂單號/聯絡人/交易條件/預訂交期/商品名稱/頁首備註/頁尾備註/正麥(SHIPPING MARK)等資料。
  6. 儲存

    小技巧

    可用 Ctrl+S 快速儲存。

修改

  1. 用工具列的查詢或上下筆移動找到目標 PI。
  2. 修改 進入編輯狀態。
  3. 調整主檔或明細欄位後 儲存

    報價單號僅新增可改

    報價單號欄位只有在「新增/複製新增」狀態下可編輯;進入修改狀態後會變為唯讀(對應 VFP changeopmode 規則)。

刪除明細列

  1. 在明細將某列數量改為 0
  2. 存檔時系統自動把該列標記為刪除(不會寫入),等同移除該明細列。

列印

PI 報表規劃中

VFP 原版的 PI 列印報表 PI_P(SCX_ORDP) 尚未移植到新版。列印 功能在報表移植完成前暫不可用。

欄位說明

主檔(抬頭)

欄位 必填 說明/格式/預設
PINO PI 單號,使用者自行輸入(無自動編號),長度 20;空白或重複不可存檔
客戶代號 長度 10;輸入後帶客戶簡稱
客戶簡稱 由客戶代號自動帶出,唯讀、不存檔
PI日期 yyyy/MM/dd
公司代碼 下拉(C101 公司代碼設定)
幣別 下拉(幣別設定);變更後重帶匯率並影響金額加總小數位
匯率 格式 999.9999;選幣別後自動帶當日賣出匯率,可手改
總數量 系統加總,唯讀、不存檔
原幣總金額 系統加總,唯讀、不存檔
報價單號 長度 12;僅新增/複製狀態可改
客戶訂單號 長度 20
聯絡人 長度 30
交易條件 下拉(C202);存檔時由代碼帶出文字
預訂交期 yyyy/MM/dd
產品描述別 中文英文;決定明細帶哪種品號描述
商品名稱 長度 100
頁首備註/頁尾備註/正麥(SHIPPING MARK) 多行文字

明細(明細資料編修 頁籤)

欄位 必填 說明/格式/預設
序號 新增列自動帶 3 位流水號(如 001
客戶品號 長度 30
品號 輸入後帶產品描述與單位;查無品號會提示
產品描述 由品號+主檔產品描述別自動帶,可手改
單位 由品號自動帶,亦可從下拉清單選擇
數量 改變後即時重算總計;存檔時為 0 的列視為刪除
單價 格式 999,999.99999(6 位小數);改變後即時重算總計
報價單位 長度 4
備註 長度 30

欄位連動與附加功能

這一節列出「輸入某欄位/按某動作後系統會做什麼」,全部來自實際程式碼(PiViewModelPi_mSourcePi_dSourcePiSave 及 VFP PI class)。

主檔連動

  1. 輸入客戶代號 → 自動帶客戶簡稱 當你輸入或查詢選定客戶代號後,系統用 DescriptionHelper.GetCustomerName 取出客戶簡稱顯示在右側唯讀欄。移動到其他資料筆時也會重新帶一次簡稱。

    VFP 註解未還原的帶值

    VFP 原版在輸入客戶代號後,原本還會一併帶客戶的幣別/聯絡人/交易條件,但這些在 VFP 中已被註解停用,新版亦未還原。新版只帶客戶簡稱,其餘抬頭欄位需自行輸入。

  2. 選擇幣別 → 自動帶賣出匯率 選定幣別後,主檔上的匯率控件(SearchType=Sell)依PI日期抓當日賣出匯率填入匯率欄(對應 VFP 幣別.LostFocusU_BLRATE(幣別,'1','賣',PI日期))。匯率帶出後仍可手動覆寫。

  3. 幣別影響金額加總的小數位 變更幣別會觸發總金額重算。金額加總時的進位位數取自該幣別的小數位設定(OpenDbfTable.GetDecimalPlaces)——例如 TWD/JPY 取 0 位、其他幣別多為 2 位。

  4. 產品描述別影響全部明細描述 主檔的產品描述別(中文/英文)改變時,系統會對所有明細列重新呼叫 SetProduct,依新選的語別重帶每列的產品描述

  5. 報價單號僅新增可改 報價單號 欄位預設唯讀,只有在 新增複製新增 狀態才開放編輯(XAML DataTrigger 對應 VFP changeopmode)。

明細連動

  1. 輸入品號 → 帶產品描述與單位 在明細輸入品號離開欄位時,系統呼叫 SetProduct

    1. DescriptionHelper.GetInvent 取品號主檔;查無品號時跳出「查無品號 !!!」提示並停止帶值。
    2. 依主檔產品描述別:選「中文」帶中文描述、否則帶英文描述;若該語別描述為空,退而取 GetSKUDescription
    3. 帶入品號主檔的單位
  2. 數量/單價改變 → 即時重算總計 明細的數量單價變更後,系統重算上方主檔的總數量原幣總金額

    • 總數量 = Σ 各列數量。
    • 原幣總金額 = Σ ROUND(數量 × 單價, 幣別小數位)。
    • 加總時排除標記刪除(增刪修=D)的列與品號空白的列(對應 VFP sum加總FOR (增刪修<>'D') AND (NOT EMPTY(品號)))。
  3. 新增明細列自動編序號 新增一列明細且序號為空時,系統取現有最大序號 +1,格式化為 3 位(如 004)填入序號(對應 VFP son1fld=序號)。

  4. 數量為 0 的列視為刪除 明細的刪除條件是「數量=0」(NeedDeleteFunction 回傳 數量 == 0)。存檔時這類列會被標記為刪除而不寫入。

存檔時的處理(PiSave

儲存 時,系統依序:

  1. 必填與重複檢查

    • PINO 不可空白;且以 pino(排除自己的 pkid)查 pi_m單號重複則擋下並提示「資料重複」。
    • PI日期 不可空白。
    • 客戶代號 不可空白。
  2. 回填明細主鍵與序號 把每列明細的 pino 回填為主檔單號;序號仍為空的列補上流水號。

  3. 帶交易條件文字交易條件文字欄為空,由交易條件碼透過 GetTransactionMethod 帶出文字一併存檔(比照 CiSave)。

  4. 清掉 0 數量列 數量為 0 的明細列標記為刪除,不寫入資料庫。

PI 不掛審核、無轉傳票/沖帳

pi_m 沒有審核欄位,本表單不走簽核流程;PI 屬交易前的形式文件,也不轉傳票、不沖帳。VFP 原版的「複製報價單、搜尋客號帶單價、頁首備註自動產生」等按鈕在 VFP 中已被註解停用,新版亦未還原。

常見問題

存檔時提示要輸入 PINO/PI日期/客戶代號?

這三項是必填:PINO(單號,需自行輸入且不可重複)、PI日期客戶代號。請確認都已填寫;PINO 還會做重複檢查,與既有單號相同會被擋下。

輸入品號後產品描述/單位是空白?

產品描述與單位是從品號主檔帶出的。請確認:該品號存在於品號主檔(否則會跳「查無品號」)、且品號主檔有對應產品描述別(中文/英文)的描述與單位。改了主檔的「產品描述別」後,明細描述會自動依新語別重帶。

改了數量/單價,總數量或原幣總金額沒變?

請確認該列品號不為空白未被標記刪除——加總只計入有品號、未刪除的列。另外金額會依幣別小數位進位(如 TWD/JPY 取 0 位),小額差異可能來自進位。

選了幣別但匯率沒帶出來?

匯率是依PI日期抓當日賣出匯率。請先確認 PI 日期已填、且匯率主檔有該幣別當日(或可推算)的賣出匯率資料。匯率帶出後仍可手動修改。

報價單號為什麼改不了?

報價單號只有在「新增/複製新增」狀態可編輯;一旦進入「修改」狀態就會變唯讀。若要調整既有單的報價單號,請改用複製新增重建,或在新增當下填妥。

把明細數量改成 0,那一列會怎樣?

數量為 0 的明細列在存檔時會被視為刪除、不寫入資料庫,等同移除該列。若要保留該品項,請填入正確數量。

相關功能


需補截圖清單

以下截圖待資料表部署、功能 runtime 驗收後補拍(放 docs/E-SalesOrder/images/):

  1. pi-step1.png — 主檔抬頭區(PINO/客戶代號/PI日期/幣別/匯率/總數量/原幣總金額)
  2. pi-step2.png明細資料編修 頁籤(序號/品號/數量/單價等明細格線)
  3. pi-step3.png頁首資料編修 頁籤(報價單號/交易條件/預訂交期/備註/正麥)