Содержание
4.10. Использование "деревьев"
Пример базы
С помощью дерева можно представить некоторые данные формы и справочников в виде наглядной древовидной структуры и использовать его для фильтрации данных формы. Кроме того, при добавлении новой записи выделенные узлы дерева автоматически вставляются в соответствующие поля формы. Дерево настраивается в свойстве формы «Дерево».
В настройках свойства в верхней табличке (см. рисунок) выбираются поля, по которым будет построено дерево, затем выбирается источник данных - откуда программа будет брать данные для построения дерева. Вариантов выбора источника два - форма и объект. Если выбрана «форма», то данные будут браться из самой формы, причем данные будут ограничены текущим фильтром формы. Поле может быть любого типа, кроме файлов и изображений. Если выбран источник данных «объект», то данные будут браться из формы, на которую ссылается объект - это будет все множество записей формы. Для источника данных «объект» возможно выбрать только поле типа «объект».
Параметр «Раскрыть уровни» определяет какие узлы дерева будут раскрыты после построения. Если задано значение 0, то будут раскрыты только корневые узлы дерева. Корневой узел соответствует нулевому уровню подчиненности. Остальные узлы вы можете раскрывать вручную, нажимая «стрелочку» рядом с узлом. Если задано значение 1, то будут раскрыты корневые и подчиненные им узлы. И так далее…
Построение дерева по данным формы
Если в выбранных полях указан источник данных «форма», то дерево будет построено следующим образом:
- [Все]
- Поле1
- Поле2
- Поле2
- Поле3
- Поле2
- Поле1
- Поле2
- Поле3
Рассмотрим построение на примере. Есть форма со следующими данными:
Раздел | Подраздел | Категория | Значение |
---|---|---|---|
Раздел 1 | Подраздел 1 | Категория 1 | Значение 1 |
Раздел 1 | Подраздел 1 | Категория 1 | Значение 2 |
Раздел 1 | Подраздел 1 | Категория 1 | Значение 3 |
Раздел 1 | Подраздел 1 | Категория 2 | Значение 1 |
Раздел 1 | Подраздел 1 | Категория 2 | Значение 2 |
Раздел 1 | Подраздел 2 | Категория 1 | Значение 1 |
Раздел 1 | Подраздел 2 | Категория 1 | Значение 2 |
Раздел 2 | Подраздел 1 | Категория 1 | Значение 1 |
Раздел 2 | Подраздел 1 | Категория 1 | Значение 2 |
Раздел 2 | Подраздел 1 | Категория 2 | Значение 1 |
Раздел 2 | Подраздел 1 | Категория 2 | Значение 2 |
В настройках дерева выбираем:
Поле | Источник данных |
---|---|
Раздел | Форма |
Подраздел | Форма |
Категория | Форма |
В результате дерево будет выглядеть следующим образом:
- [Все]
- Раздел 1
- Подраздел 1
- Категория 1
- Категория 2
- Подраздел 2
- Раздел 2
- Категория 1
- Категория 2
Первое поле из списка будет узлом первого уровня, второе - вторым и т. д. Меняя местами поля, вы можете настраивать ту или иную подчиненность между полями.
Как уже говорилось выше, содержимое дерева зависит от фильтра формы, а также от условия отбора в настройках роли. Причем установка полей в фильтре, из которых строится дерево (в примере - Раздел, Подраздел, Категория) не влияет на него. Однако, если какое-либо из таких полей присутствует в условии отбора, то содержимое дерева будет ограничено. Например, если в условии отбора настроено показывать только категории с названием «Категория 1»
[Категория]="Категория 1"
, то в дереве не будет других категорий, кроме «Категория 1».
Все остальные поля, которые не «входят» в дерево, будут влиять на его содержимое. Например, если в фильтре формы установлен отбор только «Значение 3», то дерево будет выглядеть так:
- [Все]
- Раздел 1
- Подраздел 1
- Категория 1
После применения фильтра формы дерево не обновляется автоматически, это надо делать вручную, выбрав из контекстного меню дерева команду «Обновить».
Построение дерева по данным объекта
Если для поля указан источник данных «объект», то дерево строится следующим образом:
- Объект1
- Данные
- Данные
- Данные
- …
- Объект2
- Данные
- Данные
- Данные
- …
Данные берутся из формы, на которую ссылается объект. Будут показаны данные того поля, которое указано в качестве основного поля списка в свойстве связь с формой. Множество записей, которое будет показано в дерево никак не ограничивается, будут показаны все записи формы объекта.
Если в форме объекта иерархические данные, то дерево будет выглядеть так:
- Объект1
- Данные
- Данные
- Данные
- Данные
- Данные
- Данные
- Данные
- Данные
- …
- ….
- Объект2
- ….
Пример того как строится дерево на основе иерархических данных вы можете увидеть в демонстрационной базе DEMODB в форме «Товары». При выделении узла данные формы будут отфильтрованы таким образом, что вы будете видеть данные не только текущего узла, но и всех его подчиненных узлов.
Смешанное построение дерева
В случае комбинации полей с разными источниками данных, дерево будет построено так:
- Все
- Поле1
- Поле2
- Поле3
- Поле2
- Поле2
- Поле1
- ….
- Объект1 (иерархический)
- Данные
- Данные
- Данные
- Данные
- Данные
- Данные
- ….
- Объект2
- Данные
- Данные
- ….
Фильтрация данных формы
Выделенные узлы дерева подставляются в фильтр формы и таким образом происходит фильтрация. Вы можете выделить несколько узлов, зажав клавишу «Ctrl». При использовании непосредственно фильтра формы или контекстного фильтра, выделение с дерева снимается.
Если форма открывается через кнопку объекта, то программа выделит узел, к которому принадлежит запись объекта и данные формы отфильтруются по этому узлу. Это позволяет избежать чтения всех данных формы. Чтобы выделение работало корректно, в свойстве связь с формой выберите опцию «При наличии дерева в окне списка: Обновлять дерево каждый раз при показе окна».
Поиск в дереве
Для быстрого поиска узла начините набирать текст. Внизу появится поле ввода и выделится первый найденный узел. Нажмите «Вниз», чтобы найти следующее совпадение, или «Вверх», чтобы найти предыдущее совпадение. Нажмите «Enter», чтобы применить выделение и отфильтровать данные, или «Esc», чтобы вернуться к прежнему узлу.