Как запустить 1С и внешнюю обработку в фоновом режиме без отображения окон

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

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

Метод 1. Использование Automation-сервера через VBScript

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

Для реализации этого метода создадим файл с расширением .vbs. Разберем по шагам код, который позволит подключиться к базе и вызвать метод внешней обработки:


' Создаем объект приложения 1С
Set v8 = CreateObject("V83.Application")

' Подключаемся к информационной базе
' Для файловой базы: "File=ПутьКБазе;Usr=ИмяПользователя;Pwd=Пароль;"
' Для серверной базы: "Srvr=ИмяСервера;Ref=ИмяБазы;Usr=ИмяПользователя;Pwd=Пароль;"
res = v8.Connect("File=C:\Base1C;Usr=""Admin"";pwd=""123""")

' Если подключение успешно, открываем внешнюю обработку
If res Then
    ' Создаем объект внешней обработки
    ' Путь к файлу обработки должен быть полным
    Set extProc = v8.ExternalDataProcessors.Create("C:\Scripts\MyExchange.epf", False)
    
    ' Вызываем экспортную процедуру из модуля обработки
    ' Важно: Процедура в модуле обработки должна быть помечена словом Экспорт
    extProc.ИмяПроцедуры() 
    
    ' После выполнения закрываем соединение
    Set v8 = Nothing
End If

Выясним причину, почему это работает. Объект V83.Application запускает 1С как Automation-сервер. В отличие от обычного запуска, по умолчанию это окно скрыто. Программа будет видна только в диспетчере задач в списке процессов, не беспокоя пользователя всплывающими окнами.

Метод 2. Использование V83.COMConnector для максимальной легкости

Рассмотрим более профессиональный подход. Если нам не требуется визуализация форм обработки (а в фоновых задачах она не нужна), правильнее использовать V83.COMConnector. Основное отличие в том, что COMConnector не создает полноценный экземпляр приложения 1С с графической подсистемой, а устанавливает лишь соединение с сервером или файловой базой. Это экономит оперативную память и работает быстрее.

Посмотрим на пример реализации через COMConnector:


Set connector = CreateObject("V83.COMConnector")
Set connection = connector.Connect("File=""C:\Base"";Usr=""Admin"";Pwd=""123"";")

' Работа с внешней обработкой через COM-соединение требует особого подхода
' Часто удобнее поместить логику в модуль приложения или использовать методы менеджера
' Но для внешней обработки это выглядит так:
Set proc = connection.ExternalDataProcessors.Create("C:\MyProc.epf")
proc.ВыполнитьДействие()

Важно помнить: при использовании COMConnector в модуле обработки не должны использоваться функции, связанные с интерфейсом, такие как Предупреждение(), Вопрос() или ОткрытьФорму(). Это приведет к ошибке выполнения скрипта.

Метод 3. Тонкая настройка планировщика задач Windows

Разберем ситуацию, когда мы все же хотим использовать стандартный запуск 1cv8.exe, но хотим скрыть его от глаз пользователя. В планировщике задач есть важная настройка «Выполнять для всех пользователей (независимо от регистрации пользователя)». Проанализируем, что происходит при включении этого флага:

  1. Система запускает процесс в так называемой Сессии 0.
  2. В Сессии 0 отсутствует графический рабочий стол. Любая программа, даже имеющая интерфейс, будет запущена без возможности отобразить окно на экране текущего пользователя.
  3. Для корректной работы 1С в этом режиме необходимо, чтобы у учетной записи, от имени которой запускается задача, были полные права на папку с базой, временные папки %TEMP% и доступ к программным файлам 1С.

Внимание: При запуске 1С в Сессии 0 могут возникнуть проблемы с доступом к сетевым дискам, если они были подключены интерактивно под учетной записью пользователя. В путях к базе и обработке лучше использовать UNC-пути (например, \\Server\Share\Base вместо Z:\Base).

Метод 4. Подавление окна через PowerShell

Если нам нужно запустить батник (BAT-файл), который внутри себя вызывает 1С, мы столкнемся с проблемой черного окна консоли. Рассмотрим, как это решить с помощью PowerShell. Мы можем использовать параметр -WindowStyle Hidden, который принудительно скрывает окно запускаемого процесса.

Пример команды для планировщика:

powershell.exe -command "Start-Process 'C:\Program Files\1cv8\8.3.x.x\bin\1cv8.exe' -ArgumentList 'ENTERPRISE /F C:\Base /N Admin /P 123 /Execute C:\Proc.epf' -WindowStyle Hidden"

Этот метод заставляет операционную систему подавить создание окна на уровне дескрипторов Windows, что эффективно убирает визуальное сопровождение.

Метод 5. Специализированные утилиты-«обертки»

В случаях, когда стандартные средства Windows не справляются, программисты часто прибегают к использованию сторонних микро-утилит. Одной из самых популярных является hstart (Hidden Start). Она позволяет запускать любые консольные и оконные приложения полностью скрыто.

Синтаксис запуска будет выглядеть следующим образом:

hstart.exe /NOCONSOLE "C:\Program Files\1cv8\bin\1cv8.exe ENTERPRISE /F C:\Base /Execute C:\Proc.epf"

Параметр /NOCONSOLE гарантирует, что даже на долю секунды окно не появится на экране.

Рекомендации по подготовке внешней обработки

Чтобы запуск в фоновом режиме прошел успешно, необходимо правильно подготовить саму внешнюю обработку (файл .epf). Проанализируем ключевые моменты:

Подводя итог, можно сказать, что самым надежным и "чистым" способом является использование VBScript с COM-соединением. Это не требует установки дополнительного ПО, работает на всех версиях Windows и полностью исключает появление любых окон 1С, обеспечивая комфортную работу пользователя.

← На главную