| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Необходимо просто обновить запись 
		
		
		
		
		
		
		
	Пишу на C#: Код: ...
while ((bool)oQueryRun.Call("Next",Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing))
				{
					IAxaptaRecord rec = (IAxaptaRecord)oQueryRun.Call("GetNo", 1,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);																
					if(i==2)
					{
						ax.TTSBegin();
						object o=rec.Call("SelectForUpdate",true,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
						rec.set_field("SalesName","SOMEVALUE");						
						rec.DoUpdate();
						ax.TTSCommit();
					}
}About to update a record in table 'SalesTable' which was not selected for update (RecId is 36538235). [W-0108] Cannot edit a record in Sales orders (SalesTable). The operation cannot be completed, since the record was not selected for update. Remember TTSBEGIN/TTSCOMMIT as well as the FORUPDATE clause. (S) \Classes\xRecord\DoUpdate По видимому, selectforupdate делается иначе. Подскажите как?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			И вообще, как правильнее и красивее обновлять записи при доступе извне через COM connector?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			1. ttsbegin 
		
		
		
		
		
		
			2. у курсора вызывается метод selectForUpdate 3. делается выборка (select) по курсору 4. делается присвоение нового значения 5. курсор.update() 6. ttscommit Это изнутри аксапты. В COM д.б. похожая логика. Но если не получится - можно сделать класс, которому передавать новое значение. Класс уже вызывать через COM Кстати - я не обратил сразу внимание - у вас QueryRun. Тогда там все посложнее. У датасорса, который нужно обновить нужно поставить свойство update(true) и у QueryRun - userupdate(true). Все это нужно делать внутри ttsbegin/ttscommit А дальше - уже внутри QueryRun - делается курсор.update() 
				__________________ 
		
		
		
		
		
			Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 18.04.2006 в 11:39.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Спасибо. 
		
		
		
		
		
		
		
	Делаю так: Код: ax.TTSBegin();
IAxaptaObject oDataSourceSales= (IAxaptaObject)oQuery.Call("AddDataSource", iSalesTableID , Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
				oDataSourceSales.Call("Update",true,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);
IAxaptaObject oQueryRun = ax.CreateObject("QueryRun", oQuery,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing); 
oQueryRun.Call("UserUpdate", true,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);								
while ((bool)oQueryRun.Call("Next",Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing))
				{
					IAxaptaRecord rec = (IAxaptaRecord)oQueryRun.Call("GetNo", 1,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);	
if(i==2)
					{
						rec.set_field("SalesName","SOME NEW VAL");												
						rec.DoUpdate();	
					}	
}	
ax.TTSCommit();Как же все неудобно то...  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от murad
			
			 
Как я понимаю, выставление update=true для DataSource и userUpdate=true для QueryRun и означает "SELECTFORUPDATE"? 
		
	Как же все неудобно то... для простого select - все немного попроще. 
				__________________ 
		
		
		
		
	Возможно сделать все. Вопрос времени  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от sukhanchik
			
			 
У датасорса, который нужно обновить нужно поставить свойство update(true) и у QueryRun - userupdate(true).  
		
	Хотя может быть там по дефолту стоит QueryRun - userupdate(true).  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: murad (1). | |
| 
			
			 | 
		#7 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну ... возможно у датасорса и достаточно поставить. Просто у меня в свое время не получилось без установки свойства у QueryRun.  
		
		
		
		
		
		
			Axapta 3.0 Kernel Rollup I. Не знаю. Честно каюсь - не читал об этом. Мне указали на свойство датасорса; практическим способом я дошел до QueryRun.userupdate(). Я не претендую на знатока  . Но так как я описал - по крайней мере работает точно  
		
				__________________ 
		
		
		
		
	Возможно сделать все. Вопрос времени  | 
| 
	
 |