Как запустить выполнение процедуры или отчета в 1С на другом компьютере без открытого интерфейса?

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

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

Вариант 1. Вызов HTTP-сервиса через консольные утилиты или сценарии

Проанализируем самый технологичный и безопасный способ — публикацию HTTP-сервиса в информационной базе 1С. Этот подход позволяет инициировать любую процедуру на сервере простым сетевым запросом из BAT-файла без открытия клиентского приложения 1С.

Рассмотрим порядок действий для настройки этого механизма:

  1. В конфигураторе 1С создаем HTTP-сервис с шаблоном URL и методом (например, POST или GET).
  2. В обработчике метода HTTP-сервиса прописываем запуск требуемой логики или процедуру запуска фонового задания с помощью объекта ФоновыеЗадания.
  3. Публикуем HTTP-сервис на веб-сервере (IIS или Apache). Обратите внимание: по умолчанию доступ к сервису защищен авторизацией 1С (требуется передача логина и пароля пользователя базы).
  4. В локальном BAT-файле на рабочем столе вызываем утилиту curl или командлет PowerShell Invoke-RestMethod.

Посмотрим на пример командной строки в BAT-файле для вызова HTTP-сервиса с авторизацией:


curl -X POST "http://server/base/hs/ReportService/GenerateReport" -u "User1C:Password1C"

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

Вариант 2. Запуск регламентного задания по событию (обработка входящей почты)

Если прямой доступ к серверу по сети ограничен или из соображений безопасности нежелательно публиковать веб-сервисы, рассмотрим вариант запуска процедуры через регламентное задание, отслеживающее входящие письма.

Разберем логику работы данного подхода:

  1. В 1С создается регламентное задание, которое выполняется на сервере с определенной периодичностью (например, каждые 1–5 минут).
  2. Задание подключается к выделенному почтовому ящику через объект ИнтернетПочта и проверяет наличие писем от авторизованных адресатов с ключевым словом в теме (например, "СформироватьОтчет_X").
  3. При обнаружении подходящего письма система запускает формирование отчета и отправляет готовый результат в виде вложения обратно на почту запрашивающего.
  4. После обработки письмо перемещается в архив или удаляется.

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

Вариант 3. «Тихий» запуск клиента 1С с параметрами командной строки

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

Проанализируем используемые параметры командной строки:

  1. Ключ /C <строка_параметров> — передает текстовую строку в процедуру ПриНачалеРаботыСистемы() модуля управляемого приложения (доступна через функцию ПараметрыЗапуска).
  2. Ключ /Execute <путь_к_обработке> — автоматически запускает внешнюю обработку (файл .epf), которая вызовет серверный метод и сразу выполнит команду ЗавершитьРаботуСистемы().
  3. Ключ /DisableStartupMessages — подавляет отображение служебных сообщений при старте.

Посмотрим на пример содержимого BAT-файла для тихой передачи команды в 1С:


"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8c.exe" ENTERPRISE /S "Server1C\Base1C" /N "Robot" /P "Pass123" /C "StartReportGeneration" /DisableStartupMessages

Чтобы исключить появление черного окна консоли cmd.exe при запуске BAT-файла, можно обернуть запуск в VBS-скрипт:


Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c start_report.bat", 0, False

Вариант 4. Выполнение через COM-соединение (VBScript или PowerShell)

Рассмотрим вариант инициализации фоновой задачи на сервере без создания графического сеанса 1С с помощью внешнего скрипта. Для этого используется объект V83.COMConnector.

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


Set Connector = CreateObject("V83.COMConnector")
Set Connection = Connector.Connect("Srvr=""Server1C"";Ref=""Base1C"";Usr=""Robot"";Pwd=""Pass123"";")
Connection.УдаленныйЗапускЗадач.СформироватьИОтправитьОтчет()

При таком подходе не расходуются ресурсы ПК на отрисовку интерфейса 1С, а выполнение процедур происходит полностью на стороне сервера 1C.

Обратите внимание: для работы данный способ требует зарегистрированной библиотеки comcntr.dll той же версии, что и сервер 1С, а также расходует одну клиентскую лицензию на время работы соединения.

Вариант 5. Использование удаленного запуска (PsExec, WinRM, Планировщик Windows)

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

  1. Утилита PsExec: позволяет из локальной консоли запустить программу или сценарий на удаленном сервере в контексте указанного пользователя.
  2. PowerShell Remoting (WinRM): с помощью командлета Invoke-Command выполняет блок команд на удаленном ПК.
  3. Планировщик задач Windows (Task Scheduler): позволяет создать и активировать задачу на удаленной машине с помощью утилиты schtasks.

Посмотрим на пример вызова задачи на удаленном компьютере через schtasks:

schtasks /run /s RemotePC /tn "Run1CReport" /u Domain\Admin /p Password

Таким образом, выбор конкретного метода зависит от архитектуры вашей сети и требований к безопасности: для веб-интеграций идеально подходят HTTP-сервисы, для изолированных сред — регламентные задания по почте или параметры запуска командной строки.

← На главную