1. Концептуальное описание архитектуры Global FrameWork for Oracle

1.1. Краткая аннотация платформы Global Framework

GlobalFrameWork for Oracle – мощный инструмент, созданный Компанией "Бизнес Технологии", позволяющий разработчику просто и удобно создавать многоязыковые клиент-серверные приложения, использующие для хранения систему управления базами данных Oracle.

Процесс от создания справочника в репозитарии данных до его вывода в пункт меню приложения занимает минимум времени. Разработчик создает новый класс, указывает его атрибуты, в том числе ссылочные на другой класс, запускает процесс компиляции, после чего автоматически создаются, как широкий набор серверных методов по работе с классом, так и клиентские формы для работы с данными. Вы можете дополнить базовые автоматически создаваемые методы своими, отредактировать созданные формы для отображения объектов, а также создать свои сложные интерфейсы. Использование многочисленных сервисов, а также механизмов данных наследования классов, атрибутов, методов позволит существенно сократить время на разработку приложения.

На данной технологической платформе созданы все продукты семейства Global, охватывающие все аспекты хозяйственной и финансовой деятельности предприятий: бюджетирование, управление договорной деятельностью, материально-техническое снабжение, расчеты с контрагентами, управление персоналом, расчет заработной платы, бухгалтерский и налоговый учет, управление автотранспортом, основными фондами и многое другое. Данные продукты хорошо зарекомендовали себя и успешно эксплуатируются на предприятиях различного профиля.

Программные продукты созданные с помощью GlobalFrameWork отличает:

  • Высокая скорость разработки приложений;

  • Полная открытость приложений для модификаций, сопровождения, проектных доработок.

  • Современный многоязыковый интерфейс;

  • Наличие большого количества компонентов, возможности простого построения сложных форм, расширенные возможности для работы с табличными, древовидными списками, кросс-отчетами, графическими диаграммами, сводными таблицами, диаграммами Гантта и многое другое;

  • Высокая производительность на базах данных с большим объемом, обусловленная как самой СУБД Oracle, так и механизмами взаимодействия с ней.

    Есть примеры работы корпоративной системы учета Global-System на базе данных объемом более чем 100 Гб при количестве пользователей более 500;

  • Наличие системы управления пользователями и безопасностью (администрирование), позволяющей создавать политики безопасности для доступа к данным;

  • Наличие подсистем отвечающих за репликацию данных, интеграцию со сторонними приложениями;

Разработка в среде GlobalFrameWork for Oracle ведется с использованием подсистемы «Global - Конфигуратор».

1.2. Арихитекура Global Framework for Oracle

1.2.1. Основные сведения

1.2.1.1. Основы архитектуры

Система GlobalFrameWork имеет в своей основе архитектуру клиент-сервер с тонким клиентом. В качестве сервера используется Oracle9i/10g. Вся бизнес-логика, метаданные уровня представления данных на клиенте (т.е. описание пользовательских интерфейсов и диалогов) хранятся на уровне сервера.

Основными составляющими системы являются:

  • Данные классов, структурированные по модулям, и обладающие возможностью наследования
  • Метаданные, описывающие бизнес-логику и пользовательский интерфейс приложений
  • Система администрирования и управления доступа к данным
  • Система репликации, позволяющая обмениваться данными с другими серверами с установленной системой Global
  • Интегратор, позволяющий производить двухсторонний обмен данными с любыми OLE DB источниками данных
  • Система распространения или Deployment'а, позволяющая создавать скрипты установки и обновлений системы
../../_images/GlobalFramework_Architecture.png

1.2.1.2. Общие сведения о понятиях

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

Понятие представляет собой набор текстовых описаний некоторой сущности или общности. Например, текстовыми представлениями понятия «Валюта» являются «Валюта», «Валюты», «Введите валюту», «Национальная валюта», «Валюта документа» и т.д. Критерий объединения представлений понятия в одно общее, целое понятие является вопросом, не имеющим четкого ответа. Оно осуществляется на основе общности смыслового представления, удобства при поиске и наличия единого типа данных. Одно из текстовых представлений понятия считается базовым и именно оно выводится в общем списке понятий.

1.2.1.3. Принципы модульности

Модуль представляет собой некоторую совокупность функциональности системы, сгруппированную по принципу логической общности. Каждый объект, зарегистрированный в системе, принадлежит какому-либо модулю. Основными составляющими модуля являются классы, выборки и серверные методы, сгруппированные в типы и пакеты.

Модуль может использовать или требовать наличия некоторого набора других модулей. Это требование выражается в том, что объекты, или функциональность, заложенная в модуль, не будут работать в случае отсутствия в системе другого, требуемого модуля. Этот принцип позволяет разнести модули на верхнеуровневые и низкоуровневые – по градации их использования. Самым низкоуровневым является модуль ядра (BTK), он не требует для своей работы наличия других модулей и требуется для функционирования любого другого модуля, являясь платформой системы. Особняком стоит модуль BTKRuntime, не являющийся серверным модулем, но зарегистрированный в системе для фиксации версий смарт-клиента (клиентского приложения системы). К низкоуровневым модулям относятся общеиспользуемые модули, реализующие функциональность, востребованную во многих подсистемах, это модули BS (базовые справочники), TAX (налоги), CUR (валюты), KER (ядровые справочники) и т.п. К низкоуровневым модулям относятся также системные модули – AC (администратор), RPT (отчеты), INT (интегратор).

Высокоуровневые модули – это модули, которые реализуют определенную бизнес-логику и являются основой работы подсистем. Например, подсистема Global Stock функционирует на основе высокоуровневого модуля STK, а подсистема Global Payment функционирует на основе двух высокоуровневых модулей – STM и PM. Высокоуровневые модули по возможности изолированы друг от друга и не требуют наличия других высокоуровневых модулей для своей работы. Этот принцип является основой масштабируемости системы. В этом подходе бывают исключения, обусловленные исключительно логической взаимосвязью модулей, например, модуль SLR (зарплата) использует модуль HRM (персонал).

Примеры зарегистрированных модулей:

Системное имя Наименование Описание
AC Администратор Содержит классы, выборки отвечающие за систему управления пользователями и безопасностью
BS Базовые справочники Общеиспользуемые справочники
BTK Ядро системы Обеспечивает работу других модулей, является платформой для их создания и хранилищем метаданных системы
RPT Отчеты Модуль настройки отчетов, печатных форм и профилей печати

1.2.2. Начало работы

1.2.2.1. Главная форма приложения Конфигуратор

