Новая версия расширения 1С: замена .cfe без потери данных и доработок
Содержание
Чтобы обновить расширение конфигурации
1С, достаточно заменить его новым файлом .cfe. В типовых конфигурациях на БСП это делается без Конфигуратора: Администрирование → Печатные формы, отчеты и обработки → Расширения, выделить расширение и загрузить новую версию из файла. В Конфигураторе путь другой: Конфигурация → Расширения конфигурации, затем загрузка файла в дерево расширения и обновление конфигурации
базы данных.
Сложности начинаются не на загрузке, а после неё. Расширение может не примениться к основной конфигурации, особенно если её только что обновили. Ниже по шагам: подготовка, два способа замены .cfe, разбор конфликтов, проверка и автоматизация для нескольких баз. Всё описанное относится к платформе 8.3 (расширения появились в 8.3.6), интерфейс «Такси».
Чем обновление расширения отличается от обновления конфигурации
Типовую конфигурацию
обновляют файлом .cfu или .cf через механизм поставки. Расширение живёт отдельно: оно не стоит на поддержке, у него нет «объединения с поставщиком», а файл .cfe целиком заменяет прежнюю версию.
Ключевые отличия:
- 📦 Замена, а не слияние. Загрузка
.cfeстирает прежнее содержимое расширения. Если кто-то правил его прямо в базе, эти правки пропадут. - 🔗 Зависимость от основной конфигурации. Расширение заимствует объекты типовой и перехватывает её методы. Поменялась типовая — расширение может перестать применяться, хотя его никто не трогал.
- 🗄️ Свои данные. Расширение с назначением «Дополнение» может хранить реквизиты и справочники. Если в новой версии реквизит удалён, его данные удалятся при обновлении.
- 👥 Не всегда нужен монопольный режим. Расширение без изменения структуры данных можно заменить при работающих пользователях. Новая версия подхватится у них после перезапуска сеанса.
Поэтому у обновления расширений два сценария, и их важно не путать:
| Сценарий | Что меняется | Главный риск |
|---|---|---|
| Пришла новая версия расширения | файл .cfe | потеря локальных правок, удаление данных |
| Обновили типовую, расширение старое | основная конфигурация | расширение не применяется, перехваты не срабатывают |
Что проверить перед обновлением расширения
Подготовка занимает 10–15 минут и снимает почти все аварийные сценарии.
- Сделайте резервную копию. Выгрузка
.dtчерезАдминистрирование → Выгрузить информационную базув Конфигураторе или копия средствами СУБД. Если расширение хранит данные, без копии базы откатиться будет невозможно. - Сохраните текущую версию расширения в файл. В списке расширений есть команда сохранения в файл. Это ваш быстрый откат, если новая версия окажется сырой.
- Сравните номера версий. Версия хранится в свойствах расширения (поле «Версия»). Убедитесь, что новый
.cfeдействительно новее установленного. - Проверьте, правили ли расширение в базе. Откройте его в Конфигураторе и сравните с сохранённой копией от разработчика. Расхождения — повод объединять, а не загружать поверх.
- Сверьте совместимость. Разработчик обычно указывает, под какую версию типовой и платформы собрано расширение. Режим совместимости расширения не должен быть выше режима совместимости основной конфигурации.
- Посмотрите назначение. «Исправление», «Адаптация» или «Дополнение» — от этого зависит, есть ли у расширения свои данные.
Если меняете одновременно и типовую, и расширение, сначала обновите типовую, потом загрузите версию расширения, собранную под новый релиз. В обратном порядке вы дважды получите ошибки применения.
Способы обновить расширение конфигурации: пошагово
Способ 1. В режиме 1С:Предприятие (без Конфигуратора)
Подходит для БП 3.0, ЗУП 3.1, УТ 11 и других конфигураций на БСП. Нужна роль «Полные права».
- Откройте
Администрирование → Печатные формы, отчеты и обработки → Расширения. - Выделите в списке расширение, которое обновляете.
- В командной панели или в меню «Ещё» выберите обновление из файла на диске (команда может называться «Обновить из файла на диске»).
- Укажите новый
.cfe. Программа предупредит о проверке и замене. - Дождитесь сообщения об успешной установке и перезапустите программу.
Если флажок «Безопасный режим» был снят у старой версии, проверьте его после замены. Расширение, которому нужен доступ к файлам, внешним компонентам или COM, в безопасном режиме упадёт с ошибкой при первом вызове такой функции.
Снимайте безопасный режим только у расширений из проверенного источника. Код без ограничений получает те же возможности, что и сама конфигурация.
Способ 2. В Конфигураторе: загрузка поверх
- Запустите Конфигуратор и откройте
Конфигурация → Расширения конфигурации. - В списке выделите расширение и откройте его дерево.
- В меню дерева расширения выберите загрузку конфигурации из файла и укажите
.cfe. - Подтвердите замену. Содержимое расширения заменится целиком.
- Нажмите «Обновить конфигурацию
базы данных» (
F7) для этого расширения.
Шаги 3 и 5 — разные операции. Пока не выполнено обновление конфигурации БД, пользователи работают со старой версией.
Способ 3. В Конфигураторе: сравнение и объединение
Нужен, когда расширение дорабатывали в базе, а разработчик прислал новую версию.
- Откройте дерево расширения.
- Выберите в меню сравнение и объединение с конфигурацией из файла, укажите новый
.cfe. - В окне сравнения отметьте, какие объекты брать из файла, а какие оставить свои.
- Для модулей с обеих сторон изменений используйте объединение с приоритетом нужной стороны и проверьте результат вручную.
- Выполните объединение и обновите конфигурацию БД.
| Способ | Когда | Риски |
|---|---|---|
| Предприятие, «из файла» | типовая на БСП, правок в базе нет | минимальные |
| Конфигуратор, загрузка | любая конфигурация, правок нет | пропущенный шаг F7 |
| Сравнение и объединение | расширение правили в базе | ошибки ручного слияния модулей |
Разрешение конфликтов после обновления типовой
Самая частая ситуация: обновили БП или ЗУП, а при запуске появилось сообщение, что расширение не может быть применено. Расширение при этом обычно отключается, и программа работает без него.
Причины укладываются в четыре группы:
- 🧩 Заимствованный объект удалён или переименован. В новом релизе объекта больше нет, расширению не к чему привязаться.
- 📝 Изменились контролируемые свойства. Расширение запомнило свойства заимствованного объекта (тип реквизита, состав формы), а в типовой они поменялись.
- 🔍 Не прошёл контроль
&ИзменениеИКонтроль. Эта аннотация сверяет текст исходного метода. Фирма 1С поправила процедуру — проверка не проходит. - ⚙️ Режим совместимости. Основная конфигурация осталась на старом режиме, а расширение собрано под более новый.
Как снимать:
- Откройте расширение в Конфигураторе и выполните синтаксическую проверку модулей. Сообщения покажут конкретные объекты и методы.
- Для объектов, которых больше нет, удалите заимствование и перенесите логику на объект-замену.
- Для изменившихся свойств приведите заимствованный объект в соответствие с основной конфигурацией и сохраните расширение.
- Для
&ИзменениеИКонтрольсравните старый и новый текст исходного метода. Перенесите свои вставки (#Вставка … #КонецВставки) и удаления в обновлённый текст. - Обновите конфигурацию БД и перезапустите программу.
Перехваты &Перед и &После переживают обновления типовой лучше, чем &Вместо и &ИзменениеИКонтроль. Если расширение ломается после каждого релиза, это разговор с разработчиком о переписывании перехватов.
Как снизить число конфликтов в следующих релизах
- 🗓️ Ставьте релизы типовой не реже раза в квартал. Перескок через пять-шесть релизов копит изменения, и разбирать их приходится пачкой.
- 🧪 Сначала обновляйте копию базы вместе с расширением и только потом рабочую.
- 📋 Ведите список заимствованных объектов и перехваченных методов. С ним за пять минут видно, задевает ли новый релиз ваши доработки.
Если расширение покупное, а исходников нет, самостоятельно чинить его не стоит. Запросите у поставщика версию под ваш релиз типовой.
Тестирование после обновления: что проверить
Расширение может примениться без ошибок и при этом молча не работать. Например, перехват привязан к процедуре, которую 1С переименовала, и ваш код больше не вызывается. Поэтому после обновления нужен короткий прогон по сценариям, ради которых расширение ставили.
Проводить тестовые документы лучше в копии базы. Если проверяете в рабочей — проведите документ, сверьте движения и отмените проведение, чтобы не оставлять следов в учёте.
Ошибки при обновлении расширений, которых легко избежать
Это не сообщения программы, а действия администратора, которые приводят к проблемам:
- ❌ Загрузка
.cfeповерх расширения с локальными правками. Правки исчезают без предупреждения о содержимом. Лечится только сохранённой копией. - ❌ Удаление расширения вместо обновления. У расширения с данными удаление стирает всё, что в нём хранилось. Новая установка начинается с пустых реквизитов.
- ❌ Две копии одного расширения с разными именами. Обе перехватывают одни и те же методы, код выполняется дважды. Старую копию нужно отключить и удалить, если в ней нет данных.
- ❌ Обновление расширения в одной базе РИБ. В распределённой базе расширения передаются в подчинённые узлы, только если у них включено свойство использования в РИБ. Без него узлы останутся на старой версии.
- ❌ Пропуск режима совместимости. Расширение под режим 8.3.24 не применится к типовой с режимом совместимости ниже. Сравнивайте номер режима однозначно: у расширения он не выше, чем у основной конфигурации.
Автоматизация: обновление расширений скриптом
Когда баз десять и больше, ручная загрузка превращается в рутину. Платформа умеет загружать расширение в пакетном режиме Конфигуратора через ключи /LoadCfg и /UpdateDBCfg с параметром -Extension.
Пример .bat для серверной базы:
@echo off
set V8="C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe"
set EXT=МоёРасширение
set CFE=D:\ext\MyExtension.cfe
%V8% DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" ^
/DisableStartupMessages ^
/LoadCfg %CFE% -Extension %EXT% ^
/UpdateDBCfg -Extension %EXT% ^
/Out "D:\ext\log_buh.txt"
findstr /i "ошибк" "D:\ext\log_buh.txt" && echo ВНИМАНИЕ: см. лог
Для файловой базы вместо /S "сервер\база" укажите /F "D:\Bases\Buh". Путь к 1cv8.exe подставьте под установленную у вас версию платформы.
Что учесть при автоматизации:
- Имя расширения в
-Extensionдолжно совпадать с именем в базе, а не с именем файла. - Лог
/Outпроверяйте после каждого запуска. Пакетный режим не показывает диалогов, ошибки видны только там. - Пароль в скрипте храните в файле с ограниченным доступом или передавайте через планировщик от служебной учётной записи.
- Время запуска. Расширение без изменения структуры данных можно обновлять днём, но пользователям всё равно нужно перезапустить сеанс. Расширение с данными обновляйте вне рабочих часов.
Для нескольких баз сделайте список в текстовом файле и пройдите его циклом for /f. В новых версиях платформы для серверных баз есть и утилита ibcmd; её команды для работы с расширениями смотрите в справке ibcmd help.
Если обновление запускается регламентно, перед ним делайте выгрузку .dt той же задачей. Ошибка в расширении, разосланная скриптом по десяти базам, без копий превращается в десять аварий.
Частые вопросы
Нужно ли выгонять пользователей, чтобы обновить расширение?
Сбросятся ли настройки и данные расширения при обновлении?
Можно ли обновить расширение в базе 1С:Фреш или другом облаке?
Почему после обновления типовой расширение перестало работать?
Как откатить расширение на прошлую версию?
.cfe тем же способом, что и новую версию. Если пострадали данные, восстанавливайте базу из резервной копии.