跳轉到

程式資訊

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

發票批量匯出

功能簡介

「發票批量匯出」把指定發票日期區間內、由 發票存證資料維護 產生的存證電子發票,整批轉成 EDI 上傳用的 CSV 檔,固定輸出到本機 C:\轉EDI資料 資料夾,供後續匯入存證/EDI 平台。會計或帳務人員在每月(或每期)申報前,用這支表單把當期「開立/作廢/折讓/折讓作廢/退回」各類發票一次匯出,並把已匯出的發票回寫匯出人員/匯出時間做為已匯出註記。

本表單採分頁設計,共兩個頁籤:

  1. 發票匯出:查出區間內可匯出的存證發票,勾選後按存檔即同時產生 CSV 並回寫匯出註記;另提供「僅匯出作廢及折讓」純匯出鈕。
  2. 空白未使用字軌上傳:把區間內尚未使用的空白發票字軌(空號區段)匯出成空白發票 CSV,供存證平台登錄未使用字軌。

用途定位

本頁是 發票存證資料維護 的衍生匯出工具(同屬存證發票 TICKA 家族),本身不維護發票內容,只負責「批量查出 → 匯出 CSV → 回寫匯出註記」。發票的開立、作廢、折讓請回各自的維護表單處理。

前置需求

  • 權限:P.發票 → 發票批量匯出 的瀏覽權限。
  • 匯出資料夾:系統固定把 CSV 寫到本機 C:\轉EDI資料。此資料夾由系統自動建立,請確認執行端對該路徑有寫入權限。
  • 基礎資料:匯出內容取決於下列資料的維護狀況——
資料 影響的結果
存證發票(TICKA,含發票日期、客戶、金額) 「發票匯出」頁可查出與匯出的發票來源
公司基本資料(統一編號、公司名稱、發票地點、公司電話) 作廢/折讓 CSV 的表頭(H 列),以及空白發票的統一編號
客戶/買賣方資料(統一編號、名稱、地址、電話) 退回/折讓作廢 CSV 表頭的買方資訊,以及各類 CSV 的客戶欄位
已使用/未使用的發票字軌 「空白未使用字軌上傳」頁查出的空號區段

操作步驟

頁籤一:發票匯出

  1. 起始發票日期截止發票日期 欄位輸入要匯出的發票日期區間(預設皆為今天)。
  2. 按工具列的 查詢。系統以 發票日期 between 起始 and 截止 為條件,透過異動轉檔機制查出區間內的存證發票:
    • 查得的發票顯示在上方 發票匯出 格線,且查詢時系統會把每一筆預設標記為要匯出(IsSelected = true)。
    • 若有發票正被其他使用者鎖定(編輯中),會列在下方 Locked Source 格線,並在標題旁以紅字顯示鎖定筆數;被鎖定的發票無法匯出。
  3. 確認上方格線中的發票即為本次要匯出的內容。

    目前無逐筆勾選欄

    本表單的發票匯出格線目前沒有提供勾選欄,查到的發票會整批視為要匯出(程式在查詢時把每筆標記為選取)。存檔時的「請先選擇一筆資料」檢核,實際上是用來擋「查詢結果為空」的情形。

    1. 確認下方 異動後 匯出人員(預設帶目前登入者)與 異動後 匯出時間(預設帶當下時間),需要時可修改。
    2. 按工具列的存檔,系統會:
    3. 產生各類發票的 CSV 檔到 C:\轉EDI資料(見下方欄位連動與附加功能)。
    4. 把上方格線中標記為選取的發票回寫 匯出人員/匯出時間(標記為已匯出)。
    5. 每寫出一個檔案,跳出「已匯出資料---<完整路徑>」訊息。

只想重出檔、不想改匯出註記

若只是要重新產生作廢及折讓的 CSV(不想動到資料庫的匯出註記),輸入日期區間後直接按右側的 僅匯出作廢及折讓 鈕——它只跑匯出、不回寫任何欄位。

存檔前一定要先查詢

存檔時若查詢結果為空(沒有任何標記為選取的發票),會擋下並提示「請先選擇一筆資料」;匯出人員 空白會提示「請先輸入匯出人員」、匯出時間 空白會提示「請先輸入匯出時間」,同樣擋存檔。

頁籤二:空白未使用字軌上傳

  1. 切到 空白未使用字軌上傳 頁。起始發票日期/截止發票日期 預設帶「當月 1 日~當月 31 日」。
  2. 視需要調整日期區間。
  3. 匯出。系統查出區間內未使用的發票字軌空號,依字軌分段(以號碼末兩位 49/99 為界切成兩段),輸出成 空白發票_起始_截止.csvC:\轉EDI資料,並跳出「已匯出資料---<路徑>」訊息。

    目前無手動輸入字軌的欄位

    程式內部保留了「手動輸入字軌區段」與其去重併入的機制(並預備了 50 列空白序號),但目前的畫面沒有提供輸入這些字軌的格線,因此實際匯出的內容只有 SQL 查出的未使用空號。

