10.02.2010, 02:10 | #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. |
|
|
|