Как реализовать фильтрацию отчета по нескольким значениям в 1С?

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

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

Переход от одиночного условия к списку значений

Ранее вы, вероятно, использовали в коде условие вида ГДЕ Поле = &Параметр. Чтобы получить данные по нескольким выбранным элементам, мы должны изменить текст запроса и способ передачи параметра. Вместо оператора = мы будем использовать оператор В, который принимает список значений.

Рассмотрим, как изменить логику формирования текста запроса в функции УстановитьПараметрыЗапроса:


Если ЗначениеЗаполнено(Отдел) Тогда
    Текст = Текст + ?(Текст = "", "", " И ") + "
    | Субконто2.Менеджер.Отдел В (&СписокОтделов)
    | ";
    СписокОтделов = Новый СписокЗначений;
    СписокОтделов.Добавить(Отдел);
    // Добавляем дополнительные значения при необходимости
    Запрос.УстановитьПараметр("СписокОтделов", СписокОтделов);
КонецЕсли;

Ключевым моментом здесь является использование объекта СписокЗначений. Когда мы передаем этот объект в метод УстановитьПараметр, платформа 1С автоматически преобразует его для SQL-запроса, корректно формируя условие IN (...).

Организация выбора нескольких элементов пользователем

Если пользователь хочет выбирать несколько отделов, у нас есть несколько стратегий реализации интерфейса:

  1. Использование стандартного типа СписокЗначений: Вы можете разместить на форме один реквизит с типом СписокЗначений. При открытии такого поля платформа предоставляет пользователю удобное диалоговое окно для добавления и удаления элементов справочника. Это наиболее «чистый» путь.
  2. Использование табличной части: Если необходимо, чтобы список выбранных элементов был постоянно виден на форме отчета, лучше создать табличную часть с одной колонкой типа СправочникСсылка.Отделы. При формировании отчета вам достаточно будет выгрузить колонку этой таблицы в массив или сразу передать её в список значений.

Важно помнить: программное создание элементов формы «на лету» (динамическое добавление полей) — это сложная задача, которая часто приводит к ошибкам. Рекомендуем избегать этого подхода, пока вы не станете уверенным пользователем объектной модели 1С. Используйте стандартные возможности элементов управления.

Важные замечания по реализации

При написании кода обратите внимание на следующие моменты:

Развивайтесь, практикуйтесь во внешних отчетах, чтобы не перезапускать конфигуратор каждый раз, и не бойтесь использовать встроенную справку и демо-базы типовых конфигураций — там скрыты ответы на большинство подобных вопросов.

← На главную