При работе с конфигурацией «Управление торговлей 10.3» часто возникает задача автоматизации формирования отчетов. Если ручной запуск позволяет пользователю интерактивно выбрать нужную настройку, то при запуске по расписанию (через регламентные задания) отчет должен самостоятельно «понять», какие параметры, фильтры и группировки использовать. В этой статье мы подробно разберем механизм хранения настроек и напишем код для их программной загрузки.
Для начала проанализируем структуру хранения данных. В классических конфигурациях на обычных формах, таких как УТ 10.3, большинство отчетов строятся на базе Универсального отчета. Настройки таких отчетов (фильтры, отборы, порядок, группировки) сохраняются в специальном месте — Регистре сведений «Сохраненные настройки».
Разберем структуру этого регистра, чтобы понять, как извлечь из него данные:
ХранилищеЗначения. Именно здесь в бинарном виде запакована структура настроек построителя отчета.Рассмотрим ситуацию: у нас есть внешний отчет, и нам нужно программно «подцепить» настройку с именем «Для_Робота». Поскольку отчет запускается в фоновом задании, контекст формы отсутствует, и стандартные методы ВосстановитьЗначения() не сработают. Нам придется работать напрямую с объектом отчета и регистром.
Выясним причину, по которой настройки могут быть «не видны». Если отчет запускается под системной учетной записью, он не увидит личные настройки программиста. Поэтому первым делом убедимся, что нужная настройка сохранена как «Общая». В коде мы будем искать её по имени.
Предположим, наш отчет использует стандартный ПостроительОтчета. Напишем функцию, которая будет извлекать структуру настроек из регистра и применять её к объекту. Проанализируем следующий пример кода:
// Функция находит и возвращает настройки из регистра
Функция ПолучитьНастройкуПоИмени(ИмяОтчета, ИмяНастройки)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СохраненныеНастройки.Настройка
|ИЗ
| РегистрСведений.СохраненныеНастройки КАК СохраненныеНастройки
|ГДЕ
| СохраненныеНастройки.ИмяОбъекта = &ИмяОбъекта
| И СохраненныеНастройки.НаименованиеНастройки = &НаименованиеНастройки";
Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОтчета);
Запрос.УстановитьПараметр("НаименованиеНастройки", ИмяНастройки);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
// Извлекаем данные из ХранилищаЗначения
Возврат Выборка.Настройка.Получить();
КонецЕсли;
Возврат Неопределено;
КонецФункции
Теперь, когда мы получили структуру настроек (обычно это Структура или Соответствие), её нужно передать в построитель. Рассмотрим подробнее, как это сделать в модуле внешнего отчета в процедуре, вызываемой регламентным заданием.
Важно помнить, что в УТ 10.3 программный интерфейс Универсального отчета предоставляет свои методы. Если ваш отчет базируется на нем, лучше использовать типовую процедуру ЗагрузитьНастройкуИзРегистра(). Но если вы работаете с «чистым» построителем, алгоритм будет следующим:
Процедура СформироватьОтчетПоРасписанию()
// 1. Имя объекта для внешнего отчета может отличаться.
// Если отчет запущен из файла, ИмяОбъекта часто совпадает с именем файла или его внутренним ID.
ИмяОбъекта = ЭтотОбъект.Метаданные().Имя;
ИмяНужнойНастройки = "ЕжедневнаяРассылка";
СтруктураНастроек = ПолучитьНастройкуПоИмени(ИмяОбъекта, ИмяНужнойНастройки);
Если СтруктураНастроек <> Неопределено Тогда
// 2. Устанавливаем настройки в построитель
// Предполагаем, что ПостроительОтчета — это реквизит объекта
ЭтотОбъект.ПостроительОтчета.УстановитьНастройки(СтруктураНастроек);
// 3. Дополнительно может потребоваться инициализация параметров
// так как некоторые параметры могут не входить в структуру настроек построителя
ЭтотОбъект.ПостроительОтчета.Выполнить();
// Далее код формирования табличного документа и отправки по почте...
Иначе
ЗаписьЖурналаРегистрации("Ошибка.Автозапуск",,,,"Настройка " + ИмяНужнойНастройки + " не найдена!");
КонецЕсли;
КонецПроцедуры
Посмотрим на ситуацию, когда отчет является внешним файлом. В 1С 8.2 и 8.3 при сохранении настроек для внешнего отчета, который открыт просто через Файл -> Открыть, система в качестве ИмяОбъекта сохраняет полный путь к файлу на диске. Это «подводный камень»: если вы переместите файл или запустите его на сервере, где путь отличается, настройка не будет найдена.
Рекомендация: Для стабильной работы при автозапуске лучше всего:
System или USR1CV8 имел к ней доступ.Мы проанализировали механизм работы с сохраненными настройками в УТ 10.3. Выяснили, что ключом к успеху является правильное обращение к регистру СохраненныеНастройки и последующее использование метода УстановитьНастройки() у объекта ПостроительОтчета. Используя приведенные примеры кода, вы сможете гибко управлять поведением ваших отчетов при их автоматическом выполнении.