程式資訊
- 程式 ID:
Bankfxr - 所屬子系統:O.銀行票據
- 狀態:stable
銀行往來日報¶
功能簡介¶
「銀行往來日報」用來建立某一天所有銀行帳戶的餘額快照,把每個帳戶當日的前日餘額、存入金額、提領金額、本日餘額整理成一張以「日期」為主鍵的日報單據,外幣帳戶另附原幣餘額與匯率。每天只會有一張,由出納/財務人員建立,是查核當日資金部位、產出 銀行往來日報列印頁 的資料來源。
本表單的特色是不用逐欄手 key:選好日期後按 新增查詢,系統會去呼叫後端 SP,把當日各銀行帳戶從總帳算出來的進出與餘額一次帶進明細,使用者只需確認、存檔即可。
這支不是「匯率設定」
模組功能清單與部分舊文件把 Bankfxr 標成「匯率設定」,實際程式(VFP bankfxr class、DARB_QRY_BANKFXR)做的是銀行日報表(銀行日報主檔/明細)。表單上的「匯率」只是外幣帳戶餘額換算出來的顯示欄,本表單不維護匯率主檔。維護各幣別匯率請改用 B 基本資料 的幣別/匯率主檔。
前置需求¶
- 權限:O.銀行票據 →
O-140 銀行往來日報。本表單在系統設定中標記為不可修改(ProgramAllowEdit = false),因此只開放新增、刪除、查詢、列印,沒有「修改」動作。 - 基礎資料:明細是由後端 SP 從下列資料算出來的,這些資料不齊全時,日報的金額會缺漏或為 0——
| 資料 | 影響的結果 |
|---|---|
| 銀行帳戶主檔(銀行帳戶,含「日報表=Y」「科目代號」「帳戶簡稱」「幣別」) | 哪些帳戶會被列入日報、明細的帳戶代號/帳戶簡稱/幣別 |
總帳當日傳票(DARB_QRY_ABOOK1 的科目期初/借方/貸方) |
各帳戶的前日餘額/存入金額/提領金額/本日餘額與外幣的原幣餘額 |
| 本位幣設定(系統環境 LocalCurrency) | 本位幣帳戶在算不出匯率時自動補 匯率=1 |
操作步驟¶
新增一張日報(最常用)¶
- 按工具列的
新增。系統建立一張空白日報,日期自動帶今天,建檔日期也填今天。 - 確認或修改日期(每天一張,重複日期會被擋下,詳見 欄位連動與附加功能)。
- 按
新增查詢按鈕。系統會清掉明細後,依該日期向後端取出所有銀行帳戶的當日餘額,逐列填入下方明細格線:- 帳戶代號/帳戶簡稱/幣別 由帳戶主檔帶出。
- 前日餘額/存入金額/提領金額 由當日總帳算出,本日餘額=前日餘額+存入金額-提領金額。
- 外幣帳戶另算 原幣餘額 與 匯率。
- 核對明細無誤後按
儲存。存檔前系統會做兩道檢核(日期必填、本日餘額與原幣餘額不可一邊為 0 一邊非 0),詳見 欄位連動與附加功能。
小技巧
新增查詢 只在新增狀態下可按。在瀏覽既有單據時按鈕會是停用狀態——這是刻意設計,避免覆蓋已存的歷史日報。
查詢/瀏覽既有日報¶
- 用工具列的查詢(依日期)或上一筆/下一筆瀏覽既有日報。
- 既有日報以唯讀方式顯示明細,無法修改內容(本程式不提供修改)。
刪除日報¶
- 瀏覽到要刪除的日報。
- 按工具列的
刪除,整張日報(主檔+明細)一併刪除。
空白明細列會自動清掉
存檔時系統會把帳戶代號為空的明細列自動標記為刪除(不會存進資料庫),所以不必手動刪空列。
列印¶
- 按工具列的列印,開啟 銀行往來日報列印頁。
- 系統自動把起始日期/截止日期都帶為目前日報的日期。
- 報表
O140-1 銀行往來日報(A4)會列出各帳戶餘額,並在最後附一列合計(前日/存入/提領/本日餘額加總)。
欄位說明¶
主檔(單頭)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 單號 | — | 系統流水號,唯讀,存檔時產生 |
| 日期 | ✔ | 日報所屬日期,新增時預設今天(yyyy/MM/dd);每天只能一張,重複會被擋 |
| 建檔日期 | — | 新增時自動帶今天,唯讀 |
明細(銀行帳戶餘額)¶
| 欄位 | 必填 | 說明/格式/預設 |
|---|---|---|
| 帳戶代號 | ✔ | 銀行帳戶代號,由 新增查詢 帶入 |
| 帳戶簡稱 | — | 帳戶名稱,由 DB view JOIN 自動帶出(不必手 key) |
| 幣別 | — | 帳戶幣別,由帳戶主檔帶入 |
| 前日餘額 | — | 當日總帳科目的期初餘額 |
| 存入金額 | — | 當日借方金額 |
| 提領金額 | — | 當日貸方金額 |
| 本日餘額 | — | =前日餘額+存入金額-提領金額(系統算) |
| 原幣餘額 | — | 外幣帳戶的原幣別餘額(本位幣帳戶通常為 0) |
| 匯率 | — | =本日餘額 ÷ 原幣餘額(四捨五入 4 位);原幣餘額為 0 時為 0,本位幣帳戶算不出時補 1 |
本幣餘額欄位已隱藏
XAML 中保留了「本幣餘額」欄但目前註解未啟用,畫面上看不到;日報實際呈現的是上表九欄。
欄位連動與附加功能¶
這一節把「輸入某欄位/按某按鈕後系統會做什麼」整理出來,都是程式碼/VFP 真有的行為。
輸入「日期」→ 即時擋重複¶
- 在日期欄輸入後,畫面綁的是
日期Binding,它會立刻呼叫Darb_chkdblBll.CheckPrimaryKey去 DB 比對bankfxrm是否已有同一天的日報。 - 若該日期已經存在日報,欄位會標紅顯示錯誤、擋住存檔;改成尚未建立的日期後紅字自動清除。
- 對應 VFP
日期.Valid的U_CHKDBL(...)=「資料不得重複」檢核。換句話說,一天就是一張日報,不能建第二張。
按「新增查詢」→ 自動帶出當日全部帳戶餘額¶
這是本表單的核心動作(VFP 的 查詢鈕.Click)。按下後系統依序做:
- 僅限新增狀態:只有在新增(Add)狀態下按鈕才可按;瀏覽既有單據時停用。
- 清空明細:先把目前明細清掉,避免殘留舊資料。
- 撈當日各帳戶:呼叫
DARB_QRY_BANKFXR(條件日報表='Y'),取得所有「列入日報」的銀行帳戶清單(含帳戶代號、帳戶簡稱、幣別、科目代號)。 - 撈當日總帳金額:以這批帳戶的科目代號範圍(最小~最大科目)+日報日期,呼叫
DARB_QRY_ABOOK1取各科目的期初/借方/貸方(本幣與原幣)。 - 逐帳戶算餘額並填入明細:
- 前日餘額=科目期初餘額;存入金額=借方;提領金額=貸方。
- 本日餘額=前日餘額+存入金額-提領金額。
- 原幣餘額=原期初+原借方-原貸方。
- 匯率:原幣餘額≠0 時=本日餘額 ÷ 原幣餘額(四捨五入 4 位);原幣餘額=0 時為 0。
- 若幣別=本位幣(系統 LocalCurrency)且算出來的匯率為 0,自動補匯率=1(對應 VFP 2012/12/10 新增的
m.幣別=m.指定幣別 AND m.匯率=0 → m.匯率=1;此處「指定幣別」即本位幣)。
- 找不到對應總帳科目的帳戶,餘額各欄維持 0,仍會列出該帳戶。
存檔前檢核(AllowSave)¶
按 儲存 時,存檔前會擋兩件事(VFP allowsave):
- 日期必填:日期空白時跳「請先輸入日期」並中止存檔。
- 餘額一致性:明細中只要有任一列「本日餘額=0 但原幣餘額≠0」或「本日餘額≠0 但原幣餘額=0」,就跳錯誤訊息中止存檔——避免外幣帳戶只填了本幣或只填了原幣的半套資料。
存檔前整理(HandleDataBeforeEndEdit)¶
- 存檔前系統會掃描明細,把帳戶代號為空的列自動標記為
D(刪除),這些空列不會寫入資料庫(對應 VFPallowsave的IF EMPTY(帳戶代號) → REPLACE 增刪修 WITH 'D')。
新增另一張時的日期重設(AfterAddNew / addagain)¶
- 連續新增時(按完存檔再新增),新單的日期會重新帶為今天(由主檔 Source 建構時自動帶入),
AfterAddNew再把建檔日期也帶今天,方便逐日建立日報(對應 VFPaddagain的REPLACE 日期 WITH DTOC(DATE()))。
帳戶簡稱由 view JOIN 帶出¶
- 明細的帳戶簡稱不是手 key,也不是 BLL 另外拉的,而是
新增查詢時隨帳戶清單(DB view JOIN 帳戶主檔)一起帶回來顯示。對應 VFP 用U_SEEKNM('SK_BANK', 帳戶代號, '帳戶簡稱')由帳戶代號反查名稱。
列印來源(IPrintSource / GetReports)¶
- 列印頁帶報表
O140-1 銀行往來日報(抬頭「銀行往來日報」、A4、TW),資料來自 SQLiterpt_o140_bankfxr_report1。 - 報表會在明細末尾自動加一列合計(前日餘額/存入金額/提領金額/本日餘額加總;原幣餘額與匯率合計顯示為 0)。
常見問題¶
按了「新增查詢」沒反應,按鈕是灰的?
新增查詢 只在新增狀態下可用。請先按工具列 新增 建立一張新日報,按鈕才會啟用;瀏覽既有日報時刻意停用,避免覆蓋歷史資料。
明細的餘額全部是 0?
餘額是由當日總帳(DARB_QRY_ABOOK1)算出來的。若該日期沒有過帳的傳票、或帳戶主檔的科目代號沒對到總帳科目,餘額就會是 0。請確認該日有當日傳票、且帳戶主檔科目代號正確。
為什麼某些銀行帳戶沒出現在日報?
新增查詢 只撈帳戶主檔中標記列入日報(日報表=Y)的帳戶。請到銀行帳戶主檔把要納入的帳戶設為列入日報。
存檔時跳「本日餘額/原幣餘額」一個為 0 一個不為 0?
這是餘額一致性檢核:外幣帳戶不能只填本幣餘額或只填原幣餘額。請補齊原幣餘額或匯率對應的資料,讓兩者同時為 0 或同時非 0 後再存檔。
同一天想再建一張日報,存不進去?
一天只能有一張日報——日期是主鍵,重複日期會被即時擋下(日期欄標紅)。若要重做當天日報,請先刪除原本那張再新增。
可以改既有日報的金額嗎?
不行。本表單設定為不可修改(VFP IS_可修改=.F.、新版 ProgramAllowEdit=false),只提供新增、刪除、查詢、列印。需要更正請刪除後重建。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/O-Check/images/):
bankfxr-step1.png— 主畫面:日期欄+新增查詢按鈕與明細格線全貌bankfxr-step2.png— 按新增查詢後自動帶出各帳戶餘額的明細bankfxr-step3.png— 日期重複時欄位標紅的擋重提示