4.9. Иерархические данные
Пример базы
В программе возможно создавать иерархические справочники, например группы товаров или услуг. Такие группы могут иметь разные уровни вложенности. Для создания иерархии в форме должно быть, как минимум, 2 поля: текстовое и объект, который ссылается на текущую форму. Затем в свойстве формы «Иерархия» этот объект выбирается в качестве поля предка и указывается предполагаемое количество уровней вложенности. Таким образом программа знает сколько символов надо выделить для пути. На деле количество уровней может быть больше. Слишком длинные пути обрезаются.
В объектах, которые ссылаются на иерархические справочники данные отображаются в виде пути, например есть группа товаров: Канцелярские товары\Тетради в клеточку\Тетради 12 листов. Обратите внимание, что в виде пути будет отображаться только то поле, на которое ссылается поле предка (например, наименование).
В фильтре формы или параметрах отчета список такого объекта имеет древовидную структуру. Когда вы фильтруете по какой-то группе, в результат попадут записи с выбранной группой и всеми ее подгруппами. То же самое и в остальных фильтрах. Примеры выражений фильтров, которые могут применяться при фильтрации списков объектов или в отборе:
[группа]=OBJID('Группы', 'Название', 'Компьютерные комплектующие\Материнские платы')
Учитываем, что на поле «Название» ссылается поле предка. Выбрать группу «Материнские платы» и все входящие в нее подгруппы
[Группа|Название]='Компьютерные комплектующие\Процессоры\Intel'
Выбрать группу «Intel» (подгруппы не входят)
[Группа|Описание]='Какое-то описание группы'
А на поле «Описание» поле предка не ссылается, поэтому здесь все как обычно.
Программа следит, чтобы элементы иерархии не образовывали циклические ссылки. Если при вводе обнаруживается, что группа ссылается на саму себя или на свою дочернюю группу, то программа выдаст предупреждение и не позволит сохранить запись.
Еще один немаловажный момент - скорость выборки иерархических данных. К сожалению, даже при нескольких сотнях записей в иерархическом справочнике скорость выборки записей существенно замедляется не только в самом справочнике, но и в тех формах, которые на него ссылаются. Скорость выборки увеличивается во много раз, если для объекта, который ссылается на иерархические данные, установить свойство «Обязательное». Обратной стороной медали является то, что записи с пустым полем предка (корневые элементы) не попадут в выборку. Не смотря на установленное свойство «Обязательное», программа допускает сохранять записи с пустым полем предка. Хотя вы не можете видеть корневые элементы в табличной части формы, их можно увидеть и редактировать в самом поле предка (контекстное меню объекта «Изменить»).
В других формах, для ускорения отбора, также устанавливайте свойство объекта «Обязательное», ссылающегося на иерархический справочник.
Где бы не применялся объект, который ссылается на иерархический справочник, делайте его обязательным для заполнения, это существенно увеличит скорость выборки.