Что такое Компоновщик настроек компоновки данных и зачем он нужен в 1С

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

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

Суть и смысл объекта: роль «Синхронизатора»

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

Рассмотрим подробнее три независимых слоя, которыми управляет компоновщик:

  1. Настройки (основные): Это базовый вариант, который разработчик определил в схеме СКД. Это фундамент, на котором строится отчет.
  2. Пользовательские настройки: Это самая динамичная часть. Сюда попадают только те элементы (отборы, параметры, группировки), которые программист разрешил менять пользователю, установив соответствующую галочку (включать в пользовательские настройки). Именно этот слой мы видим в «шапке» отчета или в окне «Настройки».
  3. Фиксированные настройки: Это «жесткий» слой, который обычно задается программно и скрыт от глаз пользователя. Представим, что отчет должен всегда показывать данные только по одной организации, и пользователь не должен иметь возможности это изменить. Мы прописываем это в фиксированных настройках, и компоновщик гарантирует, что этот фильтр будет применен всегда.

Зачем нужен отдельный объект, а не просто коллекция «Настройки»?

Выясним причину существования компоновщика как отдельной сущности. Главная проблема — это синхронизация. В управляемых формах 1С существует механизм «автозаполнения». Когда мы выносим на форму таблицу и указываем путь к данным Отчет.КомпоновщикНастроек, платформа автоматически отрисовывает все доступные поля.

Если бы компоновщика не было, программисту пришлось бы вручную писать огромные блоки кода, чтобы:

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

Разберем ключевые методы работы

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

1. Инициализация

Компоновщик не может работать «в пустоте». Ему нужно знать, какие поля вообще существуют в базе данных и какие правила к ним применимы. Для этого используется метод Инициализировать(). Ему передается ИсточникДоступныхНастроекКомпоновкиДанных, который создается на основании схемы СКД или URL-адреса схемы.


// Пример инициализации компоновщика
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыВХранилище);
Отчет.КомпоновщикНастроек.Инициализировать(ИсточникНастроек);

2. Метод ПолучитьНастройки()

Это, пожалуй, самый важный момент. Перед формированием отчета мы вызываем этот метод. Что он делает? Он берет «базовый скелет» из первого слоя, накладывает сверху «фиксированные запреты» из третьего слоя и добавляет «пользовательские хотелки» из второго. На выходе мы получаем объект типа НастройкиКомпоновкиДанных. Именно этот итоговый «коктейль» передается дальше — в компоновщик макета.

В чем разница между Компоновщиком настроек и Компоновщиком макета?

Этот вопрос часто задают на форумах. Посмотрим на ситуацию наглядным примером:

Практические примеры использования

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


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

В данном примере мы обратились к коллекции ФиксированныеНастройки. Если бы мы добавили этот же код в коллекцию Настройки, пользователь увидел бы этот отбор в окне настроек и смог бы его снять. А через компоновщик в слое фиксированных настроек мы обеспечиваем жесткий контроль данных.

Также важно упомянуть работу с параметрами. Часто параметры СКД (например, Период) выносятся в пользовательские настройки. Чтобы программно заполнить их из кода формы, мы будем обращаться именно к компоновщику:


// Установка значения параметра через компоновщик настроек
ПараметрПериод = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");
Если ПараметрПериод <> Неопределено Тогда
    ПараметрПериод.Значение = Новый СтандартныйПериод(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
    ПараметрПериод.Использование = Истина;
КонецЕсли;

Подведем итоги

Мы выяснили, что КомпоновщикНастроекКомпоновкиДанных — это не просто контейнер для хранения фильтров, а мощный механизм автоматизации UI и логического объединения разных уровней настроек. Он избавляет разработчика от необходимости вручную синхронизировать форму и схему компоновки, обеспечивая целостность данных. Понимание его работы — это ключ к созданию гибких и надежных отчетов в системе 1С:Предприятие 8.

← На главную