課稅別固定 07

空白發票匯出時,每筆發票類別固定帶 07(一般稅額);所屬年月以截止日期換算成民國年月(YYYMM)。

欄位說明

發票匯出頁 — 查詢條件

欄位 必填 說明/格式/預設
起始發票日期 短日格式;預設今天。查詢以發票日期比對
截止發票日期 短日格式;預設今天
異動後 匯出人員 存檔時回寫到發票的匯出人員;預設帶目前登入者代號
異動後 匯出時間 短日期時間格式;存檔時回寫到發票的匯出時間;預設當下時間

發票匯出頁 — 結果格線

欄位 說明
發票年度/發票月份 發票所屬年月
憑證類別/發票別 發票分類
發票號碼/檢查號碼 發票字軌號碼與檢查碼
發票日期 比對查詢區間用
隸屬倉庫/倉單號/單號 來源單據資訊
客戶代號/客戶簡稱/客戶名稱/統一編號 買方資訊

Locked Source 格線(被鎖定無法匯出者)

欄位 說明
修改人員 目前正在編輯/鎖定該發票的使用者
發票年度/月份/憑證類別/發票別/發票號碼/檢查號碼/發票日期/隸屬倉庫/倉單號/客戶代號/客戶簡稱 被鎖定發票的識別資訊

空白未使用字軌上傳頁

欄位 必填 說明/格式/預設
起始發票日期 預設當月 1 日
截止發票日期 預設當月 31 日

欄位連動與附加功能

這一節把「按某鈕/改某欄位後,系統實際會做什麼」逐條列出,全部對應程式碼行為。

發票匯出頁的查詢(查詢 鈕)

當你按 查詢,系統會:

  1. 檢查 起始發票日期截止發票日期 都不可空白(任一空白會分別提示「起始日期不得為空白」「截止日期不得為空白」)。
  2. 發票日期 between N'起始' and '截止' 為條件,透過異動轉檔程序(TWORK_TUR_TICKA_EXPORT)查存證發票主檔。
  3. 把回傳的第一個資料表當作 Locked Source(被他人鎖定/編輯中的發票)填入下方格線,並更新紅字鎖定筆數。
  4. 把回傳的第二個資料表當作可匯出發票填入上方 發票匯出 格線,且每一筆預設標記為選取IsSelected = true)。畫面上沒有提供取消選取的勾選欄,因此查到的發票會整批匯出。

發票匯出頁的存檔(產生 CSV + 回寫匯出註記)

存檔時系統先做檢核:標記為選取的發票必須至少一筆(即查詢結果不可為空,否則提示「請先選擇一筆資料」)、匯出人員 不可空白(提示「請先輸入匯出人員」)、匯出時間 不可空白(提示「請先輸入匯出時間」),否則擋存檔。通過後依下表把不同類別的發票各寫成一個 CSV 到 C:\轉EDI資料(檔名中的日期取自查詢區間),並對每個產出的檔案跳出「已匯出資料」訊息:

類別 匯出檔名(區間日期以 YYYYMMDD 代入) 內容/格式重點
正常開立發票 存證開立發票_起始_截止.csv 逐筆輸出該發票的 outputcsv 字串
作廢發票 存證作廢發票_起始_截止.csv 表頭 H,統編,公司名稱,發票地點,公司電話,CAN;明細 M,發票號碼,發票日期,…,作廢日期,作廢原因,核准文號
折讓發票 存證折讓發票_起始_截止.csv 表頭 H,…,CRE_ALW;依折讓單號分組,每組先出 M(主檔,金額/稅額四捨五入至整數)再出多筆 D(明細,數量/單價/未稅/稅額取小數 4 位)
折讓作廢發票 存證作廢折讓發票_起始_截止.csv 由折讓作廢檢視(voidrp)輸出,先出一列 H 表頭(買方統編/名稱/地址/電話+作業別),再逐筆出 M 明細(折讓單號、折讓日期、賣方資訊、作廢日期、作廢原因)
退回發票 存證退回發票_起始_截止.csv 由退回檢視(rej)輸出,先出一列 H 表頭(買方統編/名稱/地址/電話+作業別),再逐筆出 M 明細(發票號碼、發票日期、賣方資訊、退回日期、原因)

CSV 全部以 UTF-8 編碼寫出。哪一類有資料才會產生對應檔案;某類別查無資料就不會出檔。

