Как запустить обработку 1С в фоновом режиме через VBS-скрипт без показа интерфейса пользователю?

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

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

В этой статье мы подробно разберем, как правильно реализовать запуск обработок в фоновом режиме с помощью сценариев VBScript, проанализируем разницу между технологиями OLE Automation и COM-соединением, а также рассмотрим типичные системные ошибки разрядности и методы их устранения.

Решение 1. Переход с V83.Application на V83.COMConnector

Первоначальный вариант сценария, предложенный автором темы, базировался на создании объекта V83.Application. Этот подход инициализирует полноценное OLE-приложение. Запуск 1С в таком режиме сопровождается открытием полноценного сеанса (хоть и скрытого в некоторых случаях), расходованием значительного объема оперативной памяти и ресурсов процессора.

Для решения задачи фонового выполнения гораздо эффективнее использовать легковесный COM-соединитель — V83.COMConnector. Основное его преимущество заключается в том, что он физически не имеет графического интерфейса. При его вызове не создается окно программы, не запускаются клиентские модули отображения, а работа происходит напрямую с базой данных на уровне сервера или файлового хранилища.

Рассмотрим по шагам, как переписать скрипт на использование технологии COM-соединения. Нам потребуется создать объект соединения, подключиться к информационной базе и вызвать необходимый метод. Обратите внимание, что методы внешней обработки при работе через COM-соединение должны вызываться из общего модуля или быть доступными на сервере.

Посмотрим на пример реализации VBS-скрипта с использованием V83.COMConnector:


Set Connector = CreateObject("V83.ComConnector")
ConnectionString = "Srvr=""1.1.1.1"";Ref=""Test"";Usr=""Test"";pwd=""Test"";"

' Устанавливаем соединение с информационной базой
Set Connection = Connector.Connect(ConnectionString)

' Загружаем внешнюю обработку из файла
Set ExternalProcessing = Connection.ExternalDataProcessors.Create("D:\tmp\Test.epf", False)

' Вызываем экспортный метод обработки
ExternalProcessing.Test()

' Очищаем объекты для освобождения лицензии и памяти
Set ExternalProcessing = Nothing
Set Connection = Nothing
Set Connector = Nothing

При использовании этого кода выполнение процедуры Test() произойдет полностью в фоновом режиме. Пользователь не увидит никаких окон запуска, а потребление ресурсов системы окажется минимальным.

Решение 2. Устранение ошибки ActiveX и конфликта разрядности (SysWOW64)

Часто при попытке выполнить скрипт через командную строку администраторы сталкиваются с системной ошибкой: "Невозможно создание объекта контейнером ActiveX: 'V83.ComConnector'". Выясним причину этой неполадки.

Проанализируем ситуацию: на современных серверах под управлением 64-разрядных версий Windows сосуществуют два интерпретатора командной строки и скриптов:

  1. 64-битный интерпретатор: расположен по пути C:\Windows\System32\cscript.exe.
  2. 32-битный интерпретатор: расположен по пути C:\Windows\SysWOW64\cscript.exe.

Если на сервере установлена только 64-битная версия платформы 1С:Предприятие, то в реестре операционной системы зарегистрирована только 64-битная библиотека COM-соединения. При попытке запустить сценарий через 32-битный cscript.exe из папки SysWOW64, система физически не сможет сопоставить запрос 32-битного процесса с 64-битной библиотекой 1С. Это и приводит к ошибке инициализации ActiveX.

Чтобы решить эту проблему, выполните одно из следующих действий:

Решение 3. Ручная регистрация библиотеки comcntr.dll в Windows

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

Для исправления ситуации выполните ручную регистрацию библиотеки comcntr.dll. Разберем этот процесс по шагам:

  1. Откройте командную строку (cmd) обязательно с правами Администратора.
  2. В зависимости от разрядности установленной платформы 1С выполните соответствующую команду.

Для регистрации 64-битной библиотеки выполните:

regsvr32 "C:\Program Files\1cv8\8.3.XX.YYYY\bin\comcntr.dll"

Для регистрации 32-битной библиотеки введите:

regsvr32 "C:\Program Files (x86)\1cv8\8.3.XX.YYYY\bin\comcntr.dll"

*Примечание: вместо 8.3.XX.YYYY укажите точный номер релиза вашей установленной платформы 1С.

Решение 4. Использование служб компонентов COM+ для стыковки разрядностей

Бывают ситуации, когда вызывающее внешнее приложение жестко ограничено 32-битной архитектурой, а серверная часть 1С работает исключительно в 64-битном режиме. В таком случае прямой вызов V83.ComConnector не удастся осуществить стандартными методами. На помощь приходит создание специального приложения-обертки в Службах компонентов Windows (COM+).

Рассмотрим подробнее алгоритм настройки COM+ приложения:

  1. Нажмите сочетание клавиш Win + R, введите команду comexp.msc и нажмите Enter для открытия консоли "Службы компонентов".
  2. Перейдите по дереву каталогов в ветку: Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмите правой кнопкой мыши по разделу "Приложения COM+" и выберите пункт Создать -> Приложение.
  4. В открывшемся мастере выберите "Создать новое пустое приложение", задайте ему имя (например, 1C_COM_Connector) и обязательно установите способ активации как "Серверное приложение".
  5. На шаге выбора удостоверения укажите учетную запись пользователя Windows, от имени которой будет запускаться компонент (рекомендуется указать системную учетную запись администратора или локального пользователя с правами запуска служб 1С).
  6. Откройте ветку созданного приложения, найдите папку Компоненты, нажмите на нее правой кнопкой мыши и выберите Создать -> Компонент.
  7. Выберите вариант "Установка новых компонентов" и укажите путь к файлу comcntr.dll нужной вам разрядности (из каталога установленной платформы 1С).
  8. После успешного добавления компонента откройте его свойства, перейдите на вкладку "Безопасность", снимите флаг "Принудительная проверка доступа для приложения" и установите уровень ограничений в значение "Неограниченный".

Благодаря этой настройке операционная система Windows возьмет на себя роль моста между разноразрядными процессами, автоматически транслируя вызовы к COM-объекту.

Решение 5. Настройка скрытого режима для V83.Application

Если алгоритм вашей обработки завязан на интерактивные действия, которые невозможно воспроизвести в рамках COM-соединения (например, используются методы, доступные исключительно в контексте клиентского приложения), вам придется использовать объект V83.Application или V83C.Application (для тонкого клиента).

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

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

← На главную