Как исправить ошибку «Вход в программу временно невозможен...» при запуске внешней обработки по расписанию

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

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

Разбор причины: почему 1С пишет про обновление, когда его нет?

Для начала проанализируем саму суть сообщения об ошибке. В конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), таких как Управление торговлей 11, ERP или Комплексная автоматизация, существует жесткий механизм контроля доступа в момент инициализации сеанса. Когда запускается фоновое задание, система создает новый сеанс и выполняет ряд проверок в Модуле сеанса и процедурах инициализации параметров сеанса.

Если в процессе этой инициализации происходит критический сбой или отказ в доступе к системным константам (например, к тем, что хранят состояние обновления конфигурации), система «паникует». Вместо того чтобы выдать подробную техническую информацию, которая может быть небезопасна, БСП подставляет стандартную заглушку: «Вход невозможен, идет обновление». На самом деле, в 90% случаев это означает, что код не смог прочитать нужные данные из-за нехватки прав.

Конфликт Безопасного режима и Привилегированного режима

Рассмотрим ключевой момент, который часто упускают разработчики. При регистрации внешней обработки в справочнике Дополнительные отчеты и обработки по умолчанию часто устанавливается флаг «Безопасный режим». Рассмотрим подробнее, к чему это приводит:

  1. В безопасном режиме платформа 1С накладывает жесткие ограничения: запрещены методы Выполнить(), работа с файловой системой на сервере, COM-объекты и, самое главное, игнорируется установка привилегированного режима.
  2. Многие типовые процедуры БСП, которые вызываются при обращении к модулям менеджеров документов или при записи объектов, содержат конструкцию УстановитьПривилегированныйРежим(Истина).
  3. Если ваша обработка запущена в безопасном режиме, то при вызове кода типа Документы.ЗаказПокупателя.СоздатьДокумент() внутри типовых механизмов произойдет попытка повышения прав. Платформа молча проигнорирует этот запрос, код продолжит выполнение с правами «пустого» пользователя фонового задания, наткнется на закрытый объект или защищенный регистр и вызовет исключение.

Это исключение внутри системных модулей и приводит к тому, что сеанс считается «битым», и пользователь получает сообщение о блокировке базы.

Шаг 1: Отключение безопасного режима

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

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

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

Шаг 2: Настройка прав пользователя для фонового задания

Проанализируем ситуацию с пользователем. По умолчанию регламентные задания в серверном варианте могут запускаться от имени «пустого» пользователя (системного). Если ваша логика предполагает создание документов, проведение сделок или изменение остатков, прав пустого пользователя может быть недостаточно, даже если внутри кода используется привилегированный режим (так как не все проверки можно обойти привилегиями).

Рекомендуется создать специального служебного пользователя. Выполним следующие действия:

  1. Создадим в справочнике Пользователи запись, например, «Робот_Заказы».
  2. Назначим ему роль Полные права (или специально подготовленный набор ролей, достаточный для создания документов).
  3. В настройках регламентного задания (через консоль регламентных заданий или в карточке внешней обработки в интерфейсе БСП) укажем этого пользователя в поле Имя пользователя.

Это гарантирует, что при старте фонового задания параметры сеанса (такие как ТекущийПользователь) будут заполнены корректно, и проверки в подсистеме прав доступа пройдут успешно.

Как отловить ошибку, если Журнал регистрации молчит

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

Метод 1: Ручная запись в Журнал регистрации

Обернем основной код выполнения команды в блок Попытка...Исключение. Это позволит нам выхватить реальный текст ошибки до того, как его «проглотит» система инициализации.


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

Метод 2: Отладка фонового задания в Конфигураторе

Для того чтобы «поймать» выполнение кода регламентным заданием, проделаем следующее:

  1. Убедимся, что сервер 1С запущен с ключом -debug.
  2. В Конфигураторе откроем меню Отладка — Подключение.
  3. Нажмем кнопку Автоматическое подключение и установим флажок Фоновые задания.
  4. Поставим точку останова в коде обработки.
  5. Дождемся запуска задания по расписанию или запустим его принудительно через консоль заданий.

Особенности работы через Профили безопасности

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

Если для информационной базы назначен профиль безопасности, то внешняя обработка, даже с выключенным флагом «Безопасный режим», все равно будет ограничена правилами этого профиля. В этом случае необходимо либо добавить разрешение на использование привилегированного режима в профиль, либо расширить права доступа к конкретным ресурсам (COM, файлам) в настройках кластера через консоль администрирования (MMC).

Рекомендации по написанию кода внешних обработок

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

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

← На главную