После входа в систему под созданным пользователем с правами разработчика, необходимо выбрать приложение «Конфигуратор».

После выбора приложения происходит открытие его главной формы. Главная форма состоит из главного меню приложения, панели настроек в верхней части приложения, панели быстрого запуска в левой части приложения и панели задач в нижней части приложения.

При старте приложения, если выставлена соответствующая настройка, может быть сразу открыто окно напоминаний. Настройка, отображать или не отображать окно напоминаний при старте приложения осуществляется индивидуально для каждого приложения и каждого пользователя самим пользователем системы. Изменить настройку можно при помощи пункта главного меню приложения: Настройки -> Напоминания -> Показывать напоминания при старте приложения.

Панель быстрого запуска, расположенная слева, содержит часто используемые операции, позволяющие ускорить работу при конфигурировании системы. Она может быть скрыта при помощи кнопочки с крестиком в ее верхнем правом углу. Управление видимостью панели быстрого запуска осуществляется пользователем под себя, индивидуально для каждого приложения при помощи пункта главного меню: Вид -> Панель быстрого запуска. Внешний вид панели быстрого запуска настраивается при помощи пункта: Вид -> Стиль панели быстрого запуска.

Панель настроек, расположенная в верхней части приложения, содержит тулбар с кнопками, а также ряд полей с начальными настройками по работе с приложением. Поле «модуль» позволяет определить, в рамках какого модуля ведется работа. Выбранный модуль подставляется в качестве настраиваемого фильтра в открываемые формы с перечнем классов или выборок. Поле «Уровень разработки» позволяет подставить значение настройки уровня разработки, на котором будет вестись работа при настройке пользовательских интерфейсов. Система Global FrameWork позволяет вести настройку интерфейсов на нескольких уровнях разработки, с возможностью переопределения настроек на более высоких уровнях. При этом изменения верхних уровней переопределяют настройки более нижних и не теряются при обновлении нижних уровней.

Панель задач внизу приложения содержит перечень закладок по числу окон, открытых в приложении и служит для быстрого переключения между ними. Если в одном из окон не сохранены данные, это будет отражено на иконке его закладки. Перечень окон, открытых в приложении, также можно просмотреть внутри пункта главного меню «Окно». Видимость панели задач управляется при помощи пункта главного меню: Вид -> Список окон внизу экрана.

../../_images/GlobalFramework_Architecture_Configarator.png

Кроме того, в нижней части приложения может отображаться строка статуса. В ней отображаются подсказки при наведении на кнопки и операции. Видимость строки статуса управляется под пользователя и приложение при помощи пункта главного меню Вид -> Строка статуса.

1.2.2.2. Создание нового модуля

Для регистрации нового модуля необходимо зайти в список модулей и релизов и добавить новый модуль. Для модуля необходимо ввести его системное имя и выбрать представление понятия. Системное имя модуля должно состоять из 2х или 3х символов латиницы, наиболее полно (путем сокращения) отражающих его назначение. Системное имя модуля затем будет использоваться в начале системных имен всех классов данного модуля. Для нового модуля должно быть создано новое представление понятия, для которого необходимо выбрать системное имя понятия, совпадающее с системным именем модуля. В представлении понятия написать наименование, наиболее точно отражающее назначение нового модуля.

При настройке модуля необходимо задать ссылки на другие модули – подключенные или используемые в данном модуле. Подключенные модули – это модули, необходимые для работы текущего настраиваемого модуля. Подключение других модулей может потребоваться, например, в том случае, если ссылочный атрибут класса Вашего модуля будет принимать значения из справочника другого модуля., т.е. будет ссылаться на другой модуль. Таким образом, из класса одного модуля можно сослаться на класс другого модуля только в случае наличия взаимосвязи между ними. При указании ссылочности модулей отслеживается целостность, т.е. идет проверка на цикличность ссылок. Если модуль А использует модуль Б, а модуль Б использует модуль В, то модуль В уже не может использовать модуль А.

../../_images/GlobalFramework_Architecture_CreatenewUnit.png

Создайте новый модуль. В рамках данного курса обучения будет рассмотрен модуль «Библиотека», в рамках которого будет автоматизирован процесс выдачи книг в библиотеке. По-английски библиотека – library, поэтому назовем наш новый модуль LBR. Внимание! Если в рамках обучения на одной базе данных осуществляется обучение нескольких пользователей, необходимо дать этому модулю имя LB <Номер обучающегося>. Выберите наименование модуля из перечня понятий, в котором создайте новое понятие под этот модуль. Дайте новому понятию системное имя одноименное имени модуля и создайте для него текстовое представление с наименованием «Библиотека». После этого модуль готов к работе.

Совет: Ядровой модуль BTK-Common стоит подключить сразу после создания нового модуля.

1.2.3. Проектирование классов

1.2.3.1. Общие сведения о классах

Класс является хранилищем совокупности объектов, имеющих одинаковые характеристики, подчиняющихся общим настройкам и операциям, функционирующих в рамках единой логики. Классы поддерживают наследование друг от друга в рамках дерева классов. Каждый класс содержит весь перечень собственных экземпляров объектов, а также все объекты классов-потомков.

Разработчику в рамках системы Global Framework предоставлена возможность визуального проектирования классов.

Класс содержит набор атрибутов, которые могут быть как значимыми (предназначенными для ввода значения определенного типа данных), так и ссылочными (предназначенными для выбора значения атрибута из справочника или другого множества). Помимо этих двух простейших типов атрибутов, атрибуты класса могут иметь переменную ссылочность, поддерживать ссылочность на другой класс, определять состояние объектов класса. Совокупность атрибутов класса определяется перечнем атрибутов, пришедших по наследованию от классов-предков, и перечнем собственных атрибутов классов.

1.2.3.2. Окружение класса

../../_images/GlobalFramework_Architecture_ClassEnviroment.png

Класс должен иметь уникальное имя в пределах всего дерева классов. Имя класса должно быть не более 24 символов и максимально точно передавать сущность объектов, являющихся экземплярами данного класса. Имя класса должно задаваться английским словом или сокращением нескольких слов в единственном числе, именительном падеже. В имя класса необходимо включать аббревиатуру модуля класса, затем символ подчеркивания (для модуля библиотеки он должен начинаться с “LBR_” или “LB1_”..“LB9_”) .

