Главная | О компании | Новости | Обучение | Обратная связь | Форум |
ABACUS Financial ABACUS Builder ABACUS Professional
|
Компонент "Дерево". Последовательность выполнения компонентов В этой статье мы рассмотрим отображение иерархической структуры данных в виде дерева. Создадим документ, отражающий в виде дерева список предприятий и отделов предприятий некоего холдинга. Как всегда, начинаем с учетной схемы. Наша учетная схема не отличается от схемы, приведенной в предыдущей статье (Рис. 1).
Рис. 1. Инсталляция документа Разместим компонент "Дерево" TREE (отображаемый) и на вкладке свойств "Дополнительные" добавим пункт (кнопка с синим плюсом) пункт "Отдел предприятия", указав категорию 12004, затем "добавим сверху" (кнопка с плюсом и стрелочкой вверху) категорию 12003 "Предприятие". Атрибуты можно не указывать, если в категориях определен атрибут 2 "Название" как главный. Разместим компонент "Таблица" TABLE, в таблице три размножаемых компонента "Вычисляемое поле" FIO, TAB_N, POS для отображения фамилии, имени, отчества, табельного номера и должности сотрудников соответственно. Разместим текстовые заголовки (компоненты "Текст") у компонентов TREE и TABLE, компоненты "Локатор" и "ComboBox" и текстовые заголовки как показано на рис. 2.
Рис. 2. Инсталляция документа Теперь необходимо в компоненте SELECT написать формулу для заполнения компонента TREE: %TREE:=aql([12003*]); В этой формуле выбираются все объекты категории 12003 "Предприятие". Отделы предприятия будут отображаться автоматически. Следует помнить, что в списке компонентов SELECT должен стоять выше TREE, иначе информация в дереве не будет отображаться. (Рис. 3).
Рис. 3. Список компонентов Теперь осталось реализовать отображение списка сотрудников в таблице TABLE отдела, выбранного в дереве. Для компонента TREE добавим формулу "Select Changed". Эта формула вызывается в случае изменения пользователем выделенного элемента дерева. DECLARE ob AS COV { ob:=%TREE.Selected(); --Получаем выделенные объект if ob.Cat()=12004 then { --Если это объект категории 12004 (Отдел предприятия), то отображаем: %TABLE:=aql(SELECT #^12005.1002, --Атрибут 1002 (Ф.И.О.) сотрудника #^12005.1003, -- Атрибут 1003 (Табельный номер сотрудника #^12005:1830 where(#^1839.10002=2)^184.2 -/Атрибут 2 (Название) справочника должностей Для этого находим все приказы сотрудника, из них выбираем приказы о назначении на должность (атрибут 10002 категории 1839 равен 2). /- FROM ob:1830 order by 1,2 --Выбираем все приказы "привязанные снизу" к выделенному отделу ); %CALC:=aql(ob:1830^12005 count); --В компонент CALC помещаем количество найденных объектов (сотрудников отдела) } } Работающее приложение выглядит следующим образом. (Рис. 4).
Рис. 4. Работающее приложение
|
|
|
||