MS Dynamics 365 Operations跨公司RDP报表数据异常求助
解决Dynamics AX RDP报表跨公司运行时数据异常(大量值为0)的问题
你遇到的这个跨公司报表数据异常问题,我帮你梳理几个关键排查点和修复方案,应该能解决问题:
1. 调整QueryRun的跨公司设置时机
你当前是先创建QueryRun再调用allowCrossCompany(true),但这个顺序可能导致跨公司设置没有完全生效。正确的做法是先给原始查询对象启用跨公司,再基于它创建QueryRun,修改代码如下:
public void processReport() { ProjTable projTable; ProjTransPosting projTransPosting; CostControlTransCommittedCost costControlTransCommittedCost; EstimateTemplatePeriod EstimateTemplatePeriod; Query query; QueryRun queryRun; // 先获取报表关联的查询,启用跨公司属性 query = this.parmQuery(); query.allowCrossCompany(true); // 基于启用跨公司后的查询创建QueryRun queryRun = new QueryRun(query); while (queryRun.next()) { // ... 后续循环逻辑保持不变 } this.rangesToTable(this.parmQuery()); }
2. 确认临时表的跨公司存储属性
你的临时表tmpWIP如果设置了SaveDataPerCompany = Yes,会被绑定到当前法人实体,跨公司的数据无法正确存储或读取。请在AOT中找到tmpWIP表:
- 修改
SaveDataPerCompany属性为No - 保存并重新生成临时表
这个设置能让临时表变成全局存储,容纳所有公司的数据,不会被当前公司上下文过滤。
3. 验证AOT查询所有数据源的跨公司开关
你提到已经在AOT查询中启用了跨公司属性,但要确保所有参与连接的数据源都开启了这个设置:
- 打开AOT中的
WIP查询 - 逐个检查每个数据源(ProjTable、ProjTransPosting、CostControlTransCommittedCost、EstimateTemplatePeriod)的
AllowCrossCompany属性是否为Yes - 保存查询并重新生成
如果某个数据源没开跨公司,会导致该表只能读取当前公司的数据,关联字段自然会出现0值。
4. 排查数据关联逻辑的跨公司兼容性
在循环中通过queryRun.get()获取多表记录时,要确保表之间的关联在跨公司场景下有效:
- 比如
ProjTransPosting和ProjTable的连接条件,是否依赖公司范围?如果原查询的连接没考虑跨公司,会导致部分记录无法匹配,字段值为0。 - 可以先单独测试AOT查询:运行
WIP查询,手动选择跨公司范围,查看返回结果中的AmountMst、CostAmount等字段是否正常,确认查询本身没有问题。
5. 检查报表公司范围参数的传递
你已经添加了公司范围参数,要确保它正确传递到查询中:
- 确认报表的公司范围参数是多值选择,并且绑定到查询的
DataAreaId范围 - 当选择当前公司时,检查查询的
DataAreaId范围是否正确包含当前公司ID,没有被错误过滤
按照以上步骤逐一排查,应该就能解决大量值为0的异常问题。
内容的提问来源于stack exchange,提问作者jhowe
相关产品推荐
相关产品推荐

