AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.11.2011, 12:56   #1  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
ПОдскажите, плиз, как обойти след. проблему:
Имеем таблицу 37. Когда в Заказе меняем поле "No", срабатывает триггер OnValidate(), в которорм есть след. строки:
Код:
T50022.TechNo := "No.";
T50022.Modify(TRUE);
После этого Modify попадаем в триггер OnModify() таблицы 50022.
В нем прописано следующее:
Код:
IF Rec.TechNo <> xRec.TechNo THEN
   выполнить какие-то действия
Но проблема в том что на этом этапе Rec и xRec абсолютно одинаковые, в результате чего IF дает FALSE и действия не выполняются.
Как с этим бороться?
Старый 16.11.2011, 18:44   #2  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от Kadawrik Посмотреть сообщение
ПОдскажите, плиз, как обойти след. проблему:
Имеем таблицу 37. Когда в Заказе меняем поле "No", срабатывает триггер OnValidate(), в которорм есть след. строки:
Код:
T50022.TechNo := "No.";
T50022.Modify(TRUE);
После этого Modify попадаем в триггер OnModify() таблицы 50022.
В нем прописано следующее:
Код:
IF Rec.TechNo <> xRec.TechNo THEN
   выполнить какие-то действия
Но проблема в том что на этом этапе Rec и xRec абсолютно одинаковые, в результате чего IF дает FALSE и действия не выполняются.
Как с этим бороться?
Эээм, а почему логику обработки поля надо вешать на MODIFY? Почему нельзя повесить на VALIDATE TechNo?

Тогда код будет такой:

Код:
T50022.VALIDATE(TechNo,"No.");
T50022.Modify(TRUE);
Старый 17.11.2011, 12:54   #3  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Fly Посмотреть сообщение
Эээм, а почему логику обработки поля надо вешать на MODIFY? Почему нельзя повесить на VALIDATE TechNo?
Дело в том, что в Т50022 таких полей штук 10, при изменении которых нужно выполнять эту последовательность действий. Менять для каждого поля его OnValidate() было влом. И еще одно...
Цитата:
Тогда код будет такой:
Код:
T50022.VALIDATE(TechNo,"No.");
T50022.Modify(TRUE);
Изменение значений полей в Т50022 происходит в нескольких местах программы (в совершенно разных модулях), причем не через T50022.VALIDATE(...), а через простое присваивание T50022.Поле := ххх
Честно говоря, ну ооочень не хотелось бы всё это сейчас переделывать.
Если длугих, менее трудозатратныых вариантов нет, то придется делать так, как Вы предлагаете.
Старый 17.11.2011, 16:22   #4  
alexb_imported is offline
alexb_imported
Участник
 
256 / 12 (1) ++
Регистрация: 25.08.2006
Цитата:
Сообщение от Kadawrik Посмотреть сообщение
Код:
T50022.TechNo := "No.";
T50022.Modify(TRUE);
Код:
IF Rec.TechNo <> xRec.TechNo THEN
   выполнить какие-то действия
Но проблема в том что на этом этапе Rec и xRec абсолютно одинаковые, в результате чего IF дает FALSE и действия не выполняются.
А не стоит ли задуматься, почему Rec равен xRec?
Если вы в T50022.TechNo присваиваете "No.", который ничем не отличается TechNo то зачем делать MODIFY?
Старый 17.11.2011, 17:34   #5  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от AlexB Посмотреть сообщение
А не стоит ли задуматься, почему Rec равен xRec?
Если вы в T50022.TechNo присваиваете "No.", который ничем не отличается TechNo то зачем делать MODIFY?
В том-то и дело, что ДО присвоения эти значения разные (к примеру, до выполнения команды T50022.TechNo := "No." , поля содержали след. значения: T50022.TechNo = RI265,а "No." равнялось AM378
Старый 17.11.2011, 18:20   #6  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
В том-то и дело, что ДО присвоения эти значения разные (к примеру, до выполнения команды T50022.TechNo := "No." , поля содержали след. значения: T50022.TechNo = RI265,а "No." равнялось AM378
Ну и как тогда могло получиться, что xRec.TechNo и Rec.TechNo одинаковые? Они же менялись. Условие должно быть выполниться. Что-то Вы не договариваете
Старый 22.11.2011, 17:48   #7  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Fly Посмотреть сообщение
Ну и как тогда могло получиться, что xRec.TechNo и Rec.TechNo одинаковые? Они же менялись. Условие должно быть выполниться. Что-то Вы не договариваете
Расскажу как на духу, что я делаю. Итак, имеем 2 строки кода:
Код:
T50022.TechNo := "No.";   //строка 1
T50022.Modify(TRUE);      //строка 2
Прохожу еще раз с дебагером, в окошке Watch которого выведены для контроля след. переменные:
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 - НОВОЕ значение

ПАЧИМУУУУ!?!?!?
Это какой-то глюк в программе или у меня уже в голове глючит и я за деревьями не вижу леса?
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:52.