跳轉到

程式資訊

  • 程式 IDBCURRENM
  • 所屬子系統:B.基本資料
  • 狀態:stable

匯率表

功能簡介

「匯率表」用來按日期建立一份外幣對本位幣的匯率牌告,每一張匯率表(一個單號)就是某一天某一種類別(會計/海關/其他)的完整匯率表,底下逐筆列出各外幣的買入價/賣出價/中價

財會與採購人員會在每天或每月開盤後建立當日匯率表,之後系統各種含外幣的單據(採購、銷售、應收應付、總帳傳票等)就以此表的匯率把外幣金額換算成本位幣。除了人工輸入,本表也能一鍵向台灣銀行(透過 Azure Cosmos)抓即期牌告自動帶入,並可由 AutoPilot 排程每天自動建立。

本位幣不出現在明細

明細只列「非本位幣」的幣別。新增時系統會把基本資料中除了本位幣(Context.Env.LocalCurrency)以外的所有幣別自動塞進明細,本位幣對自己的匯率恆為 1,不需要、也不會出現在表內。

前置需求

  • 權限:B.基礎資料 → B-060 匯率表 的新增/修改/刪除/瀏覽/列印權限。
  • 基礎資料:下列資料會影響本表能否正確建立與被引用——
資料 影響什麼
幣別資料 決定新增時自動塞入明細的幣別清單(本位幣以外全部帶入)
本位幣設定(環境參數 LocalCurrency 判斷哪一個幣別是本幣、不列入明細
Azure Cosmos 台灣銀行牌告資料 Query 與工具列匯率查詢能否抓到當日即期匯率

操作步驟

新增一張匯率表

  1. 按工具列 新增。系統會:
    • 自動把單號設為待產生狀態(顯示 +++,唯讀,存檔時由系統正式編號)。
    • 類別預設為 會計起始日期使用日期預設為今天。
    • 觸發 AfterAddNew,將本位幣以外的所有幣別逐筆塞入明細(買/賣/中皆為 0,待輸入)。
  2. 視需要調整類別海關會計其他)與起始日期使用日期
  3. 在明細逐筆輸入每個幣別的。每輸入一格,中(中價)會自動算成(買+賣)÷2,四捨五入到小數 4 位,不需手動填。
  4. 儲存。系統正式產生單號並寫入匯率表。

用台灣銀行牌告自動帶入

不想逐筆輸入時,在新增狀態下按條件區的 Query 按鈕,系統會依起始日期向 Azure Cosmos 取台灣銀行即期牌告,清空明細後把抓回來的每個幣別的即期買入/即期賣出填入,並自動算好中價。詳見欄位連動與附加功能

修改/刪除

  1. 用瀏覽或查詢定位到要修改的匯率表,按 修改
  2. 可調整類別、日期與各幣別的買/賣(中價隨之重算)。
  3. 將某一列的幣別清空即代表刪除該列(NeedDeleteFunction 以幣別是否為空判定)。
  4. 儲存 生效;整張匯率表的刪除走工具列 刪除

列印

  1. 按工具列 列印。系統開啟列印頁並自動把目前這張匯率表的單號帶入起訖單號(起=迄=當前單號)。
  2. 列印頁可改起訖單號區間後輸出,套用報表 匯率表(報表編號 B060-1)。詳見 匯率表列印

查詢台灣銀行即時牌告(不存檔)

  1. 按工具列的擴充功能 匯率查詢ExtendedFunction1)。
  2. 系統開啟「Azure 匯率查詢」視窗,輸入日期後按查詢,即可檢視台灣銀行即期牌告供參考,此視窗只是查詢,不會寫進匯率表。關閉後主畫面資料會重新整理。

欄位說明

主檔(單一匯率表)

