Как настроить фильтр по номенклатуре "В группе из списка" в отчете 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке и настройке отчетов в 1С (особенно в конфигурациях на обычных формах, таких как Управление Торговлей 10.3) разработчики часто сталкиваются с задачей реализации удобного отбора номенклатуры. Пользователям требуется отбирать данные не только по конкретным товарам или одной папке, но и указывать сразу несколько групп элементов одновременно. В этой статье мы подробно разберем, как правильно реализовать фильтрацию вида "В списке" и "В группе из списка" в запросах и отчетах 1С.

Разница между видами сравнения в отборах

Прежде чем переходить к написанию кода и настройке запросов, проанализируем, чем отличаются основные виды сравнения при работе со справочниками, имеющими иерархическую структуру:

  1. В списке (ВидСравнения.ВСписке) — проверяет точное совпадение элементов. Если добавить в такой список папку справочника, то в результат попадут только те записи, где явно указана сама эта папка, но не товары внутри нее.
  2. В группе (ВидСравнения.ВИерархии) — выбирает конкретную папку и все вложенные в нее подгруппы и товары (на всю глубину иерархии).
  3. В группе из списка (ВидСравнения.ВГруппеИзСписка) — позволяет передать список, состоящий из нескольких групп и отдельных элементов. В итоговую выборку попадут все товары, входящие в любую из выбранных папок или подпапок, а также одиночные элементы из списка.

Реализация отбора в языке запросов 1С

Рассмотрим, как данная логика реализуется на уровне языка запросов 1С. В языке запросов нет отдельной конструкции "В ГРУППЕ ИЗ СПИСКА". Вместо этого используется универсальный оператор В ИЕРАРХИИ.

Синтаксис условия в секции ГДЕ выглядит следующим образом:


ГДЕ
	ОстаткиТоваров.Номенклатура В ИЕРАРХИИ(&СписокНоменклатуры)

Разберем подробнее, как платформа 1С обрабатывает параметр &СписокНоменклатуры:

  1. В качестве параметра &СписокНоменклатуры передается объект типа СписокЗначений или Массив.
  2. Тип элементов списка — СправочникСсылка.Номенклатура.
  3. Если в этот список пользователь добавляет элементы-товары, платформа выбирает их по точному совпадению.
  4. Если в список попадают группы (папки), платформа автоматически рекурсивно разворачивает иерархию и выбирает абсолютно все дочерние позиции, находящиеся внутри этих групп.

Настройка Построителя отчета (УТ 10.3 / Обычные формы)

Если отчет разрабатывается в конфигурации Управление Торговлей 10.3 с использованием построителя отчетов (объект ПостроительОтчета) или универсального отчета, необходимо правильно прописать секцию описания настроек построителя в тексте запроса.

Разберем пример запроса для построителя отчета:


ВЫБРАТЬ
	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
	ТоварыНаСкладах.Склад КАК Склад,
	ТоварыНаСкладах.КоличествоОстаток КАК КоличествоОстаток
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах
{ГДЕ
	ТоварыНаСкладах.Номенклатура.* КАК Номенклатура}

Обратите внимание на синтаксический элемент .* после имени поля: ТоварыНаСкладах.Номенклатура.*. Указание спецсимволов .* сообщают построителю отчета, что для данного поля доступна иерархия, а значит пользователь сможет применять виды сравнения В группе и В группе из списка в интерактивной настройке отбора.

Настройка формы для выбора групп и элементов

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

Для этого выполним следующие шаги:

  1. Откроем свойства поля ввода на форме отчета.
  2. Найдем свойство ВыборГруппИЭлементов.
  3. Установим значение Группы и элементы (по умолчанию часто установлено значение Элементы, что заблокирует возможность выборки папок пользователем).

Также этот параметр можно задать программно при инициализации формы:


ЭлементыФормы.ПолеОтбораНоменклатура.ВыборГруппИЭлементов = ВыборГруппИЭлементов.ГруппыИЭлементы;

Реализация в системе компоновки данных (СКД)

Если отчет разрабатывается с использованием Системы компоновки данных (СКД), настройка иерархического отбора упрощается:

  1. В схеме компоновки данных на закладке "Настройки" перейдем к разделу "Отбор".
  2. Добавим новое условие отбора, выбрав левое значение Номенклатура.
  3. В поле "Вид сравнения" выберем значение В группе из списка.
  4. В поле правого значения выберем нужные папки и товары или выведем эту настройку в пользовательские настройки отчета.

Важные нюансы и производительность

Проанализируем практические особенности работы с иерархическими отборами, которые важно учитывать при эксплуатации системы:

  1. Обработка пустых параметров в прямых запросах: Если передать в параметр условия В ИЕРАРХИИ (&ПустойСписок) пустой список значений, запрос вернет пустой результат (ни одной строки). При написании своего кода на языке запросов следует проверять заполненность списка перед выполнением запроса или формировать текст запроса динамически. СКД и Построитель отчета обрабатывают пустые отборы автоматически.
  2. Влияние на производительность СУБД: Оператор В ИЕРАРХИИ создает дополнительную нагрузку на СУБД (MS SQL Server, PostgreSQL), так как платформе требуется строить разворот иерархии деревовидной структуры. Если в качестве отбора передается список из нескольких десятков крупных групп номенклатуры, это может приводить к замедлению работы отчета.
← На главную