跳轉到

程式資訊

  • 程式 IDCheckqry
  • 所屬子系統:O.銀行票據
  • 狀態:stable

票齡分析表

功能簡介

「票齡分析表」把指定收付款日期區間內的應收票據(NR)與應付票據(NP),依「票齡(持票天數)」分桶彙總,算出每個對象在 30 / 60 / 90 / 120 天以內 各落了多少本幣金額、加權後的平均票齡是幾天。它適合財務/業務主管掌握「手上的票大多是短票還是長票」「哪些客戶/業務員/廠商的票齡偏長」,作為資金調度與收付款風險的參考。

本表是一支純查詢報表(不新增、不修改資料),結果同時呈現在三個頁籤,分別從客戶別、業務員別、廠商別三個視角切同一批票據:

  1. 應收票據票齡(客戶別):應收票據(NR)依客戶彙總。
  2. 應收票據票齡(業務別):同一批應收票據(NR)改依業務員彙總。
  3. 應付票據票齡:應付票據(NP)依廠商彙總。

資料來源是票據主檔,透過後端 SP DARB_QRY_CHECK(查詢別 31)撈出收付款日期落在區間內的票據,再由前端逐筆換算本幣金額、依票齡分桶。

前置需求

  • 權限:O.票據 → O-100 票齡分析表 的瀏覽權限(列印需另有列印權限)。
  • 後端 SPDARB_QRY_CHECK 須已部署且在 proc_param 登錄;查詢別固定帶 31
  • 基礎資料:分析結果的完整度取決於下列資料的維護狀況——
資料 影響的結果
應收/應付票據(含收付款日期、到期日、預兌日、票據金額、立帳匯率) 三個頁籤的全部金額與票齡
票據掛在的客戶/廠商主檔(代號、簡稱) 客戶別/廠商別頁的代號/簡稱
客戶的業務員設定 業務員別頁的業務員編號/姓名(沒掛業務員的票會歸到空白業務員列)
幣別與立帳匯率 本幣金額=票據金額 × 立帳匯率,外幣票據未換算則金額會偏差

NR / NP 是什麼

票據以票別區分:NR=應收票據(Note Receivable,向客戶收的票),NP=應付票據(Note Payable,付給廠商的票)。前兩個頁籤都只看 NR、第三個頁籤只看 NP

操作步驟

這支報表只有一個動作:設定收付款起訖日期後按查詢,三個頁籤一次算好。

  1. 開啟「票齡分析表」,畫面上方為條件面板、下方為三個結果頁籤。
  2. 在條件面板設定收付款起訖日期
    • 起始日期:預設為「今天往前推一個月」(DateTime.Now.AddMonths(-1))。
    • 截止日期:預設為「今天」。
    • 兩欄都是日期格式(yyyy/MM/dd),直接輸入或用日期選擇器調整。
  3. 按工具列的 查詢。系統以 收付款日期 BETWEEN 起始 AND 截止 為條件呼叫 SP,撈回票據後即時計算並填入三個頁籤。
  4. 切換頁籤檢視不同視角:

    1. 應收票據票齡(客戶別)
    2. 應收票據票齡(業務別)
    3. 應付票據票齡
  5. 需要紙本或檔案時:

    • 在任一格線上按右鍵可匯出 Excel(Telerik 格線內建匯出)。
    • 按工具列列印相關按鈕可預覽/列印報表,報表分三張:應收帳款票齡-客戶別應收帳款票齡-業務別應付帳款票齡(詳見欄位連動與附加功能)。

小技巧

改了起訖日期後再按一次 查詢 即重算,三個頁籤會同步更新;不需要分別切頁查詢。

條件面板與三頁籤

欄位說明

查詢條件

欄位 必填 說明/格式/預設
起始日期 收付款日期區間下界,格式 yyyy/MM/dd;預設=今天 −1 個月
截止日期 收付款日期區間上界,格式 yyyy/MM/dd;預設=今天

結果頁籤共同欄位

三個頁籤的金額欄位完全相同,差別只在第一、二欄的彙總對象(客戶/業務員/廠商):

欄位 說明/格式
客戶代號/業務員編號/廠商代號 彙總對象的代號;最後一列固定為 合計(多語系字串,英文版顯示 Total
客戶簡稱/姓名/廠商簡稱 彙總對象名稱;合計列為空白
合計 D30 + D60 + D90 + D120 + 其它(本幣,唯讀計算欄)
加權金額 各票「本幣金額 × 持票天數」的加總(本幣)
平均天數 加權金額 ÷ 合計四捨五入到整數天(合計為 0 時顯示 0);格線以兩位小數格式呈現,故會顯示為 .00
D30 持票天數 ≤ 30 天的本幣金額小計
D60 持票天數 31~60 天的本幣金額小計
D90 持票天數 61~90 天的本幣金額小計
D120 持票天數 91~120 天的本幣金額小計
其它 持票天數 > 120 天的本幣金額小計

欄名對照

新版頁籤的桶位欄頭直接用 D30 / D60 / D90 / D120;對應 VFP 舊版的「天數30/天數60/天數90/天數120」與報表上的「30天金額/60天金額…」,金額口徑相同。

欄位連動與附加功能

這支是查詢報表,沒有逐欄輸入連動,但「按查詢後系統怎麼把每張票算進哪個桶」「列印/匯出會做什麼」是本頁重點,以下逐項說明。

查詢 後系統做的事

當你按下 查詢,系統依序完成下列計算(對應 CheckQryBll.GetSqlData):

  1. 清空舊結果:三個頁籤與內部票齡明細全部重建,再開始算。
  2. 撈票據:以查詢別 31、條件 收付款日期 BETWEEN 起始 AND 截止 呼叫 SP DARB_QRY_CHECK,撈回符合的票據(含票別、代號、簡稱、業務員、幣別、立帳匯率、收付款日期、到期日、預兌日、票據金額)。
  3. 逐票換算本幣金額:每張票 本幣金額 = 票據金額 × 立帳匯率,四捨五入到本幣小數位數(Context.Env.LocalDecimal)。
  4. 決定「計算日」:每張票的 計算日 = 預兌日與到期日取較晚者預兌日 ≥ 到期日 ? 預兌日 : 到期日)。計算日是用來量「票還要放多久」的基準。
  5. 算持票天數並分桶:每張票的 持票天數 = 計算日 − 收付款日期(天),依下表落桶(落在哪一桶,整張票的本幣金額就加進該桶):

    持票天數 落桶
    ≤ 30 D30
    31~60 D60
    61~90 D90
    91~120 D120
    > 120 其它
  6. 累計加權金額:每張票貢獻 本幣金額 × 持票天數 到加權金額;若持票天數算出來是負數(計算日早於收付款日期),天數以 1 計(避免負值灌入加權)。

  7. 分三視角彙總
    • 客戶別頁(CheckQry1):只取 NR 應收票,依客戶代號分組。
    • 業務員別頁(CheckQry2):同一批 NR 應收票,改依業務員編號分組(同一張票會同時出現在客戶別與業務員別的彙總裡,只是分組維度不同)。
    • 廠商別頁(CheckQry3):只取 NP 應付票,依廠商代號(即代號)分組。
  8. 加總列:每個頁籤算完明細後,再追加一列 合計(英文版 Total),把各桶與加權金額全部加總,並重算合計列的平均天數。
  9. 回填頁籤:三份結果一次塞回 CheckQry1s / CheckQry2s / CheckQry3s,格線即時刷新。若 SP 回傳失敗,跳出驚嘆號訊息框、不更新頁籤。

合計與平均天數是即時算的

每一列的 合計=五個桶相加、平均天數=加權金額 ÷ 合計,都是 Poco 的唯讀計算屬性,不存進結果集;所以這兩欄一定跟同列的桶位金額一致。

列印報表(GetReports / IPrintSource)

工具列列印功能會依此表的 GetReports 提供三張報表,分別對應三個頁籤的內容:

報表編號 報表抬頭 對應頁籤
O100-1 應收帳款票齡-客戶別 應收票據票齡(客戶別)
O100-2 應收帳款票齡-業務別 應收票據票齡(業務別)
O100-3 應付帳款票齡 應付票據票齡

報表資料來源由 GetReportParameters 提供:三個頁籤分別轉成報表用的 Rpt_O100_CheckqryReportPoco(代號/簡稱/D30~D120/其它/加權金額/起訖日期),透過 ReportSourceReportSource1ReportSource2 三組參數帶進報表。三張報表都使用 A4、TW 區域、同一份 SQLite 來源樣板(rpt_o100_checkqry_report1)。

匯出 Excel

三個頁籤都是 Telerik TsRadGridView,在格線上按右鍵即可匯出目前頁籤的內容到 Excel(含合計列)。匯出內容即畫面所見,不會重新查詢。

與舊版(VFP)行為差異

本幣金額的匯率取法與小數位數

VFP 舊版在前端用 U_BLRATE('CHECKQRY', 幣別, '1', '賣', 截止日) 以「截止日的賣出匯率」重算每張票的本幣金額,並 ROUND(..., 0) 取到整數;新版直接採用 SP 回傳的立帳匯率(即建票當時的匯率)乘票據金額,再四捨五入到本幣小數位數Context.Env.LocalDecimal)。兩者都是「票據金額 × 匯率後四捨五入」,但有兩處差異:(1) 匯率基準不同——舊版用查詢截止日的賣出匯率、新版用立帳匯率;(2) 取位不同——舊版固定取整數、新版取本幣設定的小數位數。

常見問題

查不到任何資料、三個頁籤都只有一列「合計」?

代表該收付款日期區間內沒有符合的票據。請確認:(1) 起訖日期涵蓋到票據的收付款日期(不是到期日);(2) 區間內確實有票別為 NRNP 的票據;(3) 後端 SP DARB_QRY_CHECK 已部署並登錄。預設區間只看「最近一個月」,較舊的票要把起始日往前拉。

某張票的金額是 0 或明顯偏小?

本幣金額=票據金額 × 立帳匯率。外幣票若立帳匯率沒設好(例如為 0 或 1),換算後就會異常。請回票據建檔確認該票的幣別與立帳匯率。

平均天數看起來怪怪的,甚至比實際短?

平均天數是加權平均:=(每張票本幣金額 × 持票天數)總和 ÷ 合計金額。金額大的票會把平均往它的票齡拉。另外,若某票的計算日早於收付款日期(持票天數為負),系統會以 1 天計入加權,不會出現負天數。

為什麼同一張應收票同時出現在「客戶別」和「業務別」頁?

這是設計如此。前兩個頁籤是同一批應收票(NR)的兩種彙總視角——客戶別頁依客戶分組、業務員別頁依業務員分組,金額總和會一致,只是切的維度不同。第三頁是另一批資料(應付票 NP),不會跟前兩頁重疊。

業務員別頁出現一列沒有編號/姓名的彙總?

表示有應收票掛在沒有設定業務員的客戶上,這些票會被歸到空白業務員那一組。請回客戶主檔補上業務員設定。

改了匯率/補了票據,數字沒變?

這支報表只有按 查詢 才會重撈重算。調整任何來源資料後,請再按一次 查詢

相關功能


需補截圖清單

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

  1. checkqry-step1.png — 條件面板(收付款起訖日期)+三個頁籤切換的整體畫面,建議以「應收票據票齡(客戶別)」頁含合計列為主畫面