Top.Mail.Ru

Как настроить собственную (произвольную) иерархию в СКД 1С и починить отбор «В группе»

В разработке на платформе «1С:Предприятие» обычная иерархия справочников (по стандартному реквизиту Родитель) не всегда отвечает бизнес-требованиям. Часто возникает необходимость построить иерархическую структуру по произвольному реквизиту (например, ДопРодитель).

В этом рецепте описан процесс реализации альтернативной иерархии в Системе компоновки данных (СКД), настройки связей наборов данных и корректной работы стандартных отборов «В группе» или «В группе из списка».

Постановка задачи и исходные данные

Для примера возьмем следующую структуру метаданных:

  • Справочник «Номенклатура» с дополнительным реквизитом ДопРодитель (тип: СправочникСсылка.Номенклатура).
  • Регистр сведений «Минимальные остатки»: измерение Номенклатура (тип: СправочникСсылка.Номенклатура) и ресурс Остаток (тип: Число).
Нам необходимо создать отчет на СКД, в котором данные будут выводиться с учетом альтернативной иерархии по реквизиту ДопРодитель. Для этого в схеме компоновки данных понадобится настроить три набора данных.

Шаг 1. Создание наборов данных в СКД

Для реализации механизма мы подготовим три набора данных (запроса):

1. Основной набор данных
Здесь мы собираем ключевые данные для отчета в плоскую таблицу (в нашем случае — номенклатуру и минимальные остатки).

2. Набор данных для построения иерархии
Этот набор отвечает за построение дерева снизу вверх (от подчиненных элементов к родительским).

  • Важная особенность: для всех полей этого набора необходимо включить все доступные флажки (роли, ограничения и т.д.).
  • В запрос этого набора передается параметр Ссылки, с помощью которого связываются основной и иерархический наборы.
  • Правило именования: Поле, по которому достраивается иерархия, должно иметь одинаковое имя (синоним) в обоих наборах. Если в основном наборе поле называется «Товар», то и в наборе иерархии оно должно называться «Товар». 

3. Набор данных для проверки вхождения (ПроверкаИерархии)
Данный набор необходим для корректной работы условий «В группе» и «В группе из списка» в пользовательских настройках. Он разворачивает дерево в обратном направлении — сверху вниз (от родителя к конечным элементам).

Шаг 2. Настройка связей наборов данных

После создания наборов перейдите на вкладку «Связи наборов данных» и настройте три связи:

1. Связь основного набора с набором «Иерархия»

Связывает исходные данные с механизмом построения дерева.

  • Источник связи: Основной набор данных.
  • Приемник связи: Набор «Иерархия».
  • Выражение источника: Товар.
  • Выражение приемника: Товар.
  • Параметры: Укажите параметр Ссылки и обязательно установите флажок «Список параметров» (это позволит СКД передавать список элементов пакетом).

2. Рекурсивная связь набора «Иерархия» (сам с собой)

Необходима для рекурсивного обхода дерева снизу вверх.

  • Источник связи: Набор «Иерархия».
  • Приемник связи: Набор «Иерархия».
  • Выражение источника: Родитель (поле, содержащее ссылку на альтернативного родителя).
  • Выражение приемника: Товар.
  • Параметры: Параметр Ссылки, флажок «Список параметров».

3. Рекурсивная связь набора проверки иерархии

Обеспечивает корректную проверку условий вхождения при отборах.

  • Источник связи: Набор «ПроверкаИерархии».
  • Приемник связи: Набор «ПроверкаИерархии».
  • Выражение источника: Поле, по которому осуществляется проверка (например, ПроверкаИерархии).
  • Выражение приемника: Родитель.
  • Параметры: Укажите параметр ПроверкаИерархии и установите флажок «Список параметров».

Шаг 3. Настройка проверки иерархии для поля

Чтобы СКД понимала, какой механизм использовать при наложении иерархических фильтров пользователем:

  1. Перейдите на вкладку «Наборы данных» к основному набору.
  2. Найдите поле, по которому строится альтернативная иерархия (в нашем примере — Товар).
  3. В колонке «Проверка иерархии» укажите созданный ранее набор данных для проверки (ПроверкаИерархии) и соответствующий параметр связи (ПроверкаИерархии).

Шаг 4. Настройка параметров схемы

Перейдите на вкладку «Параметры» и проверьте свойства созданных параметров связи (Ссылки и ПроверкаИерархии):

  • Укажите для них соответствующий тип данных (в данном случае — СправочникСсылка.Номенклатура).
  • Обязательно установите флажок «Доступен список значений», так как платформа будет передавать в них массивы элементов при компоновке результата.

Для тех, кому нужно посложнее

В этом рецепте мы рассмотрели простой сценарий создания собственной иерархии в отчете на СКД.
Но можно делать и более сложные штуки, например объединить в иерархию данные нескольких справочников. А также есть нюанс по выбору элементов в отборе «В группе». Подробно я разбираю это в закрытом Клубе для разработчиков. Там же доступна и выгрузка .dt со всеми примерами. Буду рад видеть вас в числе резидентов Клуба!

Резюме

Использование трех наборов данных и правильное конфигурирование связей позволяют обойти ограничения стандартной платформенной иерархии 1С. Такая схема сохраняет за пользователем возможность использовать привычные инструменты детализации данных и гибкие иерархические отборы непосредственно в пользовательском режиме отчета.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *