Как обновить конфигурацию 1С и не потерять работающие расширения
Содержание
Обновлять 1С с расширениями нужно в таком порядке: резервная копия базы и выгрузка каждого расширения в файл .cfe, затем платформа (если релиз требует), затем основная конфигурация и «Обновить конфигурацию
базы данных», затем проверка применимости расширений и только после этого — запуск пользователей. Сам файл обновления .cfu расширения не трогает: они хранятся в базе отдельно и после обновления остаются на месте. Ломаются они по другой причине — основная конфигурация меняется у них «под ногами».
Почему с расширениями обновление 1С требует отдельного алгоритма
Расширение не копирует объекты основной конфигурации, а заимствует их. Оно ссылается на справочник, документ, общий модуль или форму основной конфигурации и добавляет к ним своё: реквизит, команду, обработчик события, изменённый метод.
Пока основная конфигурация не меняется, всё работает. Новый релиз от фирмы-разработчика может:
- 🔧 переименовать или удалить процедуру, которую расширение перехватывает аннотацией
&Перед,&Послеили&Вместо; - 🧩 изменить текст метода, заимствованного через
&ИзменениеИКонтроль, — тогда контрольная копия в расширении перестаёт совпадать с оригиналом; - 📋 поменять контролируемые свойства заимствованного объекта: тип реквизита, состав табличной части, структуру формы;
- 🗑️ удалить объект целиком, например старую печатную форму или отчёт.
В первых трёх случаях расширение может перестать применяться к базе или, что хуже, применится, но будет работать не так, как раньше. Аннотация &Вместо особенно коварна: она полностью подменяет типовой метод. Если в новом релизе в этот метод добавили исправление, ваше расширение его тихо отключит.
Отсюда главное правило: после обновления основной конфигурации каждое расширение проверяется отдельно, до того как в базу зайдут пользователи.
Каких расширений это касается сильнее всего
| Что делает расширение | Риск при обновлении | Что проверять |
|---|---|---|
| Добавляет свои объекты (отчёт, обработку, справочник) | Низкий | Запуск, формирование отчёта |
| Добавляет реквизит или команду к типовому объекту | Средний | Форму объекта, запись, проведение |
Перехватывает методы через &Перед / &После | Средний | Что метод с таким именем ещё существует |
Подменяет методы через &Вместо | Высокий | Сравнить новый типовой текст метода со своим |
Меняет код через &ИзменениеИКонтроль | Высокий | Применимость: при расхождении расширение не применится |
Подготовка: резервная копия и инвентаризация расширений
Сделайте полную копию базы
Для файловой базы — выгрузка в .dt из Конфигуратора: Администрирование → Выгрузить информационную базу. Для клиент-серверной — дополнительно штатная копия средствами СУБД (MS SQL или PostgreSQL). Выгрузка .dt содержит и основную конфигурацию, и расширения, и данные, поэтому из неё можно вернуть всё целиком.
Выгрузка .dt требует монопольного доступа. Пользователей нужно выпустить из базы заранее и запретить новые входы, иначе Конфигуратор откажет.
Выгрузите каждое расширение в файл
Даже при наличии .dt сохраните расширения по отдельности. Если основная конфигурация обновится нормально, а одно расширение придётся откатить, не нужно будет поднимать всю базу.
- В Конфигураторе откройте
Конфигурация → Расширения конфигурации. - Выделите расширение и откройте его конфигурацию.
- В окне расширения выполните сохранение в файл: команда находится в меню
Конфигурация(сохранение конфигурации расширения в файл), формат —.cfe. - Повторите для всех расширений из списка.
Составьте таблицу расширений
Перед обновлением запишите для каждого расширения:
- 📌 имя и версию;
- 📌 назначение (исправление, адаптация, дополнение);
- 📌 флаги «Активно» и «Безопасный режим» — после восстановления их придётся выставить так же;
- 📌 кто автор и кто будет исправлять, если расширение перестанет применяться;
- 📌 какие типовые объекты оно заимствует и через какие аннотации.
Последний пункт удобно посмотреть в дереве объектов расширения: заимствованные объекты помечены отдельным значком, а в модулях видны аннотации. Если расширение пришло от стороннего разработчика, уточните у него, есть ли версия под новый релиз конфигурации. Часто поставщик выпускает обновлённый .cfe вслед за фирмой 1С.
Расширения с назначением «Исправление» часто закрывают ошибку, которую в новом релизе уже исправили. Прочитайте описание изменений релиза: если ошибка исправлена, такое расширение после обновления лучше отключить и удалить.
Порядок обновления: платформа, конфигурация, расширения
Шаг 1. Платформа — только если нужна
Номер минимальной платформы указан в описании релиза конфигурации. Если ваша установленная платформа имеет номер не ниже требуемого, этот шаг пропускается.
Для клиент-серверной базы платформу обновляют на сервере и на всех клиентах до одного и того же номера. После установки новой версии сервера служба «Агент сервера 1С:Предприятия 8.3» должна работать уже от нового каталога bin.
Остановка или перезапуск службы агента обрывает все сеансы во всех базах кластера. Делайте это в согласованное окно, когда пользователи вышли.
Перезапуск сервера 1С нужен в двух случаях: при смене версии платформы и если после обновления конфигурации клиенты получают странные ошибки от устаревшего серверного кэша. Во втором случае сначала попробуйте запуск клиента с параметром /ClearCache — он чистит клиентский кэш и ничего не останавливает.
Шаг 2. Обновление основной конфигурации
- Заблокируйте вход пользователей. В базах на БСП это делается из пользовательского режима в разделе
Администрирование → Обслуживание(блокировка работы пользователей с кодом разрешения). - Откройте Конфигуратор,
Конфигурация → Поддержка → Обновить конфигурацию. - Укажите файл
.cfuнужного релиза. Если вы пропустили несколько релизов, обновляйтесь по цепочке — каждый.cfuзнает, с каких версий на него можно перейти. - Если основная конфигурация снята с поддержки или изменена, программа покажет сравнение и объединение. Это отдельная работа: при наличии расширений правки в самой конфигурации обычно и не нужны.
- Выполните
Конфигурация → Обновить конфигурацию базы данных(F7). На этом шаге платформа реструктуризирует таблицы.
Шаг 3. Расширения — до запуска пользователей
После F7 платформа сама проверяет, применимы ли расширения к новой конфигурации. Если какое-то не применимо, Конфигуратор сообщит об этом, а в пользовательском режиме расширение просто не подключится — и пользователь увидит базу без своих доработок.
Проверку можно запустить и вручную, не дожидаясь жалоб. Для этого в пакетном режиме есть параметр /CheckCanApplyConfigurationExtensions (пример команды — в разделе про автоматизацию). Результат пишется в журнал, указанный в /Out.
Шаг 4. Обработчики обновления
Запустите базу в режиме «1С:Предприятие» под администратором. Типовые конфигурации на БСП выполнят обработчики перехода на новую версию. Делайте это, когда расширения уже проверены: обработчики работают с подключёнными расширениями, и если расширение подменяет метод, участвующий в обновлении данных, ошибка всплывёт именно здесь.
Как исправить расширение, которое перестало применяться
Исправление делается в Конфигураторе, в окне конфигурации расширения. Порядок зависит от причины.
Изменились контролируемые свойства заимствованного объекта
В заимствованном объекте расширение хранит контролируемые свойства основной конфигурации. Если в новом релизе они другие, расширение становится неприменимым. В дереве расширения на заимствованном объекте вызовите контекстное меню: там есть команда обновления заимствованных объектов из основной конфигурации. После неё проверьте, что ваши добавленные реквизиты и элементы форм остались на месте.
Не совпал текст метода с &ИзменениеИКонтроль
- Откройте модуль расширения и найдите метод с этой аннотацией.
- Сравните его с новым текстом метода в основной конфигурации — проще всего через встроенное сравнение модулей.
- Перенесите ваши вставки (
#Вставка … #КонецВставки) и удаления (#Удаление … #КонецУдаления) в новый текст. - Обновите расширение в базе и снова выполните F7.
Метод с &Вместо или &Перед исчез
Найдите в новом релизе, куда переехала логика: метод могли переименовать или вынести в другой общий модуль. Перехватчик переносят на новое место. Если метода больше нет совсем, перехват удаляют и решают задачу иначе.
Готовый .cfe от поставщика
Если разработчик расширения прислал новую версию, загрузите её поверх старой: в списке Конфигурация → Расширения конфигурации выделите расширение и загрузите файл. Затем — F7. Данные, которые хранятся в реквизитах расширения, при замене версии с тем же именем сохраняются, если структура реквизитов не удалена.
Тестирование обновлённой базы с расширениями
Проверка после обновления — это не «зашёл, открыл, работает». Пройдите по списку, который составили на этапе подготовки:
- Список расширений. Все ли на месте, у всех ли прежние флаги «Активно» и «Безопасный режим».
- Формы с добавленными реквизитами. Откройте документ или справочник, куда расширение добавило поля. Поля видны, значения в старых документах сохранились.
- Проведение. Перепроведите один-два документа из закрытого периода в копии базы или в текущем периоде в рабочей — движения не должны отличаться от прежних.
- Печатные формы и отчёты из расширения. Сформируйте их на тех же данных, что и до обновления, и сравните итоги.
- Обмены. Если расширение участвует в обмене с другой базой или сайтом, выполните один цикл обмена.
- Регламентные задания. Расширения, которые добавляют фоновые задания, проверьте по журналу регистрации через сутки.
Самый надёжный способ — сначала обновить копию базы. Разверните .dt в отдельную базу, проведите на ней весь цикл и тестирование, и только потом повторите на рабочей. Время на рабочей базе тогда предсказуемо.
Автоматизация обновления 1С с расширениями в пакетном режиме
Когда баз несколько, обновление удобно собрать в командный файл. Пакетный режим Конфигуратора (1cv8.exe DESIGNER) умеет выгружать базу, обновлять конфигурацию, обновлять расширения
и проверять их применимость.
@echo off
set V8="C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"
set IB=/S "srv1c\buh"
set USR=/N "Администратор" /P "пароль"
set LOG=D:\1c_update\log
rem 1. Резервная копия всей базы вместе с расширениями
%V8% DESIGNER %IB% %USR% /DumpIB "D:\1c_update\buh_before.dt" /Out "%LOG%\dump.txt"
rem 2. Отдельная копия расширения
%V8% DESIGNER %IB% %USR% /DumpCfg "D:\1c_update\MyExt.cfe" -Extension "МоёРасширение" /Out "%LOG%\ext.txt"
rem 3. Обновление основной конфигурации и структуры базы
%V8% DESIGNER %IB% %USR% /UpdateCfg "D:\1c_update\1Cv8.cfu" /UpdateDBCfg /Out "%LOG%\update.txt"
rem 4. Проверка применимости расширения
%V8% DESIGNER %IB% %USR% /CheckCanApplyConfigurationExtensions -Extension "МоёРасширение" /Out "%LOG%\check.txt"
Номер версии в пути к 1cv8.exe замените на свой. Для файловой базы вместо /S "сервер\база" указывается /F "D:\Bases\Buh".
Если поставщик прислал новый .cfe, загрузка и применение расширения в пакетном режиме выглядят так:
%V8% DESIGNER %IB% %USR% /LoadCfg "D:\1c_update\MyExt_new.cfe" -Extension "МоёРасширение" /UpdateDBCfg -Extension "МоёРасширение" /Out "%LOG%\ext_load.txt"
Что ещё стоит знать:
- 🔒 Перед запуском сценария пользователей нужно выпустить из базы. Если вход заблокирован с кодом разрешения, Конфигуратор запускают с параметром
/UC <код>. - 📄 Каждый шаг пишет свой журнал через
/Out. Читайте его после выполнения: код возврата не всегда отражает предупреждения. - 🔐 Пароль в командном файле — уязвимость. Храните такой файл на сервере с ограниченным доступом или передавайте пароль через переменную среды.
- 🛠️ Для десятков баз администраторы обычно используют готовые сценарии на OneScript (например, vanessa-runner): они оборачивают эти же параметры
1cv8.exeи добавляют управление сеансами.
Если обновление 1С с расширениями прошло неудачно
Выбор способа зависит от того, что именно сломалось.
| Ситуация | Что делать | Чем рискуете |
|---|---|---|
| F7 ещё не выполнено, обновление не понравилось | Конфигурация → Конфигурация базы данных → Вернуться к конфигурации БД | Ничем: структура базы не менялась |
| Основная конфигурация в порядке, одно расширение не работает | Снять флаг «Активно» у расширения, работать без него до исправления | Пользователи временно без доработки |
| Расширение испорчено правками | Загрузить сохранённый .cfe и выполнить F7 | Теряются правки расширения после выгрузки |
| Обработчики обновления упали, данные в непонятном состоянии | Восстановить базу из .dt или из копии СУБД | Теряются данные, введённые после копии |
Восстановление из .dt (Администрирование → Загрузить информационную базу) полностью заменяет базу: и конфигурацию, и расширения, и данные.
Загрузка .dt стирает всё, что ввели после выгрузки. Перед ней убедитесь, что пользователи не работали в базе с момента копии, или сохраните их данные отдельно.
Не пытайтесь «исправить» упавшее обновление удалением расширения в рабочей базе. При удалении расширения пропадают и данные его собственных объектов и реквизитов. Сначала отключите расширение, потом разбирайтесь на копии.