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

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

Часто разработчики и администраторы 1С сталкиваются с ситуацией, когда внешняя обработка отлично работает при интерактивном запуске по кнопке, но наотрез отказывается выполняться как регламентное задание по расписанию. При попытке запустить задание принудительно из консоли может появляться ошибка: "Задание отменено пользователем по причине: Сеанс работы завершен администратором".

Давайте подробно разберемся, почему так происходит и как это исправить. Ключевая причина кроется в различном контексте выполнения и, как следствие, в разных правах доступа.

Главное отличие: ручной запуск vs запуск по расписанию

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

Ошибка "Сеанс работы завершен администратором" в 99% случаев не означает, что администратор действительно вручную прервал сеанс. Обычно это защитный механизм платформы 1С, который принудительно завершает фоновый сеанс, пытающийся выполнить недопустимое с точки зрения безопасности или прав действие.

Пошаговый план диагностики и решения проблемы

Рассмотрим по шагам, что нужно проверить и настроить, чтобы ваша обработка начала корректно работать в фоновом режиме.

Шаг 1. Назначаем правильного пользователя для регламентного задания

Первое и самое важное — это явно указать, от имени какого пользователя должно выполняться задание. Не оставляйте это поле пустым.

  1. Откройте карточку вашего регламентного задания (в разделе Администрирование – Обслуживание – Регламентные и фоновые задания).
  2. На вкладке "Основное" найдите поле "Имя пользователя".
  3. Укажите пользователя, от имени которого будет запускаться обработка. Настоятельно рекомендуется создать для этих целей отдельного служебного пользователя (например, "РоботРегламентныхЗаданий") и не использовать учетные записи реальных сотрудников.

Теперь все последующие настройки прав мы будем выполнять именно для этого служебного пользователя.

Шаг 2. Предоставляем необходимые права пользователю

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

  1. Права на запуск внешних обработок. Убедитесь, что в профиле групп доступа вашего служебного пользователя включена роль Интерактивное открытие внешних отчетов и обработок. Без нее система просто не позволит запустить код из внешнего файла.
  2. Отключение защиты от опасных действий. Это критически важная настройка для фоновых заданий, которые работают с файловой системой, COM-объектами или вызывают внешние компоненты.
    • Зайдите в карточку служебного пользователя.
    • Перейдите на вкладку "Настройки".
    • Снимите флажок "Защита от опасных действий". Эта опция разрешает серверному коду выполнять операции, которые считаются потенциально небезопасными, но часто необходимы для интеграций и обменов.
  3. Права на объекты метаданных. Проверьте, что у пользователя есть права на чтение, запись, изменение и проведение всех справочников, документов, регистров и других объектов, к которым обращается ваша обработка. Если обработка создает документ "Прием на работу", у пользователя должны быть права на его создание и запись.

Шаг 3. Адаптируем код обработки для серверного выполнения

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

Посмотрим на пример:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Наименование = "Моя обработка для регламентного задания";
    
    // Эта строка разрешает выполнение потенциально опасных действий на сервере,
    // например, работу с файлами или COM-объектами.
    ПараметрыРегистрации.БезопасныйРежим = Ложь;

    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Выполнить обработку";
    Команда.Идентификатор = "ВыполнитьОбработку";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

    Возврат ПараметрыРегистрации;

КонецФункции

Шаг 4. Проверяем права на уровне операционной системы

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

Обычно эта служба работает от имени пользователя usr1cv8. Проверьте, что у этого пользователя есть права на чтение и запись в те папки, с которыми взаимодействует ваша обработка.

Шаг 5. Анализируем Журнал регистрации

Если после всех настроек проблема не ушла, ваш лучший друг — это Журнал регистрации (Администрирование – Обслуживание – Журнал регистрации). Для регулярного мониторинга можно использовать инструмент для автоматического анализа невыполненных регламентных заданий.

  1. Установите отбор по событию "Фоновое задание" и по имени вашего задания.
  2. Посмотрите записи в момент предполагаемого запуска. Там вы, скорее всего, найдете более детальное описание ошибки, которое укажет на конкретную строку кода или на нехватку прав на определенный объект.
  3. Для лучшей диагностики добавьте в код своей обработки информационные сообщения, которые будут записываться в журнал на разных этапах выполнения. Это поможет точно определить, на каком шаге происходит сбой.

Пример записи в журнал:


Процедура МояПроцедураНаСервере()
    
    ТекстСообщения = "Регламентное задание 'Моя обработка' начало работу.";
    ЗаписьЖурналаРегистрации("МояОбработка.Старт", УровеньЖурналаРегистрации.Информация,,, ТекстСообщения);
    
    Попытка
        // ... основной код обработки ...
        ТекстСообщения = "Обработка успешно завершена.";
        ЗаписьЖурналаРегистрации("МояОбработка.Успех", УровеньЖурналаРегистрации.Информация,,, ТекстСообщения);
    Исключение
        ТекстСообщения = "В ходе выполнения обработки произошла ошибка: " + ОписаниеОшибки();
        ЗаписьЖурналаРегистрации("МояОбработка.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения);
    КонецПопытки;

КонецПроцедуры

Таким образом, планомерно проверив все пять пунктов — пользователя, его права, код обработки, права на уровне ОС и журнал регистрации — вы с высокой вероятностью найдете и устраните причину сбоя при запуске внешней обработки по расписанию.

← На главную