Как запустить 1С в скрытом или свернутом виде для выполнения регламентных задач?

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

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

Разберем основные практические методы, которые позволяют запустить 1С без вывода графического интерфейса на рабочий стол текущего пользователя либо полностью скрыть процесс выполнения задачи.

Способ 1. Запуск через Планировщик задач Windows в изолированной сессии

Проанализируем самый надежный и простой метод для файловых баз — настройку запуска задачи через встроенный Планировщик задач Windows (Task Scheduler) от имени отдельной учетной записи операционной системы.

Когда служба планировщика запускает приложение от имени служебного пользователя, Windows изолирует графический интерфейс в нулевой сессии (Session 0). В результате запущенный экземпляр 1С физически не может отобразить окно на экране текущего пользователя.

Разберем по шагам последовательность настройки:

  1. Создаем в операционной системе отдельную служебную учетную запись (например, Robot1C) с правами на доступ к каталогу информационной базы.
  2. Создаем в конфигурации 1С специального пользователя с необходимыми административными правами или ролью для выполнения регламентных задач.
  3. Формируем командный файл .bat или .cmd со следующей строкой запуска платформы:
    
    "C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\Bases\MyBase" /N"Robot" /P"Pass123" /Execute"C:\Scripts\Task.epf" /NoSplash /DisableStartupMessages
    
  4. В свойствах задания Планировщика Windows на вкладке Общие обязательно включаем опцию Выполнять вне зависимости от того, зарегистрирован ли пользователь в системе (Run whether user is logged on or not).
  5. Указываем учетные данные созданного пользователя Windows для запуска задачи по расписанию.

Обратим внимание на параметры командной строки:

  1. /NoSplash — подавляет отображение стартовой заставки 1С.
  2. /DisableStartupMessages — отключает появление модальных предупреждений и системных сообщений при старте сеанса.
  3. /Execute <ПутьКФайлу> — запускает внешнюю обработку сразу после инициализации конфигурации.

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

Способ 2. Запуск через скрипты WScript.Shell со скрытым окном

Посмотрим на пример скрытия окна через запуск сценария VBScript или объектную модель WScript.Shell. При использовании метода Run передача второго параметра со значением 0 указывает операционной системе запустить процесс в полностью скрытом окне.

Создадим файл скрипта RunHidden.vbs со следующим кодом:


Dim WshShell, Command
Set WshShell = CreateObject("WScript.Shell")
Command = """C:\Program Files\1cv8\common\1cestart.exe"" ENTERPRISE /F""C:\Bases\MyBase"" /N""Robot"" /P""Pass123"" /Execute""C:\Scripts\Task.epf"" /NoSplash /DisableStartupMessages"
WshShell.Run Command, 0, False
Set WshShell = Nothing

Разберем параметры вызова метода Run:

  1. Первый аргумент — полная строка запуска 1С с необходимыми ключами.
  2. Второй аргумент 0 — режим скрытого окна (SW_HIDE).
  3. Третий аргумент False — указывает скрипту не ожидать завершения процесса 1С, возвращая управление сразу.

Способ 3. Выполнение логики через COM-соединение без интерфейса

Если требуется выполнить выгрузку, расчет или обработку данных без открытия клиентского приложения, наиболее чистым техническим решением является использование COM-соединения через объект V83.COMConnector.

Объект V83.COMConnector принципиально не создает графических окон платформы и исполняет серверный код 1С внутри отдельного процесса, не создавая нагрузки на пользовательский интерфейс.

Рассмотрим пример VBScript для подключения и вызова экспортной процедуры общего модуля:


Dim Connector, Connection
Set Connector = CreateObject("V83.COMConnector")
Set Connection = Connector.Connect("File=""C:\Bases\MyBase"";Usr=""Robot"";Pwd=""Pass123"";")

' Вызываем экспортную процедуру из общего модуля конфигурации
Connection.РегламентныеПроцедуры.ВыполнитьРегламентныйОбмен()

Set Connection = Nothing
Set Connector = Nothing

Способ 4. Использование Automation-сервера с отключением видимости

Если обработка требует функционала толстого или тонкого клиента, но окно нужно скрыть программно, воспользуемся Automation-клиентом V83.Application со свойством Visible = False.

Посмотрим на пример кода внешнего сценария:


Dim App
Set App = CreateObject("V83.Application")
App.Connect("File=""C:\Bases\MyBase"";Usr=""Robot"";Pwd=""Pass123"";")
App.Visible = False

' Выполняем открытие и обработку файла
App.ExternalDataProcessors.Create("C:\Scripts\Task.epf").ВыполнитьДействие()

App.Exit(False)
Set App = Nothing

Способ 5. Запуск процедур через модуль управляемого приложения и обработчик ожидания

Выясним ситуацию, когда запуск служебного сеанса выполняется при старте системы от определенного имени пользователя или при наличии роли. В модуле управляемого приложения (или обычного приложения) в процедуре ПриНачалеРаботыСистемы можно перехватить старт служебного сеанса и запланировать фоновое исполнение:


Процедура ПриНачалеРаботыСистемы()
    Если ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.ВыполнениеЗаданий) Тогда
        ПодключитьОбработчикОжидания("ВыполнитьФоновоеДействие", 60, Истина);
    КонецЕсли;
КонецПроцедуры

Процедура ВыполнитьФоновоеДействие() Экспорт
    // Исполнение целевого алгоритма
    ОбработкаОбъект = ВнешниеОбработки.Создать("C:\Scripts\Task.epf");
    ОбработкаОбъект.Запустить();
    
    // Завершение работы без интерактивных вопросов
    ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры

Способ 6. Публикация файловой базы на веб-сервере

Еще одним эффективным решением для файловых баз является публикация информационной базы на веб-сервере (IIS или Apache). При обращении к опубликованной базе фоновые и регламентные задания могут отрабатывать в контексте пула веб-сервера без необходимости интерактивного входа пользователей, что исключает появление окон на пользовательских рабочих местах.

← На главную