|
07.11.2007, 09:22 | #1 |
Участник
|
Заметил что тригер OnValidate не срабатывает (даже если его вызываешь Rec.VALIDATE(SomeField); ), если полю не присваивать значения отличного от его текущего.
Что посоветуете использовать вместо него? Или как его использовать чтоб он срабатывал при каждом вызове? |
|
07.11.2007, 10:10 | #2 |
Участник
|
На форме? В таблице? Почему не срабатывает? Срабатывает.
|
|
07.11.2007, 10:41 | #3 |
Участник
|
Цитата:
А в триггере поля или на форме (незнаю, где Вы смотрите) нет кода типа такого IF Rec.Field <> xRec.Field THEN ... |
|
07.11.2007, 11:01 | #4 |
Участник
|
Тригер на поле таблицы. Даже если просто открыть таблицу поставить курсор в записи на это поле и нажать энтер (не меняя значения этого поля), тригер OnValidate не срабатывает. И соответственно если откуда то извне пишешь Rec.VALIDATE(SomeField); и перед этим значения поля не менять - то тригер тоже не сработает. Видимо навижен смотрит на то было ли измененно значение поля или нет. У меня Navision 4 SP2
|
|
07.11.2007, 14:35 | #5 |
Участник
|
А вы считаете это странным? Почему при хождении по полям должен срабатывать триггер OnValidate()? Вот если вы встанете в поле, скопируете и тут же вставите то же самое значение - триггер отработает. Потому что ПОЛЕ ОТВАЛИДЕЙТИЛИ.
|
|
08.11.2007, 05:02 | #6 |
Участник
|
Цитата:
Знаю, есть такая бага. В принципе логику разработчиков можно понять: при вводе значения (первый раз или нового) мы вызвали validate, значение проверили (или что мы там делаем, неважно) и следовательно вызывать 2-й раз эту функцию для того же самого значения смысла нет. В принципе не смертельная фича, логика в большинстве случаев себя оправдывает. |
|
08.11.2007, 11:42 | #7 |
Участник
|
Цитата:
OnValidate работает только на обновление данных. А вот чем обновляется - должен думать программист (внедренец и т.д.), но не как не Core-developer. |
|
07.11.2007, 11:06 | #8 |
Участник
|
У меня кроме как вынести код из этого тригера в функцию, и вызывать ее из этого тригера других идей пока нет. А извне соответственно вызывать не триггер VALIDATE, а именно эту функцию. Но внутри таблицы всеравно все попрежнему тупо останется, чтобы тригер сработал надо ввести в поле какое нибуть другое значение а потом опять прежнее :/
|
|
07.11.2007, 11:08 | #9 |
Участник
|
2 RedFox
Цитата:
А в триггере поля или на форме (незнаю, где Вы смотрите) нет кода типа такого IF Rec.Field <> xRec.Field THEN ...
|
|
07.11.2007, 14:28 | #10 |
Участник
|
1. В тригере пропишите ERROR.
2. На поле, где прописан ERROR, в таблице встаньше и нажмите F2 (обновление поля текущим значением). После этого должна выйти ERROR. Если нет - у меня больше нет идей... (по крайней мере я такого НИКОГДА не встречал). |
|
07.11.2007, 14:42 | #11 |
Участник
|
Чего гадать, запости код, который у тебя висит на OnValidate.
|
|
08.11.2007, 11:49 | #12 |
Участник
|
2 RedFox
Да, в принципе согласен. Наверно "бага" надо было в кавычках написать |
|
09.11.2007, 09:41 | #13 |
Участник
|
В On Lookup надеюсь ничего нет? Т.к. это единственная причина, по которой Validate не будет
срабатывать. В остальных случаях - должон работать. |
|
09.11.2007, 10:28 | #14 |
Участник
|
Я нашел багу у себя при вызове из вне после VALIDATE забыл MODIFY написать, вернее думал тогда что надо.
|
|
09.11.2007, 13:35 | #15 |
Участник
|
|
|
09.11.2007, 13:51 | #16 |
Участник
|
А можно подробней и понятней, как разрешилось и в чем бага была?
|
|
09.11.2007, 13:54 | #17 |
Участник
|
Ну он же написал. Код в триггере OnValidate() таблицы должен был модифицировать судя по всему не поля текущей записи (иначе изменения были бы видны и сохранялись бы формой, при переходе на след запись). Человек написал код по модификации каких-то данных, а оператор MODIFY() зыбыл. В итоге изменения не закреплялись в базе данных. Отчего человек и подумал, что не срабатывает триггер, где был написан код... Смотрел на результат, которого не было.
|
|
09.11.2007, 14:00 | #18 |
Участник
|
|
|
09.11.2007, 14:06 | #19 |
Участник
|
|
|
09.11.2007, 14:10 | #20 |
Участник
|
Цитата:
Вообще извиняюсь - тема закрыта. Sorry |
|