Показать сообщение отдельно
Старый 22.04.2022, 13:38   #1  
oleggy is offline
oleggy
Участник
 
282 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
как найти связь 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 берет эту логику) иногда корректно перебираются все линии заказа, а в каких случаях тупо начинают перебираться другие линии из других заказов?