Как запустить внешнюю обработку 1С по расписанию с помощью VBScript?

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

При автоматизации регламентных задач часто возникает необходимость запускать внешнюю обработку (.epf) по расписанию средствами операционной системы через Планировщик заданий Windows (Task Scheduler). Для этого обычно используют сценарии на языке VBScript. Однако в процессе написания скрипта разработчики сталкиваются с ошибками инициализации COM-объектов, вызова методов или неправильного формирования параметров командной строки.

Разберем основные ошибки при написании скриптов и рассмотрим два рабочих варианта запуска обработки.

Вариант 1. Запуск через командную строку с параметром /EXECUTE

Наиболее надежный и простой способ запуска внешней обработки — запуск клиентского приложения 1С в режиме Enterprise через объект WScript.Shell с передачей ключа /EXECUTE. Этот подход не требует регистрации COM-компонент и не зависит от разрядности операционной системы.

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

  1. Определяем тип информационной базы: для файловой базы используется ключ /F, а для клиент-серверной — ключ /S.
  2. Указываем путь к исполняемому файлу платформы (1cv8.exe или 1cv8c.exe).
  3. Формируем параметры авторизации и путь к файлу обработки.

Посмотрим на пример VBS-скрипта для файловой базы данных:


Set WshShell = CreateObject("WScript.Shell")

' Путь к исполняемому файлу 1С
ExePath = """C:\Program Files\1cv82\8.2.19.83\bin\1cv8.exe"""

' Путь к каталогу файловой информационной базы
BasePath = "C:\InfoBase5"

' Путь к запускаемой обработке
ExternalProcess = "C:\Обработки\Обработка.epf"

' Дополнительные параметры (при необходимости)
Settings = "ПараметрыЗапуска"

' Формирование строки запуска
Command = ExePath & " enterprise /F """ & BasePath & """ /N ""ИмяПользователя"" /P ""Пароль"" /EXECUTE """ & ExternalProcess & """ /C """ & Settings & """"

' Запуск процесса с ожиданием завершения
WshShell.Run Command, 1, True

Если используется серверная база данных, параметр /F заменяется на /S с указанием кластера серверов и имени базы:


ServerName = "1cServer"
DBName = "base1c"
Command = ExePath & " enterprise /S """ & ServerName & "\" & DBName & """ /EXECUTE """ & ExternalProcess & """"
WshShell.Run Command, 1, True

Важный нюанс: при открытии обработки через параметр /EXECUTE платформа запускает сеанс, открывает форму обработки, но не закрывает 1С автоматически. Чтобы сеанс завершался после выполнения алгоритма, в модуле обработки (например, в обработчике формы ПриОткрытии) в самом конце необходимо вызвать метод ЗавершитьРаботуСистемы(Ложь) или ПрекратитьРаботуСистемы(Ложь).

Вариант 2. Запуск через COM-соединение

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

Выясним причину типичных ошибок при работе через COM:

  1. Неверное имя менеджера обработок: в глобальном контексте платформы 1С объект называется ВнешниеОбработки, а на английском языке — ExternalDataProcessors (а не ExternalProcessings).
  2. Ошибки инициализации COMConnector: метод Connect у объекта V82.COMConnector возвращает ссылку на сеанс соединения, которую нужно присвоить новой переменной через оператор Set.
  3. Отсутствие экспортного метода: вызываемая процедура должна быть обязательно объявлена с ключевым словом Экспорт строго в модуле объекта обработки, а не в модуле формы.

Рассмотрим рабочий пример запуска через V82.COMConnector:


Set Connector = CreateObject("V82.COMConnector")

' Подключаемся к базе (для 8.3 используем V83.COMConnector)
Set v8 = Connector.Connect("File=""C:\InfoBase5""; Usr=""ИмяПользователя""; Pwd=""Пароль"";")

' Открываем внешнюю обработку (второй параметр False отключает безопасный режим)
Set obr = v8.ExternalDataProcessors.Create("C:\Обработки\Обработка.epf", False)

' Вызываем экспортную процедуру модуля объекта
obr.Run()

В самой обработке в модуле объекта объявляем процедуру:


Процедура Run() Экспорт
    // Алгоритм выполнения задачи
    ВыполнитьРегламентноеДействие();
КонецПроцедуры

Особенности выполнения через COM-соединение:

  1. Код внутри обработки выполняется в неинтерактивном режиме: нельзя вызывать методы взаимодействия с пользователем (Предупреждение, Вопрос, открывать окна).
  2. Если скрипт запускается на 64-битной версии Windows, необходимо запускать 32-разрядную версию интерпретатора C:\Windows\SysWOW64\wscript.exe, так как библиотеки COM-соединения 1С чаще всего имеют разрядность x86 (32 бита).
← На главную