Как программно получить и передать параметры в отчеты на СКД в 1С?

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

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

Разбор архитектуры настроек СКД

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

  1. Настройки — здесь содержатся базовые значения, заданные в схеме или сохраненные как настройки по умолчанию.
  2. ПользовательскиеНастройки — здесь хранятся значения, которые ввел или изменил пользователь в интерфейсе формы.

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

Как правильно получить параметр СКД

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

Рассмотрим пример использования:


// Пример получения параметра Период из типового модуля
ПараметрСКД = ОтчетыКлиентСервер.НайтиПараметр(
    ЭтотОбъект.КомпоновщикНастроек.Настройки, 
    ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки, 
    "Период"
).Значение;

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

Установка параметров программно

Для передачи параметров в отчет при его открытии или обновлении настроек лучше всего использовать метод УстановитьЗначениеПараметра. Это позволяет избежать ошибок, связанных с прямой манипуляцией объектами ПараметрыДанных.


// Установка параметра через метод объекта
ИмяПараметра = "Склад";
ЗначениеПараметра = СсылкаНаСклад;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, ИмяПараметра, ЗначениеПараметра);

Рекомендации по работе с пользовательскими настройками

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

Почему может не работать передача параметров?

Частая проблема — попытка обратиться к параметру до завершения инициализации компонента. Если вы открываете отчет программно, убедитесь, что:

  1. Вы передаете настройки в структуру ПараметрыФормы.
  2. В целевом отчете обработчик ПриСозданииНаСервере корректно принимает эту структуру.
  3. Вы вызываете методы установки параметров после выполнения КомпоновщикНастроек.Инициализировать().

Использование ОтчетыКлиентСервер.НайтиПараметр является «золотым стандартом» в разработке 1С, так как этот подход максимально учитывает особенности работы СКД в управляемых формах и предотвращает потерю данных при обновлении настроек пользователем.

← На главную