При автоматизации запуска 1С (для регламентного обмена, выполнения пакетных заданий или резервного копирования) разработчики и системные администраторы часто сталкиваются с ситуацией, когда сеанс блокируется открывшимся модальным окном или предупреждением. Это могут быть сообщения о необходимости обновления версии платформы, информационные баннеры, новости или запросы подтверждения. Разберем, почему штатные параметры командной строки не всегда помогают и какими способами можно обойти эту проблему.
Выясним причину, по которой стандартные параметры запуска не закрывают интерактивные диалоги конфигурации. Платформа 1С предоставляет служебные ключи, такие как /DisableStartupMessages и /DisableStartupDialogs. Однако важно понимать разделение уровней работы системы:
/DisableStartupMessages подавляет исключительно системные диалоговые окна самой платформы (сообщения о нештатном завершении предыдущего сеанса, служебные запросы реиндексации или реструктуризации).ПриНачалеРаботыСистемы, ПередНачаломРаботыСистемы или подсистемах БСП). Платформа не имеет универсального ключа, способного заблокировать исполнение произвольного прикладного кода, открывающего формы.Поскольку в коде конфигураций часто прописаны безусловные вызовы открытия форм, закрыть их универсальным параметром командной строки невозможно. Рассмотрим практические решения для обхода этой блокировки.
Для выборочного отключения проверок при автоматическом запуске используем параметр командной строки /C <Строка>. Переданная строка становится доступной внутри сеанса 1С через свойство глобального контекста ПараметрыЗапуска.
Посмотрим на пример строки запуска в командном файле:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "D:\Bases\Accounting" /N "AutoUser" /P "Password" /C "DisableCheck"
Теперь разберем, как обработать этот параметр в процедуре проверки (например, в общем модуле КонтрольВерсииПлатформы или через расширение конфигурации):
Процедура ПроверитьВерсиюПлатформы() Экспорт
// Проверяем наличие параметра запуска
Если СтрНайти(ПараметрыЗапуска, "DisableCheck") > 0 Тогда
Возврат;
КонецЕсли;
// Стандартный алгоритм проверки версии платформы
// ...
КонецПроцедуры
Использование расширений позволяет переопределить поведение обработчиков событий запуска без снятия основной конфигурации с поддержки поставщика.
Проанализируем сценарий, когда вносить изменения в конфигурацию нельзя. В типовых решениях (например, в «1С:Бухгалтерии») интерактивные окна жестко привязаны к правам и персональным настройкам текущего пользователя:
Если запуск из командной строки используется для выполнения фоновой выгрузки данных, обмена или регламентного обслуживания, оптимальным решением является полный отказ от запуска клиентского интерфейса (толстого или тонкого клиента):
V83.COMConnector инициализируется только серверный контекст. Клиентский интерфейс не создается, а процедуры вроде ПриНачалеРаботыСистемы с клиентскими диалогами физически не выполняются.curl или PowerShell) без создания пользовательского интерфейса.Если запуск клиентского приложения обязателен, а вносить изменения в код или настройки запрещено, применим обработку окон на уровне операционной системы. Внешний скрипт (на PowerShell или с использованием утилит автоматизации) отслеживает появление дочерних окон процесса 1cv8.exe или 1cv8c.exe и отправляет нажатие клавиш Enter / Esc либо команду закрытия дескриптора окна (сообщение WM_CLOSE).
Таким образом, для надежной автоматизации фоновых процессов рекомендуется комбинировать передачу ключа /C с проверкой в расширении либо переводить фоновую обработку данных на уровень COM-соединений и HTTP-сервисов.