Как программно задать отбор для конкретной группировки в СКД?

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

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

Реализация отбора в конкретной группировке

Распространенной ошибкой является попытка добавить отбор напрямую к объекту ТаблицаКомпоновкиДанных, который не имеет коллекции Отбор. На самом деле, отбор нужно применять к самой группировке (или строке таблицы), которая является частью иерархии структуры отчета.

Рассмотрим пошагово, как это сделать программно:

  1. Определите объект структуры, который вы добавляете в НастройкиКомпоновки.Структура (например, ГруппировкаКомпоновкиДанных).
  2. Используйте метод Отбор.Элементы.Добавить() именно у этого объекта группировки.

Пример программной реализации:


// Добавляем новую группировку в структуру настроек
Группировка = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.ПолеГруппировки = Новый ПолеКомпоновкиДанных("Номенклатура");

// Добавляем отбор непосредственно в группировку
ЭлементОтбора = Группировка.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РежимТестирования");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = "Автоматический режим";
ЭлементОтбора.Использование = Истина;

Таким образом, отбор будет применяться исключительно к данным, попадающим в данную группировку, не затрагивая остальные части отчета.

Как скрыть пустые колонки при использовании отборов?

Когда мы накладываем отбор, данные могут исчезнуть, но пустые колонки или строки ресурсов часто остаются в таблице, что портит внешний вид отчета. Рассмотрим способы борьбы с этой особенностью СКД.

Использование условного оформления

Вы можете попробовать скрыть неинформативные колонки с помощью механизма УсловноеОформление. Для этого необходимо создать правило, которое проверяет значение показателя. Если Количество не заполнено (равно 0 или Неопределено), мы можем применить оформление, например, сделать шрифт белым или ограничить видимость.


ЭлементУсловногоОформления = НастройкиКомпоновки.УсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ЭлементОтбора.Использование = Истина;

// Установка параметров оформления для скрытия
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

Обратите внимание, что УсловноеОформление лучше всего настраивать не для всего отчета, а для конкретной группировки, чтобы не возникло конфликтов с другими данными.

Предобработка источника данных (ТЗ)

Если задача требует абсолютной чистоты итогового отчета без лишних колонок, самым надежным способом является предварительная фильтрация исходной ТаблицыЗначений. Перед тем как передать ТЗ в качестве источника данных в СКД, программно удалите из нее строки или колонки, которые заведомо не содержат полезной информации.

Этот метод считается более ресурсоэффективным и предсказуемым, так как вы исключаете «пустые» данные еще до момента построения сетки отчета компонентом СКД.

Советы по отладке

Для быстрого поиска правильных путей к свойствам объектов СКД:

  1. Создайте отчет с нужными настройками в Консоли системы компоновки данных.
  2. Сохраните настройки в файл XML и изучите структуру дерева.
  3. Используйте Отладчик 1С: откройте объект НастройкиКомпоновкиДанных в окне «Вычисление выражений» и детально рассмотрите вложенность свойств Структура, Отбор и УсловноеОформление.

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

← На главную