Почему 1С зависает при запуске обработки через планировщик заданий и как это исправить?

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

Ситуация, когда запуск 1С через bat-файл отлично работает вручную, но намертво «зависает» при старте через планировщик заданий Windows (Task Scheduler), является классической проблемой для системных администраторов и разработчиков 1С. Основная сложность заключается в том, что в фоновом режиме (Session 0) система ведет себя иначе, чем в интерактивном сеансе пользователя. Проанализируем причины этой проблемы и разберем пошаговое решение.

Разберем механизм работы планировщика заданий

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

Решение 1: Создание недостающих системных папок Desktop

Это самое неочевидное, но наиболее частое решение. Многие COM-объекты и библиотеки (DLL), включая компоненты для обмена данными, требуют наличия папки Desktop в системном профиле для инициализации своего окружения, даже если они не выводят графику. Выясним, как их создать:

  1. Перейдем по пути: C:\Windows\SysWOW64\config\systemprofile
  2. Проверим наличие папки Desktop. Если её нет — создадим её вручную.
  3. Если у вас 64-битная система, также проверим путь: C:\Windows\System32\config\systemprofile и создадим там аналогичную папку Desktop.
  4. Убедимся, что у пользователя, под которым запускается задание в планировщике, есть полные права на эти папки.

Важно: Это решение часто исправляет ошибки при работе с компонентами от «Далион», драйверами торгового оборудования и другими внешними библиотеками.

Решение 2: Диагностика через логирование (параметр /Out)

Чтобы понять, где именно останавливается выполнение, необходимо видеть технический вывод 1С. В планировщике мы не видим консоль, поэтому воспользуемся ключом /Out. Модифицируем строку запуска в нашем bat-файле:


@echo off
"C:\Program Files (x86)\1cv8\8.3.12.1529\bin\1cv8.exe" ENTERPRISE /F"C:\1CBase\Test\TRAKTIR_TEST3\" /N"Obmen" /P"****" /Execute"C:\1CBase\Test\TRAKTIR_TEST3\Test.epf" /Out"C:\1CBase\log.txt" /DisableStartupMessages

Проанализируем параметры:

Решение 3: Проверка внешних компонент и метода их загрузки

Как было выяснено в ходе обсуждения, зависание часто происходит на строке загрузки внешней компоненты. Например:

ЗагрузитьВнешнююКомпоненту(ИмяКомпонентыDalion);

В неинтерактивной сессии выполнение этой команды может вызвать сбой, если компонента не зарегистрирована в системе или пытается обратиться к ресурсам, доступным только при наличии загруженного профиля пользователя. Рассмотрим варианты исправления:

  1. Заменим ЗагрузитьВнешнююКомпоненту() на ПодключитьВнешнююКомпоненту(). Второй метод более современный и часто работает стабильнее в фоновых заданиях.
  2. Если компонента требует регистрации, выполним её принудительно под администратором через regsvr32.
  3. Проверим права пользователя на папку, где лежит файл компоненты (DLL).

Решение 4: Использование скриптов VBS для запуска

Иногда командный интерпретатор cmd.exe сам по себе создает проблемы с передачей кавычек или ожиданием завершения процесса. Попробуем использовать VBScript для более «чистого» запуска процесса 1С. Создадим файл start_1c.vbs:


Set WshShell = CreateObject("WScript.Shell")
' Команда запуска с тройными кавычками для путей с пробелами
Command = """C:\Program Files (x86)\1cv8\8.3.12.1529\bin\1cv8.exe"" ENTERPRISE /F""C:\1CBase\Test\TRAKTIR_TEST3\"" /N""Obmen"" /P""****"" /Execute""C:\1CBase\Test\TRAKTIR_TEST3\Test.epf"""
' 0 - запустить в скрытом режиме, True - ждать завершения
WshShell.Run Command, 0, True

В планировщике задач в качестве исполняемого файла укажем wscript.exe, а в качестве аргумента — путь к вашему .vbs файлу.

Решение 5: Настройка свойств формы обработки

Если ваша обработка запускается в «Обычном приложении», 1С все равно инициализирует форму. Посмотрим на настройки формы:

Пример корректного завершения в коде обработки:


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

Резюме и контрольный список настроек

Проанализируем итоговый список действий, если 1С все еще висит в процессах:

  1. В планировщике задач в поле «Рабочая папка» (Start in) обязательно укажите путь к папке bin установленной платформы 1С.
  2. Установите флаг «Выполнять с наивысшими правами» (Run with highest privileges) в свойствах задачи.
  3. Проверьте, что в пути к базе и к обработке нет кириллицы и пробелов (если есть — обязательно заключайте их в кавычки).
  4. Убедитесь, что у пользователя 1С (в нашем примере "Obmen") достаточно прав (желательно «Полные права») для выполнения действий внутри базы.
  5. Если используется серверный вариант базы, попробуйте перенести логику в регламентное задание на стороне сервера 1С, что позволит избежать проблем с планировщиком Windows.

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

← На главную