Часто разработчики и администраторы 1С сталкиваются с ситуацией, когда внешняя обработка отлично работает при интерактивном запуске по кнопке, но наотрез отказывается выполняться как регламентное задание по расписанию. При попытке запустить задание принудительно из консоли может появляться ошибка: "Задание отменено пользователем по причине: Сеанс работы завершен администратором".
Давайте подробно разберемся, почему так происходит и как это исправить. Ключевая причина кроется в различном контексте выполнения и, как следствие, в разных правах доступа.
Чтобы понять корень проблемы, проанализируем, что происходит в обоих случаях:
Ошибка "Сеанс работы завершен администратором" в 99% случаев не означает, что администратор действительно вручную прервал сеанс. Обычно это защитный механизм платформы 1С, который принудительно завершает фоновый сеанс, пытающийся выполнить недопустимое с точки зрения безопасности или прав действие.
Рассмотрим по шагам, что нужно проверить и настроить, чтобы ваша обработка начала корректно работать в фоновом режиме.
Первое и самое важное — это явно указать, от имени какого пользователя должно выполняться задание. Не оставляйте это поле пустым.
Администрирование – Обслуживание – Регламентные и фоновые задания).Теперь все последующие настройки прав мы будем выполнять именно для этого служебного пользователя.
У пользователя, от имени которого работает регламентное задание, должен быть полный набор прав для выполнения всех операций внутри кода обработки.
Интерактивное открытие внешних отчетов и обработок. Без нее система просто не позволит запустить код из внешнего файла.
Код, который работает в фоновом режиме на сервере, имеет свои ограничения. Он не должен содержать интерактивных вызовов, предназначенных для пользователя. При необходимости можно воспользоваться готовым шаблоном внешней обработки на основе БСП с поддержкой фонового выполнения.
&НаСервере) и не содержат вызовов вроде Предупреждение(), Вопрос(), ОткрытьФорму(). Такие вызовы не могут быть исполнены в фоновом сеансе и приведут к ошибке. Для отладки используйте запись в журнал регистрации: ЗаписьЖурналаРегистрации().СведенияОВнешнейОбработке, необходимо указать, что она может работать в небезопасном режиме.Посмотрим на пример:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Наименование = "Моя обработка для регламентного задания";
// Эта строка разрешает выполнение потенциально опасных действий на сервере,
// например, работу с файлами или COM-объектами.
ПараметрыРегистрации.БезопасныйРежим = Ложь;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Выполнить обработку";
Команда.Идентификатор = "ВыполнитьОбработку";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Возврат ПараметрыРегистрации;
КонецФункции
Если ваша обработка работает с файлами на диске сервера (например, загружает данные из Excel-файла или выгружает отчет), нужно убедиться, что у системного пользователя, от имени которого запущена служба сервера 1С:Предприятия, есть права на доступ к нужным каталогам.
Обычно эта служба работает от имени пользователя usr1cv8. Проверьте, что у этого пользователя есть права на чтение и запись в те папки, с которыми взаимодействует ваша обработка.
Если после всех настроек проблема не ушла, ваш лучший друг — это Журнал регистрации (Администрирование – Обслуживание – Журнал регистрации). Для регулярного мониторинга можно использовать инструмент для автоматического анализа невыполненных регламентных заданий.
Пример записи в журнал:
Процедура МояПроцедураНаСервере()
ТекстСообщения = "Регламентное задание 'Моя обработка' начало работу.";
ЗаписьЖурналаРегистрации("МояОбработка.Старт", УровеньЖурналаРегистрации.Информация,,, ТекстСообщения);
Попытка
// ... основной код обработки ...
ТекстСообщения = "Обработка успешно завершена.";
ЗаписьЖурналаРегистрации("МояОбработка.Успех", УровеньЖурналаРегистрации.Информация,,, ТекстСообщения);
Исключение
ТекстСообщения = "В ходе выполнения обработки произошла ошибка: " + ОписаниеОшибки();
ЗаписьЖурналаРегистрации("МояОбработка.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения);
КонецПопытки;
КонецПроцедуры
Таким образом, планомерно проверив все пять пунктов — пользователя, его права, код обработки, права на уровне ОС и журнал регистрации — вы с высокой вероятностью найдете и устраните причину сбоя при запуске внешней обработки по расписанию.