Типовой механизм «Рассылка отчетов» в Библиотеке стандартных подсистем (БСП) — это мощный инструмент, который позволяет автоматизировать доставку аналитики пользователям по расписанию. Однако разработчики часто сталкиваются с тем, что созданный ими отчет (будь то внешний файл, отчет в расширении или встроенный в основную конфигурацию объект) просто не отображается в списке выбора при настройке рассылки.
В этой статье мы подробно разберем, как устроен механизм подбора отчетов для рассылки, выясним технические причины, по которым отчеты могут «пропадать» из списка, и рассмотрим пошаговые инструкции по их правильной интеграции.
Для начала проанализируем ситуацию, с которой часто сталкиваются пользователи и разработчики при попытке выбрать отчет в форме рассылки. Причина «невидимости» отчета напрямую зависит от способа его интеграции в систему. Выделим два основных сценария:
.erf), подключенный через справочник «Дополнительные отчеты и обработки».Рассмотрим особенности работы с каждым из этих вариантов.
Если ваш отчет разработан как внешний, он не регистрируется в основном справочнике вариантов отчетов конфигурации автоматически. Именно поэтому при нажатии на стандартную кнопку «Подобрать» в карточке рассылки вы его не увидите.
Для выбора внешних отчетов разработчики БСП предусмотрели отдельный интерфейс. Чтобы добавить такой отчет в рассылку, выполните следующие шаги:
СведенияОВнешнейОбработке в модуле объекта отчета.Пример реализации обязательной экспортной функции СведенияОВнешнейОбработке в модуле объекта внешнего отчета:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОРегистрацииАвтономногоИспользования();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйReport(); // Указываем, что это отчет
ПараметрыРегистрации.Наименование = "Мой внешний отчет по продажам";
ПараметрыРегистрации.Версия = "1.1";
ПараметрыРегистрации.БезопасныйРежим = Истина;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Открыть отчет...";
НоваяКоманда.Идентификатор = "ОткрытьОтчет";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
Важное примечание: Чтобы механизм рассылки мог корректно оперировать параметрами внешнего отчета, в системе должен быть сохранен хотя бы один его вариант настроек в стандартном ХранилищеВариантовОтчетов. Если отчет абсолютно новый и пользователи еще ни разу не сохраняли его варианты, БСП может работать с ним некорректно.
Если вы добавили новый отчет непосредственно в основную конфигурацию или внедрили его через расширение метаданных, механизм подбора рассылок ищет его в справочнике «Варианты отчетов». Если карточки отчета там нет, он не отобразится в основном списке подбора.
Выясним по шагам, что необходимо сделать программисту, чтобы отчет прошел автоматическую регистрацию в БСП:
ХранилищеВариантовОтчетов.
НастроитьВариантыОтчета.
Пример кода в модуле менеджера отчета:
Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт
НастройкиОтчета.ОпределитьНастройкиПервичногоРазмещения = Истина;
// Указываем вариант отчета по умолчанию
ВариантНастройки = Настройки.Варианты.Добавить();
ВариантНастройки.КлючВарианта = "ОсновнойВариант";
// Указываем подсистему, в которой будет отображаться отчет
ВариантНастройки.НастройкиПоУмолчанию.Размещение.Добавить(Метаданные.Подсистемы.Продажи);
КонецПроцедуры
После внесения изменений в конфигурацию или активации расширения система не всегда мгновенно обновляет справочник вариантов отчетов. Чтобы запустить принудительную регистрацию новых метаданных БСП, выполните одно из следующих действий:
/C ЗапуститьОбновлениеИнформационнойБазы.После выполнения обновления метаданных БСП автоматически добавит записи в справочник «Варианты отчетов», и ваш отчет станет доступен для выбора в стандартной рассылке.
Даже если отчет успешно выбран в настройках рассылки, при ее выполнении по расписанию может возникнуть ошибка выполнения фонового задания. Давайте подробно разберем требования, которым должен отвечать программный код отчета, чтобы рассылка по почте отрабатывала без сбоев.
1. Полная независимость от клиентского контекста (выполнение на сервере)
Рассылка выполняется на сервере в фоновом режиме под управлением регламентного задания. В этот момент у сеанса нет активного клиента (интерфейса пользователя).
Категорически запрещено использовать в модуле объекта отчета, в модуле формы или в событии ПриКомпоновкеРезультата методы, которые пытаются взаимодействовать с пользователем или файловой системой его компьютера. К ним относятся: Предупреждение(), Вопрос(), ПоказатьПредупреждение(), вызовы диалогов выбора файлов и обращение к общим модулям с пометкой Клиент.
2. Использование СКД и метода СкомпоноватьРезультат
Отчет должен быть построен строго с использованием Системы компоновки данных (СКД). Вывод данных должен происходить стандартными механизмами платформы. Если в модуле объекта вы переопределяете процедуру ПриКомпоновкеРезультата, внутри нее обязательно должен вызываться метод стандартного вывода:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Если требуется кастомизация программной компоновки,
// выполняем ее на сервере, после чего обязательно вызываем стандартный вывод:
СтандартнаяОбработка = Ложь;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
3. Включение параметров в пользовательские настройки СКД
Чтобы пользователи могли гибко настраивать параметры отчета непосредственно из карточки «Рассылка отчетов» (например, менять период формирования, указывать другую организацию или склад), все эти параметры в схеме компоновки данных должны быть обязательно отмечены свойством «Включать в пользовательские настройки». В противном случае механизм рассылки БСП просто не увидит эти параметры и не сможет передать в них новые значения перед формированием табличного документа.
4. Ограничения безопасного режима
Если ваш внешний отчет подключен в безопасном режиме (что рекомендуется правилами безопасности 1С), платформа накладывает жесткие ограничения на выполнение кода на сервере. В безопасном режиме запрещено:
УстановитьПривилегированныйРежим(Истина).Если для работы отчета требуются эти действия, необходимо регистрировать его с отключенным безопасным режимом либо запрашивать у администратора соответствующие разрешения (программные разрешения БСП).
Очень часто перед разработчиком стоит задача настроить индивидуальную рассылку данных. Например, чтобы каждый менеджер получал по почте исключительно свои продажи, а каждый контрагент — только акт сверки по своей организации.
Для реализации этого сценария выполните следующие действия в схеме компоновки данных (СКД):
Менеджер или Контрагент).[Получатель].При запуске рассылки система автоматически определит получателя письма (например, конкретного пользователя или контрагента), подставит его значение в параметр отбора СКД, сформирует индивидуальный отчет и отправит его на email этого получателя. Для удобного администрирования списка адресатов в таких сценариях подойдёт инструмент для управления получателями рассылок отчетов.
В коде БСП (в переопределяемом модуле подсистемы вариантов отчетов) существует встроенный массив ИсключаемыеОтчеты. Он используется разработчиками тиражных решений 1С для программного сокрытия отчетов от рассылки.
Туда добавляются отчеты, которые технически невозможно или нецелесообразно отправлять по почте. Обычно это:
Проанализировав эти требования и настроив структуру вашего отчета в соответствии с правилами БСП, вы без труда добьетесь его стабильной работы в автоматических рассылках по расписанию.