程式資訊
- 程式 ID:
TICK3 - 所屬子系統:P.發票管理
- 狀態:stable
零稅率主檔¶
功能簡介¶
「零稅率主檔」用來建立並維護零稅率(外銷/出口)銷售憑證的每月清單,是營業稅 401 申報中「零稅率銷售額」的明細來源。每一筆代表一張零稅率發票或一筆外銷銷貨,記錄字軌號碼、客戶、品名、數量、金額、外銷方式,以及是否經海關出口、出口報單號等通關資訊。
使用者主要是會計/稅務人員。實務上有兩種建檔方式:
- 由出貨單轉入:透過工具列的
轉入功能,從本期出貨資料(出貨單 Trsama)中自動抓出零稅率(稅別T31_B/T32_B)的銷貨,整批帶入本檔(最常用)。 - 手動新增:直接逐筆
新增一張零稅率憑證。
建檔後,本檔資料供零稅率/免稅銷售匯出與 401 銷項申報彙整,並可用列印頁輸出「零稅率銷售額清單」報送國稅局。
與「三聯式發票」無關
本表單程式代號雖列在 P-Invoice 模組,但程式真實用途為零稅率主檔(VFP 原始類別 tick3 的 alias_r0 = "零稅率主檔"、ProgramClass.TICK3),並非一般三聯式發票開立。早期 stub 標題「三聯式發票」為誤植,本頁以程式碼為準。
前置需求¶
- 權限:P.發票 →
P-010 零稅率主檔的瀏覽/新增/修改/刪除/列印權限;轉入另需該表單的「其他1(轉入)」權限(IsOther1,VFP 為IS_可其他1)。 - 基礎資料:下列主檔/參數會影響本表單的帶值與驗證——
| 資料 | 影響什麼 |
|---|---|
| 客戶主檔(含統一編號) | 輸入客戶代號透過客戶查詢控件自動帶客戶簡稱;轉入 帶客戶資料 |
| 出貨單(Trsama,稅別 T31_B/T32_B) | 轉入 的資料來源;無零稅率出貨則轉入查無資料 |
| 憑證類別代碼(C2142) | 憑證類別下拉清單(CMB_C2142)與右側說明 |
| 外銷方式代碼(C225) | 外銷方式下拉清單與說明 |
| 發票字軌字頭規則 | 轉入 判定哪些字軌號碼屬於零稅率(見轉入字頭篩選) |
操作步驟¶
一、手動新增一筆零稅率憑證¶
- 按工具列
新增。系統自動帶入(AfterAddNew):- 公司代碼 =
1 - 所屬年月 = 目前發票所屬年月(
DateTimeWrapper.GetInvoiceYearMonth())
- 公司代碼 =
- 選擇憑證類別(下拉,右側自動顯示該代碼的說明文字)。
- 輸入發票日期(4 碼月日,格式
MMDD)與字軌號碼。- 憑證類別為
36時可不填字軌號碼;其餘類別字軌號碼為必填。
- 憑證類別為
- 輸入客戶代號(具客戶查詢功能),系統自動帶出客戶簡稱。視需要補填統一編號。
- 填寫品名、數量、金額、外銷方式。
- 設定經海關(
Y/N),並依值填寫通關欄位:- 經海關
Y:填報單類別、出口報單號。 - 經海關
N:填其他證件、其他證件號(如「扣抵聯」「國際快遞」)。
- 經海關
- 輸入輸出日期與備註。
- 按
儲存。系統依存檔檢核逐項驗證後寫入。
二、由出貨單批次轉入(建議做法)¶
- 按工具列
轉入,開啟「零稅率轉入」視窗(Ticka_e2)。 - 輸入或確認所屬年月(預設本期
GetInvoiceYearMonth),執行查詢。系統從本期出貨單抓出零稅率銷貨,依字軌字頭篩掉非零稅率者後列出可轉清單。 - 在清單中勾選要轉入的列(字軌號碼不可為空白)。
- 按確定,系統將勾選列整批寫回零稅率主檔:已存在相同字軌號碼者更新(
SysRowStatus = E),不存在者新增並自動產生鍵值,並在轉入備註寫入「轉入日期,使用者」。 - 視窗關閉後回到本表單,系統自動把剛轉入的那筆定位顯示出來(
NavigateAsync(Pkid)),必要時再修改補欄位。
轉入後再補資料
轉入只帶入出貨單已有的欄位(字軌、客戶、數量、金額、外銷方式、通關資訊等)。品名等若需補充,可在轉入後用 修改 編輯。
三、修改 / 刪除¶
- 用工具列上一筆/下一筆或查詢定位到目標資料。
- 按
修改編輯欄位,或按刪除移除整筆。 - 鍵值、Key ID(pkid)、轉入備註為系統產生欄位,唯讀不可改。
四、列印¶
- 按
列印,開啟零稅率清單列印頁(Tick3PrintViewModel)。 - 確認所屬年月(自動帶入目前主檔的所屬年月)與受文者(預設「財政部臺灣省北區國稅局中壢分局(稽徵所)」,可改)。
- 執行列印。
列印明細取數尚在整備
列印頁目前已可帶入所屬年月與受文者並開啟表單,但實際明細的取數(TWORK_RPT_TICK3)與報表版型在新版 C# 中仍以註解保留、尚未啟用(HaveReportData 只檢查所屬年月)。完整清單列印請以實機驗收為準。
欄位說明¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 鍵值 | 系統 | 唯讀(紅字);最長 22 碼;手動新增由系統產生,轉入時依「發票年度+月+日+3 碼流水」自動編 |
| 公司代碼 | ✔ | 新增時預設 1;存檔時不可為 0 |
| 所屬年月 | ✔ | 發票所屬年月(InvoiceYearMonth 遮罩);新增預設目前所屬年月 |
| 憑證類別 | ✔ | 下拉(代碼 C2142 / CMB_C2142),右側顯示說明 |
| 發票日期 | — | 4 碼月日(MMDD,MaxLength=4) |
| 字軌號碼 | 條件 | 憑證類別 36 以外為必填;轉入時檢查不得空白 |
| 客戶代號 | — | 具客戶查詢功能;帶出客戶簡稱 |
| 客戶簡稱 | — | 由客戶代號帶入,可手改 |
| 統一編號 | — | 8 碼;存檔時做統編檢核(CheckTaxID(InvoiceArea.T)) |
| 品名 | — | 最長 120 字 |
| 數量 | — | 數值;PlaceEnum=Zero(顯示為整數、不帶小數位) |
| 外銷方式 | 建議 | 下拉(代碼 C225);轉入時依稅別自動帶(見下節)。VFP 原版列為必填,新版存檔未強制擋(見存檔檢核) |
| 經海關 | — | Y/N(YesNoComboBox);連動通關欄位的填寫(VFP 自動鎖定,新版未鎖,見下節) |
| 報單類別 | 條件 | 經海關 = Y 時必填;最長 2 碼 |
| 出口報單號 | 條件 | 經海關 = Y 時必填;最長 18 碼 |
| 其他證件 | — | 經海關 = N 時填(如「扣抵聯」「國際快遞」);最長 24 字 |
| 其他證件號 | — | 經海關 = N 時填;最長 14 字 |
| 金額 | ✔ | 本幣整數(PlaceEnum=Local);不得為 0 |
| 輸出日期 | ✔ | 日期(ShortDate,yyyy/MM/dd) |
| 備註 | — | 最長 50 字 |
| 轉入備註 | 系統 | 唯讀(系統色);轉入時自動寫「轉入日期,使用者」 |
欄位連動與附加功能¶
【本節整理本表單所有「輸入某欄位/按某按鈕後系統會做什麼」,皆取自實際程式碼(Tick3ViewModel、Tick3Save、Ticka_e2Bll、TmpTick3)與 VFP 原版 tick3.prg。】
新增時的預設值(AfterAddNew)¶
當你按 新增,系統自動帶入:
- 公司代碼 =
1 - 所屬年月 = 目前發票所屬年月(
DateTimeWrapper.GetInvoiceYearMonth())
其餘欄位維持空白/0,由你逐項填寫。
憑證類別 → 右側帶出說明文字¶
當你在憑證類別下拉選擇代碼,右側唯讀文字框會即時顯示對應的說明(綁定下拉 SelectedItem.Description,來源代碼表 C2142)。
輸入客戶代號 → 自動帶客戶簡稱¶
客戶代號使用客戶查詢控件(TsSearchTextBox+CustomerSearch 樣式)。當你輸入或從查詢選定客戶代號,系統會把該客戶的客戶簡稱帶入(控件 Description 綁定 客戶簡稱)。
VFP 版另會帶統一編號/反查客戶,新版未移植
VFP 原版 客戶代號.LostFocus 會同時用 U_SEEKNM('SK_CUDATA',…) 帶出客戶簡稱與統一編號;統一編號.LostFocus 會在客戶簡稱空白時,用統編反查客廠部資料帶回客戶代號/簡稱。新版 C# 只在客戶查詢控件帶客戶簡稱,不會自動帶或反查統一編號——統編需手動輸入。若需此邏輯請以實機為準。
統一編號檢核¶
- 新版(存檔時):按
儲存時呼叫Util2017.CheckTaxID(InvoiceArea.T, 統一編號)做統編合法性檢核,不合法擋存。 - VFP 版(欄位 Valid):原版另在
統一編號.Valid即時以U_CHKID(value,'T1')檢核。新版改為集中在存檔時檢核,輸入當下不即時擋。
經海關(Y/N)→ 通關欄位¶
- VFP 原版:切換經海關(
經海關.LostFocus與changeopmode)時會自動鎖定欄位——選Y解鎖報單類別/出口報單號、鎖定其他證件/其他證件號;選N則相反;非編輯狀態四欄全鎖。 - 新版 C#/XAML:目前未移植此自動鎖定邏輯(
Tick3.xaml無對應 code-behind、VM 也無此事件)。四個通關欄位在新增/修改狀態下皆可輸入,由使用者依經海關值自行填寫正確欄位。存檔時仍會檢核「經海關 =Y時報單類別與出口報單號不可空白」(見下)。
通關欄位請對應經海關值填寫
新版不會幫你鎖欄位,請依經海關值正確填寫:Y 填報單類別/出口報單號、N 填其他證件/其他證件號,避免填錯欄位導致 401 申報資料不符。
存檔檢核(Tick3Save.AllowSave)¶
按 儲存 時,系統在通用檢核(base.AllowSave)通過後,再依序檢查下列項目,任一不過即擋存並提示對應欄位:
- 公司代碼 不可為 0。
- 統一編號 須通過統編檢核(
CheckTaxID,T 區)。 - 所屬年月 不可空白,且須為合法的發票所屬年月(
CheckInvoiceYearMonth)。 - 憑證類別 不可空白。
- 字軌號碼:當憑證類別 不等於
36時不可空白(類別 36 可免填)。 - 經海關 =
Y時,報單類別 與 出口報單號 皆不可空白。 - 金額 不可為 0。
- 輸出日期 不可空白。
與 VFP 原版的差異
VFP 原版 allowsave 另有一條「外銷方式不可空白」檢核,新版 Tick3Save.AllowSave 未移植此項,故新版存檔不會因外銷方式空白而被擋。實務上仍建議填寫。
轉入(ExtendedFunction1 → 零稅率轉入視窗 Ticka_e2)¶
按 轉入(ExtendedFunction1)會開啟零稅率轉入視窗(WindowName.Ticka_e2),完成後自動把新轉入的資料定位顯示出來(NavigateAsync(Pkid))。轉入邏輯(Ticka_e2Bll)如下:
- 資料來源:呼叫
TWORK_TUR_TICK3,從出貨單(Trsama)抓稅別為T31_B或T32_B的銷貨。交易日期比對本期、本期另一日段與「上一個月」三段(年度月份/年度月份1/前年度月份),以涵蓋跨月發票。 - 零稅率字頭篩選(
TmpTick3.Is零稅率):取字軌號碼第 3 碼起的子字串,若其中含有KC/OD/KS/中/聯/金/眾/鴻/即/經/光/亞/直/達/貿任一字頭,視為非零稅率而排除;其餘才列入可轉清單(字軌號碼空白者亦排除)。 - 依稅別自動帶欄位(
TmpTick3建構):- 稅別
T31_B→ 外銷方式 =4、其他證件 =「扣抵聯」、其他證件號 = 發票號、合併辨識4。 - 稅別
T32_B:- 有出口報單號(提單號
BillOfLadingNo)→ 外銷方式 =1、經海關 =Y、報單類別 =G5、合併辨識1Y。 - 有快遞追蹤號(
TrackingNo)→ 外銷方式 =1、經海關 =N、其他證件 =「國際快遞」、其他證件號 = 追蹤號、合併辨識1N。
- 有出口報單號(提單號
- 銷貨對象為個人(Category =
C)且外銷方式非 4 → 清空統一編號。
- 稅別
- 字軌前綴決定憑證類別:字軌號碼前兩碼非
CI→ 憑證類別31;前兩碼為CI(海運提單)→ 憑證類別36,原字軌寫入備註、字軌號碼取第 4 碼起。 - 合併/去重:
- 合併辨識 1Y(依出口報單號)/1N(依其他證件號):同一鍵的多筆會彙總數量與金額成一筆。
- 合併辨識 4(依字軌號碼):逐筆帶入、不彙總金額,僅將同字軌號碼者去重一次。
- 三種情況皆排除已存在於本期者(
_tmp字軌號碼)。
- 金額:有發票號取發票金額(
InvoiceAmount),否則取未稅金額(AmountWithoutTax),皆取整數。 - 寫回(
SetUpdateSource):勾選列整批寫回零稅率主檔;同字軌號碼已存在於本期 → 更新(SysRowStatus = E、沿用原 pkid/鍵值),否則新增並產生鍵值(MAX(鍵值)+1流水),並把轉入備註設為「轉入日期,使用者」。 - 整批完成提示:若本期出貨皆已轉過(原稿有資料但無新可轉列),系統提示「當期資料皆已轉至零稅率」並取消。
轉入前的檢核
轉入時系統會檢查:所屬年月不可空白且須為合法發票年月、至少需勾選一筆、勾選列的字軌號碼不得為空白,任一不過即提示並中止。
列印(GetPrintViewModel → Tick3PrintViewModel)¶
按 列印 會建立列印頁並把目前主檔的所屬年月帶過去;列印頁另有受文者欄位,預設「財政部臺灣省北區國稅局中壢分局(稽徵所)」,可改(明細取數尚在整備,見操作步驟四)。
常見問題¶
按了「轉入」卻查不到任何資料?
轉入 只抓本期出貨單中稅別為 T31_B/T32_B(零稅率) 的銷貨,且字軌號碼字頭不在排除清單(KC/OD/KS/中/聯/金/…)者。若本期沒有零稅率出貨,或資料都已轉過(系統提示「當期資料皆已轉至零稅率」),就會查無可轉資料。請也確認所屬年月有正確輸入。
字軌號碼可以空白嗎?
視憑證類別而定:類別等於 36 時可免填字軌號碼;其餘類別字軌號碼為必填,空白會擋存。透過 轉入 帶入的資料則一律檢查字軌號碼不得空白。
選了「經海關 = Y」,可是報單類別/出口報單號沒有自動解鎖?
新版未移植 VFP 的自動鎖定邏輯,四個通關欄位(報單類別/出口報單號/其他證件/其他證件號)在編輯狀態下都可輸入,不會隨經海關值自動鎖。請依經海關值自行填正確欄位:Y 填報單類別/出口報單號、N 填其他證件/其他證件號。存檔時會檢核經海關 = Y 時報單類別與出口報單號不可空白。
統一編號打了卻沒帶出客戶?
新版客戶查詢只在輸入客戶代號時帶出客戶簡稱,不會用統一編號反查客戶(此為 VFP 原版行為,新版未移植)。請改由客戶代號欄位查詢選定客戶。
存檔時一直被擋,提示要輸入某欄位?
存檔會逐項檢核:公司代碼不可為 0、統一編號須合法、所屬年月須為合法發票年月、憑證類別必填、(類別非 36 時)字軌號碼必填、經海關為 Y 時報單類別與出口報單號必填、金額不可為 0、輸出日期必填。完整清單見存檔檢核。
為什麼按列印產不出明細清單?
列印頁目前的明細取數(TWORK_RPT_TICK3)與報表版型在新版仍以註解保留、尚未啟用,HaveReportData 只會檢查所屬年月是否有值。完整清單列印請以實機驗收為準(見操作步驟四)。
相關功能¶
需補截圖清單
以下截圖待 runtime 驗收後補拍(放 docs/P-Invoice/images/):
tick3-step1.png— 零稅率主檔主畫面(新增狀態,含經海關/報單類別/其他證件欄位區)tick3-step2.png— 「轉入」視窗(勾選可轉清單)tick3-step3.png— 列印頁(所屬年月/受文者)