DBCC报错:PrimaryCmsnPayable与主项佣金CmsnPayable不匹配,求BC OOTB实现位置
Business Central中PrimaryCmsnPayable与主项佣金CmsnPayable不一致问题解析
OOTB逻辑的核心实现位置
- 表结构关联:
InvoiceItem(对应数据库表通常为[公司前缀]$Invoice Line$[后缀])的PrimaryCmsnPayable字段,与主项佣金记录(来自Commission表或Invoice Line Commission子表)的CmsnPayable字段,OOTB逻辑下应保持同步。 - 核心处理单元:
Codeunit 5902 "Commission Management"是佣金模块的核心,包含主项佣金的计算、同步逻辑,负责将佣金行的CmsnPayable值同步到InvoiceItem的PrimaryCmsnPayable字段。Codeunit 1390 "Invoice Posting"在发票行创建、修改、过账时,会调用佣金管理单元的计算函数,触发字段同步。
- 触发时机:通常在佣金行创建、发票行状态变更(如确认、过账)时,OOTB逻辑会自动同步两个字段的值。
修复方案
- 手动修正数据:针对已存在的不一致记录,可执行SQL语句同步(操作前务必备份数据):
替换UPDATE il SET il.[PrimaryCmsnPayable] = c.[CmsnPayable] FROM [YourCompanyPrefix_$Invoice Line$xxx] il JOIN [YourCompanyPrefix_$Commission$xxx] c ON il.[Primary Commission No_] = c.[No_] WHERE il.[PrimaryCmsnPayable] <> c.[CmsnPayable]YourCompanyPrefix和表名后缀为实际环境的对应内容。 - 排查自定义干扰:多数不一致是因为自定义代码修改了OOTB同步逻辑,检查是否有订阅
OnAfterCalcCommission等事件的自定义代码,或修改了Commission Management、Invoice Posting中的核心逻辑。 - 重新触发计算:未过账的发票行,可取消确认后重新操作,触发OOTB的佣金计算流程,自动同步字段值。
内容的提问来源于stack exchange,提问作者shaher
相关产品推荐
相关产品推荐