欄位 必填 說明/格式/預設
單號 系統 主鍵、唯讀,新增時顯示 +++,儲存時自動編號
類別 海關會計其他,預設 會計(代碼 2
起始日期 此匯率表生效起日,預設今天;Query 取牌告也用此日期
使用日期 單據引用此匯率表的判斷日期,預設=起始日期

截止日期已隱藏

主檔仍保留截止日期欄位,但 XAML 上已註解隱藏,畫面不顯示、使用者不需輸入。手動新增時此欄不會自動帶值;僅 AutoPilot 自動建立時會把截止日期帶成=指定日期。

明細(各幣別匯率)

欄位 必填 說明/格式/預設
幣別 外幣代碼(如 USD、JPY),新增時由基本資料自動帶入;清空=刪除該列
買入價,小數 4 位,預設 0;輸入後重算中價
賣出價,小數 4 位,預設 0;輸入後重算中價
唯讀 中價,由系統算成(買+賣)÷2 四捨五入 4 位,不可手動改

欄位連動與附加功能

這一節列出「輸入某欄位/按某按鈕後系統實際會做什麼」,全部來自程式碼行為。

新增時自動帶幣別(AfterAddNew)

當你按 新增,系統會清空明細,取得基本資料中所有幣別,逐一把非本位幣的幣別加成一列明細(買/賣/中皆為 0)。因此你一開始就會看到一張「待填價的空白匯率表」,只需在每列填買/賣即可,不必自己挑要哪些幣別。

輸入買或賣 → 中價自動重算(SetAverageRate)

明細上的 兩欄綁定的是 買Binding/賣Binding(畫面用的轉接屬性)。當你改動任一格,系統會立刻呼叫 SetAverageRate(),把中=(買+賣)÷2 四捨五入到小數第 4 位後寫回中欄。所以:

  • 中欄永遠是唯讀,你不需要、也無法直接編輯。
  • 只填了買、沒填賣(或反之),中價會等於「兩者之和的一半」,並非你想要的單邊價——若只有單邊牌告,建議買賣兩格填相同值。

條件區 Query → 抓台灣銀行牌告填入明細(QueryExecute)

Query 按鈕只有在「新增」狀態下可按CanExecute 限定 Status==Add)。按下後系統會:

  1. 取目前主檔的起始日期
  2. 呼叫 TsAPI.GetFXRateFromAzureCosmos(日期) 向 Azure Cosmos 取台灣銀行該日即期牌告。
  3. 清空現有明細,把抓回來的每一個幣別逐列加入:買=即期買入(SpotRateBuying)、賣=即期賣出(SpotRateSelling),並呼叫 SetAverageRate() 算好中價,同時把明細的 linkid 接到主檔 pkid

換言之,Query 會用台灣銀行牌告覆蓋你目前明細的內容,適合「先新增、再一鍵帶當日牌告、必要時微調」的流程。

Query 只在新增狀態可用且會覆蓋明細

在修改狀態下 Query 不可按;在新增狀態下按它會清掉你已填的明細並換成牌告值,請先確認。

工具列擴充功能 匯率查詢(ExtendedFunction1 / IOther1)

按下後開啟 CosmosFxRateViewModel 模態視窗(標題「Azure 匯率查詢」,透過 ContentWindowService.ShowContentWindow 開啟)。視窗內可輸入日期查台灣銀行即期牌告僅供檢視參考,不會寫回匯率表;關閉視窗後主畫面會 DataNavigateHelper.Renew() 重新整理。

列印(IPrintViewModel / GetPrintViewModel)

列印 會建立 BcurrenmPrintViewModel,並把目前匯率表的單號同時帶成列印的起始單號與截止單號,因此預設就是列印「眼前這一張」。報表來源為 匯率表(B060-1,SQLite 資料表 rpt_b060_bcurrenm_report1)。詳見 匯率表列印

自動化:AutoPilot 每日取匯率(Bcurrenm_FxRate)

系統提供名為 FxRate 的 AutoPilot 排程任務(ProgramClass=BCURRENM),預設參數 BankAbbr=TWDate=今天。執行時會向台灣銀行(Cosmos)取牌告,自動建立一張類別=會計、起訖/使用日期=指定日的匯率表並直接存檔。可用來「每天開盤後自動產生當日匯率表」,免人工操作。

目前只支援台灣銀行(TW)

Query匯率查詢與 AutoPilot 取得的都是台灣銀行即期牌告。AutoPilot 任務若 BankAbbr 不是 TW 會直接回報「未支援」。其他銀行來源屬規劃中,尚未提供。

常見問題

新增後明細是空的、沒有任何幣別?

明細的幣別來自幣別資料。若你只維護了本位幣、沒有建立任何外幣,AfterAddNew 就沒有「非本位幣」可塞,明細自然是空的。請先到幣別資料把要管理匯率的外幣建好。

中(中價)為什麼改不了?

中價是唯讀欄位,由系統自動算成(買+賣)÷2(四捨五入 4 位)。請改,中價會跟著重算。

按了 Query 卻沒反應或抓不到匯率?

Query 只有在新增狀態下能按;且它向 Azure Cosmos 取台灣銀行牌告,需網路可連到 Azure。若該日台灣銀行沒有牌告(例如假日),就抓不到資料。確認日期是營業日、且處於新增狀態。

本位幣的匯率在哪裡填?

不需要填。本位幣對自己的匯率恆為 1,系統刻意不把本位幣列入明細。匯率表只管「外幣換本位幣」。

某個外幣不想出現在這張表,怎麼刪?

在明細把該列的幣別清空即視為刪除該列(依 NeedDeleteFunction 判定),再按 儲存。若要整張匯率表刪掉,定位到該單號後按工具列 刪除

類別(海關/會計/其他)有什麼差別?

類別用來區分同一天可能存在的多套匯率:報關用「海關」匯率、帳務換算用「會計」匯率、其他特殊用途用「其他」。新增預設為會計。單據引用時依其需求各取對應類別的匯率表。

相關功能


需補截圖清單

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

  1. bcurrenm-step1.png — 新增後的匯率表主畫面(含自動帶入的幣別明細)
  2. bcurrenm-step2.png — 條件區 Query 抓台灣銀行牌告後明細自動填入的結果
  3. bcurrenm-step3.png — 工具列「匯率查詢」開啟的 Azure 匯率查詢模態視窗