AXForum  
Zurück   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen Alle Foren als gelesen markieren

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

Code:
Form - OnNextRecord(Steps : Integer) : Integer

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

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

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

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 09:06 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.