Класс имеет многоязыковое именование, определяемое при помощи представления понятия. Классу сопоставляется конкретное понятие и одно из представлений данного понятия. Наименование должно отражать полное название класса на языках, зарегистрированных в системе. Название должно отражать суть одного экземпляра данного класса. Например, для класса, экземплярами которого является товары, правильным системным именем будет «Good», а именованием представления «Товар».

Окружение класса создается автоматически при компиляции класса и включает в себя:

  • Два типа Oracle, отвечающие за серверную часть (реализующие серверный интерфейс для работы с классом), содержащие как служебные операции, отвечающие за добавление и удаление объекта класса, изменения значений его полей (атрибутов), блокировку, копирование элемента класса и т.д., так и пользовательские функции процедуры и функции для работы с элементами класса.
    • XXX_ClassNameDPI – системный тип, содержащий всю базовую бизнес-логику по работе с элементами класса. Данный тип не может быть отредактирован и создается(пересоздается) каждый раз при компиляции класса.
    • XXX_ClassNameAPI – пользовательский тип, являющийся наследником типа системного XXX_ClassNameDPI. В данном типе могут быть переопределены системные процедуры и функции, содержащие в типе XXX_ClassNameDPI, а также могут быть добавлены пользовательские методы по работе с объектами класс
  • Представление Oracle (View) XXX_ClassName для доступа к объектам класса.
  • Таблицу(ы) хранения элементов класса.
  • Выборку класса для представления объектов класса в клиентской форме и стандартный набор операций для работы с объектами класса через интерфейс.

1.2.3.3. Дерево классов

Для просмотра дерева классов откройте дерево классов (в главном меню Конфигуратора «Сущности -> Классы» или соответствующая кнопка на главном тулбаре приложения). Откроется дерево, отражающее иерархию наследования классов в системе. На самом верхнем уровне находится общий класс-предок всех классов системы, он называется «CLASS». В этом классе присутствует единственный атрибут ID «Идентификатор», являющийся первичным ключем, и наследующийся во все остальные классы. На втором уровне находятся классы, предназначенные для разделения всех классов системы на несколько отдельных иерархических ветвей наследования, по принципу разделения функциональности и смысловой нагрузки классов. Рассмотрим их подробнее:

BTK_Plan “Планирование» Служебная ветка хранения ядровых классов, отвечающих за сервис настройки расписаний
BTK_Salary «Зарплата» Специальная ветвь иерархии, на уровне которой выставлена служебная настройка, запрещающая формирование объектных типов с серверными методами. Предназначается для специальных классов подсистемы Global Salary
BTK_Setting «Настройки» Ветвь иерархии классов, предназначенная для создания под ней классов, хранящих настройки.
ClassArray “Пространство классов» Иерархия предназначена для хранения классов, которые в качестве объектов содержат ссылки на другие классы. Поэтому, на уровне ClassArray объявлен дополнительный атрибут idRefClass, ссылочный на классы.
Collection «Коллекции» Ветвь иерархии предназначена для хранения классов, зависимых от некоторых других классов в рамках смысловой подчиненности. Объекты этих классов не имеют права на самостоятельное существование, а только в рамках объекта другого, управляющего класса. Как правило, эти классы описывают детализацию других классов – справочников и документов, и входят в состав бизнес-объектов в качестве зависимых классов.
Document «Документы» Одна из основных ветвей иерархии классов, предназначена для классов, хранящих документы. Документом считается сущность, формализующая некоторый момент осуществления бизнес-процесса, его подтверждение. Как правило, документ имеет дату, номер и состояние, а класс-документ выступает в качестве верхнеуровнего класса в бизнес-объекте.
FilterClasses «Классы фильтров» Это классы, предназначенные для хранения временных настроек фильтрации, подбираемых пользователем в процессе его работы. Это особая ветвь иерархии, для которой дополнительно создается временная таблица с именем <Имя класса> GTT, предназначенная для хранения временных настроек фильтрации. Для их возможного сохранения для повторного использования, для класса этой иерархии имеется и постоянная структура хранения, совпадающая с именем класса.
Journal «Журналы» К журналам относятся классы, хранящие в себе некоторые моментальные снимки процесса или состояния некоторого объекта. Примером могут являться классы, предназначенные для хранения показаний измерительных приборов, ведения логов или аудита, истории некоторых объектов.
Process «Процессы» Служебная иерархия, предназначенная для хранения классов, объектами которых являются бизнес-процессы.
Reference «Справочники» Одна из основных ветвей иерархии классов, предназначена для хранения справочной информации. Все классы, так или иначе описывающие некоторую сущность, способную на самостоятельное существование, и не относящуюся к документам, должны быть отнесены в данный раздел.
Report «Отчеты» Иерархия классов предназначена для хранения сущностей, напрямую связанных с построением отчетов.
Rule «Правила» Служебная иерархия классов, предназначенная для описания классов, связанных с настройкой правил работы бизнес-процессов.
Template «Шаблоны» Ветка классов предназначена для хранения классов, описывающих шаблоны для создания объектов других классов.
../../_images/GlobalFramework_Architecture_ClassTree.png

Реактировать классы, находящиеся на 1 и 2 уровнях наследования запрещено. Создание новых классов должно осуществляться под уже существующими ветвями иерархии, как правило, внутри документов, справочников, коллекций и журналов.

1.2.3.4. Процесс создания и настройки классов

Вцелом, создание новой функциональности в Global FrameWork проходит через последовательное прохождение нескольких этапов:

  1. Создание Er-win диаграммы пользовательских классов в рамках модуля или бизнес-объекта, создание UML-диаграммы бизнес-логики.
  2. Создание класса
  3. Настройка собственных свойств класса
  4. Настройка атрибутов класса
  5. Компиляция класса
  6. Настройка коллекций (зависимых классов)
  7. Настройка бизнес-объекта, в который входит класс.
  8. Компиляция классов, включенных в бизнес-объект.
  9. Настройка серверных методов по работе с классом
  10. Настройка визуальных интерфейсов при помощи выборок класса

1.2.4. Пример создания и настройки класса

1.2.4.1. Создание класса

В рамках данного примера будет создан класс, позволяющий описать сущность «Читатель», приведенную в рамках ER-диаграммы, полностью рассматриваемой в практическом занятии к данному уроку. Итак, нам необходимо создать следующий класс:

../../_images/GlobalFramework_Architecture_NewClassDef.png

Данное задание подразумевает, что уже был создан модуль LBR, в рамках которого и будет создан этот класс. Если Вы создали модуль с другим кодовым именем, то необходимо будет для создаваемого класса выбрать системное имя, начинающееся с кодового имени Вашего модуля.

