跳轉到

程式資訊

  • 程式 IDCOMMISSION
  • 所屬子系統:I.帳款管理
  • 狀態:stable

業務員佣金計算

功能簡介

「業務員佣金計算」依佣金公式佣金設定)把某一會計期間(年月)內的銷貨/退貨單據展開成各業務員的應付佣金與倉租明細,產生一張佣金單,最後可一鍵把佣金與倉租轉成應付帳款(應付帳款 PAYMNT對業務員(以廠商身分)入帳。適合會計/財務人員每月結帳後使用:先建一張當期佣金單、按 Get Data 重算明細、核對無誤後再轉應付。

每筆明細都標有類別(LineFlag),代表佣金的來源:

LineFlag 中文 說明
1 Regular(正常) 當期銷貨依公式算出的佣金/倉租
2 Deduct(逾期扣回) 因帳款逾期未收而扣回的佣金
3 Pay back(補回) 先前因逾期扣回、之後收款補回的佣金(系統以負數加回)
9 Manual Entry(手動) 人工輸入的調整列

前置需求

  • 權限:I.應收應付 → 業務員佣金計算(Commission) 的新增/修改/瀏覽/列印權限;要轉應付者另需 應付帳款 PAYMNT 的新增權限。
  • 基礎資料:佣金計算結果完全取決於下列資料的維護狀況——
資料 影響什麼
佣金設定(Commissionformula) 各業務員/客戶/倉別/品號的佣金率與倉租率;沒有對應公式則該業務員佣金算 0
業務員主檔(SALES1/SALES2 帶在訂單上) 明細歸到哪位業務員;E61S43Z 開頭的業務員代號會被排除不計佣
倉別與業務員對應(Splace/倉別主檔) 倉租(WarehouseFee)歸屬的業務員;PRDI 開頭的倉別不計倉租
客戶主檔/廠商主檔 客戶簡稱;轉應付時業務員必須同時建為廠商,否則無法轉入(見欄位連動與附加功能
應收應付單據(RPHEADERA/RPMA/TRSADE/TRSAMA/ORMAST) 當期銷貨/退貨來源、訂單上的佣金率與業務員
財務類別設定 RPDEF 轉應付使用財務類別 5C(PrimeCommission),須先在 RPDEF 維護

Prime 專屬功能

本表單的計算後端走 PRIME_SALESCOMMISION / PRIME_SALESCOMMISIONCALCULATOR 等 Prime 客製 SP,屬於特定客戶的佣金制度。各代號排除規則(E61S43Z*PRDI/科目 611401611402)皆為該制度的內建邏輯。

操作步驟

新增一張佣金單

  1. 按工具列 新增。系統自動帶入(見 AfterAddNew):
    • Created Date(建檔日期)=今天
    • Specify Date(指定日期)=今天
    • Period(會計期間)=今天所屬的結帳年月
  2. 視需要把 Period 改成要計算的年月(格式 YYYY/MM),把 Specify Date 改成轉應付時要用的交易日期。
  3. Document No(單號) 由系統存檔時自動編,不需輸入。

計算佣金明細(Get Data)

  1. 確認 Period 已填且為合法年月(系統會用 Period + "/01" 試解析,格式不對會擋下)。
  2. 按畫面上的 Get Data 按鈕。系統會以該期間呼叫後端重算,把結果填入下方明細格線:
    • 拆出每位業務員的 SalesAmount(銷貨額)/Commission(佣金)/WarehouseFee(倉租)
    • 依 LineFlag 區分正常/扣回/補回列。
  3. 重算後再存檔,即把這批明細寫入佣金歷史。

重複期間的列無法重存

若某列(期間+類別+轉入單號+業務員)在佣金歷史中已存在,系統會把該列標記為不可存(CanAllowSave = -1000),避免同一筆佣金被重複建立。新算出來、歷史沒有的列才允許存檔。

修改與刪除

  1. 在瀏覽狀態下叫出要修改的佣金單,按 修改 調整 Specify Date 等欄位,或重新 Get Data 重算。
  2. 明細列只有沒有轉入單號(TransferNumber 為空)的手動列才允許刪除;由系統算出、帶有來源單號的列不可單獨刪除(見 Source 的 NeedDeleteFunction)。

查詢與列印

  1. 用工具列查詢叫出歷史佣金單。
  2. 列印:本表單實作 IPrintCondition,列印條件 Print1(Print Print Period) 會自動以目前佣金單的 Period 當查詢條件(符號 G,可設定起訖),不必手動輸入期間。

轉應付帳款(其他1)

核對佣金明細無誤後,按工具列 其他1(延伸功能一)把佣金與倉租轉成對業務員的應付帳款。詳見欄位連動與附加功能的「其他1:轉應付帳款」。

匯出 Excel

格線右鍵可選兩種匯出版型(IExcelSetting):

  1. Summary:依業務員彙總,分欄列出正常佣金/倉租、逾期扣回(Deduction)、補回(Payback)、更正(Correction)。
  2. Rep:逐列明細匯出。

欄位說明

表頭

欄位 必填 說明/格式/預設
Document No(單號) 系統自動編號,唯讀
Created Date(建檔日期) 新增時預設今天(ShortDate
Period(會計期間) 計算與列印的年月,格式 YYYY/MM;新增時預設今天所屬結帳期間。空白或格式錯誤時 Get Data 會擋下並提示
Specify Date(指定日期) 轉應付時帶入應付單的交易日期;新增時預設今天。轉應付前若為空會擋下
Is Closed(是否結案) 系統控制欄位(橘色標示);值為 Y 時不可再轉應付

明細格線

欄位 說明
APInvoice(應付發票) 轉應付後回寫的應付單號;可點超連結導覽到應付帳款(NavigateProgramClass = AP)。空白=尚未轉應付
Period(期間) 該列所屬會計期間
Transaction#(轉入單號 TransferNumber) 來源財務單號(銷貨/退貨單);手動列為空
Customer(客戶) 客戶代號
CustomerPO 客戶訂單號
Rep(業務員 SalesRepCode) 計佣業務員代號
Warehouse(倉別) 倉租歸屬的倉別
SalesAmount(銷貨額) 本幣,唯讀
Commission(佣金) 本幣,唯讀
WarehouseFee(倉租) 唯讀
LineFlag(類別) 1 正常/2 扣回/3 補回/9 手動(對照表見功能簡介

明細為唯讀

格線各欄皆 IsReadOnly=True,由 Get Data 重算產生,使用者不在格線內直接改數字,而是透過維護佣金公式、重新計算來修正。

欄位連動與附加功能

【本節是本頁重點。以下都是程式碼裡真實存在的行為。】

新增時的預設值(AfterAddNew)

當你按 新增,系統會:

  1. Created DateSpecify Date 設為今天(TodayYYYYMMDD)。
  2. Period 設為今天所屬的結帳期間TodayStatementPeriod,年月)。

Get Data 重算佣金(GetDataCommand)

當你按 Get Data,系統會:

  1. 先檢查 Period:為空、或 Period + "/01" 無法解析成日期,就跳訊息要求重填,不繼續。
  2. 呼叫 CommissionGenerateBll.GenerateData(Period) 重算,過程包含:
    • 抓單據來源:取當期銷貨(R…)與逾期扣回(R1…)單據;會計科目(accno1)為 611401611402 的單據、以及財務單號24R24 開頭(預收)的單據會被略過。
    • 拆業務員:同一張單上的 SALES1/SALES2 各算一筆;E61S43Z 開頭的業務員不計佣金。
    • 算倉租:依倉別找對應業務員計倉租;PRDI 開頭的倉別不計。
    • 套佣金率:依 佣金設定 比對「客戶代號/倉別/品號」三項條件(支援 * 萬用前置碼),取最相符的公式;訂單若有特殊佣金率(OrderEvent)則覆蓋一般佣率。
    • 逾期扣回與補回:逾期未收的單據佣金以類別 2 扣回;之後補回的以類別 3負數加回。
  3. 清空舊明細、把重算結果逐列填入格線,並依「期間+類別+轉入單號+業務員」比對佣金歷史,標記每列是否可存(CanAllowSave)。

改了佣金公式要重按 Get Data

修改 佣金設定 後,回到本表單重按一次 Get Data 才會用新佣率重算,光改公式不會自動更新已開的佣金單。

其他1:轉應付帳款(ExtendedFunction1)

當你在轉應付前,系統會依序檢查並執行:

  1. 重新整理確認資料未被刪:先 Renew 一次,若單據已被別人刪除(主鍵變了)即中止。
  2. 結案檢查Is ClosedY 時跳「已結案」訊息、不轉。
  3. 指定日期檢查Specify Date 為空時要求補填。
  4. 依業務員彙總:把明細按 SalesRepCode 分組,加總未轉應付(APInvoice 為空)的佣金與倉租;該業務員佣金與倉租都是 0 時跳過。
  5. 建立應付主檔(Twork_arp_vw_rp_m),每位業務員一張:
    • 幣別=該業務員(廠商)幣別,沒有就用本位幣(Context.Env.LocalCurrency)。
    • 程式類別P財務類別5C(PrimeCommission)(見 RPDEF)。
    • 相關單號=本佣金單的 Document No;轉入備註System 與當下日期;備註串接該業務員所有來源單號。
    • 交易日期Specify Date發票號碼 自動組為 {業務員編號}-交易月年/ 格式(業務員編號取自應付主檔欄位)。
    • 匯率 以交易日期取會計用賣出匯率U_Blrate)。
  6. 建立應付明細(Twork_arp_vw_rp_d):佣金不為 0 時開一筆品號 COM990(摘要 Commission),倉租不為 0 時開一筆品號 COM991(摘要 WarehouseFee),數量 1、單價=該業務員佣金/倉租金額,並由 TaxCalculator 自動算稅。
  7. 上傳應付:成功跳「存檔成功」;失敗顯示錯誤訊息。完成後再 Renew
  8. 查無廠商的業務員:若某業務員在廠商主檔找不到對應,會收集成清單並自動匯出 Excel 提醒你補建廠商,這些業務員的佣金本次不會轉入。

業務員要先建為廠商才能轉應付

轉應付是把佣金當成「應付給業務員」的帳款,業務員必須在廠商主檔有對應代號。沒建的會被列進匯出 Excel、該筆佣金留在佣金單未轉。

列印條件自動帶期間(IPrintCondition)

當你按 列印Print1(Print Print Period),系統自動把目前佣金單的 Period 設為列印條件起始值(比對符號 G、可設起訖),不必再手動輸入要印哪一期。

Excel 匯出兩版型(IExcelSetting)

  • Summary:依業務員把各列依 LineFlag 拆成正常佣金/倉租、逾期扣回(Deduction)、補回(Payback)、更正(Correction),彙總成一列;並依業務員代號前置碼決定排序群組。
  • Rep:原始明細逐列匯出。 另外瀏覽時會以 GetGroupCommissionHistory 補上各業務員的年度累計(YTD)銷貨額/佣金/倉租到對應列。

常見問題

按了 Get Data 卻跳訊息、算不出明細?

多半是 Period 沒填或格式不對。Period 必須是合法年月,系統會用 Period + "/01" 試著解析,像 2026/06 才會通過;空白或亂填都會被擋下。

某位業務員的佣金一直是 0?

佣金率來自 佣金設定,請確認該業務員(搭配客戶代號/倉別/品號)有對應公式且生效日早於交易日期。另外 E61S43Z 開頭的業務員代號是制度上不計佣金的;PRDI 開頭的倉別不計倉租——這些是內建排除,不是漏算。

轉應付後有業務員沒被轉入,還跳出一個 Excel?

那是「查無廠商的業務員清單」。轉應付會把佣金當成應付給業務員的帳款,業務員必須先在廠商主檔建好對應代號;找不到的會被收集進 Excel、該筆佣金留在佣金單不轉。補建廠商後重轉即可。

為什麼有些明細列存不進去?

若該列(期間+類別+轉入單號+業務員)在佣金歷史中已經存在,系統會標記為不可存,避免同一筆佣金重複建立。只有重算後、歷史裡沒有的新列才會被存檔,這是防重複的設計。

明細列為什麼不能直接改金額或刪除?

格線各欄皆唯讀,金額由 Get Data 依佣金公式重算而來;要修正請改 佣金設定 後重算。刪除方面,只有沒有來源單號(手動列)才允許刪,系統算出的列不可單獨刪除。

Is Closed 是什麼?為什麼不能轉應付?

Is Closed 是系統控制的結案旗標,值為 Y 代表該佣金單已結案;此時按 其他1 轉應付會跳「已結案」並中止,避免重複入帳。

相關功能


需補截圖清單

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

  1. commission-step1.png — 表頭(Document No/Period/Specify Date/Is Closed)與 Get Data 按鈕
  2. commission-step2.pngGet Data 重算後的明細格線(含 LineFlag 各類別列)
  3. commission-step3.png其他1 轉應付後 APInvoice 回填、可超連結到應付帳款
  4. commission-step4.png — Excel 匯出 Summary 版型(業務員彙總含扣回/補回)