| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			При изменении значения в ячейке в текущей записи, изменить значения в других...
			 
			
			Добрый день! 
		
		
		
		
		
		
		
	Дело такое: имеется запись в таблице. в этой записи через форму меняется некоторое значение N в некоторой ячейке. необходимо сделать так, чтобы в других записях в этих же ячейках (записи отбираются по какому-то правилу) изменялось на N. То есть, изменилось в одном месте - изменилось в других. Как это реализаоть? на уровне таблицы? или датасорса? или контролов? ПС Выделить в отдельную сущность не годится...  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Варианты: 
		
		
		
		
		
		
		
	1. Table.modiedField() 2. Table.update() Правильнее сделать класс, где запрашивать критерий и менять по критерию для всех подходящих записей.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			На уровне таблицы. В табличном методе update. Если важна целостность данных, то изменения делать в одной транзакции. Величину на которое изменилось значение можно определить сравнив новое значение с оригинальным this.orig().
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сделал через modifiedField - выполняется дважды. почему?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если делать через update, то произойдет дополнительное многократное выполнение update. Рекурсия произойдет..
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Фунцию можно вызывать в update, а в функции обновлять через doupdate().
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	I could tell you, but then I would have to bill you.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: S.Kuskov (1). | |
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
А если doupdate не подойдёт (например каждая запись должна при обновлении выполнять какую-нибудь свою бизнесс логику), то можно выкрутиться так: Сделайте необязательный параметр в методе, через который сообщайте коду что вызывать update для соседних записей не нужно. X++: void update(boolean _updateMultiRecord = true) { ; ttsbegin(); if (_updateMultiRecord) { // otherRecord.update(false); } super(); // other code ttscommit(); } Последний раз редактировалось S.Kuskov; 04.10.2013 в 14:23.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			modifiedField для решения таких задач не подходит потому что это событие пользовательского интерфейса, а не событие обновления данных. modifiedField вызывается ядром когда пользователь изменяет значение в соответствующем контроле. Сами изменения могут записаться в БД намного позже либо вообще не записаться (свет отключат или validate не пропустит).
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В общем, такой код получился, все работает 
		
		
		
		
		
		
		
	X++: public void update() { NVAOMAAirLines nVAOMAAirLines; ttsbegin; //Если изменился тип маршрута if (this.RouteType != this.orig().RouteType) { super(); //Отбираем все рейсы, которые хоть как-то связаны с данной строкой и... while select forupdate * from nVAOMAAirLines where (nVAOMAAirLines.AirLinesOwner == this.Num || nVAOMAAirLines.AirLinesOwner == this.AirLinesOwner) { //Меняем у них маршрут nVAOMAAirLines.RouteType = this.RouteType; nVAOMAAirLines.doUpdate(); } } ttscommit; }  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Vasiliusis
			 
 
			В общем, такой код получился, все работает 
		
	X++: public void update() { NVAOMAAirLines nVAOMAAirLines; ttsbegin; //Если изменился тип маршрута if (this.RouteType != this.orig().RouteType) { super(); //Отбираем все рейсы, которые хоть как-то связаны с данной строкой и... while select forupdate * from nVAOMAAirLines where (nVAOMAAirLines.AirLinesOwner == this.Num || nVAOMAAirLines.AirLinesOwner == this.AirLinesOwner) { //Меняем у них маршрут nVAOMAAirLines.RouteType = this.RouteType; nVAOMAAirLines.doUpdate(); } } ttscommit; } 
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ещё можно добавить условие nVAOMAAirLines.recId != this.RecId
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
|
| За это сообщение автора поблагодарили: lev (2). | |
| 
			
			 | 
		#13 | 
| 
			
			 Ищущий знания... 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да да, сорри. Опечатка. Надо ПОСЛЕ него.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 |