Открываем дерево классов, выбираем ветку Reference «Справочники». В дереве классов имеются две кнопки создания нового класса: «Создать новый класс на текущем уровне иерархии» и «Создать новый класс-наследник от текущего класса» (одна под другой). Первая операция позволяет создать новый класс на том же уровне иерархии классов, что и тот класс, который является для Вас текущим. Если Вы хотитете создать класс-наследник от текущего класса, необходимо использовать вторую операцию. Для создания нового справочника TST_Employees необходимо раскрыть ветку классов Reference, встать на любой из классов внутри этой ветки и выбрать операцию «Создать новый класс на текущем уровне иерархии». Либо встать на класс Reference и выбрать «Создать новый класс-наследник от текущего класса».

После создания откроется карточка нового класса:

../../_images/GlobalFramework_Architecture_CreateNewClass.png

Note

Если по какой то причине, после создания нового класса его карточка не открылась, и Вы все еще находитесь в дереве классов, то перейдите на последнее из MDI-окон, открытых в Конфигураторе. Это и есть карточка Вашего класса, которая открылась, но фокус ввода остался в дереве классов, по системной причине, которая будет устранена в очередных версиях Global Framework.

Введите системное имя Вашего класса - LBR_User. По умолчанию класс получает модуль, совпадающий с модулем класса предка, поэтому при создании класса в справочниках, он получит модуль BTK. Измените модуль, выбрав созданным Вами модуль. В качестве наименования выберите представление понятия. При этом, для новых классов лучше создавать новое понятие. Если необходимо, введите описание класса, поясняющее его назначение.

Бизнес-объект класса пока не будем указывать, он будет сопоставлен позже.

Флаг «Абстрактный класс» означает, что в данном классе не могут быть созданы объекты, и что он создан как класс-предок. Флаг «Заключительный класс» говорит о том, что у класса не может быть наследников. Его выставление позволяет наиболее оптимально сформировать представление класса (VIEW), одноименное с классом, поэтому выставляйте его в случае уверенности в том, что у класса не будет наследников.

Настройка «Табличный класс» означает, что класс будет создан в особом режиме, в котором у него не будет ни предсавления, ни таблиц мэпирования. В этом режиме класс создается как таблица, и права на SELECT будут выдаваться прямо на эту таблицу. В случае необходимости хранения в классе очень большого объема данных, отсутствии необходимости в создании классов-наследников, и наличии потребности в массовых DML над объектами класса, создавайте новые классы как табличные.

Флаг «Разрешено удаление» позволяет удалить этот класс из дерева классов. Если он не выставлен, в удалении будет отказано.

От нашего класса «Пользователь библиотеки» впоследствии будут созданы классы-наследники – «Читатель» и «Контрагент», поэтому для него можно сразу выставить признак «Абстрактный класс».

1.2.4.2. Настройка свойств класса

На закладке «Основные свойства» определен ряд параметров, непосредственно влияющих на работу с объектами этого класса. Рассмотрим основные из них:

Вид карточки Если данное свойство имеет значение «Модальная», то после открытия карточки объекта данного класса, в рамках текущего приложения можно будет работать только в этой карточке. Остальные окна текущего приложения будут недоступны, впрочем, как и все пункты главного меню. Если свойство имеет значение «Не модальная», то в рамках одного приложения существует возможность переключаться от одного окна к другому, карточки объектов класса будут открываться в качестве отдельных окон (так называемых MDI-окон) приложения.
Древовидный класс Свойство необходимо установить в значение «Да», если объекты класса необходимо представить в виде некоторой иерархии (дерева). При выборе значения «Да» будет открыта форма настройки дерева, в которой необхоимо указать атрибут класса, ссылающийся на родительский объект дерева. В случае выбора этой настройки, после компиляции у формы появится новая операция "Добавить на уровень ниже", а объекты класса будут предствлены в виде дерева с использованием соответствующего компонента вместо списочной формы, используемой по умолчанию.
Добавлять "Не определено" в вып. список Свойство необходимо для настройки представления объектов класса в виде выпадающего списка (ComboBox) при помощи отображения LookUp, создаваемого автоматически. Если свойство включено, то в списке кроме объектов класса будет существовать фиктивная запись с идентификатором равным NULL и заголовком "Не определено". Свойство по умолчанию включено.
Анализ ссылочности при удалении Включенное свойство позволяет отслеживать перед удалением объекта все объекты которые на него ссылаются и выдавать предупреждение при наличии таковых. При этом будет выдан интерфейс сервиса замены ссылочности, в котором будет иметься возможность осуществить перевод всей имеющеся ссылочности с текущего объекта, на другой объект данного класса.
Задавать вопрос о подтверждении удаления Включение данного свойства позволяет выводить форму подтверждения при удалении объекта. По умолчанию выключено.
Сохранять изменения при удалении Включение данного свойства позволяет автоматически сохранять изменения при удалении объекта. При этом отмена удаления становится невозможна.
Доступно копирование объектов Включение данного свойства добавляет на списочной форме операцию копирования объекта.
Доступна информация об объекте Включение данного свойства добавляет на списочных формах операцию копирования объекта. При копировании будет предпринята попытка копирования значений всех атрибутов объекта. Если какие то из них не удастся скопировать (например, вследствие ошибок уникальности), то ошибоки предупреждений выдаваться не будет, а в скопированном объекте значение этих атрибутов будут пустыми.
Вести аудит по классу Включение данного свойства позволяет вести аудит по всем изменениям происходящим с объектами класса, таким как создание, изменение, удаление. При этом в аудит заносится информация о том, кто и когда произвел изменения, а также с какого на какое изменилось значение атрибута объекта.
Поддержка прикреплённых файлов Возможные значения свойства: нет, да, с историей. При установке значения "Да" или "C историей" в выборке класса появится закладка "Прикрепленные файлы" на которй можно прикреплять файлы к объектам класса. При установке значения "С историей" будет доступна возможность хранения истории изменения прикрепленного файла.

Note

Описание каждого из свойств всегда можно получить, нажав кнопку со значком помощи на тулбаре с перечнем свойств.

Включим для нашего примера некоторые из свойств (на усмотрение обучающегося, но за исключением свойства «Древовидный класс», которое будет рассматриваться при создании класса подразделений). Например, включим поддержку прикрепленных файлов, возможность копирования, ведение аудита и выдачу подтвеждения при удалении.

1.2.4.3. Создание атрибутов класса

