В процессе работы с системами 1С часто возникает необходимость запустить ресурсоемкую операцию (например, формирование сложного отчета или рассылку документов) так, чтобы она выполнялась на сервере или другом компьютере, не занимая ресурсы локального ПК и не отвлекая пользователя открытым окном программы. Разберем по шагам основные и наиболее эффективные варианты решения этой задачи.
Проанализируем самый технологичный и безопасный способ — публикацию HTTP-сервиса в информационной базе 1С. Этот подход позволяет инициировать любую процедуру на сервере простым сетевым запросом из BAT-файла без открытия клиентского приложения 1С.
Рассмотрим порядок действий для настройки этого механизма:
POST или GET).ФоновыеЗадания.curl или командлет PowerShell Invoke-RestMethod.Посмотрим на пример командной строки в BAT-файле для вызова HTTP-сервиса с авторизацией:
curl -X POST "http://server/base/hs/ReportService/GenerateReport" -u "User1C:Password1C"
При получении такого запроса сервер 1С стартует формирование отчета в фоновом режиме и сразу возвращает ответ, благодаря чему консольное окно закрывается мгновенно, а все вычисления выполняются на сервере.
Если прямой доступ к серверу по сети ограничен или из соображений безопасности нежелательно публиковать веб-сервисы, рассмотрим вариант запуска процедуры через регламентное задание, отслеживающее входящие письма.
Разберем логику работы данного подхода:
ИнтернетПочта и проверяет наличие писем от авторизованных адресатов с ключевым словом в теме (например, "СформироватьОтчет_X").Этот способ позволяет пользователю инициировать тяжелые процессы даже со смартфона или из любого места вне офиса, просто отправив электронное письмо.
Если необходимо выполнить процедуру с использованием клиента 1С, но при этом скрыть процесс от пользователя и сразу завершить работу программы, рассмотрим использование специального командного файла с ключами запуска.
Проанализируем используемые параметры командной строки:
/C <строка_параметров> — передает текстовую строку в процедуру ПриНачалеРаботыСистемы() модуля управляемого приложения (доступна через функцию ПараметрыЗапуска)./Execute <путь_к_обработке> — автоматически запускает внешнюю обработку (файл .epf), которая вызовет серверный метод и сразу выполнит команду ЗавершитьРаботуСистемы()./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
Рассмотрим вариант инициализации фоновой задачи на сервере без создания графического сеанса 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С, а также расходует одну клиентскую лицензию на время работы соединения.
Если требуется запустить командный файл непосредственно в операционной системе другого компьютера или сервера, выделим следующие системные инструменты:
Invoke-Command выполняет блок команд на удаленном ПК.schtasks.Посмотрим на пример вызова задачи на удаленном компьютере через schtasks:
schtasks /run /s RemotePC /tn "Run1CReport" /u Domain\Admin /p Password
Таким образом, выбор конкретного метода зависит от архитектуры вашей сети и требований к безопасности: для веб-интеграций идеально подходят HTTP-сервисы, для изолированных сред — регламентные задания по почте или параметры запуска командной строки.