В процессе администрирования и разработки на платформе 1С:Предприятие часто возникает задача автоматизировать выполнение определенных действий без участия пользователя. Особенно остро этот вопрос стоит в распределенных сетях (например, в торговых точках с 1С:Розница), где ресурсы компьютеров ограничены, а регламентные операции (обмен данными, очистка кэша, формирование отчетов) должны выполняться незаметно и стабильно. Разберем подробно, что такое пакетный режим запуска клиентского приложения, как он работает и поможет ли он сэкономить заветную оперативную память.
Пакетный режим запуска (активируемый ключом /DisableStartupDialogs) — это специальный механизм, предназначенный для подавления любых интерактивных окон, которые могут возникнуть в момент инициализации системы. Проанализируем, в какие моменты он действует: этот режим блокирует диалоги от начала запуска приложения до завершения обработки события ПередНачаломРаботыСистемы в модуле управляемого приложения.
Рассмотрим важные особенности этого режима:
/N), окно о необходимости обновления конфигурации или предупреждение о нештатном завершении предыдущего сеанса — эти окна не появятся./Out "ПутьКФайлу", чтобы все служебные сообщения записывались в текстовый лог.ЗапрещеноОткрытиеФорм(). Это позволяет писать универсальные обработчики.Рассмотрим ситуацию, когда администратор пытается использовать /DisableStartupDialogs для снижения нагрузки на ОЗУ. Выясним причину, почему это не сработает: пакетный режим запуска клиентского приложения (тонкого или толстого клиента) по-прежнему инициализирует графическую оболочку. Платформа загружает необходимые библиотеки для отрисовки интерфейса, даже если само окно будет скрыто планировщиком задач Windows.
Если ваша цель — максимальная экономия памяти, рассмотрим альтернативы:
1cv8.exe.SYSTEM позволяет скрыть окно, но потребление памяти процессом 1cv8.exe останется практически неизменным по сравнению с обычным запуском.Проанализируем ситуацию с файловым режимом работы. В отличие от клиент-серверного варианта, где за задания отвечает кластер серверов, в файловой базе задания должен кто-то исполнять. Рассмотрим, как это можно организовать эффективно.
В современных версиях платформы (начиная с 8.3.3) файловая база умеет автоматически распределять выполнение регламентных заданий между активными сеансами пользователей. Однако, если в базе никто не работает, задания выполняться не будут. В этом случае мы можем создать "технический" сеанс.
Для реализации выделенного сеанса обработки заданий выполним следующие шаги:
Шаг 1. Создание внешней обработки. Нам понадобится обработка, которая будет инициировать выполнение задач. В модуле обработки можно использовать следующий код:
Процедура ВыполнитьОбработку()
// Метод выполняет все активные регламентные задания
ВыполнитьОбработкуЗаданий();
// Завершаем работу, чтобы освободить лицензию и память
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
Шаг 2. Командная строка запуска. Чтобы запустить систему, выполнить код и закрыть её без лишних вопросов, используем комбинацию параметров:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "ПутьКБазе" /N "Admin" /P "Pass" /Execute "C:\Scripts\JobStarter.epf" /DisableStartupDialogs /Visible-
Разберем подробно, за что отвечает каждый ключ в нашем сценарии:
/DisableStartupDialogs — гарантирует, что запуск не "зависнет" на модальном окне (например, "Конфигурация базы данных не соответствует...")./Execute — запускает внешнюю обработку сразу после инициализации системы (после ПриНачалеРаботыСистемы)./Visible- — делает главное окно приложения невидимым./Out — (рекомендуется добавить) позволяет логгировать процесс: /Out "C:\Logs\1c_jobs.log" -NoTruncate.Важно помнить, что в режиме пакетного запуска асинхронные методы (например, ПоказатьВопрос или НачатьЗапускПриложения) ведут себя специфично. Рассмотрим ситуацию: если вы вызываете асинхронный метод в обработчике ПередНачаломРаботыСистемы, он будет исполнен только после завершения этого обработчика, но до выхода из пакетного режима. Если же вы установите Отказ = Истина в этом событии, никакие асинхронные вызовы исполнены не будут. Это критично при написании сложных скриптов автоматизации обновления или миграции данных.
Проанализируем типичные ошибки при использовании пакетного режима:
/Execute), сессия останется висеть в памяти. Всегда используйте конструкцию Попытка...Исключение и принудительное завершение через ЗавершитьРаботуСистемы()./N), имеет права "Администрирование" и "Интерактивное открытие внешних обработок".Таким образом, мы выяснили, что пакетный запуск — это мощный инструмент для автоматизации, но он не является "волшебной таблеткой" для экономии ОЗУ. Правильное сочетание параметров запуска и грамотно написанный код внешних обработок позволяют создавать надежные и полностью автономные системы обслуживания баз данных 1С.