Показать сообщение отдельно
Старый 21.01.2008, 20:13   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Angry SalesLine.initFromSalesTable() - кроме журналов, никогда корректно не отрабатывает?
По ходу ковыряния в безобидном коде импорта строк заказов наткнулся на один вроде бы как косяк в стандартном приложении. Связан косяк с тем, что код инициализации строки заказа по его шапке, написанный в наследниках класса SalesLineType, видимо, корректно не отрабатывает никогда, за исключением закупок с типом журнал (SalesType::Journal). Дело в том, что на таблице строк заказов метод initFromSalesTable() имеет весьма лаконичный вид:
X++:
void  initFromSalesTable(SalesTable salesTable)
{
    this.type().initFromSalesTable(salesTable);
}
В свою очередь, метод SalesLine.type() возвращает экземпляр класса-наследника SalesLineType, создаваемого в зависимости от типа строки закупки - поля SalesLine.salesType, значение которого должно быть по идее сперва скопировано из шапки заказа, чего в SalesLine.initFromSalesTable() не происходит. В то же время "нормальный" код создания строки заказа по шапке, по-моему, выглядит так:
X++:
salesLine.clear();
salesLine.initValue();
salesLine.initFromSalesTable(salesTable);
// ...
таким образом, получается, что при таком сценарии создания строки заказа всегда будет вызываться метод класса SalesLineType_Journal.initFromSalesTable(), который, к слову, даже не перекрыт в этом классе, а, к примеру, метод класса SalesLineType_ProjectItemReq.initFromSalesTable() вызван при таком сценарии не будет. Вообще-то, это единственный класс-наследник SalesLineType, в котором данный метод штатно перекрыт, так что последствия такого "недочета" практически никто может и не заметить, но все же как-то... неприятно.

Проверялось на приложениях 3.0 SP3, 3.0 SP5, 4.0 SP1