回寫部分:存檔成功時,系統把上方格線中標記為選取的發票標記為異動(SysRowStatus = E),並把你在下方輸入的 匯出時間(格式化為 yyyy/MM/dd HH:mm:ss)與 匯出人員 寫回每一筆,再透過異動轉檔上傳回 TICKA 主檔(明細表 ticka_d 此處不帶異動列)。完成後本次的查詢結果與鎖定清單會被清空(避免重複匯出)。

匯出資料夾固定不可改

匯出路徑固定為 C:\轉EDI資料(程式內 匯出發票資料夾 屬性硬寫),目前不提供在畫面上選資料夾。資料夾不存在時系統會自動建立。

僅匯出作廢及折讓

按此鈕只跑匯出、不回寫任何欄位、也不做存檔檢核(不檢查是否有查詢結果、不檢查匯出人員/時間):

  • 它以同一支 TWORK_QRY_TICKA_OUTPUT 程序查資料,但略過正常開立發票,只輸出 作廢/折讓/折讓作廢/退回 四類 CSV。
  • 適合「正常發票已匯出過、只需補出作廢及折讓檔」或「重出一次作廢/折讓檔」的情境。

空白未使用字軌上傳頁(匯出 鈕)

當你在第二個頁籤按 匯出,系統會:

  1. TWORK_QRY_TICKA_BLANK 程序查出區間內未使用的發票字軌(位置參數 lp_p1=1、起始/截止日期)。
  2. 把每筆字軌依末兩位切段:末兩位 ≤49 者迄號補到 …49,否則補到 …99;同一迄號的多段取最小起號合併成一筆。
  3. 程式另保留一份手動輸入字軌區段的併入邏輯(需字軌/發票起號/發票迄號三欄都有值,IsValid() 才成立,重疊於 SQL 查出的區段者不重複加入),但目前畫面未提供輸入欄位,這份清單實際為空、不影響輸出。
  4. 重新編流水序號,每筆帶 發票類別 07(一般稅額)與依截止日期換算的所屬年月(民國 YYYMM、公司統一編號(取公司基本資料第一筆)。
  5. 輸出 空白發票_起始_截止.csv(UTF-8)到 C:\轉EDI資料,每列格式為 序號,統一編號,所屬年月,字軌,發票起號,發票迄號,發票類別,並跳出匯出完成訊息。

常見問題

按查詢沒有任何發票被列出?

請確認:① 起始/截止發票日期區間內確實有存證發票(發票日期落在區間內);② 該批發票尚未被匯出鎖定。若發票正被其他人編輯,會被列到下方 Locked Source 而非可匯出清單,需待對方釋放後再查。

存檔時跳「請先選擇一筆資料」?

存檔會匯出查詢到的發票。查詢時每筆都會被標記為選取,但若查詢結果為空(區間內沒有可匯出的發票)就會被擋。請先按 查詢 取得資料再存檔。

存檔被擋,提示要輸入匯出人員或匯出時間?

下方 異動後 匯出人員異動後 匯出時間 為必填,存檔時會回寫到發票做為已匯出註記。預設已帶登入者與當下時間,若被清空請重新填入。

C:\轉EDI資料 裡找不到某一類檔案(例如沒有作廢檔)?

匯出採「哪類有資料才出檔」。例如該區間沒有作廢發票,就不會產生 存證作廢發票_*.csv。請確認該區間內確實有對應類別的發票。另外 僅匯出作廢及折讓刻意不出正常開立發票檔,若需要正常發票檔請改走查詢後存檔流程。

只想重出作廢/折讓檔,不想動到已匯出的註記怎麼辦?

僅匯出作廢及折讓 鈕。它只產生作廢/折讓/折讓作廢/退回四類 CSV,不做存檔檢核、也不回寫匯出人員/匯出時間,因此不會改變資料庫狀態。

空白字軌匯出後內容不對/少了某段?

空白發票區段以號碼末兩位 49/99 為界切段;同一迄號的多段會取最小起號合併成一筆。目前畫面只匯出 SQL(TWORK_QRY_TICKA_BLANK)查出的未使用空號,沒有手動補字軌的輸入欄。若某段沒出現,請確認該字軌在區間內確實仍是未使用狀態。

相關功能


需補截圖清單

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

  1. ticka_export-step1.png — 「發票匯出」頁全貌(日期區間 + 查詢 + 結果格線 + 匯出人員/時間)
  2. ticka_export-step2.png — 查詢後上方可匯出格線與下方 Locked Source 鎖定清單
  3. ticka_export-step3.png — 「空白未使用字軌上傳」頁(日期區間 + 匯出鈕 + 匯出路徑提示)