22.04.2022, 13:38 | #1 |
Участник
|
как найти связь SalesLine/SalesTable в методе SalesFormLetter::chooseLines
Привет. Подскажите куда копать что бы понять по какой логике AX09 осуществляет связь в методах перебора.
Есть стоковый метод SalesFormLetter::chooseLines Внутри которого есть цикл: X++: void chooseLines(SalesParmTable _salesParmTable = null, boolean _directDeliveryUpdate = false) { ... chooseLines.reset(); // if the select button is used from saleseditlines while (chooseLines.next()) { progressTotal++; if (chooseLines.changed(tablenum(SalesTable))) { localSalesTable = chooseLines.get(tablenum(SalesTable)); mayJournalBePosted = this.mayJournalBePosted(localSalesTable); if (!localSalesTable.canCustomerBeUpdated(this.documentStatus())) { mayJournalBePosted = checkFailed(strfmt("@SYS7987",localSalesTable.CustAccount)); } } localSalesLine = chooseLines.get(tablenum(SalesLine)); ... } ... } Заметил что в некоторых случаях при формировании счета из SO на печать цикл перебирает линии из выбранного заказа - тут все OK, а в некоторых случаях по другим заказам он тупо начинает перебирать вообще другие линии других заказов. 1. Хотелось бы понять что происходит внутри методов: chooseLines.reset() chooseLines.next() 2. По какой логике (и откуда AX берет эту логику) иногда корректно перебираются все линии заказа, а в каких случаях тупо начинают перебираться другие линии из других заказов? |
|
22.04.2022, 17:18 | #3 |
Участник
|
chooseLines - это QueryRun. Т.е. запрос, сформированный до вызова данного метода. reset() и next() это просто перебор записей этой выборки
Где именно этот Query формируется в dax2009 я уже не помню. Поищи по имени переменной в самом классе. Скорее всего, будет метод с названием вроде updateQueryBuild() Вот там и посмотри, как устанавливается фильтр на SalesTable.SalesId. Там есть варианты, когда не текущий заказ используется.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|