Как подключить расширение 1С через bat-файл и опубликовать HTTP-сервис без запуска конфигуратора?

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

Часто возникает задача автоматизировать процесс обновления баз данных, особенно когда речь идет об удаленной установке расширений, содержащих HTTP-сервисы. Ручной запуск конфигуратора, подключение файла .cfe и последующая публикация на веб-сервере занимают время и не подходят для CI/CD или регулярных обновлений. Разберем по шагам, как настроить автоматическую загрузку расширения в базу 1С через bat-файл, избежать зависаний скрипта на окнах авторизации и правильно опубликовать HTTP-сервис.

Загрузка конфигурации расширения из файла

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

Для загрузки расширения необходимо передать путь к файлу .cfe, а также указать параметр -Extension с точным именем расширения в базе данных.


"C:\Program Files\1cv8\common\1cestart.exe" CONFIG /F "C:\1c\bases\zup31" /N "admin" /P "123" /LoadCfg "C:\Razsh_ZUP31.cfe" -Extension "Расширение_HttpСервис"

Разберем основные параметры запуска:

  1. CONFIG — указывает платформе, что необходимо запустить режим Конфигуратора.
  2. /F — путь к каталогу файловой информационной базы (для клиент-серверной базы используйте ключ /S с указанием кластера и имени базы).
  3. /N и /P — имя пользователя и пароль администратора базы.
  4. /LoadCfg — команда загрузки файла, за которой следует путь к файлу расширения.
  5. -Extension — имя расширения, к которому применяется загружаемый файл. Если расширение с таким именем не существует, оно будет создано автоматически.

Решение проблемы с "зависанием" на окне авторизации

При тестировании bat-файлов вы можете столкнуться с ситуацией, когда скрипт запускает конфигуратор, но процесс останавливается на окне ввода логина и пароля с требованием нажать кнопку "Войти". Проанализируем ситуацию и выясним причину, почему параметры учетной записи могут не сработать.

Самая распространенная ошибка скрывается в синтаксисе написания ключей. Посмотрим на некорректный пример:

/N "admin"/P "123"

Здесь отсутствует пробел между параметром имени пользователя и параметром пароля. Платформа не может корректно разобрать строку, игнорирует пароль и открывает интерактивное окно. Всегда проверяйте наличие пробелов между ключами запуска:

/N "admin" /P "123"

Кроме того, для полноценной автоматической работы (так называемого "тихого режима") настоятельно рекомендуем использовать дополнительные ключи, которые подавляют любые предупреждения платформы (например, сообщения о легальности, стартовые окна или диалоги безопасности):

С учетом этих ключей, наша команда загрузки примет вид:


"C:\Program Files\1cv8\common\1cestart.exe" CONFIG /F "C:\1c\bases\zup31" /N "admin" /P "123" /Out "C:\1c_log.txt" /DisableStartupMessages /LoadCfg "C:\Razsh_ZUP31.cfe" -Extension "Расширение_HttpСервис"

Обязательное обновление конфигурации базы данных (UpdateDBCfg)

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

Для завершения установки расширения необходимо выполнить обновление конфигурации БД. Для этого в bat-файл нужно добавить вторую команду с параметром /UpdateDBCfg.


"C:\Program Files\1cv8\common\1cestart.exe" CONFIG /F "C:\1c\bases\zup31" /N "admin" /P "123" /Out "C:\1c_log.txt" /DisableStartupMessages /UpdateDBCfg -Extension "Расширение_HttpСервис"

Таким образом, полноценный процесс установки расширения состоит из двух последовательных вызовов платформы: сначала загрузка, затем обновление базы данных.

Публикация HTTP-сервисов из расширения

Загрузить расширение — это половина дела. Если оно содержит HTTP-сервис, его необходимо опубликовать на веб-сервере (IIS или Apache). Рассмотрим подробнее, как это сделать без ручного редактирования через Конфигуратор.

Основные настройки публикации базы хранятся в файле default.vrd, который располагается в корневой папке публикации на вашем веб-сервере. Чтобы HTTP-сервисы, находящиеся внутри расширений, стали доступны для внешних запросов, в этом файле необходимо добавить специальный флаг.

Откройте файл default.vrd и найдите узел <httpServices>. В нем должен быть включен атрибут publishExtensionsByDefault="true". Выглядит это примерно так:

<httpServices publishByDefault="true" publishExtensionsByDefault="true" />

Если вы автоматизируете развертывание с нуля, вы можете использовать консольную утилиту webinst, поставляемую вместе с платформой 1С. Она умеет публиковать базу из командной строки. Однако, если база уже опубликована, вам достаточно один раз вручную или скриптом настроить файл default.vrd. После того как флаг publishExtensionsByDefault будет установлен, при всех последующих загрузках и обновлениях расширений через bat-файл ничего дополнительно публиковать не потребуется — платформа будет подхватывать новые HTTP-сервисы из расширений автоматически.

Перезапуск пула веб-сервера и сброс кэша

Иногда после успешной загрузки нового расширения в работающую базу или изменения файла default.vrd веб-сервер продолжает отдавать ошибки или старую версию сервиса. Выясним причину: IIS и Apache кэшируют метаданные 1С. Чтобы веб-сервер "увидел" изменения в расширении, необходимо сбросить кэш.

Логично будет добавить в конец нашего bat-файла команду для перезапуска веб-сервера.

Если вы используете IIS, вместо агрессивной команды iisreset (которая полностью останавливает и запускает все сайты на сервере, прерывая работу других баз), мы рекомендуем перезапускать конкретный пул приложения с помощью штатной утилиты appcmd:


%windir%\system32\inetsrv\appcmd.exe recycle apppool /apppool.name:"ИмяВашегоПулаПриложений1С"

Также существует альтернативный, более "мягкий" способ: если изменить дату изменения файла default.vrd (например, перезаписав его или добавив пробел скриптом), IIS автоматически зафиксирует изменение конфигурации и перечитает настройки пула только для конкретной базы 1С.

Итоговый пример bat-файла

Соберем все шаги воедино и посмотрим на пример готового скрипта для автоматической загрузки расширения и перезапуска пула IIS:


@echo off
set "V8EXE=C:\Program Files\1cv8\common\1cestart.exe"
set "DBPATH=C:\1c\bases\zup31"
set "USER=admin"
set "PASS=123"
set "EXTFILE=C:\Razsh_ZUP31.cfe"
set "EXTNAME=Расширение_HttpСервис"
set "LOGFILE=C:\1c_log.txt"
set "APPPOOL=ZUP_Pool"

echo Загрузка расширения...
"%V8EXE%" CONFIG /F "%DBPATH%" /N "%USER%" /P "%PASS%" /Out "%LOGFILE%" /DisableStartupMessages /LoadCfg "%EXTFILE%" -Extension "%EXTNAME%"

echo Обновление базы данных...
"%V8EXE%" CONFIG /F "%DBPATH%" /N "%USER%" /P "%PASS%" /Out "%LOGFILE%" /DisableStartupMessages /UpdateDBCfg -Extension "%EXTNAME%"

echo Перезапуск пула IIS...
%windir%\system32\inetsrv\appcmd.exe recycle apppool /apppool.name:"%APPPOOL%"

echo Операция завершена! Проверьте файл лога: %LOGFILE%
pause

Используя этот подход, вы полностью автоматизируете доставку расширений с HTTP-сервисами, минимизируете ручной труд и снижаете вероятность ошибок при обновлении метаданных.

← На главную