Почему не работает автоматическая рассылка внешнего отчета по расписанию в 1С?

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

Часто при работе с типовыми конфигурациями (например, 1С:Управление торговлей 11) возникает неприятная ситуация: требуется настроить автоматическую рассылку внешнего отчета клиентам по расписанию. Вы настраиваете расписание, добавляете отчет, но в назначенное время ничего не происходит. При этом, если зайти в справочник рассылок и нажать кнопку выполнения вручную (команду "Выполнить сейчас"), письма успешно уходят. Проанализируем эту ситуацию и разберем по шагам, как правильно подготовить внешний отчет для подсистемы рассылок БСП (Библиотеки стандартных подсистем).

Разница между ручным и фоновым выполнением

Чтобы понять причину проблемы, рассмотрим архитектурную разницу между запуском отчета пользователем и запуском по расписанию.

Когда вы нажимаете кнопку выполнения вручную, рассылка формируется в вашем текущем клиентском сеансе. Система может открыть интерфейс, сформировать отчет в табличный документ и отправить его. Однако расписание в 1С реализовано через регламентные задания, которые выполняются в фоне на сервере. На сервере полностью отсутствует пользовательский интерфейс. Любая попытка системы обратиться к клиентским формам, диалоговым окнам или интерактивным процедурам при фоновом выполнении вызывает скрытую ошибку, и процесс рассылки прерывается.

Шаг 1. Исправляем вариант запуска (команду) внешнего отчета

Как было выяснено в ходе обсуждения проблемы, частой ошибкой является регистрация внешнего отчета с командой запуска ОткрытиеФормы. Именно это не позволяет регламентному заданию выполнить рассылку.

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

Посмотрим на пример правильной регистрации внешнего отчета:


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

Шаг 2. Настройка хранилища вариантов отчета

Вторая критически важная деталь, без которой подсистема рассылок не сможет работать с внешним отчетом — это свойство отчета Хранилище вариантов отчета.

Подсистема рассылок в 1С оперирует не просто отчетами, а их сохраненными вариантами (настройками СКД). Если у внешнего отчета не указано хранилище, фоновое задание не сможет получить нужные настройки компоновки данных. Разберем, как это исправить:

  1. Откройте внешний отчет в Конфигураторе.
  2. Выделите корневой элемент отчета и откройте палитру свойств.
  3. Найдите свойство ХранилищеВариантовОтчетов (в разделе "Представление" или "Основные").
  4. Выберите из списка стандартное хранилище конфигурации, которое обычно так и называется — ХранилищеВариантовОтчетов.
  5. Сохраните внешний отчет.

Также важно помнить, что отчет для корректной работы с рассылками должен быть построен исключительно с использованием Системы Компоновки Данных (СКД).

Шаг 3. Влияние "Безопасного режима"

Рассмотрим еще одну частую причину сбоев — безопасный режим. При добавлении внешнего отчета в базу через справочник "Дополнительные отчеты и обработки", система по умолчанию запускает его в безопасном режиме. Это защитный механизм платформы 1С.

Если ваш отчет обращается к внешним источникам данных, использует COM-объекты, читает или записывает файлы на диск сервера, безопасный режим заблокирует эти действия при выполнении фонового задания. При ручном запуске под правами администратора этот режим иногда обходится, что и создает иллюзию работоспособности. Выясним причину в коде: если отчет требует расширенных прав, установите свойство БезопасныйРежим в значение Ложь в функции СведенияОВнешнейОбработке() (как показано в примере кода выше), а также снимите галочку безопасного режима в самой карточке внешнего отчета в режиме Предприятия (если таковая имеется).

Шаг 4. Проверка системной учетной записи и прав

Проанализируем работу с электронной почтой. При ручном старте рассылки платформа может использовать персональную учетную запись почты того пользователя, который нажал кнопку. Но регламентное задание выполняется системным пользователем (или пользователем, указанным в настройках регламентного задания).

  1. Убедитесь, что в базе настроена Системная учетная запись электронной почты.
  2. Проверьте, что у пользователя, под которым стартует регламентное задание рассылки, есть полные права или достаточные роли для чтения данных вашего отчета и использования системной учетной записи.

Шаг 5. Диагностика ошибок через Журнал регистрации

Если вы выполнили все вышеописанные шаги, но рассылка всё равно не работает, не стоит гадать. Посмотрим, как точно определить причину сбоя.

Откройте ЖурналРегистрации (обычно находится в разделе "Администрирование" -> "Обслуживание"). Установите отбор по времени, когда должна была сработать рассылка по расписанию. Отфильтруйте события по уровню "Ошибки". В деталях ошибки для фонового задания платформа прямым текстом укажет причину: например, "Интерактивные операции недоступны на сервере" (если остался вызов форм) или ошибку авторизации на почтовом SMTP-сервере. Это позволит точечно устранить оставшиеся недочеты.

← На главную