Почему внешняя обработка запускается вручную, но не работает по расписанию?

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

В процессе разработки и внедрения внешних обработок в экосистему 1С с использованием Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с загадочной проблемой. Внешняя обработка успешно зарегистрирована в справочнике Дополнительные отчеты и обработки, назначена пользователю, расписание настроено, и при нажатии кнопки "Выполнить сейчас" всё отрабатывает без ошибок. Однако при наступлении указанного времени автоматический запуск по расписанию игнорируется, а в Журнале регистрации не появляется вообще никаких записей.

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

Причина 1. Неправильное количество параметров в процедуре ВыполнитьКоманду

Проанализируем программный интерфейс внешней обработки. Очень часто разработчики объявляют процедуру ВыполнитьКоманду только с одним параметром, как это было принято в старых версиях БСП:


Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
    Если ИдентификаторКоманды = "ВыгрузкаДляСКУД" Тогда
        ВыгрузитьДанные();
    КонецЕсли;
КонецПроцедуры

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

Рассмотрим правильный вариант объявления процедуры, соответствующий современным стандартам БСП:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
    Если ИдентификаторКоманды = "ВыгрузкаДляСКУД" Тогда
        ВыгрузитьДанные();
    КонецЕсли;
КонецПроцедуры

Даже если параметр ПараметрыВыполнения не используется в вашем коде выгрузки, его наличие в сигнатуре процедуры строго обязательно.

Причина 2. Блокировка регламентных заданий при перемещении или копировании базы данных

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

При этом ручной запуск ("Выполнить сейчас") продолжает работать, так как система считает это осознанным действием администратора в текущем сеансе.

Выполним следующие шаги для диагностики и решения:

  1. Перейдем в раздел Администрирование — Обслуживание — Регламентные операции.
  2. Если база данных была скопирована, в верхней части окна появится предупреждающий баннер: «Информационная база была перемещена или восстановлена из резервной копии...».
  3. Нажмем кнопку «Разблокировать работу с внешними ресурсами» или подтвердим, что данная база является легитимной (рабочей).

Причина 3. Права доступа службы сервера 1С на запись файлов

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

Когда задание стартует автоматически по расписанию, оно выполняется под управлением службы сервера 1С:Предприятие. По умолчанию эта служба работает от имени системного пользователя usr1cv8.

Проанализируем важные правила настройки путей для серверного выполнения:

  1. Не используйте буквы дисков. Пути вида Z:\SKUD_Data\export.xml не будут работать по расписанию, так как у службы сервера 1С не примонтированы сетевые диски пользователей. Используйте только сетевые UNC-пути, например: \\ServerName\SKUD_Data\export.xml.
  2. Настройте права NTFS. Перейдите в свойства целевой папки на сервере и предоставьте пользователю usr1cv8 (или той учетной записи, от имени которой запущена служба 1C:Enterprise 8.3 Server Agent) права на Чтение и Запись.

Причина 4. Влияние "Защиты от опасных действий"

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

Для устранения этой проблемы выполним настройку прав:

  1. Откроем базу в режиме Конфигуратор.
  2. Перейдем в список пользователей (Администрирование — Пользователи).
  3. Найдем пользователя, который указан в настройках регламентного задания внешней обработки в режиме предприятия. Если пользователь не задан, регламентные задания БСП по умолчанию выполняются под системным пользователем.
  4. Откроем свойства пользователя, перейдем на вкладку Основные и снимем флажок Защита от опасных действий.

Для крупных серверных инфраструктур радикальным решением является отключение этой защиты на уровне всего кластера серверов 1С. Для этого в конфигурационный файл сервера conf.cfg (обычно расположен в каталоге C:\Program Files\1cv8\conf\) добавляют следующую строку:

DisableUnsafeActionProtection=.*

Причина 5. Ошибки в версии БСП при регистрации обработки

Посмотрим на код функции регистрации обработки из примера автора:

П = ДополнительныеОтчетыИОбработки.SведенияОВнешнейОбработке("");

Передача пустой строки в качестве параметра версии БСП заставляет систему инициализировать параметры совместимости по умолчанию. Это может приводить к тому, что БСП некорректно генерирует метаданные для планировщика задач СУБД. Рекомендуется явно указывать версию БСП, которая используется в вашей конфигурации. Например, для ЗУП 3.1 это может быть версия "3.0.1.1":

П = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.0.1.1");

Методика диагностики: Пишем простой тест запуска

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

Заменим процедуру выгрузки в модуле обработки на следующий код:


Процедура ВыгрузитьДанные()
    ЗаписьЖурналаРегистрации(
        "ТестВнешнейОбработки",
        УровеньЖурналаРегистрации.Информация,
        ,
        ,
        "Регламентное задание внешней обработки успешно сработало по расписанию!"
    );
КонецПроцедуры

После этого обновим внешнюю обработку в справочнике БСП и настроим расписание на запуск каждые 2 минуты. Если через 2-4 минуты в Журнале регистрации появится запись с событием "ТестВнешнейОбработки", значит планировщик платформы и БСП работают корректно. В таком случае проблему следует искать исключительно в правах доступа серверной учетной записи к сетевым папкам или СУБД при выполнении основного кода выгрузки.

← На главную