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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.09.2006, 09:23   #1  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Есть форма, на ней расположен TableBox. Нужно было сделать следующее. Изменения, вставления, удаление строки должно проходить через COM объект, объявленный как Automation, при этом Navision все эти операции не должен делать. Я сделал следующим образом.

В триггере OnModify таблицы написал ERROR.
В триггере формы OnModifyRecord происходит запуск COM объекта, который изменяет данные в таблице на сервере MSSQL. OnModify отменяет эти действия на форме: возвращает старое содержимое и выделяет его. А изменения в таблице физически произошли, а в TableBox их не видно. Их можно увидеть тогда когда выйдешь из строки и обязательно вернешься в нее. Аналогично с DELETE и INSERT. Только при INSERT не возможно выйти из строки. Как выйти из строки?

Как сделать чтобы изменения были видны при смене строки?
Старый 20.09.2006, 12:07   #2  
Advisor is offline
Advisor
Участник
 
33 / 13 (1) ++
Регистрация: 07.09.2005
Цитата:
Сообщение от Programmer Посмотреть сообщение
изменения в таблице физически произошли, а в TableBox их не видно. Их можно увидеть тогда когда выйдешь из строки и обязательно вернешься в нее.
Можно написать CurrForm.UPDATE
Старый 20.09.2006, 12:25   #3  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Пробовал. Куда только не писал. Результат либо вовсе форму не открывает, либо выдает сообщение:

Недостаточно памяти (стека) с рекурсивным взовом в программе. Обратитесь к вашему системному администратору.
Старый 21.09.2006, 04:36   #4  
gennady is offline
gennady
Участник
 
92 / 11 (1) +
Регистрация: 27.09.2004
Адрес: Иркутск
А если попробовать
CurrForm.UPDATE(FALSE);
Старый 21.09.2006, 08:57   #5  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Цитата:
Сообщение от Gennady Antropov Посмотреть сообщение
А если попробовать
CurrForm.UPDATE(FALSE);
Попробовал. Получилось!!!

С OnModify и OnDELETE проблема решена. Остолась разобраться с OnInsert.

В триггере OnInsert таблицы написал ERROR.
В триггере формы OnInsertRecord происходит запуск COM объекта, который вставляет данные в таблицу на сервере MSSQL. OnInsert отменяет эту операцию. А затем не возможно выйти из вновь созданной строки. Как сделать чтобы можно было выйти из вновь созданной строки?

CurrForm.UPDATE - Выдает ошибку.
*******************************************
* -103 There is already code with this name: alx.*
*******************************************
Где alx - содержимое первого столбца, вновь созданой строки.

CurrForm.UPDATE(FALSE) - Выдает сообщение:

Внутренняя ошибка 101 в модуле 60.

Затем закрывает форму.
Старый 22.09.2006, 05:03   #6  
gennady is offline
gennady
Участник
 
92 / 11 (1) +
Регистрация: 27.09.2004
Адрес: Иркутск
Попробуйте ввести глоб. пер. NewLine [Boolean] и в триггер Form.OnNewRecord вставить код
NewLine := TRUE;
а в триггер Form.OnAfterGetRecord код
IF NewLine THEN BEGIN
NewLine := FALSE;
CurrForm.UPDATE(FALSE);
END;
Старый 22.09.2006, 06:52   #7  
Iskatel is offline
Iskatel
Участник
 
86 / 10 (1) +
Регистрация: 18.09.2006
Спасибо всем за предложенные варинты.

В случае с INSERT можно поступить проще.

В таблице триггеры не трогаем. А на форме в триггере OnInsertRecord пишем EXIT(FALSE). И ВСЁ РАБОТАЕТ!!! Огромное спасибо за помощь.
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.