Как автоматически добавить и обновить расширение в базе 1С из командной строки

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При обслуживании большого количества однотипных информационных баз 1С (десятки или сотни) ручное управление расширениями становится невозможным. Возникает закономерная задача: автоматизировать процесс загрузки, обновления и настройки свойств расширений. В рамках данной статьи мы подробно разберем, как реализовать этот процесс с помощью командной строки конфигуратора, режима агента и программных методов. Для регулярного выполнения технических задач при работе с множеством систем применяется инструмент для автоматического архивирования, обновления и тестирования нескольких баз 1С по расписанию.

Метод 1: Использование пакетного режима конфигуратора

Первое, с чем мы сталкиваемся при попытке автоматизации — это стандартные ключи запуска исполняемого файла 1С в режиме CONFIG. Для работы с расширениями используется параметр /LoadCfg с обязательным указанием ключа -Extension. Рассмотрим по шагам, как правильно выстроить последовательность действий. Для удобного формирования ключей запуска можно использовать конструктор параметров командной строки 1С.

Важный нюанс: в отличие от основной конфигурации, для расширений загрузка из файла и обновление конфигурации базы данных (применение изменений) не всегда корректно отрабатывают в рамках одной команды. На практике часто требуется разделение этих процессов на два этапа.

Проанализируем структуру команд для загрузки расширения:

  1. Загрузка файла расширения в базу:
    
    "C:\Program Files\1cv8\common\1cestart.exe" CONFIG /S"Server\BaseName" /N"Admin" /P"Password" /LoadCfg "C:\Ext\MyExtension.cfe" -Extension "ИмяРасширения"
    
    На этом этапе система создает объект расширения в базе (если его не было) и загружает в него структуру из файла .cfe.
  2. Обновление конфигурации базы данных расширения:
    
    "C:\Program Files\1cv8\common\1cestart.exe" CONFIG /S"Server\BaseName" /N"Admin" /P"Password" /UpdateDBCfg -Extension "ИмяРасширения"
    
    Только после этой команды расширение станет активным и изменения вступят в силу.

Если попытаться объединить эти ключи в одну строку, как в примере /LoadCfg ... /UpdateDBCfg ..., можно столкнуться с ситуацией, когда расширение загружается, но остается в состоянии "требует обновления", и его функционал не работает в пользовательском режиме. Поэтому мы рекомендуем использовать последовательный вызов двух отдельных команд в вашем бат-файле (.bat или .cmd).

Метод 2: Настройка свойств безопасности (Безопасный режим)

Даже если расширение успешно загружено и обновлено, оно часто не работает из-за включенного по умолчанию безопасного режима. В этом режиме расширениям запрещено использование многих системных функций (работа с файловой системой, 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 сразу после загрузки расширения. Для интерактивной массовой настройки параметров и безопасного режима можно использовать обработку для группового управления расширениями и их безопасным режимом.

Метод 3: Работа через встроенный язык (COM или внешнее соединение)

Выясним причину, по которой иногда командная строка может вести себя нестабильно (например, ошибки блокировок или кэша). В таких случаях надежнее использовать прямое подключение к базе и объект РасширенияКонфигурации.

Рассмотрим по шагам логику скрипта на языке 1С (или через COM-соединение):

  1. Устанавливаем соединение с информационной базой.
  2. Читаем файл расширения в двоичные данные.
  3. Проверяем наличие расширения в базе по имени.
  4. Если расширение существует, получаем его, иначе создаем новое.
  5. Загружаем данные методом ЗаписатьДанные().
  6. Обязательно вызываем обновление базы данных.

Пример программной реализации:


ДвоичныеДанные = Новый ДвоичныеДанные("C:\Temp\MyExt.cfe");
СуществующееРасширение = РасширенияКонфигурации.НайтиПоИмени("MyExtension");

Если СуществующееРасширение = Неопределено Тогда
    НовоеРасширение = РасширенияКонфигурации.Создать();
    НовоеРасширение.Имя = "MyExtension";
    НовоеРасширение.Синоним = "Мое расширение (авто)";
Иначе
    НовоеРасширение = СуществующееРасширение;
КонецЕсли;

НовоеРасширение.ЗаписатьДанные(ДвоичныеДанные);
НовоеРасширение.Записать();
// Применение изменений к БД
РасширенияКонфигурации.ОбновитьКонфигурациюБазыДанных();

Решение проблем при массовом обновлении

Проанализируем ситуацию, когда базы находятся на сервере 1С. Основная сложность автоматизации здесь — активные сеансы пользователей. Команда /UpdateDBCfg завершится ошибкой, если в базе кто-то работает.

Для решения этой проблемы мы рекомендуем использовать утилиту RAC (Remote Administration Console). Перед началом процесса обновления необходимо:

Пример команды для блокировки через rac:

rac session --cluster={ID_Кластера} terminate --base={ID_Базы}

Подведение итогов

Для успешной автоматической заливки расширения в сотни баз следует придерживаться следующего алгоритма:

  1. Подготовка: Убедитесь, что внутреннее имя в файле .cfe совпадает с именем, которое вы указываете в параметре -Extension.
  2. Блокировка: Используйте средства администрирования сервера для отключения пользователей.
  3. Загрузка: Используйте /LoadCfg для импорта структуры.
  4. Применение: Используйте /UpdateDBCfg для актуализации базы данных.
  5. Настройка: Через режим агента или скрипт снимите флаги безопасности (Безопасный режим и Защита от опасных действий), иначе расширение может не запуститься.
  6. Проверка: При массовом проходе логируйте вывод консоли в текстовые файлы, чтобы быстро найти базы, где обновление не прошло из-за специфических ошибок конфигурации.

Использование связки из командной строки и режима агента позволяет полностью исключить ручной труд и обеспечить идентичность функционала во всех базах предприятия.

← На главную