程式資訊
- 程式 ID:
ARBATCHINPUT - 所屬子系統:Other
- 狀態:stable
折讓批次輸入¶
功能簡介¶
「折讓批次輸入」讓會計人員針對單一客戶一次輸入多筆折讓(Sales Allowance)金額,系統會自動撈出該客戶尚未沖完的應收帳款(Rp_m),由使用者勾選要沖抵的帳款並指定沖帳金額,再一鍵產生一張借貸平衡的折讓沖帳傳票明細,最後以財務沖帳單(程式類別 ARALLOWANCE)的方式上傳寫回資料庫。
簡單說,這支表單把「開折讓」與「拿折讓去沖既有應收」兩個動作合在同一張批次作業裡完成,適合月底結帳時集中處理同一家客戶的多筆折讓。
程式代號與本頁檔名
本頁的 doc 檔名與 XAML 檔名沿用早期 CommprBatch 命名,但實際載入並使用的是 ARBatchInput(ProgramClass ARBATCHINPUT)這支已完成的程式;舊版 CommprBatch.xaml(標題 Notes 的聯絡單畫面)並未接上 ViewModel,不是本功能。內容一律以 ARBatchInputViewModel / ARBatchInputBll 的程式行為為準。
前置需求¶
- 權限:Other →
ARBATCHINPUT 折讓批次輸入的執行(新增)權限。 - 基礎資料:沖帳結果是否正確取決於下列資料——
| 資料 | 影響什麼 |
|---|---|
| 客戶主檔 | Customer 欄位的搜尋與帶值(沒有客戶就無法撈帳款) |
| 該客戶的應收帳款(Rp_m,財務單未沖完者) | 中間「待沖帳款」清單;沒有未沖帳款就無折讓可沖 |
財務定義(LCLRpdef,財務類別 22 折讓) |
產生傳票時自動帶入的折讓正值科目與應收(負值)科目 |
| 幣別與小數位設定 | 匯率換算本幣借貸的位數;本幣金額四捨五入 |
注意
折讓沖帳傳票的會計科目來自財務定義中財務類別 22(折讓)的正/負值科目設定。若該設定為空,產生出來的傳票科目會是空白、無法存檔,請先在財務定義維護折讓科目。
操作步驟¶
整張作業分成「上方表頭 → 中段待沖帳款 → 下方傳票明細」三段,由上而下完成:
- 在表頭 Customer 欄位搜尋並選定要開折讓的客戶。
- 一選定客戶,系統立即撈出該客戶所有「原幣應收付 ≠ 沖帳原幣」(尚未沖完)的應收帳款,填入中段的待沖帳款清單。詳見欄位連動與附加功能。
- 確認或調整表頭的交易日期 / 立帳日期 / 帳款期別 / 幣別 / 匯率(皆有預設值,見欄位說明)。
- 在上方折讓明細格線逐列填入要開立的折讓:每列輸入發票金額、發票號碼、發票日期。
- 表單預先配置了 1000 筆空白列(行號=
申請人流水號 001、002…),直接在需要的列上填數字即可;發票金額為 0 的列在存檔時會自動忽略(標記為刪除)。
- 表單預先配置了 1000 筆空白列(行號=
- 在中段待沖帳款清單,對要沖抵的每一筆帳款按
Chosen(勾選)按鈕,系統自動算出該筆可沖的沖帳金額(StrikeAmount)。可重複按Chosen取消勾選。 - 按下方的
Strike(產生折讓沖帳傳票)按鈕,系統依「折讓明細」與「已勾選帳款」自動產生下方傳票明細並結出借貸合計。 - 檢視下方傳票明細格線與右下角的原幣借/貸、本幣借/貸合計;必要時可手動微調可編輯的明細列(自動帶入的折讓正值列不可改)。
- 透過工具列(
SqlEditTurn)的儲存(Save)完成上傳,或按取消(Cancel)放棄並關閉視窗。
小技巧
勾選帳款或修改明細後若合計看起來不對,再按一次 Strike 即可重新依目前的折讓明細與勾選結果重算整張傳票,不必逐列手改。
欄位說明¶
表頭¶
| 欄位 | 必填 | 說明 / 預設 |
|---|---|---|
| Customer(客戶) | ✔ | 折讓對象客戶;選定後即帶出待沖帳款清單 |
| TransactionPostDate(立帳日期) | ✔ | 預設今天 |
| TransactionDate(交易日期) | ✔ | 預設今天 |
| StatementPeriod(帳款期別) | ✔ | 預設當月(YYYYMM) |
| Currency(幣別) | ✔ | 預設本位幣 |
| ForeignExchangeRate(匯率) | ✔ | 預設 1,必須大於 0 |
折讓明細(上方格線,逐列輸入)¶
| 欄位 | 必填 | 說明 / 預設 |
|---|---|---|
| Line No(申請人) | — | 系統預配流水號 001~1000,唯讀 |
| Invoice Amount(發票金額) | ✔ | 此筆折讓金額;為 0 的列存檔時自動忽略 |
| Invoice No(發票號碼) | — | 對應的發票號碼 |
| Invoice Date(發票日期) | — | 發票日期 |
待沖帳款(中段格線)¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| Chosen | (按鈕) | 勾選/取消此筆帳款是否納入沖帳 |
| StrikeAmount(沖帳金額) | 系統算 | 勾選時自動帶值,可微調 |
| InvoiceNo / DueAmount / PaidAmount / Currency … | — | 來自應收帳款(Rp_m)的明細,多為唯讀參考欄 |
傳票明細(下方格線,由 Strike 產生)¶
| 欄位 | 可編輯 | 說明 |
|---|---|---|
| Line No(行號) | — | 自動流水號 001、002… |
| GLAccount Code(會計科目) | ✔ | 自動帶折讓正/負值科目;可改,改後自動帶出科目說明 |
| Description(摘要) | ✔ | 自動組成 Allowance,發票號,客戶,日期 |
| Currency / Foreign Exchange Rate | ✔ | 預設本位幣、匯率 1 |
| Currency Debits / Currency Credits(原幣借/貸) | ✔ | 借貸互斥,輸入一邊另一邊自動歸 0 |
| Debits / Credits(本幣借/貸) | 系統算 | =原幣 × 匯率(四捨五入至幣別小數位) |
欄位連動與附加功能¶
這一節把「輸入某欄位/按某按鈕後系統會做什麼」整理出來,是本功能最關鍵的部分。
選定客戶 → 自動帶出待沖帳款¶
當你在 Customer 欄位選定客戶,系統會以該客戶代號呼叫 DARB_GETDATA4 查詢應收帳款主檔(Rp_m),條件為收付客廠號=該客戶且原幣應收付 ≠ 沖帳原幣(也就是還沒沖完的帳款),把結果填入中段的待沖帳款(BalanceRp_m)清單。換客戶會整批重撈,舊清單清空。
按 Chosen(勾選帳款)→ 自動計算可沖金額¶
當你對某一筆待沖帳款按 Chosen:
- 系統把該筆的選擇狀態在
Y/N之間切換。 - 取消(切回
N)時,該筆沖帳金額直接歸 0。 - 勾選(切到
Y)時,系統會算出該筆「還能沖多少」並自動帶入沖帳金額,邏輯是取下列兩者的較小值:- 該帳款剩餘可沖金額=本幣應收付 − 已沖帳本幣。
- 同一張發票的折讓剩餘額度=該發票在折讓明細的發票金額合計 − 該發票已勾選帳款的沖帳金額合計。
- 若算出來的沖帳金額為 0(無折讓額度可沖),系統會自動把該筆改回未勾選(
N),避免產生 0 元沖帳列。
備註
沖帳金額是用「發票號碼」把折讓明細與待沖帳款配對的。要讓帳款沖得到,折讓明細列的發票號碼要與該應收帳款的發票號碼一致。
按 Strike(產生折讓沖帳傳票)→ 自動展開借貸明細¶
按 Strike 後系統清空舊的傳票明細並重新產生:
- 從財務定義取出折讓(財務類別
22)的正值科目(折讓)與負值科目(應收),作為傳票兩邊的會計科目。 - 折讓借方:折讓明細中每筆發票金額 > 0 的列,各產生一列借方,科目=折讓正值科目、原幣借方=發票金額,並標記
Doc2No開頭為+++(系統自動列,使用者不可改)。 - 應收貸方:每一筆已勾選(
Y)的待沖帳款,各產生一列貸方,科目=應收負值科目、原幣貸方=該筆沖帳金額,並帶入對應的財務單號做關聯。 - 全部明細依發票號碼排序、再依原幣借方遞減排序,重新編行號,並自動補三列空白列供手動加列。
- 同步結算右下角的原幣借方 / 原幣貸方 / 本幣借方 / 本幣貸方四個合計。
傳票明細格線內的欄位連動¶
- 輸入原幣借方(Currency Debits):同列的原幣貸方自動歸 0,本幣借方自動=原幣借方 × 匯率(依幣別小數位四捨五入)。
- 輸入原幣貸方(Currency Credits):同列原幣借方自動歸 0,本幣貸方自動重算。
- 修改匯率(Foreign Exchange Rate):同列本幣借、貸方一起依新匯率重算。
- 修改會計科目(GLAccount Code):透過科目搜尋欄帶出對應的科目說明(AccountDescription)。
- 不可編輯的折讓列:
Doc2No開頭為+++的折讓正值借方列是系統自動產生的,進入儲存格編輯會被擋下(CanEdit回傳 false)。
儲存(SqlEditTurn 工具列)→ 存檔前檢核¶
按工具列儲存時,系統依序檢核(任一不過就擋存並提示):
- 客戶未填 → 擋。
- 交易日期 / 立帳日期 / 帳款期別 / 幣別任一空白 → 擋。
- 匯率 ≤ 0 → 擋。
- 借貸不平衡(傳票本幣借方合計 ≠ 本幣貸方合計)→ 擋,提示借貸不平衡不可存檔。
- 折讓總額 ≠ 沖帳餘額(折讓明細發票金額合計 ≠ 所有
+++折讓借方合計)→ 擋,提示折讓金額與餘額不符。
檢核通過後,系統把折讓明細回填客戶、日期、期別、幣別、匯率,並算出原幣應收付(發票金額+稅額)與本幣應收付,財務類別設為 22 折讓、程式類別設為應收(R),以財務沖帳(ARALLOWANCE)方式上傳;發票金額為 0 的折讓列與科目空白的傳票列會在存檔時自動標記刪除而不寫入。
其他按鈕¶
Strike(產生折讓沖帳傳票):依折讓明細與已勾選帳款重新展開下方傳票明細(詳見上文)。- 工具列儲存(Save):通過存檔檢核後以財務沖帳(
ARALLOWANCE)方式上傳。 - 工具列取消(Cancel):放棄本次作業並關閉視窗(本表單設定
CloseWindowAfterCancel = true,按取消即關閉)。
沒有列印鈕
本表單的工具列採 SqlEditTurn 預設樣式,只有「儲存 / 取消 / 離開」三顆鈕,且離開鈕已被隱藏(BtnExitVisibility="Collapsed"),因此實際可見的是儲存與取消兩顆;並未掛上列印功能(要列印需改用 SqlEditTurnPrint 樣式,本表單未使用)。
常見問題¶
選好客戶卻撈不到任何待沖帳款?
待沖帳款只列出「原幣應收付 ≠ 沖帳原幣」(尚未沖完)且收付客廠號等於該客戶的應收帳款。若該客戶名下沒有未沖完的應收帳款,清單就會是空的——請先確認該客戶確實有未結清的應收帳。
按了 Chosen 但沖帳金額一直是 0、勾選又被取消?
沖帳金額取「帳款剩餘可沖額」與「同發票折讓剩餘額度」的較小值。若你還沒在折讓明細填該發票的金額,或該發票的折讓額度已被其他帳款用光,可沖金額就是 0,系統會自動取消勾選。請先在折讓明細填好對應發票號碼與發票金額再勾。
傳票科目是空白、存不了檔?
折讓沖帳傳票的科目來自財務定義中財務類別 22 折讓 的正值科目(折讓)與負值科目(應收)。若這兩個科目沒設定,產生的傳票就會缺科目導致借貸對不上或無法上傳,請先維護折讓科目後再 Strike。
存檔時被擋,說借貸不平衡或折讓金額與餘額不符?
這是兩道存檔檢核:傳票本幣借方合計必須等於本幣貸方合計;且折讓明細的發票金額合計必須等於所有自動產生的折讓(+++)借方合計。常見原因是手改了明細又沒重按 Strike,或勾選的沖帳金額與折讓額度不一致。先重按一次 Strike 讓系統重算,再檢查兩邊合計。
下方傳票明細裡有一列改不動?
Doc2No 開頭為 +++ 的列是系統依折讓明細自動產生的折讓借方列,刻意鎖定不可編輯,以確保折讓總額與沖帳餘額一致。要調整折讓金額請改上方的折讓明細再按 Strike。
相關功能¶
需補截圖清單
以下截圖待功能 runtime 驗收後補拍(放 docs/Other/images/):
commprbatch-step1.png— 整體三段版面(表頭+折讓明細+待沖帳款+傳票明細)commprbatch-step2.png— 選定客戶後帶出的待沖帳款清單與Chosen勾選commprbatch-step3.png— 按Strike後產生的折讓沖帳傳票明細與借貸合計