| Главная | О компании | Новости | Обучение | Обратная связь | Форум |
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. Работающее приложение
|
|
|
|
||