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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.09.2004, 14:48   #1  
besenok is offline
besenok
Участник
 
64 / 10 (1) +
Регистрация: 05.08.2004
Собственно сабж ! Пользователь в других окнах формы ввел какие то данные, как мне пере позиционировать текущую запись формы ?
Пробовал вызвать Get(NewBumber) или "No." := NewNumber; Find, выдает ошибку с фразой типа объект "Имя таблицы основания" не может быть изменен !
Старый 01.09.2004, 18:24   #2  
Dzemon is offline
Dzemon
Moderator
 
1,247 / 12 (3) ++
Регистрация: 09.09.2004
Несовсем понял, но может достаточно CurrForm.UPDATE(FALSE)?
Старый 17.09.2004, 18:03   #3  
rootadmin is offline
rootadmin
Участник
Аватар для rootadmin
 
224 / 10 (1) +
Регистрация: 25.03.2003
Адрес: Москва
besenok, разобрался с проблемой?
__________________
С уваженем,
rootadmin
Старый 24.12.2007, 09:48   #4  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Столкнулся с похожей проблемой. Делаю форму типа 703. Тобишь записи на форму подставляются из Temporary таблицы. Необходимо еще сделать фильтрацию по одному полю с датой. На форму положил Textbox и на онвалидейт вызываю из функцию, в которой убираю/добавляю записи во временную таблицу согласно условия фильтра и в конце этой функции вызываю CurrForm.UPDATE. При выполнении ругается "CurrForm.UPDATE не может быть вызван отсюда". Изза чего появляется данная ошибка?
Старый 24.12.2007, 11:03   #5  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Столкнулся с похожей проблемой. Делаю форму типа 703. Тобишь записи на форму подставляются из Temporary таблицы. Необходимо еще сделать фильтрацию по одному полю с датой. На форму положил Textbox и на онвалидейт вызываю из функцию, в которой убираю/добавляю записи во временную таблицу согласно условия фильтра и в конце этой функции вызываю CurrForm.UPDATE. При выполнении ругается "CurrForm.UPDATE не может быть вызван отсюда". Изза чего появляется данная ошибка?
Все правильно пишет ошибку!!! UPDATE можно вызывать не из всех тригеров. уберите его там и попробуйте поставить свойство формы UpdateOnActivate в Yes. Должно сработать. Потом результат отпишите
Старый 24.12.2007, 12:03   #6  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Спасибо хитро придумано. Теперь там, где надо обновится, вызываю CurrForm.Activate, а в OnActivate вызывается CurrForm.UPDATE.
Срабатывает хорошо. Сейчас мелкие баги поотлавливаю и будет любо-дорого - TreeView c фильтрацией по полю.
Интересует еще такой момент. При редактировании записи понятное дело сделал переброс изменений в реальную таблицу (в триггере OnBeforePutRecord). Но этот триггер постоянно вызывается при переходе курсора с записи на запись (даже если запись совсем и не редактировалась). Это, наверно, не есть хорошо. Есть ли какие-то другие выходы, кроме как завести булинскую переменную и на триггере каждого контрола OnValidate присваивать ей TRUE, как флаг того, что были внесены изменения, и проверять это флаг в OnBeforePutRecord?
Старый 24.12.2007, 12:14   #7  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Спасибо хитро придумано. Теперь там, где надо обновится, вызываю CurrForm.Activate, а в OnActivate вызывается CurrForm.UPDATE.
Срабатывает хорошо. Сейчас мелкие баги поотлавливаю и будет любо-дорого - TreeView c фильтрацией по полю.
Интересует еще такой момент. При редактировании записи понятное дело сделал переброс изменений в реальную таблицу (в триггере OnBeforePutRecord). Но этот триггер постоянно вызывается при переходе курсора с записи на запись (даже если запись совсем и не редактировалась). Это, наверно, не есть хорошо. Есть ли какие-то другие выходы, кроме как завести булинскую переменную и на триггере каждого контрола OnValidate присваивать ей TRUE, как флаг того, что были внесены изменения, и проверять это флаг в OnBeforePutRecord?
а триггер OnModify на таблице не помогает? или я что-то не правильно понял?
Старый 24.12.2007, 12:48   #8  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Кстати может кто-нибудь разъяснит механизм, что происходит при вызове Form.UPDATE? Какой код надо написать, чтоб произошел последовательный вызов OnAfterGetRecord для всех записей на форме?
Код:
IF Rec.FIND('-') THEN
  WHILE Rec.NEXT <> 0 DO
?
Старый 24.12.2007, 12:51   #9  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Цитата:
а триггер OnModify на таблице не помогает?
Желательно чтоб весь код был в форме, а то в таблицу ведь могут и другие объекты писать.
Старый 24.12.2007, 12:58   #10  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Кстати может кто-нибудь разъяснит механизм, что происходит при вызове Form.UPDATE? Какой код надо написать, чтоб произошел последовательный вызов OnAfterGetRecord для всех записей на форме?
Код:
IF Rec.FIND('-') THEN
  WHILE Rec.NEXT <> 0 DO
