При автоматизации регламентных задач часто возникает необходимость запускать внешнюю обработку (.epf) по расписанию средствами операционной системы через Планировщик заданий Windows (Task Scheduler). Для этого обычно используют сценарии на языке VBScript. Однако в процессе написания скрипта разработчики сталкиваются с ошибками инициализации COM-объектов, вызова методов или неправильного формирования параметров командной строки.
Разберем основные ошибки при написании скриптов и рассмотрим два рабочих варианта запуска обработки.
Наиболее надежный и простой способ запуска внешней обработки — запуск клиентского приложения 1С в режиме Enterprise через объект WScript.Shell с передачей ключа /EXECUTE. Этот подход не требует регистрации COM-компонент и не зависит от разрядности операционной системы.
Проанализируем структуру скрипта:
/F, а для клиент-серверной — ключ /S.1cv8.exe или 1cv8c.exe).Посмотрим на пример 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С автоматически. Чтобы сеанс завершался после выполнения алгоритма, в модуле обработки (например, в обработчике формы ПриОткрытии) в самом конце необходимо вызвать метод ЗавершитьРаботуСистемы(Ложь) или ПрекратитьРаботуСистемы(Ложь).
Другой подход заключается в программном создании COM-объекта платформы 1С, открытии внешней обработки и вызове ее экспортной процедуры.
Выясним причину типичных ошибок при работе через COM:
ВнешниеОбработки, а на английском языке — ExternalDataProcessors (а не ExternalProcessings).Connect у объекта V82.COMConnector возвращает ссылку на сеанс соединения, которую нужно присвоить новой переменной через оператор Set.Экспорт строго в модуле объекта обработки, а не в модуле формы.Рассмотрим рабочий пример запуска через 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-соединение:
Предупреждение, Вопрос, открывать окна).C:\Windows\SysWOW64\wscript.exe, так как библиотеки COM-соединения 1С чаще всего имеют разрядность x86 (32 бита).