| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Странное поведение при обновлении форм ах2009
			 
			
			Уважаемые господа, сталкивался ли кто с подобной проблемой? При нажатии F5 на формах заказы на покупку и заказы на продажу, курсор уходит на другую запись формы (произвольно). Кажется, что такое поведение началось после накатывания обновления до версии 5.0.1500.64.91 (заметили не сразу). Используется бразильский слой. 
		
		
		
		
		
		
		
	С уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Обновлялось что? Приложение, клиент, АОС? При сильном (уровня SP) несоответствии АОСа и клиента в 2009 было много разных глюков.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Ivanhoe as is..  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Обновили все, полное соответсвие по версии клиента и сервера. Ни каких других глюков замечено не было. 
		
		
		
		
		
		
		
		
			![]() В принципе, кто нибудь сталкивался с подобным поведение АХ? С уважением, Дмитрий. Последний раз редактировалось DmitryK; 07.02.2013 в 08:37.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я так понимаю, что ни кто с подобным поведением системы не сталкивался и не может предложить как с этим бороться? 
		
		
		
		
		
		
		
	C уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я так понимаю, по F5 выполняется DS.research(true), где true - параметр _retainPosition. Сохранение позиции осуществляется за счет запоминания индекса записи в выборке и последующего перехода к записи с тем же индексом, так что теоретически курсор может уходить на другую запись, если выборка изменилась между последним обновлением формы и нажатием F5. В любом случае, стоит, наверно, посмотреть, как ведут себя другие формы в аналогичных ситуациях, например, формы справочников, где набор записей достаточно стабилен в масштабах времени работы с формой.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: DmitryK (1). | |
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Подобные проблемы есть только с формами Заказов на покупку/продажу. В обоих гридах (шапка, строки). Убрали все свои модификации этих форм, эффект остался. Возможно проблема в бразильской модификации. В российской аксапте ни кто подобного не наблюдал? 
		
		
		
		
		
		
		
		
			С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 08:57.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Значит, вероятнее всего, обновленное ядро ни при чем и дело в кастомизациях этих форм либо в изменениях, появившихся после обновления приложения. Может, с сортировкой записей в запросе там какие-то манипуляции производятся. Как минимум, при переходе к форме основной таблицы сортировка может приводить к проблемам с позиционирование курсора, может, и тут она вмешивается.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Первоначально эффект заметили при использовании кнопки на строках покупки <Настройка> - налог. Курсор переходит на другую запись. 
		
		
		
		
		
		
		
	С уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: public void automaticTotalDiscount() { PurchTable localPurchTable; ; if(VendParameters::find().AutomaticTotalDiscount) { for (localPurchTable = purchTable_ds.getFirst(true) ? purchTable_ds.getFirst(true) : purchTable_ds.cursor(); localPurchTable; localPurchTable = purchTable_ds.getNext()) { localPurchTable.updateFinalDisc(); } purchTable_ds.reread(); purchTable_ds.refresh(); purchLine_ds.executeQuery(); } } C уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Так вызывается  
		
		
		
		
		
		
		
	X++: purchLine_ds.executeQuery() запомнить позицию с помощью X++: pos = purchLine_ds.getPosition(); X++: purchLine_ds.setPosition( pos );  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: alex55 (1), DmitryK (1). | |
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо, Дим. 
		
		
		
		
		
		
		
	Просто закомментарив executeQuery() получается сохранение курсора. Вылечим следствие ..., хотелось бы понять зачем это сделано? К сожалению не могу посмотреть выполнение (состав) данного метода в российской реализации, если он такой же, то эффект должен проявляться, а судя по количеству откликов его нет. С уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
|
| За это сообщение автора поблагодарили: DmitryK (1). | |
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сергей, не совсем так. Эффект есть при нажатии F5 и кнопки на строках покупки <Настройка> - налог. Пользователь хочет посмотреть налоги по строке, а смотрит не по той, что была выбрана (в этом случае всегда по первой). Подумалось, что проблема может быть вызвана одной причиной. Начали с налогов. 
		
		
		
		
		
		
		
		
			X++: void  clicked()
{;
    element.automaticTotalDiscount();
    PurchTotals::showTaxLine(purchTable,purchLine);
}С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 13:19.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Перекрыли executeQuery() , поставили точку останова, по F5 он вызывается. 
		
		
		
		
		
		
		
	С уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Выше linkActive(). При вызове super() этого метода вызывается executeQuery()  
		
		
		
		
		
		
		
		
			С уважением, Дмитрий. Последний раз редактировалось DmitryK; 08.02.2013 в 13:41.  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вы на каком датасурсе перекрыли executeQuery() и на каком гриде жмёте F5?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			PurchLine, нижний грид (строки) 
		
		
		
		
		
		
		
	С уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В форме PurchTable обнаружен интересный метод, где отлавливаются F5.  В нем, вроде, нет ни чего наказуемого, но не очень понятно предназначение. Код метода не помечен разработчиком, напрмер /GBR. 
		
		
		
		
		
		
		
	X++: public int task(int _taskId) { int ret; int rowposition; #task ; if(_taskId == #taskFormRefreshMenu ||_taskId == #taskFormRefresh_F5 ) { rowposition = this.objectSet().getPosition(); ret = super(_taskId); this.objectSet().setPosition(rowposition); } else ret = super(_taskId); return ret; } C уважением, Дмитрий.  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Фикс не срабатывает по-видимому, потому что загадочный вызов linkActive()->executeQuery() происходит не внутри super метода task(), а чуть позже. 
		
		
		
		
		
		
		
		
			Можно попробовать действия для запоминания и восстановления позиции перенести непосредственно в метод executeQuery, а в методе task() только устанавливать флаг о необходимости таких действий. После выполнения этих действий в методе executeQuery не забыть снять флаг. Последний раз редактировалось S.Kuskov; 08.02.2013 в 15:30.  | 
| 
	
 |