Окна по своей структуре делятся на независимые по определению (например окно RWayS (мастер окна и 1-й зоны - файл RWayS), окно Staff_A (мастер окна и 1-й зоны - файл Staff)) и зависимые по определению, например, окно Money (мастер окна и 0-й зоны - файл Staff, 1-й зоны - файл Money, 2-й зоны - файл PCalc).
Чтобы открыть окно, нужно запустить в нем видеопроцесс, выполнив соответствующую опцию с указанием имени этого окна. По отношению к другим открытым окнам каждое окно может быть открыто как
Открыть независимое окно можно так:
Зоны зависимых окон в свою очередь тоже могут иметь зависимые окна. Таким образом образуется целое дерево зависимых окон, корнем которого является независимое окно. Такую совокупность окон будем называть кланом окон. Если представлять себе зависимые окна, как дополнительные зоны порождающего окна, то клан окон может рассматриваться, как одно виртуальное окно, в котором зоны связаны в единое дерево, корнем которого является мастер независимого окна. Это именно дерево, а не граф, а следовательно существует только один путь из любой зоны Z этого виртуального окна до корня дерева - мастера независимого окна. Промежуточные зоны этого пути будем называть транзитивно порождающими или транзитивно главенствующими зонами для зоны Z.
Особенности обработки зависимого окна:
Открыть зависимое окно можно так:
Некоторые особенности более подробно:
Зона, которая была текущей при выполнении опции, открывающей зависимое окно, будем называть исходной зоной.
Зону Z будем называть зоной-кандидатом на должность порождающей зоны для некоторого зависимого окна W, если мастер окна W совпадает с мастером зоны Z или является дальним справочником дальнего Lend-а мастера зоны Z.
Упрощенно алгоритм поиска порождающей зоны можно понимать так: среди транзитивно главенствующих зон к исходной зоне (включая и саму исходную зону) выбирается ближайшая зона-кандидат, из которой строится самый короткий путь в мастер зависимого окна.
Более строго алгоритм поиска порождающей зоны для поднимаемого зависимого окна выглядит так:
Как видно, этот алгоритм определения порождающей зоны зависимого окна очень похож на алгоритм автоматического определения главенствующих зон внутри окна.
Из этого алгоритма в частности следует, что опция View(Money 1) никогда не отработает из меню, поднимаемого по F9 в окне Car.
Пример. Проект KL - Перевозки - "Путевые листы" - Enter входим в редактирование путевого, поднимается подчиненное окно RWaySE с мастером окна и 0-й зоны файлом RWayS и мастером 1-й зоны файлом RWayJ - F3 переходим в рулон с RWayJ, нужно было выбрать путевой, у которого есть рейсы - F9 - Показатели поднимается зависимое окно RWayJP с мастером окна RWayJ и мастером 1-й зоны RWayJP, причем поднимается как зависимое к зоне 1 окна RWaySE - Gray* возвращаемся в зону 1 окна RWaySE - F9 - "Дополнительный персонал" поднимается зависимое окно WayLMen с мастером окна RWayS и мастером 1-й зоны WayLMen, причем поднимается как зависимое к зоне 0 окна RWaySE несмотря на то, что исходной была зона 1 окна RWaySE
Пример: проект KL - Ценности - Склад - Объекты материального учета (попадаем в зону 1 окна Math00) - F9 - Все свойства (поднимается окно MathPrA как зависимое окно к порождающей зоне 1 окна Math00) - F10 - Ценности - Основные средства - Список (попадаем в зону 1 окна Math01) - F9 - Все свойства - окно MathPrA молча становится зависимым к порождающей зоне 1 окна Math01 (до V14.144.010 в этом случае выдавалось сообщение "Для выполнения этой операции закройте окно "Свойства объекта материального учета"")
Пример: проект KL - Персонал - Справочники - Отделы (поднимается окно Depart "Отделы" с мастером окна и единственной рулонной зоны файлом Depart) - F9 - "Все свойства" (поднимается окно DprtPro "Свойства отдела" как зависимое к процессу View в рулоне окна Depart) - Gray* (возвращаемся в окно "Отделы") - Enter (входим в редактирование отдела - записи файла Depart, редактирование в рулоне) - F9 - "Все свойства" - окно DprtPro становится зависимым к процессу Edit в рулоне окна Depart (до V14.144.010 в этом случае выдавалось сообщение "Для выполнения этой операции закройте окно "Свойства отдела""). Снова Gray* (возвращаемся в окно "Отделы") - Esc (выходим из редактирования) - окно DprtPro автоматически закрывается.
Такое поведение связано прежде всего с тем, что считается, что открытие зависимого окна из разных процессов преследует разные цели, иначе говоря ведутся разные сюжетные линии, и работа в зависимом окне может сильно различаться в зависимости от того, из какого процесса это окно поднято, например, в нем могут быть назначены разные контексты. Но если использовать окна-клоны, то для процессов View и Edit одной и той же порождающей зоны можно поднять 2 экземпляра одного и того же зависимого окна.
Как определяется транзакция для зоны Z? Просматривается цепочка транзитивно порождающих зон собственного окна, начиная от зоны Z в сторону корня. Если обнаружилась зона с процессам Ask, то транзакция определяется так. Если нашлась зона с редактированием, то транзакция берется из нее. Иначе берется транзакция видеопроцесса, из которого было открыто наше зависимое окно. Если этот процесс не порождал транзакцию, или наше окно независимое, то работа в зоне Z выполняется на параллельной транзакции.
Получается, если зависимое окно W открыто из процесса View в порождающей рулонной зоне ZZ, то последующий запуск редактирования в зоне ZZ не будет порождать транзакцию для уже открытого зависимого окна W.
Пример (действующий на 10.12.2008). Проект KL - Главное меню-Ценности-скЛад-Документы о движении ОМУ (поднимается подчиненное окно MDoc_DO) - 05 накладные на приход - F3 - Ins (поднимается подчиненное окно "Накладная на приход материальных ценностей"(MD011E) для выполнения вставки в его панели) - F3 (переходим в его рулон, одновременно поднимается подчиненное окно "Строка накладной на приход материальных ценностей" (MD011EF) для выполнения вставки в его панели) - Gray* (возвращаемся в окно MD011E) - F9 - "Экземпляры" (поднимается окно "Перечень экземпляров"(MDocLCU), попадаем в его зону 1) - Ins (выполняется вставка в рулоне окна MDocLCU). Теперь в окно MD011EF невозможно попасть ни мышью, ни Gray+/Gray*
Посмотреть как связаны между собой мастера окон, мастера зон в окне и файлы полей зоны можно с помощью диалога "Loaded Windows".