Как отключить стартовые вопросы и предупреждения 1С при запуске из фонового задания?

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

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

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

Почему происходит «невидимое» зависание в фоне?

Для того чтобы понять природу проблемы, рассмотрим механизм работы служб операционной системы Windows. Когда сервер приложений 1С запускает фоновое задание, весь связанный с ним исполняемый код выполняется в контексте системной учетной службы (по умолчанию это пользователь USR1CV8).

Если в процессе выполнения фонового задания инициируется запуск клиентского приложения 1cv8.exe или 1cv8c.exe, операционная система помещает этот процесс в так называемую Сессию 0 (Session 0 Isolation). Начиная с версии Windows Vista и Windows Server 2008, в целях безопасности интерактивные службы изолированы от пользовательских сеансов:

  1. Любые графические окна, модальные диалоги и предупреждения, создаваемые процессами в Сессии 0, рендерятся в невидимом виртуальном пространстве.
  2. Физический пользователь, работающий на сервере или локальном компьютере, не видит этих окон и не может нажать кнопку «Да», «Нет» или «ОК».
  3. Процесс 1С переходит в состояние бесконечного ожидания ответа от пользователя, удерживая при этом лицензию и блокируя выполнение алгоритма.

Именно с этим эффектом столкнулся автор темы: пока база данных не была обновлена, запуск клиента блокировался невидимым вопросом платформы. После обновления конфигурации вопрос перестал появляться, и задание моментально отработало.

Решение: использование ключей командной строки

Чтобы исключить любое интерактивное взаимодействие платформы с несуществующим пользователем, мы должны принудительно запретить 1С выводить какие-либо стартовые диалоги. Для этого при формировании строки запуска клиентского приложения необходимо использовать специализированные ключи.

Рассмотрим подробнее ключевые параметры запуска:

Разберем по шагам, как программно реализовать запуск клиентского сеанса 1С из кода фонового задания с использованием безопасных параметров. Напишем пример кода на языке 1С:


// Определим параметры запуска и пути к логам
ПутьКЛогу = "C:\Logs\1c_start_log.txt";
СтрокаЗапуска = """C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe"" ENTERPRISE";
СтрокаЗапуска = СтрокаЗапуска + " /F ""C:\Base1C""" ; // Путь к базе данных (для файловой)
СтрокаЗапуска = СтрокаЗапуска + " /N ""АдминистраторРобот"""; // Имя пользователя
СтрокаЗапуска = СтрокаЗапуска + " /P ""ПарольРобота"""; // Пароль пользователя
СтрокаЗапуска = СтрокаЗапуска + " /Execute ""C:\Services\ExternalTask.epf"""; // Путь к внешней обработке

// Добавляем ключи подавления диалогов и логирования
СтрокаЗапуска = СтрокаЗапуска + " /DisableStartupMessages";
СтрокаЗапуска = СтрокаЗапуска + " /DisableStartupDialogs";
СтрокаЗапуска = СтрокаЗапуска + " /Out """ + ПутьКЛогу + """ -NoTruncate";

// Запускаем приложение в неинтерактивном режиме
ЗапуститьПриложение(СтрокаЗапуска, , Истина); // Третий параметр Истина заставляет ждать завершения процесса

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

Анализ архитектурного решения: обход ограничений RDP

Проанализируем ситуацию, описанную автором в сообщениях 12 и 14. Запуск клиентского приложения 1С из-под фонового задания под учетной записью USR1CV8 использовался как способ обойти защиту драйвера торгового оборудования (например, ККТ или эквайринга), который отказывается работать внутри терминальной сессии (RDP).

Выясним причину, почему драйверы оборудования часто «бастуют» при работе по RDP:

  1. Монопольный захват портов. Локальные драйверы оборудования ориентированы на работу с физическими COM- или USB-портами компьютера. В терминальном режиме проброс портов (COM-redirection) часто работает крайне нестабильно, что приводит к потере связи с устройствами при малейших сетевых колебаниях.
  2. Аппаратная безопасность. Некоторые производители фискального оборудования намеренно блокируют работу драйверов в терминальном режиме для защиты от случайной отправки команд на кассу, которая может физически находиться в другом помещении или городе, а также для защиты от перехвата персональных данных клиентов.

Запуск сеанса от имени системной службы сервера 1С действительно позволяет обмануть драйвер, так как процесс выполняется локально на самом сервере вне контекста RDP-сессии конкретного пользователя. Однако такой подход является крайне хрупким «костылем». Любое динамическое обновление конфигурации, изменение прав доступа учетной записи службы или зависание фонового процесса парализует работу кассового узла.

Как решить проблему правильно?

Рассмотрим современные архитектурные альтернативы, которые позволяют полностью отказаться от небезопасного запуска клиентских сеансов 1С из-под фоновых заданий:

1. Использование сетевого подключения оборудования (TCP/IP)

Большинство современных фискальных регистраторов и терминалов сбора данных поддерживают прямое подключение по сетевым протоколам (через Ethernet или Wi-Fi). В этом случае драйверу не требуется доступ к локальным портам сервера или клиентской машины. Настройка интеграции в 1С выполняется по IP-адресу устройства, что делает неважным способ запуска системы — локально, через RDP или веб-клиент.

2. Использование выделенного «Сервера оборудования»

Производители торгового оборудования поставляют специализированное программное обеспечение (например, драйверы АТОЛ версии 10 и выше поддерживают режим веб-сервера). Сервер оборудования устанавливается локально на тот компьютер, к которому физически подключен кассовый аппарат. Центральная база 1С, работающая на удаленном сервере в RDP-сессии, взаимодействует с локальным сервером оборудования посредством сетевых HTTP-запросов или API. Это полностью решает проблему проброса портов и безопасности.

3. Переход на Тонкий или Веб-клиент 1С

Вместо организации работы сотрудников внутри тяжелых RDP-сессий на сервере, рекомендуется использовать подключение через Тонкий клиент 1С, установленный непосредственно на рабочих станциях пользователей. Тонкий клиент общается с базой данных по HTTP/HTTPS протоколу, но сам код работы с торговым оборудованием выполняется на локальном компьютере. Это обеспечивает легальный, быстрый и бесперебойный доступ драйверов ко всем физическим портам рабочей станции.

← На главную