При реализации сложных интеграционных решений, например, когда требуется обработка внешних событий в режиме реального времени через внешнюю компоненту, разработчики сталкиваются с необходимостью держать сеанс 1С постоянно запущенным. При этом важно, чтобы такой сеанс работал незаметно для пользователей, запускался автоматически вместе с операционной системой и не требовал открытого окна графического интерфейса (GUI). В этой статье мы разберем несколько проверенных способов решения этой задачи, проанализируем их плюсы и минусы, а также изучим технические тонкости работы в "Сессии 0".
Одним из самых простых и штатных способов запустить 1С без видимого окна является использование Планировщика задач (Task Scheduler). Главный секрет здесь заключается в настройках безопасности задачи. Разберем по шагам, как это настроить:
1cv8.exe.Рассмотрим пример параметров командной строки для запуска обработки в файловой базе:
ENTERPRISE /F "C:\Bases\MyBase" /N "RobotUser" /P "Password" /Execute "C:\Scripts\EventHandler.epf" /DisableStartupMessages
Где /DisableStartupMessages подавляет лишние информационные сообщения при запуске, а /Execute указывает на внешнюю обработку, которая должна инициализировать работу с внешней компонентой.
Если требуется, чтобы 1С работала именно как настоящая служба Windows (с возможностью автоматического перезапуска при сбое и управлением через консоль services.msc), лучше всего воспользоваться инструментом NSSM (Non-Sucking Service Manager). Проанализируем этот подход подробнее.
NSSM работает как "обертка" для любого исполняемого файла. Она берет на себя функции мониторинга процесса. Если 1С "вылетит" с ошибкой, NSSM мгновенно перезапустит её. Процесс установки выглядит следующим образом:
nssm install 1C_EventService.1cv8.exe.Важный момент: При работе в режиме службы 1С запускается в изолированном окружении. Если ваша внешняя компонента пытается вызвать методы WinAPI для работы с окнами (например, MessageBox), сеанс может зависнуть или аварийно завершиться. Проверьте, что компонента поддерживает работу в неинтерактивном режиме.
Если цель — минимизировать потребление ресурсов, стоит рассмотреть использование V83.COMConnector вместо полноценного приложения v8.Application. Хотя автор темы в сообщениях форума выражал сомнения по поводу скриптовых языков, этот метод можно реализовать даже через небольшой VBScript или PowerShell скрипт, который будет запускать COM-объект.
Проанализируем пример кода на языке 1С, который демонстрирует логику создания такого соединения (хотя обычно оно инициируется извне):
// Пример инициализации COM-соединения для работы в фоне
Connector = Новый COMОбъект("V83.COMConnector");
ПараметрыСоединения = "Srvr=""MyServer"";Ref=""MyBase"";Usr=""EventRobot"";Pwd=""123"";";
Попытка
Соединение = Connector.Connect(ПараметрыСоединения);
// Теперь через 'Соединение' можно вызывать экспортные методы модулей
Соединение.ОбработкаВнешнихСобытий.ИнициализироватьКомпоненту();
Исключение
ЗаписатьЛогСобытий("Ошибка подключения к COM: " + ОписаниеОшибки());
КонецПопытки;
Преимущество COMConnector в том, что он изначально спроектирован для работы без GUI и потребляет значительно меньше оперативной памяти, чем полноценный клиент 1С.
В сообщении 7 автор выражал беспокойство по поводу того, как не запустить несколько копий одного и того же сервиса. Самым надежным способом является использование механизма исключительной блокировки файла. Выясним, как это реализовать внутри 1С при старте системы.
Разместим в модуле управляемого приложения (или в коде внешней обработки) следующий алгоритм:
Функция ПроверитьЕдинственностьСеанса()
ПутьКФайлуБлокировки = "C:\Services\1C_Lock\service.lock";
ФайлЛока = Новый ЗаписьТекста(ПутьКФайлуБлокировки, КодировкаТекста.UTF8, , Истина);
Попытка
// Пытаемся открыть файл для записи исключительно
// Если другой экземпляр уже держит его открытым, возникнет ошибка
Исключение
Возврат Ложь; // Сеанс уже запущен
КонецПопытки;
Возврат Истина;
КонецФункции
Используя этот подход, при попытке запуска второго экземпляра через планировщик или NSSM, 1С просто завершит свою работу, обнаружив, что "замок" на файле уже занят первым сеансом.
Подводя итог нашему анализу, можно выделить следующие рекомендации:
Предупреждение(), Вопрос() и любые другие интерактивные формы внутри вашего фонового сеанса.Выбор конкретного метода зависит от требований к отказоустойчивости и особенностей используемой внешней компоненты. Сочетание NSSM и контроля единственности сеанса через файловый мьютекс является наиболее профессиональным подходом для решения данной задачи.