0

我在报告的 init() 中有以下代码:

QueryBuildDataSource    qbdsTable;
QueryOrderByField       QueryOrderByFieldTransDate;
QueryOrderByField       QueryOrderByFieldDimZone
QueryOrderByField       QueryOrderByFieldDimCC;
;

super();

qbdsTable = query.dataSourceTable(tableNum(Table));
QueryOrderByFieldTransDate = qbdsTable.addOrderByField(fieldNum(Table, TransDate));
QueryOrderByFieldTransDate.autoSum(true);
QueryOrderByFieldDimZone = qbdsTable.addOrderByField(fieldNum(Table, DimZone),SortOrder::Descending);
QueryOrderByFieldDimZone.autoSum(true);
QueryOrderByFieldDimCC = qbdsTable.addOrderByField(fieldNum(Table, DimCostCenter));
QueryOrderByFieldDimCC.autoSum(true);

并且 autosum 属性运行正常(我已经为用于计算这些小计的字段设置了 SumAll 属性)。

问题是,每当我尝试添加 groupBy 字段或选择字段时, autosum 属性不再受支持(不再显示小计):

qbdsTable.addSelectionField(fieldNum(Table, AmountMST), selectionField::Sum);

或者

qbdsTable.addGroupByField(fieldNum(Table, TransDate));

我曾尝试使用:

qbdsTable.addSortField(fieldNum(Table, TransDate));
qbdsTable.autoHeader(1, true);

但我有同样的问题

有谁知道如何在报告的同一个数据源上同时使用 autosum 和 addGroupByField ?

4

1 回答 1

0

由于历史原因,旧式 AX 报表在直接调用(在报表节点上运行)或通过报表菜单项调用时表现不同。

第一个的执行顺序是:

  1. 在里面
  2. 拿来
  3. 对话

第二个RunbaseReportStd按以下顺序通过类运行:

  1. 在里面
  2. 对话
  3. 拿来

这很重要,因为您在用户进行任何更改后更改了查询。

因此,将您的代码更改从 init 移动到 fetch,如下所示:

public boolean fetch()
{
    QueryBuildDataSource qbdsCustTrans = query.dataSourceTable(tableNum(CustTrans));
    ;
    qbdsCustTrans.addSelectionField(fieldNum(CustTrans, AmountMST), selectionField::Sum);
    qbdsCustTrans.addGroupByField(fieldNum(CustTrans, AccountNum));
    qbdsCustTrans.addGroupByField(fieldNum(CustTrans, TransDate));
    qbdsCustTrans.addGroupByField(fieldNum(CustTrans, CurrencyCode));
    //info(qbdsCustTrans.toString());
    return super();
}

这只有在通过菜单项调用时才有效。此外,当通过代码添加时,我无法使自动求和功能正常工作。

相反,您必须使用报告查询的排序节点添加排序依据和自动求和。

我不知道为什么,但这可能是因为您使用了在运行时生成的自动设计。

于 2015-03-10T07:29:34.797 回答