Как убрать расширение конфигурации из базы без открытия конфигуратора
Содержание
Удалить расширение конфигурации
1С через командную строку можно одной командой: 1cv8.exe DESIGNER /F"путь к базе" /N"Админ" /P"пароль" /DeleteCfg -Extension ИмяРасширения. Частая ошибка — подставлять в -Extension то, что видно в списке расширений в режиме «1С:Предприятие». Там обычно показан синоним, а команде нужно имя расширения — строка без пробелов, заданная при создании.
Ключ работает в пакетном режиме конфигуратора платформы 8.3, одинаково для Бухгалтерии, ЗУП, УТ и любой другой конфигурации. Нужен только доступ к 1cv8.exe нужной версии и пользователь с правами администратора базы.
Что проверить перед удалением расширения
Пакетный режим не задаёт вопросов. Конфигуратор в интерактиве предупредит, что вместе с расширением пропадут его данные, а командная строка просто выполнит команду. Поэтому всё проверяем заранее.
Права пользователя
Пользователь в /N должен иметь роль с правом «Администрирование» либо «Администрирование расширений конфигурации». Без этого права конфигуратор откажет на этапе входа или на самой операции.
- 🔑 Если в базе нет ни одного пользователя,
/Nи/Pне указывают. - 🔑 Если включена аутентификация Windows и пользователь сопоставлен с учётной записью, под которой запускается скрипт, пароль тоже не нужен.
- 🔑 Пароли не пишите прямо в bat-файл, который лежит в общей папке. Берите их из переменной окружения, ниже покажу как.
Точное имя расширения
Имя расширения проще всего посмотреть в конфигураторе: Конфигурация → Расширения конфигурации. В списке есть колонки имени и синонима — нужна колонка «Имя».
Если конфигуратор открывать не хочется, имена выведет PowerShell-скрипт из раздела про COM. Он печатает имя, синоним, версию и признак активности каждого расширения.
Резервная копия
Удаление расширения стирает данные его собственных объектов. Если расширение добавляло свои справочники, документы или регистры, их таблицы уйдут вместе с ним. Вернуть их можно только из резервной копии базы.
Минимум — выгрузить само расширение в файл .cfe, чтобы потом загрузить его обратно:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Admin" /P"%PASS1C%" /DumpCfg "D:\Backup\Dorabotki.cfe" -Extension Dorabotki /Out "D:\Backup\dump.log"
Если у расширения есть свои данные, делайте полную копию: выгрузку .dt (для неё нужен монопольный доступ) или резервную копию средствами СУБД для серверной базы.
Синтаксис /DeleteCfg для файловой базы
Общая схема команды:
"<путь>\1cv8.exe" DESIGNER /F"<каталог базы>" /N"<пользователь>" /P"<пароль>" /DeleteCfg -Extension <имя> /Out "<лог>"
Рабочий пример для файловой базы в D:\Bases\Buh и расширения Dorabotki:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Admin" /P"%PASS1C%" /DisableStartupDialogs /DeleteCfg -Extension Dorabotki /Out "D:\Logs\delete_ext.log" -NoTruncate /DumpResult "D:\Logs\delete_ext.res"
Что делает каждый ключ:
| Ключ | Назначение |
|---|---|
DESIGNER | запуск конфигуратора, без него команда не сработает |
/F"..." | каталог файловой базы (где лежит 1Cv8.1CD) |
/N, /P | пользователь и пароль базы |
/DisableStartupDialogs | подавляет стартовые диалоги, чтобы скрипт не завис |
/DeleteCfg -Extension <имя> | удаляет одно расширение |
/DeleteCfg -AllExtensions | удаляет все расширения базы |
/Out "..." | файл, куда пишутся сообщения конфигуратора |
-NoTruncate | дописывать в лог, а не перезаписывать его |
/DumpResult "..." | файл с кодом результата: 0 — успех, иное — ошибка |
Путь к 1cv8.exe берите из каталога конкретной версии (...\1cv8\8.3.xx.xxxx\bin\). Через 1cestart.exe пакетный режим тоже запускается, но версию тогда выбирает стартер, и на машине с несколькими платформами это лотерея.
Удаление всех расширений сразу
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Admin" /P"%PASS1C%" /DeleteCfg -AllExtensions /Out "D:\Logs\delete_all.log"
-AllExtensions уберёт и те расширения, которые ставят обновления конфигурации или сервисы интернет-поддержки. Используйте ключ только на копиях баз и тестовых стендах, где вы точно знаете состав.
Как удалить расширение на сервере 1С
В клиент-серверной базе вместо /F указывают /S"сервер\имя базы". Имя базы — то, под которым она зарегистрирована в кластере, а не имя базы данных в SQL.
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S"srv1c\buh_prod" /N"Admin" /P"%PASS1C%" /DisableStartupDialogs /DeleteCfg -Extension Dorabotki /Out "D:\Logs\buh_prod.log" /DumpResult "D:\Logs\buh_prod.res"
Если агент сервера слушает нестандартный порт, его пишут через двоеточие: /S"srv1c:2541\buh_prod". Порт по умолчанию — 1540, его указывать не нужно.
Версия платформы на клиенте
Версия 1cv8.exe, из которого вы запускаете команду, должна совпадать с версией сервера 1С. Иначе конфигуратор не подключится к базе. На сервере приложений это обычно не проблема, а вот на рабочей станции администратора часто стоит другая сборка.
Пользователи в базе
Открытые сеансы продолжат работать с тем набором расширений, с которым стартовали. Изменения увидят после переподключения. Поэтому удаление лучше делать в окно обслуживания:
- Предупредите пользователей и назначьте время.
- Включите блокировку начала сеансов в свойствах базы в консоли кластера и задайте код разрешения.
- Запустите команду, добавив
/UC <код разрешения>, чтобы конфигуратор прошёл через блокировку. - Снимите блокировку после проверки.
Если для блокировки вы завершаете активные сеансы в консоли кластера, у пользователей оборвётся работа и пропадут несохранённые документы. Делайте это только после предупреждения и в нерабочее время.
Пример с кодом разрешения:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S"srv1c\buh_prod" /N"Admin" /P"%PASS1C%" /UC 7731 /DeleteCfg -Extension Dorabotki /Out "D:\Logs\buh_prod.log"
Bat-файл для удаления расширения в нескольких базах
Типичная задача: расширение раскатали на двадцать баз, а теперь его нужно убрать везде. Список баз кладём в текстовый файл, по строке на базу:
srv1c\buh_ooo_alfa
srv1c\buh_ooo_beta
srv1c\zup_holding
Скрипт проходит по списку, пишет отдельный лог на каждую базу и печатает итог:
@echo off
setlocal EnableDelayedExpansion
set "V8=C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
set "EXT=Dorabotki"
set "USR=Admin"
set "LIST=C:\1c-scripts\bases.txt"
set "LOG=C:\1c-scripts\logs"
if "%PASS1C%"=="" (
echo Не задана переменная PASS1C
exit /b 1
)
if not exist "%LOG%" mkdir "%LOG%"
for /f "usebackq delims=" %%B in ("%LIST%") do (
set "BASE=%%B"
set "SAFE=!BASE:\=_!"
set "RES="
start "" /wait "%V8%" DESIGNER /S"%%B" /N"%USR%" /P"%PASS1C%" /DisableStartupDialogs /DeleteCfg -Extension %EXT% /Out "%LOG%\!SAFE!.log" /DumpResult "%LOG%\!SAFE!.res"
if exist "%LOG%\!SAFE!.res" set /p RES=<"%LOG%\!SAFE!.res"
if "!RES!"=="0" (
echo OK %%B
) else (
echo ERROR %%B - смотрите %LOG%\!SAFE!.log
)
)
endlocal
Пояснения к скрипту:
- 🧩
start "" /waitгарантирует, что следующая база не начнётся, пока не закончилась предыдущая. Параллельный запуск двадцати конфигураторов на одном сервере — плохая идея. - 🧩
!BASE:\=_!превращаетsrv1c\buh_ooo_alfaв имя файлаsrv1c_buh_ooo_alfa. - 🧩
set "RES="перед каждой итерацией сбрасывает код прошлой базы, иначе упавшая база может показаться успешной. - 🧩 Пароль берётся из переменной
PASS1C. Задайте её в сеансе перед запуском:set PASS1C=....
Сохраняйте bat-файл в кодировке OEM 866, если в нём есть кириллица (имена расширений, сообщения). В UTF-8 без chcp 65001 командная строка превратит русские буквы в мусор, и -Extension получит не то имя.
Запуск по расписанию
Скрипт можно повесить на планировщик Windows. Задачу запускайте от учётной записи, у которой есть доступ к каталогу логов, и с флагом «Выполнять с наивысшими правами», если логи пишутся в системный каталог. Переменную с паролем в этом случае задайте на уровне учётной записи, а не в сеансе.
Лог и код результата: как понять, что расширение удалено
У пакетного режима два источника правды.
Файл /DumpResult. Одна строка с числом. 0 — команда выполнена, любое другое значение — ошибка. Именно его удобно проверять скриптом.
Файл /Out. Сообщения конфигуратора текстом. Пустой лог при коде 0 — нормальная ситуация. При ошибке там будет причина.
Контрольная проверка
Код 0 говорит, что команда отработала. Убедиться, что расширения нет, можно двумя способами:
- Открыть конфигуратор
→
Конфигурация → Расширения конфигурациии проверить список. - Запустить PowerShell-скрипт из следующего раздела в режиме вывода списка.
Для пачки баз второй вариант быстрее: скрипт пройдёт по всем базам и покажет, где расширение осталось.
PowerShell и COM-соединение как альтернатива конфигуратору
Пакетный конфигуратор — штатный путь, но не единственный. Через COM-соединение можно удалить или отключить расширение
средствами встроенного языка: у объекта РасширениеКонфигурации есть метод Удалить() и свойство Активно.
Подготовка COM-коннектора
На машине, где работает скрипт, должен быть зарегистрирован comcntr.dll той же версии, что сервер 1С. Регистрация из командной строки, запущенной от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"
Разрядность PowerShell и платформы должна совпадать. 64-битный PowerShell не увидит 32-битный коннектор, и наоборот. Для 32-битной платформы запускайте PowerShell из C:\Windows\SysWOW64\WindowsPowerShell\v1.0\.
Список расширений базы
$connector = New-Object -ComObject "V83.COMConnector"
$conn = $connector.Connect('Srvr="srv1c";Ref="buh_prod";Usr="Admin";Pwd="' + $env:PASS1C + '";')
$exts = $conn.ConfigurationExtensions.Get()
for ($i = 0; $i -lt $exts.Count(); $i++) {
$e = $exts.Get($i)
"{0}`t{1}`t{2}`tактивно: {3}" -f $e.Name, $e.Synonym, $e.Version, $e.Active
}
Для файловой базы строка подключения другая: File="D:\Bases\Buh";Usr="Admin";Pwd="...";.
Удаление по имени
$target = "Dorabotki"
$exts = $conn.ConfigurationExtensions.Get()
$found = $false
for ($i = 0; $i -lt $exts.Count(); $i++) {
$e = $exts.Get($i)
if ($e.Name -eq $target) {
$e.Delete()
$found = $true
"Удалено: $target"
}
}
if (-not $found) { "Расширение $target не найдено" }
Отключить, а не удалять
Если не уверены, что расширение больше не понадобится, его можно выключить. Данные останутся, код перестанет применяться у новых сеансов:
$e.Active = $false
$e.Write()
Какой способ выбрать
| Способ | Когда подходит | Ограничения |
|---|---|---|
1cv8.exe DESIGNER /DeleteCfg | разовое удаление, скрипты обслуживания | нет вывода списка расширений в удобном виде |
| bat-цикл по списку баз | одно расширение на много баз | следите за кодировкой и версией платформы |
| PowerShell + COM | нужен список, проверка, отключение | регистрация comcntr.dll, совпадение разрядности |
ibcmd | автономный сервер, базы без кластера | набор команд смотрите в ibcmd help, он отличается от конфигуратора |
COM-соединение занимает лицензию и создаёт сеанс в базе. Не оставляйте $conn висеть в долгоживущих скриптах: после работы присвойте переменной $null и вызовите сборку мусора.
Частые вопросы
Можно ли вернуть удалённое расширение?
/LoadCfg "файл.cfe" -Extension Имя, затем выполните /UpdateDBCfg -Extension Имя. Данные собственных объектов расширения вернёт только резервная копия базы.