Перейдем на закладку атрибутов в карточке класса. В списке, расположенном на этой закладке, создаются атрибуты, которыми характеризуются объекты класса. Атрибуты класса строго типизированы, в рамках данного урока мы рассмотрим основной, умолчательный тип «Значимый». Значимые атрибуты, это атрибуты любого типа данных, не ссылающиеся на какие либо объекты системы. В рамках нашего первого класса LBR_User нет ссылочных атрибутов, они будут созданы позже.

Создадим атрибуты «Код» и «Описание» при помощи соответствующей кнопки в списке атрибутов. При вводе атрибута в списке осуществляем заполнение полей «Системное имя», в котором указываем системное имя атрибута на английском языке (в соответствии с правилами Венгерской нотации), выбираем представление понятия в поле «Наименование».

Важно: Тип данных значимого атрибута класса определяется при помощи типа данных его понятия. Для значимого атрибута необходимо выбрать такое представление понятия, у понятия котрого указан тип данных. Именно с этим типом данных будет создан атрибут при компиляции. Смена типа данных будет означать миграцию атрибута в другой столбец с новым типом данных. Поэтому будьте осторожны при смене типа данных у какого либо понятия, сначала проанализируйте, кем это понятие используется (для этого в карточке понятия имеется соответствующая закладка).

Для значимых полей в их списке нас могут интересовать только поля с порядковым номером, видимостью и настройками хранения атрибута. Поле «Порядковый номер» влияет на порядок вывода атрибута в списке и карточке по умолчанию. Поле «Видимость» управляет видимостью атрибута. Поля «Таблица хранения» и «Колонка хранения» определяют, в каком столбце какой таблицы будут храниться значения данного атрибута для объектов класса.

При помощи кнопки «Отобразить/скрыть детализацию» можно открыть для просмотра и редактирования дополнительные свойства атрибутов класса. Перечислим основные из этих свойств, имеющих значение для значимых атрибутов класса:

Закладка «Основные свойства»:

Тип редактора Данное свойство определяет тип редактора атрибута в интерфейсе по умолчанию (Default отображение автогенерирующейся выборки класса). Для значимых атрибутов, если тип редатора не определен явно, он будет выставлен в выборке в соответствии с типом данных атрибута. Если указан явно - будет использоваться в интерфейсе отображения и редактирования по умолчанию.
Представление понятия Наименование представления понятия, выбранное для атрибута класса, по умолчанию будет являться наименованием, отображаемым для этого атрибута в списках и карточках объектов класса. При редактировании поле «Наименование» в списке атрибутов изменяется именно это свойство. Оно транслируется в выборку, автоматически создаваемую для класса, в отображение Default.
Только чтение Если данный признак включен - при создании выборки соответствующие атрибуты также будут доступны только для чтения и атрибут будет не доступен для редактирования.
Обязателен для ввода Свойство определяет необходимость заполнения значения этого атрибута для корректности объекта класса. В объектном типе DPI в методе AfterEdit при выставлении обязательности для ввода будет сгенерирована проверка на наличие значения в этом атрибуте.
Входит в заголовок

Заголовок объекта - это текстовое представление, наиболее полно отражающее его суть. Значение атрибута с выставленным свойством по умолчанию будет фигурировать в заголовке объекта.

Заголовок по умолчанию формируется в объектном типе DPI в методе GetHeadLine как конкатенация через пробел всех атрибутов с выставленным флагом "входит в заголовок" в порядке следования порядковых номеров атрибутов. На сеттеры атрибутов, входящих в заголовок, происходит его перевычисление с сохранением в общий репозиторий заголовков в BTK_ObjectClass.

В случае переопределения разработчиком заголовка, и зависимости его от атрибутов, не отмеченных флагом "Входит в заголовок", или атрибутов других классов, необходимо позаботиться о том, чтобы заголовок пересчитывался в репозитории заголовков в случае изменения величин, от которых он зависит. Перевычисление заголовка любых объектов не табличных классов можно осуществить при помощи вызова <Имя класса>API.SetHeadLineObject(<id объекта>)

Входит в мнемокод

Мнемокод объекта - это текстовое представление, уникальным образом характеризующее объект. Используется для поиска объекта не по его идентификатору, а по мнемокоду.

Как правило, в классе присутствует только один атрибут, являющийся мнемокодом.

Для мнемокода в объектном типе DPI формируется метод GetMnemoCode, который по id объекта возвращает его значение мнемокода. Там же формируется метод FindByMnemoCode, который на вход принимает строку мнемокода, и возвращает ID объекта, если объект с таким мнемокодом найден. На сеттеры атрибутов, входящих в мнемокод, происходит его перевычисление с сохранением в общий репозиторий мнемокодов в BTK_ObjectClass.

В случае переопределения разработчиком мнемокода, и зависимости его от атрибутов, не отмеченных флагом "Входит в мнемокод", или атрибутов других классов, необходимо позаботиться о том, чтобы мнемокод перевычислялся в репозитории заголовков в случае изменения величин, от которых он зависит. Перевычисление мнемокода любых объектов не табличных классов можно осуществить при помощи вызова <Имя класса>API.SetMnemoCodeObject(<id объекта>).

При выставлении настройки атрибуту класса, для него автоматически выставляются свойства хранения: индексировать с уникальностью, индекс без учета регистра. Об этом нужно помнить, и если Вы снимаете признак мнемокода, выставленный по ошибке, то снять и эти свойства.

Закладка «Визуальные настройки»:

Объектная характеристика

Свойство означает, что атрибут будет отображаться на специальной закладке "Характеристики", в том случае, если для класса включен флаг отображения характеристик (настраивается на закладке "Группы и характеристики"). Для того, чтобы харакетристики не отображались одновременно и в карточке, и на закладке "Характеристики", сделайте такой атрибут не видимым.

Для атрибутов, являющихся объектными характеристиками, можно управлять видимостью в зависимости от конкретного объекта. Например, если для класса включен сервис группировки - то, такой атрибут можно использовать в качестве характеристики группы. Он будет доступен на закладке "Группы и характеристики" в карточке объекта в зависимости от того, входит ли текущий объект в группу, для которой определен этот атрибут как характеристика.

