Автоматизация рутинных задач в 1С часто требует запуска внешних инструментов без прямого участия пользователя. Использование VBScript (VBS) является классическим способом решения этой задачи, так как этот скриптовый язык глубоко интегрирован в Windows и позволяет управлять COM-объектами 1С. В данной статье мы подробно разберем, как правильно реализовать запуск внешней обработки (файл .epf), рассмотрим различные подходы и проанализируем возможные ошибки при работе с разными типами клиентских приложений.
Этот метод предполагает создание полноценного экземпляра приложения 1С:Предприятие. Рассмотрим пошагово, как инициализировать соединение и обратиться к механизму внешних обработок. Проанализируем стандартный сценарий, когда нам нужно не просто открыть файл, но и выполнить в нем определенные действия.
Для начала создадим объект приложения и подключимся к информационной базе. Обратите внимание на строку соединения — она должна содержать адрес сервера, имя базы и учетные данные пользователя с достаточными правами.
Set v8 = CreateObject("V83.Application")
res = v8.Connect("Srvr=192.168.60.10;Ref=db_name;Usr='ПакетныйЗапуск';pwd='1974'")
If res Then
' Создаем объект внешней обработки
set extProc = v8.ExternalDataProcessors.Create("C:\some.epf", False)
' Вызываем экспортную процедуру из модуля обработки
extProc.ИмяНужнойПроцедуры()
Else
MsgBox "Не удалось подключиться к 1С"
End If
set v8 = Nothing
В этом примере мы используем метод ExternalDataProcessors.Create. Важно понимать, что этот метод загружает обработку в память и создает объект, но не открывает ее форму визуально. Чтобы действия внутри обработки выполнились, в ее модуле объекта должна быть объявлена экспортная процедура (например, ИмяНужнойПроцедуры), внутри которой прописана логика (заполнение документов, выгрузка данных и т.д.).
Если нашей задачей является просто визуальное открытие обработки для пользователя или запуск алгоритма при старте системы, наиболее надежным и простым способом будет использование объекта WScript.Shell и параметров запуска исполняемого файла 1С. Разберем, как сформировать правильную командную строку.
Параметр /Execute предназначен специально для запуска внешней обработки сразу после успешной авторизации в системе. Посмотрим на пример кода:
Set wshShell = CreateObject("WScript.Shell")
' Путь к исполняемому файлу 1С
exePath = """C:\Program Files\1cv8\common\1cestart.exe"""
' Параметры подключения и запуска обработки
args = " ENTERPRISE /S ""192.168.60.10\db_name"" /N ""ПакетныйЗапуск"" /P ""1974"" /Execute ""C:\some.epf"""
' Запускаем процесс
wshShell.Run exePath & args, 1, False
Рассмотрим преимущества этого подхода. Во-первых, он работает стабильнее, так как не зависит от регистрации COM-классов в реестре Windows. Во-вторых, этот метод автоматически открывает форму обработки, если в ней прописана процедура ПриОткрытии (для обычных форм) или логика в модуле формы. Проанализируем также параметр 1 в методе Run — он означает, что окно 1С будет отображено в нормальном режиме.
В современных конфигурациях на платформе 1С 8.3 (управляемые формы) программное открытие формы через COM-соединение требует иного подхода. Если мы просто вызовем Create, объект будет создан на сервере, и мы не увидим интерфейса. Выясним, как заставить систему показать форму на клиенте.
Для этого сначала необходимо «подключить» внешнюю обработку, чтобы система присвоила ей внутреннее имя в рамках сессии. Проанализируем следующий фрагмент кода:
' Подключаем обработку и получаем ее имя в системе
ИмяОбработки = v8.ExternalDataProcessors.Connect("C:\some.epf")
' Открываем форму, используя полученное имя
v8.OpenForm("ExternalDataProcessor." & ИмяОбработки & ".Form.ИмяФормы")
Обратите внимание, что здесь используется метод OpenForm. В качестве параметра передается полная строка пути к форме. Если в обработке только одна форма и она назначена основной, можно попытаться вызвать просто .GetForm(), однако явное указание пути через ExternalDataProcessor является более универсальным для управляемого приложения.
При использовании любого из вышеперечисленных методов мы можем столкнуться с ограничениями системы безопасности. Рассмотрим основные моменты, которые необходимо проверить:
Create или Connect второй (или третий) параметр отвечает за безопасный режим. Если передать True, обработка не сможет работать с файловой системой или COM-объектами. Для полной функциональности всегда указывайте False.Интерактивное открытие внешних обработок. Без этого права вызов методов Create или использование ключа /Execute завершится ошибкой доступа.V83.Application, убедитесь, что разрядность вашего VBS-скрипта (через cscript.exe или wscript.exe) совпадает с разрядностью установленной платформы 1С, иначе возникнет ошибка «Cant create object» (Невозможно создать объект).Часто требуется не просто запустить файл, но и передать в него вводные данные. Выясним, как это реализовать:
Через командную строку: Используйте параметр /C. Внутри 1С значение этого параметра можно получить с помощью функции ПараметрЗапуска.
' В VBS
args = "... /Execute ""C:\some.epf"" /C ""ЗагружатьДанные"""
Через COM-объект: Если вы используете V83.Application, вы можете напрямую устанавливать значения экспортных переменных модуля объекта до вызова процедур.
set extProc = v8.ExternalDataProcessors.Create("C:\some.epf", False)
extProc.МойПараметр = "Значение"
extProc.ВыполнитьДействие()
Подводя итог, выбор метода зависит от ваших целей: для фоновых задач без интерфейса идеально подходит V83.COMConnector или V83.Application с вызовом экспортных процедур, а для интерактивной работы лучше использовать запуск через WScript.Shell с ключом /Execute. Сочетая эти подходы, можно добиться полной автоматизации взаимодействия между Windows и 1С.