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
		 
		
		
		
		
		
		
		
	 | 
	
	| 
	
 
		
		
		
		
		
		
		
		
		
		
		
			
		
		
		
 
	 |