Видимость Свойство используется для задания видимости по умолчанию в интерфейсах редактирования объектов класса.
Порядковый номер Свойство используется при задании порядкового номера по умолчанию для атрибутов выборки класса.
Порядок табуляции Свойство используется при задании порядка табуляции (обхода контролов) по умолчанию для атрибутов выборки класса при редактировании объекта в карточке.
Использовать в фильтре по умолчанию Флаг, определяющий настройки автоматической генерации фильтра по умолчанию. В случае его выставления, в выборке будет сформирован стандартный фильтр по умолчанию, в котором атрибут, для которого выставлен флаг использования в фильтре по умолчанию, будет фигурировать в качестве параметра фильтрации. Фильтр после создания будет требовать донастройки.
Общая ширина контрола (с надписью) Свойство опеределяет ограничение (в символах, примерно 8 пикселей один символ) в длине контрола редактирования данного атрибута, при редактировании в карточке. Размер ограничения включает в себя длину наименования (из представления понятия).
Маска ввода Позволяет задать маску ввода, которая по умолчанию будет применена к атрибуту выборки, созданной для данного класса.
Выравнивание

Указывает, каким образом будет выравниваться значение в редакторе. При этом для разных типов данных значения по умолчанию отличаются: для цифровых и денежных типов данных - выранивание происходит по правому краю;

для остальных - по левому краю.

Закладка «Свойства хранения»:

Значение по умолчанию серверного метода

Значение или выражение по умолчанию для атрибута класса. Подставляется при вставке нового объекта (при вызове метода InsertItem). Код будет сформирован в DPI-типе.

Тип данных вводимого значения должен совпадать с типом данных атрибута с учетом автоматического преобразования из строки в тип данных атрибута.

Значение по умолчанию колонки хранения Значение по умолчанию, которое будет использовано при создании структуры хранения объектов класса (таблиц мэпирования) в качестве значений по умолчанию для соответствующей атрибуту колонки.
Индекс

Определяет необходимость создания индекса для атрибута класса. Значимый атрибут по умочланию не индексируется, ссылочный индексируется. Допустимые значения:

  • Без индекса
  • Обычный индекс
  • Уникальный индекс
  • Bitmap индекс
Индексация без учёта регистра В случае выставления флага, в сочетании с предыдущей настройкой, будет создан функциональный индекс по UPPER.
Условие ограничения По значению свойства будет предпринята попытка создания ограничения на столбец (constraint)

Настройте для атрибутов класса свойства, которые сочтете необходимыми. Рекомендуется выставление свойства «Мнемокод» для атрибута «Код» и огранизации по нему индексации без учета регистра, а также выставления для него обязательности для ввода.

../../_images/GlobalFramework_Architecture_ClassAttrProp.png

1.2.4.4. Компиляция

Процесс компиляции класса создает широкий набор серверных методов по работе с классом, так и автоматически создается окружение для представления :

  • Два типа Oracle реализующие серверный API-интерфейс для работы с классом, служебные операции, отвечающие за добавление и удаление объекта класса, изменения значений его атрибутов, блокировку, копирование элемента класса и т.д.
  • Представление Oracle (View) XXX_ClassName для доступа к объектам класса.
  • Таблица(ы) хранения элементов класса.
  • Клиентские формы для работы с объектами
    • в редактируемой и нередактируемой списочной форме
    • в автоматически создаваемой карточке, которую разработчик может быстро поменять в соответствии со своими требованиями.

Скомпилируйте созданный класс при помощи кнопки, расположенной на тулбаре «Скомпилировать класс с наследниками и подготовить к работе из приложения». Компиляция осуществляется несколько секунд, после чего выдается сообщение «Компиляция успешно завершена». В случае выдачи сообщения об ошибке его необходимо проанализировать и решить проблему. Наиболее частые проблемы - это попытка скомпилировать класс до того, как хотя бы один раз скомпилирован другой класс, на который ссылается данный, а также блокировка пользователями таблицы, при попытке изменить во время компиляции структуру хранения класса.

../../_images/GlobalFramework_Architecture_ClassNewAttr.png

Дополнительные возможности компиляции позволяют осуществить компиляцию класса предка, без перекомпиляции наследников, а также выполнить частичную перекомпиляцию класса.

Скомпилируйте класс LBR_User.

После компиляции просмотрите в программе PL/SQLDeveloper структуры, которые компиляция автоматически создала для данного класса: вид, таблицу хранения (или мэпирования), объектные типы.

1.2.4.5. Создание класса наследника

Создайте под классом LBR_User класс наследник LBR_Person «Читатель». Для этого встаньте в дереве классов на класс LBR_User и нажмите на кнопку «Создать класс-наследник». Откроется карточка, в которой необходимо задать системное имя класса и выбрать наименование из представления понятия.

Перейдите на закладку «Атрибуты». Обратите внимание, что в классе уже пристуствуют атрибуты, пришедшие по наследованию из класса предка. Но изменить на уровне класса наследника в них можно далеко не все. Из перечня колонок в списке атрибутов изменению доступны только настройки порядкового номера и видимости. Настройки, связанные с хранением атрибута, не доступны и являются прерогативой класса-предка. Если открыть детализацию атрибута, то увидим, что все свойства связанные с его визуализацией доступны для переопределения. Аналогично и свойства самого класса – в большинстве своем их можно переопределить в классе-наследнике.

Создайте в рамках класса новые атрибуты, для того чтобы он принял следующий вид:

Обратите внимание, что для новых атрибутов по умолчанию предлагается в качестве таблицы хранения новая таблица. Не изменяйте ее, это будет сделано позже. В рамках системы Global по умолчанию предполагается, что данные каждого класса хранятся в собственной отдельной таблице.

Настройте свойства атрибутов класса. Рекомендуется выставление признака «Заголовок» для атрибутов «Фамилия», «Имя» и «Отчество», значения по умолчанию «м» для атрибута «Пол» и создание индекса на дату рождения.

После завершения настройки откомпилируйте класс.

1.2.4.6. Открытие объектов класса на редактирование

После того, как компиляция класса завершена, становится возможным редактирование объектов. Для того, чтобы открыть объекты класса для редактирования в списке по умолчанию, нажимте на кнопку «Редактировать объекты класса в списочной форме».

../../_images/GlobalFramework_Architecture_OpenObjectInCard.png

Note

В случае, если при открытии объектов класса возникла ошибка типа «Не известен тип редактора выборки …», то откройте закладку «Выборки открытия» в настройке класса. На этой закладке устанавливается, при помощи каких выборок и каких отображений этих выборок, будет по умолчанию осуществляться редактирование объектов данного класса в списке и в карточке. Эта ошибка означает, что по причине изменения имени класса после предыдущей компиляции, Вы не сменили имя выборки, прописанное в свойствах этой закладки. По умолчанию, там должно быть указано имя выборки, автоматически генерируемой для данного класса (или 'SEL _' + <Имя класса>).

