При разработке отчетов на базе Системы Компоновки Данных (СКД) разработчики часто сталкиваются с задачей программного управления настройками отчета. Основная сложность заключается в том, что параметры могут быть как системными (заложенными в схему), так и пользовательскими (измененными в форме отчета). Рассмотрим по шагам, как правильно работать с этими данными.
Прежде чем приступать к написанию кода, важно понять, где хранятся данные. Объект КомпоновщикНастроек содержит два ключевых свойства: Настройки и ПользовательскиеНастройки.
Настройки — здесь содержатся базовые значения, заданные в схеме или сохраненные как настройки по умолчанию.ПользовательскиеНастройки — здесь хранятся значения, которые ввел или изменил пользователь в интерфейсе формы.Если вы пытаетесь получить значение через Настройки.ПараметрыДанных, но пользователь изменил его в форме, вы получите старое значение. Всегда проверяйте оба источника или используйте специальные механизмы платформы.
Наиболее надежный способ получения данных — использование функций из типовых общих модулей конфигурации, таких как ОтчетыКлиентСервер. Эти функции корректно обходят иерархию настроек.
Рассмотрим пример использования:
// Пример получения параметра Период из типового модуля
ПараметрСКД = ОтчетыКлиентСервер.НайтиПараметр(
ЭтотОбъект.КомпоновщикНастроек.Настройки,
ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки,
"Период"
).Значение;
Если в вашей конфигурации нет таких модулей, вы можете написать вспомогательную функцию для поиска. Суть метода заключается в поиске элемента в ПользовательскиеНастройки по идентификатору, связанному с параметром из Настройки.
Для передачи параметров в отчет при его открытии или обновлении настроек лучше всего использовать метод УстановитьЗначениеПараметра. Это позволяет избежать ошибок, связанных с прямой манипуляцией объектами ПараметрыДанных.
// Установка параметра через метод объекта
ИмяПараметра = "Склад";
ЗначениеПараметра = СсылкаНаСклад;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, ИмяПараметра, ЗначениеПараметра);
Если вы работаете с ПользовательскиеНастройки.Элементы напрямую, помните о следующих нюансах:
Элементы.Получить(0)), так как структура коллекции может измениться при изменении состава отчета.ИдентификаторПользовательскойНастройки для поиска нужного элемента.ПараметрыФормы, не забудьте обработать их в процедуре ПриСозданииНаСервере целевой формы. В этой процедуре вам нужно будет считать переданные значения из структуры параметров и применить их к КомпоновщикНастроек вызываемого отчета.Частая проблема — попытка обратиться к параметру до завершения инициализации компонента. Если вы открываете отчет программно, убедитесь, что:
ПараметрыФормы.ПриСозданииНаСервере корректно принимает эту структуру.КомпоновщикНастроек.Инициализировать().Использование ОтчетыКлиентСервер.НайтиПараметр является «золотым стандартом» в разработке 1С, так как этот подход максимально учитывает особенности работы СКД в управляемых формах и предотвращает потерю данных при обновлении настроек пользователем.