跳轉到

程式資訊

  • 程式 IDTICKA_DISC
  • 所屬子系統:P.發票管理
  • 狀態:stable

存證折讓發票(折讓單)

功能簡介

「存證折讓發票」用來開立銷貨折讓單:當已開立的銷項發票需要部分退貨、折價或更正金額時,以一張折讓單記錄折讓的品項、金額與稅額,並回沖原發票的可折讓額度。會計/開票人員在發票開立之後使用本表單,是 P-Invoice 發票管理 模組中接在 銷項發票(發票開立) 之後的後續處理單據。

操作核心是兩段:先輸入原始發票號碼把該張發票的明細讀進來,再從中勾選要折讓的品項,按 匯入 帶入折讓明細;系統依數量、單價、課稅別自動算出折讓金額折讓稅額(詳見欄位連動與附加功能)。

目前只做銷貨折讓(財務類別 22)

新增時系統把選擇表單(財務類別)固定帶 22(銷貨折讓),下拉清單也只提供這一項(財務類別SourceGetFinanceType("R").Where(Code == "22") 過濾)。VFP 原始程式中的「進貨折讓(63)」自 2020/08/28 起即被刻意註解、不啟用,新版 C# 沿用此決策。因此本頁所述皆為銷貨折讓情境:買方=客戶、賣方=本公司。

前置需求

  • 權限:P.發票管理 → P-110 存證折讓發票 的瀏覽/新增/修改/刪除/列印權限。
  • 基礎資料:折讓單能否正確帶值,取決於下列主檔——
資料 影響的結果
原始銷項發票(已開立、課稅別非作廢/非空白) 輸入發票號碼後可讀入的明細來源;課稅別為作廢/空白時擋讀入
客戶主檔(CUDATA:統一編號、發票抬頭、請款地點、公司地點、公司電話) 輸入客廠部代號後自動帶出的買方統編/名稱/地點/電話
公司主檔(CODATA:公司代碼 1 的統一編號、公司名稱、發票/公司地點) 新增時自動帶出的賣方統編/名稱/地點
品號主檔(INVENTTL:品名、單位) 折讓明細輸入品號後帶出的品名/單位
表訂稅率(系統參數,InvoiceHelper.表定稅率 應稅明細的稅額=原幣未稅 × 表訂稅率 ÷ 100
作廢原因代碼表(C284) 作廢原因下拉清單來源

操作步驟

新增折讓單

  1. 按工具列 新增。系統自動(AfterAddNew):
    • 帶入折讓日期=今天、公司代碼=1、選擇表單(財務類別)22
    • 依公司代碼 1 從公司主檔(CODATA)帶出賣方統編/賣方名稱/賣方地點GetCompany)。
    • 把既有折讓明細列的課稅別預設為 1(應稅)。
  2. 折讓日期輸入折讓開立日,並在帳款期別填入該筆折讓要歸屬的年/月(存檔時兩者皆為必填)。
  3. 客廠部代號輸入客戶代號。系統自動帶出該客戶的買方統編/名稱/地點/電話,並在收付客廠號為空時一併帶入客廠部代號(見客廠部代號 → 帶出買方資料、補收付客廠號)。
  4. 在畫面下方的發票號碼欄輸入原始發票號碼,系統把該發票的所有明細讀進下半部的「原始發票」清單,並自動在折讓明細補一筆「其他折讓」列。
  5. 在「原始發票」清單逐列勾選要折讓的品項(或用 全選取消全選),按 匯入 把勾選列帶進上方折讓明細格線。
  6. 視需要在折讓明細逐列修改數量/單價/課稅別,系統即時重算原幣未稅與稅額。
  7. 填寫折讓原因備註等說明欄位。
  8. 按工具列 存檔。存檔前系統檢核日期、期別、公司、表單、交易者等必填欄位(見存檔前檢核),通過後寫入並產生折讓單號

折讓金額由系統算、不可手 key