При помощи пункта «Редактировать объекты класса в автосоздаваемой выборке», возможно открытие класса в любом из отображений автоформирующейся выборки.

../../_images/GlobalFramework_Architecture_SelectRepresentation.png

Отображение RoList предназначено для не редактируемого списка, из которого для редактирования открываются карточки (отображение Card). Отображение List предназначено для редактирования объектов класса непосредственно в списке. Отображение LookUp служит для отображения объектов класса в выпадающем списке, для выбора этих объектов для атрибутов других классов, ссылающихся на данный класс. Отображение ObjectAttrCard предназначено для отображения объектных характеристик класса.

Помимо стандартных отображений, в выборке может присутствовать любое количество отображений, созданных разработчиками.

Откройте класс LBR_Person и введите в него несколько записей о читателях.

1.2.4.7. Особенности по работе с объектами класса наследника

Откройте на редактирование объекты класса LBR_User, являющегося предком для нового класса TST_Person. В списке мы видим, что объекты, которые мы создали на уровне наследника, доступны и в классе предке. Только дополнительных атрибутов, созданных на уровне класса наследника в отображении предка естественно нет. Давайте попробуем отредактировать их в карточке. Видим, что открылась карточка класса-наследника, в которой есть все дополнительные атрибуты, которые были определены в наследнике. Откроем объект класса-предка – откроется карточка класса-предка. Таким образом, система Global в интерфейсах, создаваемых по умолчанию, гарантирует работу именно с объектами на уровне интерфейсов и методов, которые свойственны классу этих объектов.

При разработке собственных интерфейсов и серверной логики об этих правилах необходимо помнить, и гарантировать выполнение необходимых методов именно на том уровне, который соответствует объекту, с которым идет работа. Только это гарантирует то, что вся логика, заложенная Вами и другими разработчиками, отработает в полной мере. Если Вы хотите напротив, избежать отработки этой логики, обращайтесь внутри своих методов к соответствующим DPI методам, минуя слой API. Иногда, если Вы точно уверены в своих действиях, имеет смысл обращаться к DPI-сеттерам атрибутов, определенных на уровне класса-предка, напрямую из своих методов (но не пользовательского интерфейса!) вызывая метод DPI-типа класса-предка, на уровне которого объявлен этот атрибут. Это может потребоваться тогда, когда Вы хотите изменить значение этого атрибута, но намеренно собираетесь избежать выполнения той логики, которая была заложена в переопределениях API.

1.2.4.8. Изменение структуры хранения класса

Измените структуру хранения LBR_Person. Для этого потребуется модифицировать поля «Таблица хранения» и «Колонка хранения» для атрибутов класса. Например, можно перенастроить класс так, чтобы он хранил свои данные в таблице LBR_UserMAP, и таким образом, для выборки данных этого класса запрос шел к одной таблице, а не к двум.

После этого перекомпилируйте класс и в PL/SQL Developer откройте на просмотр вид и таблицы хранения. Убедитесь, что в процессе компиляции были созданы все необходимые структуры для работы с новыми настройками класса. Затем откройте объекты класса на редактирование из Конфигуратора. Убедитесь в том, что данные не были потеряны – они перенеслись в новые структуры хранения.

1.2.5. Ссылочные на объект атрибуты

1.2.5.1. Создание ссылочного на объект атрибута

До этого нами рассматривались только значимые атрибуты. Практические все остальные типы атрибутов относятся к ссылочнымому типу. Наиболее востребованным из них является тип «Ссылочный на объект». Этот тип атрибута назначается для организации ссылочности объектов одного класса на объекты другого класса (или объекты своего собственного класса).

Настройка атрибутов, ссылочных на объект, осуществляется слеующим образом:

  1. Создаем новый атрибут
  2. Выбираем тип атрибута в вып.списке как «Ссылочный на объект»
  3. В открывшемся для выбора дереве классов выбираем тот класс, на объекты которого будет ссылаться данный атрибут.
  4. В том случае, если предварительно не было введено системное имя атрибута и не выбрано наименование из представления понятия, они будут подставлены согласно выбранному классу в соответствии со стандартами. Изменяем системное имя и наименование в случае необходимости.

В процессе компиляции, для атрибутов, имеющих ссылочный тип, автоматически создается индекс, а также создается внешний ключ для контроля ссылочности. В DPI-сеттере, специальном методе по изменению значения атрибута, для ссылосного на объект атрибута вызывается специальная логическая блокировка (на удаление) того объекта, на который была установлена ссылка, для того чтобы исключить возможность блокировки при попытке удаления объекта, на который кто-либо ссылается в незавершенной транзакции.

Продолжим создание примера библиотеки

../../_images/GlobalFramework_Architecture_Master_Detail.png

Класс «Карточка читателя» является документом и создавать его надо в соответсвующем разделе. В нем имеется 2 значимых атрибута, и один на уже существующий класс «Пользователь библиотеки». Атрибут «Состояние» пока не будем создавать, это задача следующего урока. Атрибут, ссылочный на класс LBR_Librarian «Библиотекарь» будет нужно создать позже самостоятельно, после создания справочника библиотекарей. Не забудьте настроить атрибуты класса. Атрибут «Рег.номер» опеределенно является мнемокодом, а также атриуты «Рег.номер», «Дата регистрации» и «Пользователь библиотеки» вместе образуют заголовок. Определите обязательность для ввода и другие настройки, рассмотренные ранее.

После создания класса скомпилируйте его. Убедитесь в том, что на созданный ссылочный атрибут система создала индекс и внешний ключ.

1.2.5.2. Настройка ссылочного на объект атрибута

Рассмотрим дополнительные свойства, которые стали доступны для атрибута, ссылочного на объект. На закладке «Основные свойства» атрибутов появилось несколько новых свойств, они доступны только для ссылочных атрибутов. Рассмотрим некоторые из них:

Ссылается на класс Для ссылочных на объект атрибутов определяет, на объекты какого класса осуществляется ссылочность.
Тип редактора

Для ссылочных на объект атрибутов доступны:

