21.01.2008, 20:13
|
#1
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
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
|
|