|
|
#1 |
|
Участник
|
Customer Aging Report / Отчет по срокам оплаты для клиента
продолжаем препарировать этот отчётик. обнаружились новые "открытия", которые хотелось бы обсудить с компетентными товарищами с точки зрения правильного учёта.
итак, при формировании отчёта с детализацией и без и сортировкой по дате документа получаем в случае нулевой даты документа разные данные по столбцам с просроченной задолженностью. (см. рисунки во вложении) происходит это из-за того (смотрим код метода calculateDetails класса CustBalancelistDocumentDate), что при детализации в методе queryRunOpenTransactions используется запрос CustTransCustTransOpen с сортировкой по дате транзакции, а без детализации - в методе queryRunOpenTransactionsSummary идёт создание запроса в коде, где уже группировка включается по полю даты документа. X++: switch (_dateTransactionDuedate) { case DateTransactionDuedate::TransactionDate: groupByDataSourceNo = 1; groupByFieldId = fieldnum(CustTransOpen, TransDate); break; case DateTransactionDuedate::DueDate: groupByDataSourceNo = 1; groupByFieldId = fieldnum(CustTransOpen, DueDate); break; case DateTransactionDuedate::DocumentDate: groupByDataSourceNo = 2; groupByFieldId = fieldnum(CustTrans, DocumentDate); break; default: throw error(Error::wrongUseOfFunction(funcname())); } query = new Query(); query.addDataSource(tablenum(CustTransOpen)); query.dataSourceNo(1).addDataSource(tablenum(CustTrans)); query.dataSourceNo(2).joinMode(JoinMode::InnerJoin); query.dataSourceNo(2).addLink(fieldnum(CustTransOpen, RefRecId), fieldnum(CustTrans, RecId)); X++: query.dataSourceNo(1).orderMode(OrderMode::GroupBy);
query.dataSourceNo(groupByDataSourceNo).addSortField(groupByFieldId);
query.dataSourceNo(2).orderMode(OrderMode::GroupBy);
query.dataSourceNo(2).addSortField(fieldnum(CustTrans, CurrencyCode));
query.dataSourceNo(1).fields().addField(fieldnum(CustTransOpen, AmountMST), SelectionField::Sum);
query.dataSourceNo(1).fields().addField(fieldnum(CustTransOpen, AmountCur), SelectionField::Sum);
query.dataSourceNo(groupByDataSourceNo).fields().addField(groupByFieldId);
query.dataSourceNo(2).fields().addField(fieldnum(CustTrans, CurrencyCode));в следующем же сегменте кода того же метода calculateDetails мы видим, что анализ на "пустую" дату документа смысла не имеет, ибо все транзакции уже сгруппированы, и оба варианта нулевые. X++: queryRun = this.queryRunOpenTransactions(_custTable);
while (queryRun.next())
{
custTrans = queryRun.get(tablenum(CustTrans));
custTransOpen = queryRun.get(tablenum(CustTransOpen));
this.addTrans(_custTable.AccountNum,
custTrans.Voucher,
custTrans.Invoice,
[U]custTrans.DocumentDate ? custTrans.DocumentDate : custTrans.TransDate,[/U]
this.isTransactionAPayment(custTrans),
'',
custTransOpen.AmountMST);спасибо за внимание.
__________________
Felix nihil admirari Последний раз редактировалось wojzeh; 27.10.2019 в 19:35. |
|
|
|
|
|