Как установить свойство autosum в x++ для отчета morphx

У меня есть следующий код в 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 для одного и того же источника данных отчета?

1 ответ

По историческим причинам отчеты AX старого стиля ведут себя по-разному при непосредственном вызове (запуск на узле отчета) или в пункте меню отчета.

Порядок выполнения первого:

  1. в этом
  2. получать
  3. диалог

Второй проходит через класс RunbaseReportStd в следующем порядке:

  1. в этом
  2. диалог
  3. получать

Это важно, потому что вы изменили запрос после того, как пользователь внес какие-либо изменения.

Поэтому перенесите изменения кода из init в выборку, например так:

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();
}

Это будет работать, только если вызывается через пункт меню. Кроме того, я не мог заставить работать функцию автоматического суммирования при добавлении кода.

Вместо этого вам нужно будет добавить порядок и автосумму, используя узел сортировки запроса отчета.

Я не знаю почему, но, возможно, это потому, что вы используете автоматическое проектирование, которое генерируется во время выполнения.

Другие вопросы по тегам