|
07.01.2011, 01:59 | #1 |
Участник
|
Тормозное рассопоставление по клиентам
Пометка проводок для рассопоставления по клиентам в AX 2009 как-то очень уж тормозила. Оказалось, что дело было в двух э... особенностях локализации. Во-первых, метод \Data Dictionary\Tables\CustAdvanceInvoiceSettlement_W\Methods\existsCustSettlement слишком "расплывчато" понимает связь между строками и шапкой накладных:
X++: if (custInvoiceJour && paymentVoucher && paymentDate) { select sum(LineAmount) from salesLine join custInvoiceTrans where salesLine.RefReturnInvoiceTrans_W == custInvoiceTrans.RecId && custInvoiceTrans.InvoiceId == custInvoiceJour.invoiceId; if (abs(salesLine.LineAmount) < abs(custInvoiceJour.InvoiceAmount)) // ... AX 2009 SP1 EE RU5 (5.0.1500.2985) |
|
07.01.2011, 02:15 | #2 |
Участник
|
Если кому интересно, запрос вызывался отсюда \Data Dictionary\Maps\CustVendSettlement\Methods\markOffsets:
X++: while select crossCompany offset order by RecId desc where ((this.OffsetCompany == offset.TransCompany && this.OffsetRecId == offset.TransRecId) && (this.TransCompany == offset.OffsetCompany && this.TransRecId == offset.OffsetRecId)) || ((this.TransCompany == offset.TransCompany && this.TransRecId == offset.TransRecId) && (this.OffsetCompany == offset.OffsetCompany && this.OffsetRecId == offset.OffsetRecId)) && /* <SYS> (offset.CanBeReversed == true || _old) </SYS> */ // <GEEU> (offset.CanBeReversed == true || _old) && (offset.TransDate == this.TransDate || CompanyInfo::features_W() != CRSEFeatures_W::RU) // </GEEU> |
|
03.09.2012, 14:12 | #3 |
Участник
|
Цитата:
Сообщение от gl00mie
Если кому интересно, запрос вызывался отсюда \Data Dictionary\Maps\CustVendSettlement\Methods\markOffsets:
X++: while select crossCompany offset order by RecId desc where ((this.OffsetCompany == offset.TransCompany && this.OffsetRecId == offset.TransRecId) && (this.TransCompany == offset.OffsetCompany && this.TransRecId == offset.OffsetRecId)) || ((this.TransCompany == offset.TransCompany && this.TransRecId == offset.TransRecId) && (this.OffsetCompany == offset.OffsetCompany && this.OffsetRecId == offset.OffsetRecId)) && /* <SYS> (offset.CanBeReversed == true || _old) </SYS> */ // <GEEU> (offset.CanBeReversed == true || _old) && (offset.TransDate == this.TransDate || CompanyInfo::features_W() != CRSEFeatures_W::RU) // </GEEU> Это условие X++: (offset.TransDate == this.TransDate || CompanyInfo::features_W() != CRSEFeatures_W::RU) Также есть метод в map CustVendSettlement.initFromCustVendTrans где строчка X++: this.TransDate = max(_custVendTrans.TransDate, _custVendTrans.LastSettleDate); |
|
03.09.2012, 15:04 | #4 |
Участник
|
Коллеги столкнулись с этой проблемой и вроде как даже успешно с ней справились. Суть проблемы в том, что при сопоставлении пары проводок, одна из которых попадает в закрытый по ГК период, дата сопоставления CustVendSettlement.TransDate получается отличной от даты проводки CustVendTrans.TransDate. А локализаторы зачем-то приделали поиск парной записи сопоставления строго по дате проводки, вот она и не находится в таких ситуациях. Вылечилось тем, что тупо закомментировали это условие в \Data Dictionary\Maps\CustVendSettlement\Methods\markOffsets, вернув поведение к международному функционалу.
|
|
|
За это сообщение автора поблагодарили: Daiver (1). |
03.09.2012, 16:15 | #5 |
Участник
|
А можно чуть подробнее пример с разными датами?
__________________
Ivanhoe as is.. |
|
03.09.2012, 16:20 | #6 |
Участник
|
Сопоставляется, допустим, поставка/отгрузка с датой проводки в периоде, который на момент сопоставления уже закрыт по ГК, с оплатой, дата которой на момент сопоставления - в открытом по ГК периоде. В результате формируются проводки сопоставления, в которых для оплаты CustVendSettlement.TransDate == CustVendTrans.TransDate, а для поставки/отгрузки CustVendSettlement.TransDate != CustVendTrans.TransDate. Кажется, как-то так получалось...
Последний раз редактировалось gl00mie; 03.09.2012 в 16:22. |
|
|
За это сообщение автора поблагодарили: Logger (3), Ivanhoe (3). |
05.05.2014, 18:26 | #7 |
Участник
|
up-ну тему.
Вопрос собственно такой : 1. Для чего было добавлено условие X++: (offset.TransDate == this.TransDate || CompanyInfo::features_W() != CRSEFeatures_W::RU) 2. Получается, что при рассопоставлении проводок возможна ситуация когда одна проводка из пары будет рассопоставлена, а другая нет. Аналогичная проблема с реверсом суммовых разниц при рассопоставлении. (Возможны случаи когда они не реверсируются) Т.е. напрашивается некий механизм контроля, проверяющий перед рассопоставлением, что сумма по custVendTransSettlement, которые мы "нагалкали", в сумме дает 0. ( По аналогии балансировки дебета и кредита при разноске ГК ). Как-то странно что система позволяет такое "половинчатое" рассопоставление и никак не проверяет баланс по custVendTransSettlement. Какие мысли есть ? Последний раз редактировалось Logger; 05.05.2014 в 18:30. |
|
Теги |
ax2009, баг, локализация, ошибка, план запроса, производительность, рассопоставление, сопоставление |
|
|