跳轉到

程式資訊

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

輸入發票號碼(批量配號)

功能簡介

「輸入發票號碼」是一個彈出式小視窗(模態對話框,視窗標題即為「輸入發票號碼」),它的唯一工作是:把一段連續的統一發票字軌號碼一次批量建檔成空白發票。

它不是一張可以瀏覽、查詢的主檔,而是 銷貨發票(TICKA,H-100)按工具列 新增 時跳出來的配號視窗。你在這裡輸入字軌、年月與起訖號碼,按 儲存 後,系統會把起始~截止之間的每一個號碼各建成一張空白發票(課稅別 5.空白),並自動算好每張的檢查號碼;完成後視窗關閉,主檔自動定位到剛建立的第一張發票,接著就回到 銷貨發票 逐張帶入客戶與品項。

開立統一發票的會計人員會用到這支視窗——通常是領到一段新的發票字軌配號後,先用它把整段號碼登錄成空白發票備用。

本頁是配號視窗,不是發票主檔

本視窗只負責「建立空白號碼」。配號完成後,逐張帶入客戶/品項/金額、作廢、折讓、轉開立、電子發票匯出等完整操作,全部在 銷貨發票 主檔進行。本頁與該主檔是兩支程式(本視窗 ProgramClassTICKA_M),但永遠搭配使用。

前置需求

  • 權限:本視窗由 銷貨發票H-100)的 新增 動作觸發,因此需具備銷貨發票的新增權限。
  • 配號資料:你必須先向稅捐機關取得(或已確認)這段要登錄的發票字軌與起訖號碼,且該段號碼符合統一發票配賦規定——
資料 影響什麼
統一發票配號(字軌 + 起訖號碼) 決定要批量建立哪些空白發票號碼
憑證類別代碼(C2142) 憑證類別下拉清單與其說明文字;預設帶 35
公司/發票年月 寫入每張空白發票的所屬期別(公司代碼固定帶 1

操作步驟

本視窗只有「填欄位 → 儲存」一個動作,沒有查詢、修改、刪除。

  1. 銷貨發票 主檔按工具列 新增,跳出「輸入發票號碼」視窗。
  2. 選擇 憑證類別(下拉,代碼來源 C2142;預設 35)。右側唯讀欄位會顯示該類別的說明文字。
  3. 輸入 發票年度(4 位西元年,預設今年)與 發票月份(預設當月)。

    偶數月會自動退回前一個奇數月

    統一發票以單月+雙月為「一期」。若你在發票月份輸入偶數月(如 8 月),系統會自動改成前一個奇數月(7 月),讓配號落在正確的期別開頭。

  4. 輸入 發票字軌(最多 2 碼,自動轉大寫)。游標預設停在此區,方便連續配號。

  5. 輸入 起始號碼截止號碼(各最多 8 位數字,水印提示「輸入發票號碼8位」/「輸入8位數字」)。
  6. 儲存。系統做兩項檢核(見欄位連動與附加功能)後,把起始~截止之間每一個號碼各建一張空白發票,並算好檢查號碼。
  7. 建檔成功後視窗自動關閉,主檔定位到剛建立的第一張發票;若要放棄,按 取消 直接關閉視窗、不建任何資料。

小技巧

一段字軌一次配滿即可(例如 0000005000000099)。號碼會原樣產生成 字軌 + 8 碼 的發票號碼,後續逐張開立時不需再改號碼。

欄位說明

欄位 必填 說明/格式/預設
憑證類別 下拉,代碼來源 C2142;預設 35。右側唯讀框顯示該類別說明
發票年度 4 位西元年;預設今年DateTime.Now.Year)。寫入時補成 4 碼
發票月份 1~12;預設當月。輸入偶數月自動退回前一奇數月。寫入時補成 2 碼
發票字軌 最多 2 碼,自動轉大寫;空值視為空字串
起始號碼 最多 8 位數字;預設 0末兩碼須為 0050
截止號碼 最多 8 位數字;預設 0必須大於起始號碼

公司代碼與課稅別是系統固定值

批量產生的每張空白發票,公司代碼固定為 1課稅別固定為 5.空白(空白發票),不在本視窗提供輸入;後續在 銷貨發票 帶入客戶與品項時再改成應稅/零稅/免稅。

欄位連動與附加功能

本節彙整「輸入某欄位/按某按鈕後系統會做什麼」,全部來自實際程式碼(Ticka_mViewModel)。

發票字軌 → 自動轉大寫

當你在 發票字軌 欄輸入內容,系統會即時把它轉成大寫(例如輸入 ab 會變 AB);若清空,內部以空字串處理。產生的發票號碼會以這個大寫字軌當前綴。

發票月份 → 偶數月自動退回奇數月

