程式資訊
- 程式 ID:
TICKA_DISC - 所屬子系統:P.發票管理
- 狀態:stable
存證折讓發票(折讓單)¶
功能簡介¶
「存證折讓發票」用來開立銷貨折讓單:當已開立的銷項發票需要部分退貨、折價或更正金額時,以一張折讓單記錄折讓的品項、金額與稅額,並回沖原發票的可折讓額度。會計/開票人員在發票開立之後使用本表單,是 P-Invoice 發票管理 模組中接在 銷項發票(發票開立) 之後的後續處理單據。
操作核心是兩段:先輸入原始發票號碼把該張發票的明細讀進來,再從中勾選要折讓的品項,按 匯入 帶入折讓明細;系統依數量、單價、課稅別自動算出折讓金額與折讓稅額(詳見欄位連動與附加功能)。
目前只做銷貨折讓(財務類別 22)
新增時系統把選擇表單(財務類別)固定帶 22(銷貨折讓),下拉清單也只提供這一項(財務類別Source 以 GetFinanceType("R").Where(Code == "22") 過濾)。VFP 原始程式中的「進貨折讓(63)」自 2020/08/28 起即被刻意註解、不啟用,新版 C# 沿用此決策。因此本頁所述皆為銷貨折讓情境:買方=客戶、賣方=本公司。
前置需求¶
- 權限:P.發票管理 →
P-110 存證折讓發票的瀏覽/新增/修改/刪除/列印權限。 - 基礎資料:折讓單能否正確帶值,取決於下列主檔——
| 資料 | 影響的結果 |
|---|---|
| 原始銷項發票(已開立、課稅別非作廢/非空白) | 輸入發票號碼後可讀入的明細來源;課稅別為作廢/空白時擋讀入 |
| 客戶主檔(CUDATA:統一編號、發票抬頭、請款地點、公司地點、公司電話) | 輸入客廠部代號後自動帶出的買方統編/名稱/地點/電話 |
| 公司主檔(CODATA:公司代碼 1 的統一編號、公司名稱、發票/公司地點) | 新增時自動帶出的賣方統編/名稱/地點 |
| 品號主檔(INVENTTL:品名、單位) | 折讓明細輸入品號後帶出的品名/單位 |
表訂稅率(系統參數,InvoiceHelper.表定稅率) |
應稅明細的稅額=原幣未稅 × 表訂稅率 ÷ 100 |
| 作廢原因代碼表(C284) | 作廢原因下拉清單來源 |
操作步驟¶
新增折讓單¶
- 按工具列
新增。系統自動(AfterAddNew):- 帶入折讓日期=今天、公司代碼=1、選擇表單(財務類別)=
22。 - 依公司代碼 1 從公司主檔(CODATA)帶出賣方統編/賣方名稱/賣方地點(
GetCompany)。 - 把既有折讓明細列的課稅別預設為
1(應稅)。
- 帶入折讓日期=今天、公司代碼=1、選擇表單(財務類別)=
- 在折讓日期輸入折讓開立日,並在帳款期別填入該筆折讓要歸屬的年/月(存檔時兩者皆為必填)。
- 在客廠部代號輸入客戶代號。系統自動帶出該客戶的買方統編/名稱/地點/電話,並在收付客廠號為空時一併帶入客廠部代號(見客廠部代號 → 帶出買方資料、補收付客廠號)。
- 在畫面下方的發票號碼欄輸入原始發票號碼,系統把該發票的所有明細讀進下半部的「原始發票」清單,並自動在折讓明細補一筆「其他折讓」列。
- 在「原始發票」清單逐列勾選要折讓的品項(或用
全選/取消全選),按匯入把勾選列帶進上方折讓明細格線。 - 視需要在折讓明細逐列修改數量/單價/課稅別,系統即時重算原幣未稅與稅額。
- 填寫折讓原因、備註等說明欄位。
- 按工具列
存檔。存檔前系統檢核日期、期別、公司、表單、交易者等必填欄位(見存檔前檢核),通過後寫入並產生折讓單號。
折讓金額由系統算、不可手 key
折讓金額/折讓稅額/小計都是唯讀(系統產生色),由折讓明細加總而來。要改金額請改明細的數量、單價或課稅別。
修改 / 刪除¶
- 用工具列查詢或
搜尋叫出既有折讓單。 - 按
修改進入編輯,調整明細後存檔。把某明細列的發票號碼清空即代表刪除該列(存檔時標記為刪除、不寫入)。 - 按
刪除可刪整張折讓單(受關帳日與權限限制)。
列印¶
開啟折讓單後按 列印,輸出折讓單報表(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):全部取消勾選。
匯入 → 把勾選列帶進折讓明細¶
按 匯入(LoadCommand → LoadExecute,對應 VFP「讀入鈕」):
- 取所有已勾選的原始發票列。
- 先做交易者檢核:主檔客廠部代號為空就帶入勾選列的客廠部代號;若主檔已有值且與勾選列不同,跳「交易者資料有誤」並中止。
- 把每筆勾選列寫入折讓明細:優先填入目前品名為空的明細列(
SetData:帶入發票號碼、發票日期、課稅別、品號、品名、數量、單價、原幣未稅、稅額);若沒有空白列則新增一列。
數量 / 單價 / 原幣未稅 / 課稅別 → 重算金額¶
折讓明細的金額連動(Tickadisc_dBindingSource,對應 VFP 計算未稅/txt數量.Valid/txt單價.Valid/txt原幣未稅.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/):
ticka_disc-step1.png— 新增後的主檔畫面(折讓日期、客廠部代號、買賣方資料)ticka_disc-step2.png— 輸入發票號碼後讀入的「原始發票」清單(含已折讓金額欄)ticka_disc-step3.png— 勾選並按「匯入」後帶入的折讓明細格線ticka_disc-step4.png— 折讓金額/折讓稅額/小計(系統產生的唯讀欄)與作廢原因/作廢日期區