Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.03.2019
Просмотров: 51776
Скачиваний: 8724
Как отобрать записи иерархической таблицы по условию
В этом примере мы рассмотрим типичные задачи получения записей из иерархической
таблицы. Для начала посмотрим еще раз, как выглядит справочник Товары в нашей
демонстрационной конфигурации (рис. 1.41).
Рис. 1.41. Справочник «Товары» в режиме «1С:Предприятие»
На рис. 1.41 справочник представлен в виде дерева, на котором отображаются все
уровни иерархии. Мы видим, что элементы Обувь и Продукты являются группами
справочника (т. е. имеют подчиненные записи), а также они являются корневыми
элементами, (т. е. не имеют родителей). Группа Продукты является родителем
элементов Масло, Молоко, Сметана. Группа Обувь является родителем элементов
Кроссовки, Сапоги и Туфли, а также имеет в подчинении (в иерархии) группу товаров
Детская обувь, которая, в свою очередь, является родителем для элемента Пинетки.
Все элементы справочника, кроме записей, являющихся группами (Обувь, Детская
обувь, Продукты), не имеют и не могут иметь других подчиненных элементов.
Как получить записи иерархической таблицы, не являющиеся группой
Для решения поставленной задачи с помощью предложения ГДЕ зададим условие отбора
записей из таблицы так, чтобы выводились только записи справочника, не являющиеся
группой (листинг 1.47).
Листинг 1.47. Вывод записей справочника «Товары», не являющихся группой
В данном запросе в условии отбора мы сравниваем значение поля ЭтоГруппа с
логическим литералом ЛОЖЬ. Условие выполняется для всех записей справочника, не
являющихся группой, о чем говорилось выше.
Результат выполнения запроса представлен на рис. 1.42.
Рис. 1.42. Вывод записей справочника «Товары», не являющихся группой
Соответственно, для вывода только групп из справочника нужно задать условие отбора
Товары.ЭтоГруппа = ИСТИНА.
Теперь покажем, как сделать это же условие параметризированным и, следовательно,
более гибким. Для этого перепишем предыдущий запрос с использованием параметров
(листинг 1.48).
Листинг 1.48. Вывод записей справочника «Товары», не являющихся группой
Нажмем кнопку Заполнить параметры, и параметр ЭтоГруппа будет добавлен в окно
параметров консоли запросов. В данном случае тип параметра – Булево, поэтому в поле
Значение мы можем выбрать возможные логические значения параметра (Да/Нет).
Если мы зададим значение параметра как Нет, то в результате выполнения запроса
увидим только те записи иерархического справочника Товары, которые не являются
группой (рис. 1.43).
Рис. 1.43. Выполнение параметризированного запроса в консоли запросов
То есть результат запроса полностью совпадает с результатом при выполнении запроса,
не использующего параметры в условии отбора (см. рис. 1.42). Изменив значение
параметра ЭтоГруппа на Да, с помощью этого же параметризированного запроса мы
получим только те записи справочника, которые являются группой.
Как получить записи иерархической таблицы, находящиеся в выбранной группе
Для решения поставленной задачи зададим параметризированное условие отбора
записей из таблицы, родителем которых является выбранная группа. Для этого нужно
использовать параметр ссылочного типа, имеющий тип ссылки на справочник Товары.
Добавим в условие отбора предыдущего запроса условие для выбора из иерархического
справочника тех записей, для которых родителем является элемент справочника,
указанный в параметре типа СправочникСсылка.Товары. Это можно сделать с помощью
следующего запроса (листинг 1.49).
Листинг 1.49. Отбор записей справочника «Товары» по условию
В данном запросе условие отбора определено как сложное логическое выражение, в
котором простые логические выражения соединяются между собой логическим
оператором И. В первом выражении проверяется, является ли запись группой, во втором
выражении проверяется, принадлежит ли запись указанной группе. В целом условие
отбора будет истинно, если оба этих условия будут выполнены.
При нажатии кнопки Заполнить параметры параметр ЭтоГруппа и параметр Родитель
типа СправочникСсылка.Товары будут добавлены в окно параметров консоли запроса.
Укажем в качестве значения параметра группу Обувь справочника Товары, в качестве
значения параметра ЭтоГруппа – Нет и выполним запрос (рис. 1.44).
Рис. 1.44. Выполнение параметризированного запроса в консоли запросов
Как мы видим, в результат запроса попадают только те записи справочника, которые не
являются группой и родителем которых является группа Обувь. Изменив значение
параметра ЭтоГруппа на Да, с помощью этого же параметризированного запроса мы
получим только те записи справочника, которые являются группой и родителем которых
является группа Обувь (рис. 1.45).
Рис. 1.45. Вывод только групп из выбранной группы товаров
Как получить «корневые» записи иерархической таблицы
Для решения поставленной задачи нужно отобрать записи таблицы, которые находятся в
«корне» иерархического справочника, то есть те записи, у которых нет родителя. Для
этого зададим условие отбора записей из таблицы так, чтобы выводились только записи
справочника, у которых в поле Родитель находится пустая ссылка на справочник Товары
(листинг 1.50).
Листинг 1.50. Отбор корневых записей справочника «Товары»