Синтаксис
PROPERTY [RW, NE] OnReposition : SCAL[2] ; |
Описание
Флаг включения программного события "смена
текущей позиции зоны". По умолчанию сброшен. Соответствует флагу "Reposition" в свойствах зоны
в WED.
Непрерываемое
программное событие
перерисовки окна
уровня записи OnReposition
вызывается при позиционировании в
мастере зоны во время работы видеоконформа.
Предназначено для настройки свойств собственного окна и связанных с ним окон на
основе новой текущей позиции зоны.
Данное событие возникает
- в любой зоне любого
открытого окна, если текущая позиция в этой зоне меняется, появляется или
пропадает
- при открытии окна, даже если в зоне нет
записей (начиная с V14.148.170)
- во всех зонах открытых окон после выхода из интерактивного
редактирования без сохранения (начиная с V14.161.010)
- в рулонной зоне, если текущая позиция не изменилась, но изменились
значения полей текущей записи, и эта запись не редактируется интерактивно в
окнах собственного подключения (начиная с V14.190.060)
Из этого определения следует,
что событие "смена позиции" возникает,
например:
- При реальном перемещении стрелками
вверх/вниз по записям зоны
- В рулонной зоне при интерактивной
вставке новой записи, т.к. вставляемая
запись становится текущей. Причем, не
важно где выполняется сам процесс
вставки, в этой же рулонной зоне или в
подчиненном окне, не важно были ли в
селекте перед выполнением вставки другие
записи или он был пуст. В любом случае в
зоне появляется новая текущая запись.
- Когда в селекте не остается ни одной
записи. Это может быть, например,
- после интерактивного удаления
последней записи селекта
- при возврате в зону после выполнения
ASL-программы, которая удалила все
записи селекта
- в зоне Z неверхнего окна, если в
результате перепозиционирования в
активной зоне верхнего окна при
прохождении конформа в зону Z в результате наложенных на нее условий в
ней не отображается ни одной записи
- Если файл Owner является справочником к
файлу User, то, если при перемещении по
записям зоны с файлом User, в зоне с
мастером Owner изменилась позиция, в зоне
с мастером Owner возникает событие "смена
позиции".
- При открытии окна. Начиная с V14.148.170, считается, что с точки зрения
события OnReposition в неоткрытом окне информация о позиции не определена.
Поэтому при открытии окна данное событие вызывается всегда, т.к. при этом
неопределенное состояние переходит в определенное: "конкретная позиция" или
"нет позиции". Причина - инициализация переменных, зависящих от текущей
позиции или при отсутствии позиции.
Из этого же определения следует, что
событие "смена позиции" наоборот не
возникает, например:
- Когда не меняется позиция записи, хотя
меняется текущий ключ
- Если в подчиненном окне идет
редактирование и меняются значения полей
(в предельном случае всех), то в зоне
главного окна новые значения полей в
результате перерисовки будут
отображаться, но программное событие OnReposition там отработает только в
момент окончания редактирования.
- При неудачной попытке сместиться на
другую запись. Причиной неудачи может
быть отсутствие записи (стрелка вниз на
последней записи селекта), попытка
переместиться на заблокированную запись
и т.п.
- При различных манипуляциях, которые не
меняют текущую запись в зоне, например,
- переход в табличное редактирование
текущей записи из процесса View, т.к.
текущая позиция в зоне при этом не
меняется
- перемещение по окнам с помощью опций
PrvWin, NxtWin
- выполнение ASL-программ, не
меняющих позицию в зонах видео-окон
- Если файл Owner является справочником к
файлу User, то если при перемещении по
записям зоны с файлом User, в зоне с
мастером Owner позиция не меняется, то
событие "смена позиции" в зоне с
мастером Owner не возникает.
Особенности работы такой программы:
- RTI.StartMode=7
-
Вызывается после смены позиции в зоне.
- В панельной зоне OnReposition вызывается только когда позиция в зоне
определена. Эта позиция без вызова ACCESS
доступна со
старта в соответствующем программном курсоре. В рулонной зоне событие вызывается не только при
позиционировании на реальную запись, но и при отсутствии записи. Ситуацию
можно различать проверкой ACCESS программного курсора мастера зоны.
- Если в программе обработки данного события изменить текущую позицию в
курсоре зоны, для которой это событие вызвано, то повторно OnReposition для этой зоны не вызывается.
Еще раз подчеркну: программное
событие "смена позиции" не зависит
от того, какой именно видеопроцесс
работает в зоне окна, и работает ли вообще. Пример. Независимое
окно W имеет единственную рулонную зону Z. Процесс ShowWin запускается в
подчиненном окне SW. При этом событие "смена позиции" (если, конечно, это
указано) выполняется для панели окна SW, где стартует ShowWin, и для его
подчиненной рулонной зоны, где вообще нет процессов. Для каждого из этих событий
будет создана независимая мягкая транзакция, которая завершится при окончании
программы.
Затем в панели подчиненного окна пользователь запускает редактирование
записи - OnReposition вообще не вызывается, т.к. смены позиции не происходит. Предположим, затем
выполняется опция NxtRec (традиционно на
кнопке PgDn) для перехода к редактированию
другой записи. Теперь событие "смена позиции" выполнится
на транзакции редактирования. Если окно W в нашем
примере было бы зависимым, а в его
порождающей зоне выполнялось бы
редактирование, то и редактирование в
окне SW и все события "смена
позиции" в панели окна SW выполнялись бы
на транзакции редактирования
порождающей зоны окна W.
Программное событие появилось в версии 14.24.4,
данное свойство появилось в версии 14.101.14.