折讓金額/折讓稅額/小計都是唯讀(系統產生色),由折讓明細加總而來。要改金額請改明細的數量、單價或課稅別

修改 / 刪除

  1. 用工具列查詢或 搜尋 叫出既有折讓單。
  2. 修改 進入編輯,調整明細後 存檔。把某明細列的發票號碼清空即代表刪除該列(存檔時標記為刪除、不寫入)。
  3. 刪除 可刪整張折讓單(受關帳日與權限限制)。

列印

開啟折讓單後按 列印,輸出折讓單報表(VFP 對應報表程式 TICKA_DISC_P / SCX_TICKP)。

作廢

於畫面最下方選作廢原因(下拉取自代碼表 C284),選定後系統自動把作廢日期帶成當天(見作廢原因 → 自動帶作廢日期)。

規劃中:取得附件 / 顯示附件

VFP 版本提供「取得附件」(選檔上傳、檢查附件大小上限、檔名自動命為「折讓_<折讓單號>.副檔名」)與「顯示附件」(開啟數位目錄下的附件檔)兩個按鈕。新版 C# 主檔保留附件檔名欄位,但對應的上傳/開檔按鈕尚未提供,目前只能手動填入附件檔名。

欄位說明

主檔(上半部)

欄位 必填 說明/格式/預設
折讓單號 系統存檔後產生,唯讀
選擇表單(財務類別) 新增固定 22 銷貨折讓,下拉僅此一項
折讓日期 短日期;新增預設今天
帳款期別 年/月(YYYY/MM);需手動輸入(存檔時檢核必填)
客廠部代號 客戶代號(CuspSearch 查詢欄);輸入後帶出買方資料、補收付客廠號
收付客廠號 收付款者代號;客廠部代號輸入時若空白自動帶同值
折讓原因 文字(最長 60)
備註 文字(最長 60)
買方統編/名稱/地點/電話 由客廠部代號(客戶主檔)帶出
賣方統編/名稱/地點 新增時由公司主檔(公司代碼 1)帶出,唯讀
折讓金額 系統產生(唯讀)=明細原幣未稅合計
折讓稅額 系統產生(唯讀)=明細稅額合計
小計 唯讀=折讓金額+折讓稅額
轉出備註 唯讀,轉傳票/帳款時的備註
附件 附件檔名(上傳鈕規劃中)
作廢日期 選作廢原因後自動帶當天
作廢原因 下拉取自代碼表 C284;選定後帶作廢日期

折讓明細(中段格線)

欄位 必填 說明/格式/預設
序號 系統流水
發票號碼 該折讓對應的原始發票;清空=刪除此列
發票日期 唯讀,隨發票帶入
課稅別 下拉 1 應稅 / 2 零稅率 / 3 免稅(進項發票課稅別清單);新增預設 1
品號 SKU 查詢欄;輸入後帶出品名/單位
品名 唯讀,由品號帶出;讀入發票時補的列品名固定「其他折讓」
數量 修改即重算原幣未稅與稅額
單價 修改即重算原幣未稅與稅額
原幣未稅 =四捨五入(數量 × 單價);可手動覆寫並回算稅額
稅額 應稅=四捨五入(原幣未稅 × 表訂稅率 ÷ 100),零稅/免稅為 0
單位 下拉,由品號帶出(UOM 清單)
摘要 備註文字

原始發票清單(下段,讀入後勾選用)

