Интерактивные операции запрещены в фоновом задании 1С — Устранение
- Исключение:
Интерактивные операции запрещены в фоновом задании. - Падение регламентного задания при вызове общих модулей с диалогами или выводом сообщений.
- Попытка вызова методов
Сообщить(),Вопрос(),ПолучитьФорму()или работы с COM-объектами GUI в фоне.
1. Проверка флага интерактивного режима в общем коде
Если один и тот же метод используется как в интерактивных сеансах пользователей, так и в регламентных заданиях, изолируйте интерактивные вызовы проверкой контекста:
// Безопасное информирование и запрос данных
Если МонопольныйРежим() Тогда
// Логика блокировки
КонецЕсли;
// Проверка доступности интерфейса
Если ПолучитьЗначениеПараметраСеанса("РежимКлиентскогоСеанса") = Истина Тогда
// Интерактивный код (только для клиентских сеансов)
Иначе
// Запись в Журнал регистрации для фоновых заданий
ЗаписьЖурналаРегистрации("РегламентнаяОбработка", УровеньЖурналаРегистрации.Информация, , , "Задание выполнено успешно");
КонецЕсли;2. Анализ свойства 'Клиент (управляемое приложение)' у Общих Модулей
Убедитесь, что методы, вызываемые фоновым заданием, не расположены в общих модулях с установленным флагом Клиент и отсутствующим флагом Сервер. Фоновое задание исполняется исключительно серверным процессом rphost.
3. Замена вывода сообщений Сообщить()
Вместо Сообщить() для фоновых заданий используйте регистрацию событий через механизм сообщений БСП или запись в Журнал Регистрации:
// Запись ошибки в фоновом потоке
ЗаписьЖурналаРегистрации(
"ФоновоеЗадание.Интеграция",
УровеньЖурналаРегистрации.Ошибка,
Метаданные.РегламентныеЗадания.СинхронизацияДанных,
,
"Сбой при обработке: " + ОписаниеОшибки()
); Частые вопросы (FAQ)
Почему вызов Сообщить() иногда работает в фоне, а иногда падает?
В чистом фоновом задании Сообщить() перехватывается буфером сообщений задания, но если внутри кода вызываются методы принудительного модального показа или работы с буфером экрана, платформа выбрасывает исключение.
Как вернуть результат тяжелых вычислений из фонового задания пользователю?
Сохраните результат во временное хранилище (ПоместитьВоВременноеХранилище) и передайте адрес вызывающему клиентскому потоку через механизм ДлительныеОперации.ОжидатьЗавершения().
Можно ли в фоновом задании открывать файлы Excel через COM-объект Excel.Application?
Крайне не рекомендуется. COM-объекты Excel требуют наличия контекста рабочего стола Windows (Desktop heap), что приводит к зависанию серверных сеансов rphost.
Как отладить код фонового задания в Конфигураторе?
В меню Конфигуратора выберите Отладка -> Подключение -> Автоматическое подключение и установите флаг 'Фоновые задания'.