При обслуживании большого количества однотипных информационных баз 1С (десятки или сотни) ручное управление расширениями становится невозможным. Возникает закономерная задача: автоматизировать процесс загрузки, обновления и настройки свойств расширений. В рамках данной статьи мы подробно разберем, как реализовать этот процесс с помощью командной строки конфигуратора, режима агента и программных методов. Для регулярного выполнения технических задач при работе с множеством систем применяется инструмент для автоматического архивирования, обновления и тестирования нескольких баз 1С по расписанию.
Первое, с чем мы сталкиваемся при попытке автоматизации — это стандартные ключи запуска исполняемого файла 1С в режиме CONFIG. Для работы с расширениями используется параметр /LoadCfg с обязательным указанием ключа -Extension. Рассмотрим по шагам, как правильно выстроить последовательность действий. Для удобного формирования ключей запуска можно использовать конструктор параметров командной строки 1С.
Важный нюанс: в отличие от основной конфигурации, для расширений загрузка из файла и обновление конфигурации базы данных (применение изменений) не всегда корректно отрабатывают в рамках одной команды. На практике часто требуется разделение этих процессов на два этапа.
Проанализируем структуру команд для загрузки расширения:
"C:\Program Files\1cv8\common\1cestart.exe" CONFIG /S"Server\BaseName" /N"Admin" /P"Password" /LoadCfg "C:\Ext\MyExtension.cfe" -Extension "ИмяРасширения"
.cfe.
"C:\Program Files\1cv8\common\1cestart.exe" CONFIG /S"Server\BaseName" /N"Admin" /P"Password" /UpdateDBCfg -Extension "ИмяРасширения"
Если попытаться объединить эти ключи в одну строку, как в примере /LoadCfg ... /UpdateDBCfg ..., можно столкнуться с ситуацией, когда расширение загружается, но остается в состоянии "требует обновления", и его функционал не работает в пользовательском режиме. Поэтому мы рекомендуем использовать последовательный вызов двух отдельных команд в вашем бат-файле (.bat или .cmd).
Даже если расширение успешно загружено и обновлено, оно часто не работает из-за включенного по умолчанию безопасного режима. В этом режиме расширениям запрещено использование многих системных функций (работа с файловой системой, COM-объектами, внешними компонентами). Чтобы автоматизировать снятие этого флага, у нас есть несколько путей.
Вариант А: Режим агента конфигуратора (для платформ 8.3.14 и выше)
Режим агента позволяет управлять базой через специальный интерфейс командной строки, который работает гораздо быстрее классического конфигуратора. Рассмотрим, как установить свойства расширения через агент:
Сначала мы запускаем сессию агента, а затем отправляем команду установки свойств:
config extensions properties set --name="ИмяРасширения" --safe-mode=false --unsafe-action-protection=false
Здесь параметр --safe-mode=false отключает безопасный режим, а --unsafe-action-protection=false снимает защиту от опасных действий, что критично для полной автоматизации без интерактивных подтверждений.
Вариант Б: Использование внешней обработки
Если версия платформы ниже 8.3.14, мы можем написать небольшую обработку, которая будет программно менять свойства расширения. Рассмотрим пример кода, который можно запустить пакетно:
УстанавливаемыеРасширения = РасширенияКонфигурации.Получить();
Для Каждого Расширение Из УстанавливаемыеРасширения Цикл
Если Расширение.Имя = "НужноеИмя" Тогда
Расширение.БезопасныйРежим = Ложь;
Расширение.ЗащитаОтОпасныхДействий = Новый ОписаниеЗащитыОтОпасныхДействий;
Расширение.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
Расширение.Записать();
КонецЕсли;
КонецЦикла;
Такую обработку можно запустить из командной строки с помощью ключа /Execute сразу после загрузки расширения. Для интерактивной массовой настройки параметров и безопасного режима можно использовать обработку для группового управления расширениями и их безопасным режимом.
Выясним причину, по которой иногда командная строка может вести себя нестабильно (например, ошибки блокировок или кэша). В таких случаях надежнее использовать прямое подключение к базе и объект РасширенияКонфигурации.
Рассмотрим по шагам логику скрипта на языке 1С (или через COM-соединение):
ЗаписатьДанные().Пример программной реализации:
ДвоичныеДанные = Новый ДвоичныеДанные("C:\Temp\MyExt.cfe");
СуществующееРасширение = РасширенияКонфигурации.НайтиПоИмени("MyExtension");
Если СуществующееРасширение = Неопределено Тогда
НовоеРасширение = РасширенияКонфигурации.Создать();
НовоеРасширение.Имя = "MyExtension";
НовоеРасширение.Синоним = "Мое расширение (авто)";
Иначе
НовоеРасширение = СуществующееРасширение;
КонецЕсли;
НовоеРасширение.ЗаписатьДанные(ДвоичныеДанные);
НовоеРасширение.Записать();
// Применение изменений к БД
РасширенияКонфигурации.ОбновитьКонфигурациюБазыДанных();
Проанализируем ситуацию, когда базы находятся на сервере 1С. Основная сложность автоматизации здесь — активные сеансы пользователей. Команда /UpdateDBCfg завершится ошибкой, если в базе кто-то работает.
Для решения этой проблемы мы рекомендуем использовать утилиту RAC (Remote Administration Console). Перед началом процесса обновления необходимо:
Пример команды для блокировки через rac:
rac session --cluster={ID_Кластера} terminate --base={ID_Базы}
Для успешной автоматической заливки расширения в сотни баз следует придерживаться следующего алгоритма:
.cfe совпадает с именем, которое вы указываете в параметре -Extension./LoadCfg для импорта структуры./UpdateDBCfg для актуализации базы данных.Использование связки из командной строки и режима агента позволяет полностью исключить ручной труд и обеспечить идентичность функционала во всех базах предприятия.