欄位 說明
勾選 勾選要帶入折讓明細的列(IsSelected
發票號碼/發票日期/客廠部代號/客廠部簡稱/統一編號 來源發票基本資料,唯讀
原序號/品號/品名/數量/單價/原幣未稅/稅額/課稅別 來源發票明細,唯讀
未稅合計/稅額合計 該發票銷售金額/稅額合計(取首列)
已折讓金額/已折讓稅額 此發票歷史上折讓過的未稅與稅額合計(避免重複折讓)

欄位連動與附加功能

這一節把「輸入某欄位/按某按鈕後系統做什麼」逐條列出,皆來自實際程式碼(ViewModel、Source、VFP 欄位事件)。

帳款期別需手動輸入

與 VFP 版差異

VFP 折讓日期.Valid 會把帳款期別自動設成折讓日期的前 7 碼(年/月)。新版 C# 未沿用此連動——折讓日期變更時不會自動帶帳款期別,請自行在帳款期別欄填入歸屬年/月。存檔時系統會檢核帳款期別必填。

客廠部代號 → 帶出買方資料、補收付客廠號

當你在客廠部代號輸入客戶代號(客廠部代號Binding 的 setter,對應 VFP 客廠部代號.代號.Valid):

  • 收付客廠號為空,系統自動把它帶成同一個客廠部代號。
  • 因財務類別為 22(銷貨折讓),系統以客戶代號查客戶主檔(CUDATA),帶出:
    • 買方統編=客戶統一編號。
    • 買方名稱=有「發票抬頭」用發票抬頭,否則用客戶簡稱。
    • 買方地點=有「請款地點」用請款地點,否則用公司地點。
    • 買方電話=客戶公司電話。

輸入原始發票號碼 → 讀入該發票明細

當你在畫面下方的發票號碼欄輸入發票號碼(VM 的 發票號碼 setter 觸發 取得發票(),對應 VFP 發票號碼.LostFocus):

  • 系統以 發票號碼=…vwbd_ticka 視圖,讀回該發票的明細(發票號碼、發票日期、客戶代號/簡稱、統一編號、課稅別、原序號、品號、品名、數量、單價、原幣未稅、稅額、未稅小計、稅額小計),顯示在下方「原始發票」清單。
  • 查無資料,或該發票課稅別是作廢/空白,跳出「請輸入正確的發票號碼」並中止。
  • 在編輯狀態下(非瀏覽),系統會比對主檔客廠部代號與發票客戶代號:主檔客廠部代號為空就帶入發票的客戶代號;不同則跳「交易者資料有誤」並中止。
  • 系統會自動在折讓明細補一筆「其他折讓」列(品名固定「其他折讓」、數量 1、單價 0),供你填入發票品項以外的折讓金額;若明細已有「其他折讓」列則不重複新增。

已折讓查詢 → 帶出該發票歷史折讓額

讀入發票時,系統另以 vwbd_ticka 依折讓單號彙總查詢(Get已折讓),算出此發票歷史上已折讓的未稅與稅額合計,填入原始發票清單首列的已折讓金額/已折讓稅額欄。用來提醒此發票還剩多少可折讓、避免超折。

全選 / 取消全選 → 批次勾選

  • 全選SelectAllExecute):把原始發票清單所有列的勾選打開。
  • 取消全選UnselectAllExecute):全部取消勾選。

匯入 → 把勾選列帶進折讓明細

匯入LoadCommandLoadExecute,對應 VFP「讀入鈕」):

  • 取所有已勾選的原始發票列。
  • 先做交易者檢核:主檔客廠部代號為空就帶入勾選列的客廠部代號;若主檔已有值且與勾選列不同,跳「交易者資料有誤」並中止。
  • 把每筆勾選列寫入折讓明細:優先填入目前品名為空的明細列SetData:帶入發票號碼、發票日期、課稅別、品號、品名、數量、單價、原幣未稅、稅額);若沒有空白列則新增一列。

數量 / 單價 / 原幣未稅 / 課稅別 → 重算金額

折讓明細的金額連動(Tickadisc_dBindingSource,對應 VFP 計算未稅txt數量.Validtxt單價.Validtxt原幣未稅.Valid):

  • 數量單價SetAmount()原幣未稅=四捨五入(數量 × 單價);課稅別為應稅時稅額=四捨五入(原幣未稅 × 表訂稅率 ÷ 100),否則稅額為 0。
  • 直接改原幣未稅 → 依課稅別重算稅額(應稅才算,否則 0)。
  • 品號 → 透過 DescriptionHelper.SetISKU 帶出品名/單位。

