|  02.11.2011, 16:36 | #1 | 
| Участник | 
			
			Вопрос вроде банальный и простой. Но у меня проблема. Есть таблица 50000, в ней поле Field1. Когда в таблице T37 меняем поле No., то в Т50000 поле Field1 тоже меняется. В триггере OnValidate для поля No. таблицы 37 есть строки: Код: IF ("No." <> xRec."No.") AND (xRec."No." <> '') THEN BEGIN
   T50000.Field1 := "No.";
   T50000.MODIFY;
END; | 
|  | 
|  02.11.2011, 16:51 | #2 | 
| Участник | 
			
			Чтобы вызвался триггер, надо передать параметр в процедуру Modify. Вот так: Код: T50000.MODIFY(TRUE); | 
|  | 
|  02.11.2011, 17:20 | #3 | 
| Участник | |
|  | 
|  16.11.2011, 12:56 | #4 | 
| Участник | 
			
			ПОдскажите, плиз, как обойти след. проблему: Имеем таблицу 37. Когда в Заказе меняем поле "No", срабатывает триггер OnValidate(), в которорм есть след. строки: Код: T50022.TechNo := "No."; T50022.Modify(TRUE); В нем прописано следующее: Код: IF Rec.TechNo <> xRec.TechNo THEN выполнить какие-то действия   Как с этим бороться? | 
|  | 
|  16.11.2011, 18:44 | #5 | 
| Участник | Цитата: 
		
			Сообщение от Kadawrik
			   ПОдскажите, плиз, как обойти след. проблему: Имеем таблицу 37. Когда в Заказе меняем поле "No", срабатывает триггер OnValidate(), в которорм есть след. строки: Код: T50022.TechNo := "No."; T50022.Modify(TRUE); В нем прописано следующее: Код: IF Rec.TechNo <> xRec.TechNo THEN выполнить какие-то действия   Как с этим бороться? Тогда код будет такой: Код: T50022.VALIDATE(TechNo,"No."); T50022.Modify(TRUE); | 
|  | 
|  17.11.2011, 12:54 | #6 | 
| Участник | Цитата: Цитата: 
		
			Тогда код будет такой: Код: T50022.VALIDATE(TechNo,"No."); T50022.Modify(TRUE); Честно говоря, ну ооочень не хотелось бы всё это сейчас переделывать. Если длугих, менее трудозатратныых вариантов нет, то придется делать так, как Вы предлагаете. | 
|  | 
|  17.11.2011, 13:33 | #7 | 
| Участник | 
			
			Попробуйте в табличке написать ф-цию, в которую будете передавать булево значение и вызывать перед modify, а в modify сделайте Код: IF (Rec.TechNo <> xRec.TechNo) or (переданная переменная) THEN выполнить какие-то действия | 
|  | 
|  17.11.2011, 16:22 | #8 | 
| Участник | Цитата: Если вы в T50022.TechNo присваиваете "No.", который ничем не отличается TechNo то зачем делать MODIFY? | 
|  | 
|  17.11.2011, 17:34 | #9 | 
| Участник | 
			
			В том-то и дело, что ДО присвоения эти значения разные (к примеру, до выполнения команды T50022.TechNo := "No." , поля содержали след. значения: T50022.TechNo = RI265,а "No." равнялось AM378
		 | 
|  | 
|  17.11.2011, 18:20 | #10 | 
| Участник | Цитата: 
		
			В том-то и дело, что ДО присвоения эти значения разные (к примеру, до выполнения команды T50022.TechNo := "No." , поля содержали след. значения: T50022.TechNo = RI265,а "No." равнялось AM378
		
	   | 
|  | 
|  22.11.2011, 17:48 | #11 | 
| Участник | Цитата: Код: T50022.TechNo := "No."; //строка 1 T50022.Modify(TRUE); //строка 2 T50022.Zoom.TechNo Rec.Zoom.TechNo xRec.Zoom.TechNo Курсор стоит на стороке 1 (т.е. как я понимаю строка эта еще не выполнилась), переменные имеют след. значения: T50022.Zoom.TechNo - старое значение Rec.Zoom.TechNo - Error: Symbol Rec was not found xRec.Zoom.TechNo - Error: Symbol xRec was not found Нажимаем F8. Курсор переходит в строку 2. Наши переменные: T50022.Zoom.TechNo - НОВОЕ значение Rec.Zoom.TechNo - Error: Symbol Rec was not found xRec.Zoom.TechNo - Error: Symbol xRec was not found Еще раз F8 - попадаем в триггер OnModify таблицы 50022. Переменные становятся: T50022.Zoom.TechNo - Error: Symbol TechNo was not found Rec.Zoom.TechNo - НОВОЕ значение xRec.Zoom.TechNo - НОВОЕ значение ПАЧИМУУУУ!?!?!? Это какой-то глюк в программе или у меня уже в голове глючит и я за деревьями не вижу леса? | 
|  | 
|  22.11.2011, 19:26 | #12 | 
| Участник | 
			
			Все верно. Вот если вы будете делать T50022.VALIDATE(TechNo, "No."), тогда в триггере OnValidate увидите разное значение Rec и xRec. Эта информация даже есть во встроенном хелпе   Статья "xRec and FIELDNO". | 
|  |