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