當你在 發票月份 欄輸入偶數(月份 ÷ 2 沒有餘數)時,系統會自動把它減 1,改成前一個奇數月。這是為了讓配號落在統一發票「單月+雙月」期別的開頭月份。輸入奇數月則維持原值。

憑證類別 → 顯示說明文字

憑證類別 是以 C2142 代碼為來源的下拉清單;選定後右側唯讀文字框會帶出該類別的說明(SelectedItem.Description)。預設值為 35

儲存 → 配號檢核與批量建檔(SaveExecute)

儲存 後,系統依序執行:

  1. 起始號碼末兩碼檢核:把起始號碼補成 8 碼後取末兩碼,若不是 00 也不是 50,跳出「起始號碼 末兩碼 需為00或50 !!!」提示。

    此提示目前不會中止建檔

    程式碼裡這項檢核只顯示提示訊息,並未中止後續流程——按掉提示後仍會照常批量建檔。也就是說,末兩碼不是 0050 時雖然會跳警告,發票還是會被建出來。請依提示自行確認起始號碼正確後再儲存。

  2. 起訖大小檢核:若截止號碼 ≤ 起始號碼,跳出「截止號碼 不得小於或等於 起始號碼 !!!」並中止(這項才真的會擋下建檔)。

  3. 逐號產生空白發票:從起始號碼跑到截止號碼,每一個號碼產生一筆主檔資料,欄位帶入——
    • 公司代碼 = 1
    • 發票年度 = 年度補 4 碼、發票月份 = 月份補 2 碼
    • 憑證類別 = 你選的類別
    • 發票號碼 = 字軌 + 號碼後 8 碼
    • 課稅別 = 5.空白
    • 檢查號碼 = 依該號碼即時計算(見下)
  4. 計算檢查號碼:把 8 位號碼逐位(第 1~8 位)乘上其位置權重(1~8),各取個位數(mod 10)後加總,補成 2 碼當作該張發票的檢查號碼
  5. 批量上傳:呼叫上傳服務(以 TICKA 主檔的資料表為目標),把整批空白發票以「新增」模式寫入資料庫。
  6. 回傳並導向:上傳成功後,從回傳訊息解析出新建第一張發票的 Pkid,關閉視窗並回傳成功;銷貨發票 主檔收到後自動 Navigate 定位到該 Pkid。上傳失敗則顯示錯誤訊息、不關閉視窗。

取消 → 放棄配號

取消 會把視窗結果設為「否」並直接關閉,不建立任何發票

本視窗沒有列印/匯出/轉傳票等功能

配號視窗只做批量建檔。列印統一發票、電子發票 CSV 匯出、應收/出貨轉發票、作廢、折讓等延伸功能,全部在 銷貨發票 主檔提供,本視窗不重複。

常見問題

按儲存時提示「起始號碼 末兩碼 需為00或50」?

統一發票配賦規定,一段配號的起始號碼末兩碼只能是 0050。請把起始號碼調整成符合配號段開頭的號碼(例如 000000000000005000000100…)。

Warning

目前版本這項提示不會中止建檔——按掉提示後號碼仍會照樣建出來。看到此提示請先取消、把起始號碼改成 0050 結尾再重存,不要直接放任它建檔。

按儲存時提示「截止號碼 不得小於或等於 起始號碼」?

本視窗是「批量配一段連續號碼」,所以截止號碼必須大於起始號碼。若只想建一張,請把截止號碼設成比起始號碼大的下一個號碼。

發票月份輸入 8(八月),存檔後卻變成 7(七月)?

這是設計行為,不是錯誤。統一發票以單月+雙月為一期,系統會把輸入的偶數月自動退回前一個奇數月(8→7),讓配號落在該期別的開頭。若確實要配 7-8 月期,輸入 7 或 8 結果都會是 7。

字軌打小寫,建出來變大寫?

發票字軌會自動轉大寫,這是統一發票字軌的標準格式,屬正常行為。

配完號要去哪裡帶客戶和品項?

配號完成後視窗會關閉並把主檔定位到第一張新建發票。請回到 銷貨發票 主檔,逐張用上下筆移動、輸入客戶代號與明細品項後存檔開立。

新建出來的發票課稅別怎麼是「空白」?

批量配出來的是空白發票(課稅別固定 5.空白)作為號碼備用。等你在 銷貨發票 帶入客戶與品項、存檔時,再依稅別改成應稅/零稅/免稅;未使用的號碼則維持空白。

相關功能


需補截圖清單

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

  1. ticka_m-step1.png — 「輸入發票號碼」配號視窗整體(憑證類別/年月/字軌/起訖號碼)
  2. ticka_m-step2.png — 配號完成後回到銷貨發票主檔、定位到第一張新建發票