При автоматизации бизнес-процессов часто возникает задача запуска обмена данными или формирования отчетов по расписанию. Однако стандартный запуск 1С через планировщик задач Windows часто сопровождается появлением окна программы, сплеш-скрина (заставки) и кратковременным миганием интерфейса на рабочем столе. Если такие задачи выполняются часто (например, каждые 15 минут), это начинает мешать пользователю. Рассмотрим способы, как полностью скрыть работу 1С и запустить необходимый программный код в «тихом» режиме, особенно в ситуациях, когда внесение изменений в конфигурацию (создание регламентных заданий) запрещено условиями поддержки. В качестве альтернативы для выполнения длительных задач средствами самой платформы можно использовать пример реализации фоновых заданий без БСП.
Проанализируем наиболее эффективный способ, предложенный в обсуждении. Вместо того чтобы запускать исполняемый файл 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-сервер. В отличие от обычного запуска, по умолчанию это окно скрыто. Программа будет видна только в диспетчере задач в списке процессов, не беспокоя пользователя всплывающими окнами.
Рассмотрим более профессиональный подход. Если нам не требуется визуализация форм обработки (а в фоновых задачах она не нужна), правильнее использовать 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 в модуле обработки не должны использоваться функции, связанные с интерфейсом, такие как Предупреждение(), Вопрос() или ОткрытьФорму(). Это приведет к ошибке выполнения скрипта.
Разберем ситуацию, когда мы все же хотим использовать стандартный запуск 1cv8.exe, но хотим скрыть его от глаз пользователя. В планировщике задач есть важная настройка «Выполнять для всех пользователей (независимо от регистрации пользователя)». Проанализируем, что происходит при включении этого флага:
%TEMP% и доступ к программным файлам 1С.Внимание: При запуске 1С в Сессии 0 могут возникнуть проблемы с доступом к сетевым дискам, если они были подключены интерактивно под учетной записью пользователя. В путях к базе и обработке лучше использовать UNC-пути (например, \\Server\Share\Base вместо Z:\Base).
Если нам нужно запустить батник (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, что эффективно убирает визуальное сопровождение.
В случаях, когда стандартные средства Windows не справляются, программисты часто прибегают к использованию сторонних микро-утилит. Одной из самых популярных является hstart (Hidden Start). Она позволяет запускать любые консольные и оконные приложения полностью скрыто.
Синтаксис запуска будет выглядеть следующим образом:
hstart.exe /NOCONSOLE "C:\Program Files\1cv8\bin\1cv8.exe ENTERPRISE /F C:\Base /Execute C:\Proc.epf"
Параметр /NOCONSOLE гарантирует, что даже на долю секунды окно не появится на экране.
Чтобы запуск в фоновом режиме прошел успешно, необходимо правильно подготовить саму внешнюю обработку (файл .epf). Проанализируем ключевые моменты:
/Execute), в конце кода обработки обязательно должен быть вызов команды ЗавершитьРаботуСистемы(Ложь);. В противном случае процесс 1С останется висеть в памяти вечно.ЖурналРегистрации. Это единственный способ понять, почему фоновый процесс не отработал./DisableStartupMessages, чтобы платформа не пыталась показать диалоги об обновлении версии или подтверждении легальности получения обновлений.Подводя итог, можно сказать, что самым надежным и "чистым" способом является использование VBScript с COM-соединением. Это не требует установки дополнительного ПО, работает на всех версиях Windows и полностью исключает появление любых окон 1С, обеспечивая комфортную работу пользователя.