Как программно установить параметры отчета СКД при нажатии кнопки «Установить стандартные настройки»?

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

При разработке отчетов на базе Системы компоновки данных (СКД) часто возникает задача: необходимо, чтобы при открытии отчета или при нажатии кнопки «Установить стандартные настройки» параметры заполнялись определенными значениями (например, текущей датой, конкретной организацией или предопределенным элементом справочника). Стандартная кнопка платформы сбрасывает настройки к тем, что указаны в схеме, но как быть, если значения должны вычисляться динамически или зависеть от контекста?

В этой статье мы подробно разберем несколько эффективных способов решения этой задачи, проанализируем механизмы работы компоновщика настроек и выясним, как заставить интерфейс отображать программно установленные значения сразу, не дожидаясь нажатия кнопки «Сформировать».

Способ 1. Использование поля «Выражение» в схеме компоновки данных

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

В конфигураторе откроем схему компоновки данных, перейдем на закладку «Параметры». У каждого параметра есть колонка «Выражение». Проанализируем, что мы можем там написать:

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

Напишем в модуле функцию:


Функция ПолучитьОрганизациюПоУмолчанию() Экспорт
    Возврат Справочники.Организации.НайтиПоНаименованию("Основная организация");
КонецФункции

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

Способ 2. Обработка события «ПриЗагрузкеПользовательскихНастроекНаСервере»

Многие разработчики пытаются использовать событие ПриОткрытии, но оно срабатывает только один раз. При нажатии пользователем кнопки «Установить стандартные настройки» настройки сбрасываются, и код из ПриОткрытии больше не действует. Чтобы «отловить» момент сброса в управляемых формах, разберем работу обработчика ПриЗагрузкеПользовательскихНастроекНаСервере.

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


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

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

Способ 3. Подмена стандартной команды «Установить стандартные настройки»

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

  1. Откроем форму отчета и найдем в свойствах командной панели автозаполнение. Отключим его или найдем стандартную кнопку «Установить стандартные настройки» и установим ей свойство Видимость = Ложь.
  2. Создадим новую команду формы, назовем ее КомандаУстановитьСтандартныеНастройки. Зададим ей заголовок «Установить стандартные настройки» и выберем стандартную картинку (желтый круг со стрелкой).
  3. В обработчике этой команды на клиенте и сервере реализуем следующий алгоритм:

&НаКлиенте
Процедура КомандаУстановитьСтандартныеНастройки(Команда)
    УстановитьСтандартныеНастройкиНаСервере();
КонецПроцедуры

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

Почему параметры не всегда отображаются на форме?

Проанализируем распространенную ошибку: программист установил значение в КомпоновщикНастроек.Настройки, но на форме в разделе «Настройки» пользователь видит пустые поля. Выясним причину.

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

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

Использование «Консоли системы компоновки данных» для сложных ссылок

Посмотрим на ситуацию, когда нам нужно установить в качестве стандартной настройки сложную ссылку, которую трудно искать кодом. Рассмотрим старый, но рабочий метод:

  1. Откроем отчет в режиме «1С:Предприятие».
  2. Настроим все параметры так, как они должны выглядеть «по стандарту».
  3. Воспользуемся обработкой «Консоль системы компоновки данных», загрузим туда наш отчет и выгрузим настройки в XML-файл.
  4. В конфигураторе в схеме СКД можно загрузить эти настройки как настройки по умолчанию.

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

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

← На главную