FORM_ZONE.OnReposition


Синтаксис

PROPERTY [RW, NE] OnReposition: SCAL[2];

Описание

Флаг включения программного события "смена текущей позиции зоны". По умолчанию сброшен. Соответствует флагу "Reposition" в свойствах зоны в WED.

Непрерываемое программное событие перерисовки окна уровня записи OnReposition вызывается при позиционировании в мастере зоны во время работы видеоконформа. Предназначено для настройки свойств собственного окна и связанных с ним окон на основе новой текущей позиции зоны.

Данное событие возникает

  1. в любой зоне любого открытого окна, если текущая позиция в этой зоне меняется, появляется или пропадает
  2. при открытии окна, даже если в зоне нет записей (начиная с V14.148.170)
  3. во всех зонах открытых окон после выхода из интерактивного редактирования без сохранения (начиная с V14.161.010)
  4. в рулонной зоне, если текущая позиция не изменилась, но изменились значения полей текущей записи, и эта запись не редактируется интерактивно в окнах собственного подключения (начиная с V14.190.060)

Из этого определения следует, что событие "смена позиции" возникает, например:

  1. При реальном перемещении стрелками вверх/вниз по записям зоны
  2. В рулонной зоне при интерактивной вставке новой записи, т.к. вставляемая запись становится текущей. Причем, не важно где выполняется сам процесс вставки, в этой же рулонной зоне или в подчиненном окне, не важно были ли в селекте перед выполнением вставки другие записи или он был пуст. В любом случае в зоне появляется новая текущая запись.
  3. Когда в селекте не остается ни одной записи. Это может быть, например,
  4. Если файл Owner является справочником к файлу User, то, если при перемещении по записям зоны с файлом User, в зоне с мастером Owner изменилась позиция, в зоне с мастером Owner возникает событие "смена позиции".
  5. При открытии окна. Начиная с V14.148.170, считается, что с точки зрения события OnReposition в неоткрытом окне информация о позиции не определена. Поэтому при открытии окна данное событие вызывается всегда, т.к. при этом неопределенное состояние переходит в определенное: "конкретная позиция" или "нет позиции". Причина - инициализация переменных, зависящих от текущей позиции или при отсутствии позиции.

Из этого же определения следует, что событие "смена позиции" наоборот не возникает, например:

  1. Когда не меняется позиция записи, хотя меняется текущий ключ
  2. Если в подчиненном окне идет редактирование и меняются значения полей (в предельном случае всех), то в зоне главного окна новые значения полей в результате перерисовки будут отображаться, но программное событие OnReposition там отработает только в момент окончания редактирования.
  3. При неудачной попытке сместиться на другую запись. Причиной неудачи может быть отсутствие записи (стрелка вниз на последней записи селекта), попытка переместиться на заблокированную запись и т.п.
  4. При различных манипуляциях, которые не меняют текущую запись в зоне, например, 
  5. Если файл Owner является справочником к файлу User, то если при перемещении по записям зоны с файлом User, в зоне с мастером Owner позиция не меняется, то событие "смена позиции" в зоне с мастером Owner не возникает. 

Особенности работы такой программы:

  1. RTI.StartMode=7
  2. Вызывается после смены позиции в зоне.
  3. В панельной зоне OnReposition вызывается только когда позиция в зоне определена. Эта позиция без вызова ACCESS доступна со старта в соответствующем программном курсоре. В рулонной зоне событие вызывается не только при позиционировании на реальную запись, но и при отсутствии записи. Ситуацию можно различать проверкой ACCESS программного курсора мастера зоны.
  4. Если в программе обработки данного события изменить текущую позицию в курсоре зоны, для которой это событие вызвано, то повторно OnReposition для этой зоны не вызывается.

Еще раз подчеркну: программное событие "смена позиции" не зависит от того, какой именно видеопроцесс работает в зоне окна, и работает ли вообще. Пример. Независимое окно W имеет единственную рулонную зону Z. Процесс ShowWin запускается в подчиненном окне SW. При этом событие "смена позиции" (если, конечно, это указано) выполняется для панели окна SW, где стартует ShowWin, и для его подчиненной рулонной зоны, где вообще нет процессов. Для каждого из этих событий будет создана независимая мягкая транзакция, которая завершится при окончании программы. Затем в панели подчиненного окна пользователь запускает редактирование записи - OnReposition вообще не вызывается, т.к. смены позиции не происходит. Предположим, затем выполняется опция NxtRec (традиционно на кнопке PgDn) для перехода к редактированию другой записи. Теперь событие "смена позиции" выполнится на транзакции редактирования. Если окно W в нашем примере было бы зависимым, а в его порождающей зоне выполнялось бы редактирование, то и редактирование в окне SW и все события "смена позиции" в панели окна SW выполнялись бы на транзакции редактирования порождающей зоны окна W.

Программное событие появилось в версии 14.24.4, данное свойство появилось в версии 14.101.14.