Как установить свойство 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 старого стиля ведут себя по-разному при непосредственном вызове (запуск на узле отчета) или в пункте меню отчета.
Порядок выполнения первого:
- в этом
- получать
- диалог
Второй проходит через класс RunbaseReportStd
в следующем порядке:
- в этом
- диалог
- получать
Это важно, потому что вы изменили запрос после того, как пользователь внес какие-либо изменения.
Поэтому перенесите изменения кода из 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();
}
Это будет работать, только если вызывается через пункт меню. Кроме того, я не мог заставить работать функцию автоматического суммирования при добавлении кода.
Вместо этого вам нужно будет добавить порядок и автосумму, используя узел сортировки запроса отчета.
Я не знаю почему, но, возможно, это потому, что вы используете автоматическое проектирование, которое генерируется во время выполнения.