主檔的折讓金額/折讓稅額為明細加總、小計=折讓金額+折讓稅額,皆唯讀。

作廢原因 → 自動帶作廢日期

當你在作廢原因選定一筆(作廢原因Binding 的 setter,下拉來源代碼表 C284),且作廢原因非空白時,系統自動把作廢日期帶成今天。

存檔前檢核(allowsave)

VFP allowsave 在存檔前逐項檢核(新版沿用同等規則):

  • 主檔必填:折讓日期、帳款期別、公司代碼、財務類別(執行表單)、客廠部代號、收付客廠號任一缺漏即擋存並提示。
  • 存檔時把幣別設為指定幣別、匯率固定 1
  • 逐列檢明細:發票號碼為空的列標記刪除;有資料的列課稅別必填原幣未稅與「數量×單價」差異不得超過 1 元;應稅列稅額與「原幣未稅×表訂稅率」差異不得超過 1 元,零稅/免稅列稅額強制 0。
  • 通過後把明細未稅、稅額加總回寫主檔的折讓金額、折讓稅額。

附件(取得附件 / 顯示附件)

規劃中

VFP 的「取得附件」(選檔上傳、檢查附件大小上限 _prgpar(8)、檔名自動命為「折讓_<折讓單號>.副檔名」、上傳後立即存檔)與「顯示附件」(開啟數位目錄下的附件檔)按鈕,新版 C# 尚未提供。目前主檔僅保留附件檔名欄位供手動輸入。

常見問題

輸入發票號碼後跳「請輸入正確的發票號碼」?

可能是:該發票號碼在 vwbd_ticka 查不到資料;或該發票的課稅別是作廢/空白。請確認發票確實已開立、未作廢,且號碼正確。

按匯入或讀入發票時跳「交易者資料有誤」?

折讓單主檔的客廠部代號已有值,且與你要匯入的發票(或勾選列)的客戶代號不同。一張折讓單只能對同一個交易者,請改用相同客戶的發票,或先清掉主檔客廠部代號重來。

折讓金額/折讓稅額是 0,改不動?

這兩個欄位是系統產生、唯讀,由折讓明細加總而來。請回到折讓明細修改數量、單價或課稅別,金額會自動重算。零稅率/免稅課稅別的稅額一定是 0。

稅額算出來和我預期差一點?存檔被擋?

存檔檢核只允許 1 元以內的差異:原幣未稅須約等於數量×單價、應稅稅額須約等於原幣未稅×表訂稅率。差異超過 1 元會擋存。請確認數量、單價、課稅別正確,必要時直接改原幣未稅讓系統回算稅額。

為什麼下拉「選擇表單」只有銷貨折讓、沒有進貨折讓?

這是刻意設計。進貨折讓(財務類別 63)自 2020/08/28 起停用,新增時系統固定帶 22 銷貨折讓。詳見頁首功能簡介的說明。

買方/賣方資料沒帶出來?

買方資料來自客戶主檔(CUDATA),要先輸入正確的客廠部代號;賣方資料來自公司主檔(CODATA,公司代碼 1),於 新增 時帶入。若客戶或公司主檔對應欄位(統編、抬頭、地點)為空,帶出的欄位也會是空白。

讀入發票後,明細多了一筆「其他折讓」是什麼?

這是系統自動補的列(數量 1、單價 0),讓你登錄發票品項以外的折讓金額(例如整單折價)。不需要就把它的金額留 0、或清掉發票號碼讓存檔時略過。

相關功能


需補截圖清單

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

  1. ticka_disc-step1.png — 新增後的主檔畫面(折讓日期、客廠部代號、買賣方資料)
  2. ticka_disc-step2.png — 輸入發票號碼後讀入的「原始發票」清單(含已折讓金額欄)
  3. ticka_disc-step3.png — 勾選並按「匯入」後帶入的折讓明細格線
  4. ticka_disc-step4.png — 折讓金額/折讓稅額/小計(系統產生的唯讀欄)與作廢原因/作廢日期區