А чем стандарный вариант не подходит то?
IF Rec.FINDFIRST THEN REPEAT
...
UNTIL Rec.NEXT = 0
Почему не использовить вариации Rec.хххFILTERS() чтобы работало так же, как в 703 форме?
И чего просто не вынести код в отдельную функцию и вызвать 1 раз?
Старый 24.12.2007, 13:03   #11  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от RedFox Посмотреть сообщение
А чем стандарный вариант не подходит то?
IF Rec.FINDFIRST THEN REPEAT
...
UNTIL Rec.NEXT = 0
Почему не использовить вариации Rec.хххFILTERS() чтобы работало так же, как в 703 форме?
И чего просто не вынести код в отдельную функцию и вызвать 1 раз?
RedFox, Ты из далека пошел Мне никогда не приходит в голову, что-то передумывать когда у человека конкретные вопросы, значит ему так нравится реализовывать, а если вести дискусию как лучше, то так в посте и надо писать - КАК ЛУЧШЕ РЕШИТЬ ТАКУЮ-ТО ТАКУЮ-ТО ПРОБЛЕМУ?
Старый 24.12.2007, 13:04   #12  
dmitryP is offline
dmitryP
Участник
 
3 / 10 (1) +
Регистрация: 10.12.2007
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Код:
IF Rec.FIND('-') THEN
  WHILE Rec.NEXT <> 0 DO
Цитата:
Сообщение от RedFox Посмотреть сообщение
А чем стандарный вариант не подходит то?
IF Rec.FINDFIRST THEN REPEAT
...
UNTIL Rec.NEXT = 0
между этими двумя кострукциями есть разница, в первом случае будут обработаны все записи, кроме первой, во втором - все...
Старый 24.12.2007, 13:07   #13  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от dmitryP Посмотреть сообщение
между этими двумя кострукциями есть разница, в первом случае будут обработаны все записи, кроме первой, во втором - все...
да как их обработать можно много конструкций придумать
Другой вопрос: зачем придумывать велосипед
Старый 24.12.2007, 13:39   #14  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от TRIgor Посмотреть сообщение
RedFox, Ты из далека пошел Мне никогда не приходит в голову, что-то передумывать когда у человека конкретные вопросы, значит ему так нравится реализовывать, а если вести дискусию как лучше, то так в посте и надо писать - КАК ЛУЧШЕ РЕШИТЬ ТАКУЮ-ТО ТАКУЮ-ТО ПРОБЛЕМУ?
"Вы никогда не решите проблему, если будете думать так же как те, кто ее придумал" (с) Эйнштейн
Старый 24.12.2007, 13:50   #15  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от Fordewind Посмотреть сообщение
"Вы никогда не решите проблему, если будете думать так же как те, кто ее придумал" (с) Эйнштейн
5 баллов за эту фразу - согласен полностью!
Но я немного не то имел ввиду) Человек разбил свою задачу на подзадачи и задает конкретные вопросы
Старый 24.12.2007, 14:35   #16  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Интересная дисскуссия получилась
Энштейн вообще был очень умный человек
Я разобрался где был баг, всетаки после UPDATE срабатывает OnAfterGetRecord. Все заработало.
На этой же форме правда столкнулся с еще 1 проблемой с которой сталкивался и раньше в других местах:
TempHRDep - переменная типа Record (Temporary = TRUE) на основе той же таблицы, что и у SourceTable формы.

Код:
Form - OnNextRecord(Steps : Integer) : Integer

TempHRDep.COPY(Rec);
ResultSteps := TempHRDep.NEXT(Steps);
Rec := TempHRDep;
EXIT(ResultSteps);
Код:
Form - OnModifyRecord() : Boolean

TempHRDep.TRANSFERFIELDS(Rec);
TempHRDep.MODIFY;
Вот значит запускаю форму. Редактирую какое-нибудь поле у записи, перехожу на другую запись - отредактированные изменения сохраняются. Перехожу на отредактированное поле записи, опять его редактирую, перехожу на другую запись - вылазит ошибка:
"Другой пользователь изменил запись НазваниеТаблицы после того, как она была прочитана из базы данных... и т.д."
Старый 24.12.2007, 14:51   #17  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Вот значит запускаю форму. Редактирую какое-нибудь поле у записи, перехожу на другую запись - отредактированные изменения сохраняются. Перехожу на отредактированное поле записи, опять его редактирую, перехожу на другую запись - вылазит ошибка:
"Другой пользователь изменил запись НазваниеТаблицы после того, как она была прочитана из базы данных... и т.д."
Обычно это лечится перезаходом в Navision
Старый 24.12.2007, 15:29   #18  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Нет. у меня чтото не лечится. Нид ё хелп, умные люди!
Старый 24.12.2007, 15:37   #19  
TRIgor is offline
TRIgor
Участник
 
45 / 10 (1) +
Регистрация: 19.10.2007
Цитата:
Сообщение от VasVovec Посмотреть сообщение
Нет. у меня чтото не лечится. Нид ё хелп, умные люди!
Вот и я не люблю такие ошибки!
Попробуй напиши COMIT после MODIFY, только перед этим внимательно почитай хелп по COMIT - не помешает
Старый 24.12.2007, 16:25   #20  
VasVovec is offline
VasVovec
Участник
Аватар для VasVovec
 
145 / 10 (1) +
Регистрация: 13.04.2007
Вылечил следующим образом: в OnAfterGetCurrentRecord написал:
Код:
Form - OnAfterGetCurrRecord()

HRDep.GET(Rec.Code);
Rec:=HRDep;
При выборе записи получать ее еще раз из физической таблицы. И после этого все нормально модифит и не ругается (Очевидно у записи DataStamp еще подхватывается при получении записи из таблицы, и при запросе на модификацию сверяется с тем что в таблице).
 


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

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

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