Редактор в строке с кнопкой
используется в ссылочных атрибутах для заполнения строки с помощью выбора какого-либо значения из всплывающего окна со списком объектов того класса, на который ссылаемся.
Выпадающий список по запросу
также используется для ссылочных атрибутов для определения ссылки с помощью выпадающего списка.
Редактирование с полем мнемокода
помимо заголовка, в интерфейсе появляется еще одно поле, в котором выводится мнемокод объекта, на который ссылается данный объект. Таким образом, ссылку на объект можно задавать двумя способами – непосредственным внесением его мнемокода или выбором объекта в модальном окне.
Редактор в строке с произвольными кнопками
для данного типа редактора имеется возможность настроить дополнительные кнопки: открытия карточки объекта, на который установлена ссылочность, сброса значения атрибута. При настройке в выборке возможна настройка любого количества дополнительных кнопок.
Выборка для ссылочного атрибута Выборка, из которой должны выбираться значения для ссылочного атрибута при вызове выбора из модального окна или в выпадающем списке. В случае если не задана, то определяется при помощи настроек класса, на который осуществляется ссылочность, согласно настроенной для него выборки по умолчанию для редактирования в списке.
Отображение для ссылочного объекта Отображение выборки, из которой должны выбираться значения для ссылочного атрибута при вызове выбора из модального окна или в выпадающем списке. В случае если не задано, то определяется при помощи настроек класса, на который осуществляется ссылочность, согласно настроенной для него отображения по умолчанию для редактирования в списке.

Свойства «Не отслеживается в сервисе замены ссылочности» и «Отображать текущий класс как коллекцию класса атрибута», свойственные атрибуту, ссылочному на объект, будут рассмотрены на следующем уроке.

Попробуйте изменить тип редактора для имеющихся ссылочных атрибутов, и посмотреть, как работают различные способы редактирования ссылочных атрибутов.

Для анализа ссылочности, имеющейся в классе, в карточке класса имеется специальная закладка «Ссылочность». На ней отображаются все ссылки, который данный класс имеет на другие классы, а также все ссылки, которые другие классы имеют на данный. По ссылке можно перейти к карточке связанного класса.

1.2.6. Настройка коллекций

1.2.6.1. Назначение и настройка коллекций

Коллекции представляют собой классы, объекты которых не имеют права на самостоятельное существование и могут быть созданы только в рамках существования объектов других классов. Примером могут быть классы «Расчетные счета контрагента» или «Адреса контрагента». Для создания классов коллекций в иерархии классов предусмотрена специальная ветка «Collection». В нашем примере библиотеки, класс «Книги заказа» является коллекцией. Книги заказа в этом примере является зависимой сущностью по отношению к заказу пользователя, и не может быть создана в отрыве от нее.

../../_images/GlobalFramework_Architecture_FineCollection.png

Создадим класс LBR_UserOrderDetail внутри ветки классов «Collection». Атрибут, ссылочный на книгу нужно будет создать позднее, после самостоятельного создания справочника книг.

1.2.6.2. Отображение классов, являющихся коллекциями

В связи с тем, что коллекции являются классами, подчиненными по отношению к другим классам, управляющих коллекцией, в пользовательском интерфейсе редактирования объектов они должны быть представлены в соответствующем, зависимом виде. Для того чтобы это настроить, необходимо указать, посредством какого атрибута осуществляется связь между управляющей и зависимой сущностью. В нашем примере это атрибут idUserOrder, посредством которого объекты класса LBR_UserOrderDetail определяют, к какому заказу они относятся.

В свойствах ссылочных на объект атрибутов, на закладке основных свойств имеется настройка «Отображать текущий класс как коллекцию класса атрибута». Включим ее для атрибута idUserOrder. Эта настройка определяет дополнительные возможности интерфейсного отображения связанных классов. С ее помощью указывается, что объекты данного класса книг заказа, принадлежащие объекту класса подразделений, должны отображаться и редактироваться из интерфейса настройки заказа. Для того, чтобы настройка вступила в силу, необходимо перекомпилировать оба класса, LBR_UserOrder и LBR_UserOrderDetail.

Откроем объекты класса LBR_UserOrder. В списке у него появилась кнопка «Отобразить/скрыть детализацию (F11)». При нажатии на нее будет отображаться и скрываться детальная часть с перечнем закладок, на которых выводятся все коллекции, имеющиеся у класса. В списочных формах закладки с коллекциями по умолчанию скрыты, в карточных - напротив, открыты.

При этом, на закладках выводятся только те объекты, которые принадлежат текущему мастер-объекту. Т.е. если мы стоим на конкретном заказе, то на закладке отображаются только те позиции, которые были в рамках него заказаны. При этом в списке позиций заказа на закладке нет поля «Заказ пользователя», подразумевается, что оно не нужно, т.к. на ней всегда отображаются объекты, принадлежащие мастер-объекту. При создании нового объекта на закладке отображения коллекции он автоматически прикрепляется к мастер-объекту, т.е. в нем сразу же проставляется значение ссылочного на объект атрибута, которым мы осуществили связывание двух этих сущностей, выставив признак «Отображать текущий класс как коллекцию класса атрибута».

Attention

Текущая версия ядра (BTK 1.4.54) имеет ограничение в выводе коллекций. Для того, чтобы объекты класса коллекций полноценно прикреплялись к мастер-объектам, класс коллекции должен быть создан именно в разделе COLLECTION.

Коллекция может отображаться на закладках коллекций не одного единственного класса. Соответствующая настройка может быть выставлена для любого ссылочного атрибута класса коллекций, и будет означать отображение ее объектов на закладках коллекций соответствующих классов. Выставление флага «Отображать текущий класс как коллекцию класса атрибута» будет означать при компиляции необходимость создания двух дополнительных отображений: CLList_<Имя атрибута> и CLRoList_<Имя атрибута>. Именно эти отображения и выводятся на закладках коллекций. Отображение CLLis t предназначено для редактирования объектов коллекций в списке, CLRoList – с открытием карточек (по умолчанию выводятся отображения редактирования в списке). На каждый атрибут, формализующий связь классов в отношении «Мастер – Коллекция», в классе-коллекции автоматически создается по 2 новых отображения. При выставлении флага «Отображать текущий класс как коллекцию класса атрибута», для ссылочного атрибута становится достпуными еще 3 свойства:

Порядковый номер коллекции Данное свойство определяет порядковый номер закладки, на которой будет отображен данный класс как коллекция. Свойство служит для управления порядком следования закладок коллекций, тогда, когда коллекций у класса много.
Отображать коллекцию в выборке Данное свойство определяет, в какой именно выборке будет отображаться данный класс как коллекция. По умолчанию это будет стандартная выборка данного класса.
Отображение коллекции Данное свойство определяет, в каком именно отображении будет отображаться данный класс как коллекция. По умолчанию это будет отображение CLList_<Имя ссылочного атрибута>