Новая версия расширения 1С: замена .cfe без потери данных и доработок

· 9 мин

Содержание

Чтобы обновить расширение конфигурации 1С, достаточно заменить его новым файлом .cfe. В типовых конфигурациях на БСП это делается без Конфигуратора: Администрирование → Печатные формы, отчеты и обработки → Расширения, выделить расширение и загрузить новую версию из файла. В Конфигураторе путь другой: Конфигурация → Расширения конфигурации, затем загрузка файла в дерево расширения и обновление конфигурации базы данных.

Сложности начинаются не на загрузке, а после неё. Расширение может не примениться к основной конфигурации, особенно если её только что обновили. Ниже по шагам: подготовка, два способа замены .cfe, разбор конфликтов, проверка и автоматизация для нескольких баз. Всё описанное относится к платформе 8.3 (расширения появились в 8.3.6), интерфейс «Такси».

Чем обновление расширения отличается от обновления конфигурации

Типовую конфигурацию обновляют файлом .cfu или .cf через механизм поставки. Расширение живёт отдельно: оно не стоит на поддержке, у него нет «объединения с поставщиком», а файл .cfe целиком заменяет прежнюю версию.

Ключевые отличия:

  • 📦 Замена, а не слияние. Загрузка .cfe стирает прежнее содержимое расширения. Если кто-то правил его прямо в базе, эти правки пропадут.
  • 🔗 Зависимость от основной конфигурации. Расширение заимствует объекты типовой и перехватывает её методы. Поменялась типовая — расширение может перестать применяться, хотя его никто не трогал.
  • 🗄️ Свои данные. Расширение с назначением «Дополнение» может хранить реквизиты и справочники. Если в новой версии реквизит удалён, его данные удалятся при обновлении.
  • 👥 Не всегда нужен монопольный режим. Расширение без изменения структуры данных можно заменить при работающих пользователях. Новая версия подхватится у них после перезапуска сеанса.

Поэтому у обновления расширений два сценария, и их важно не путать:

СценарийЧто меняетсяГлавный риск
Пришла новая версия расширенияфайл .cfeпотеря локальных правок, удаление данных
Обновили типовую, расширение староеосновная конфигурациярасширение не применяется, перехваты не срабатывают

Что проверить перед обновлением расширения

Подготовка занимает 10–15 минут и снимает почти все аварийные сценарии.

  1. Сделайте резервную копию. Выгрузка .dt через Администрирование → Выгрузить информационную базу в Конфигураторе или копия средствами СУБД. Если расширение хранит данные, без копии базы откатиться будет невозможно.
  2. Сохраните текущую версию расширения в файл. В списке расширений есть команда сохранения в файл. Это ваш быстрый откат, если новая версия окажется сырой.
  3. Сравните номера версий. Версия хранится в свойствах расширения (поле «Версия»). Убедитесь, что новый .cfe действительно новее установленного.
  4. Проверьте, правили ли расширение в базе. Откройте его в Конфигураторе и сравните с сохранённой копией от разработчика. Расхождения — повод объединять, а не загружать поверх.
  5. Сверьте совместимость. Разработчик обычно указывает, под какую версию типовой и платформы собрано расширение. Режим совместимости расширения не должен быть выше режима совместимости основной конфигурации.
  6. Посмотрите назначение. «Исправление», «Адаптация» или «Дополнение» — от этого зависит, есть ли у расширения свои данные.

Если меняете одновременно и типовую, и расширение, сначала обновите типовую, потом загрузите версию расширения, собранную под новый релиз. В обратном порядке вы дважды получите ошибки применения.

Способы обновить расширение конфигурации: пошагово

Способ 1. В режиме 1С:Предприятие (без Конфигуратора)

Подходит для БП 3.0, ЗУП 3.1, УТ 11 и других конфигураций на БСП. Нужна роль «Полные права».

  1. Откройте Администрирование → Печатные формы, отчеты и обработки → Расширения.
  2. Выделите в списке расширение, которое обновляете.
  3. В командной панели или в меню «Ещё» выберите обновление из файла на диске (команда может называться «Обновить из файла на диске»).
  4. Укажите новый .cfe. Программа предупредит о проверке и замене.
  5. Дождитесь сообщения об успешной установке и перезапустите программу.

Если флажок «Безопасный режим» был снят у старой версии, проверьте его после замены. Расширение, которому нужен доступ к файлам, внешним компонентам или COM, в безопасном режиме упадёт с ошибкой при первом вызове такой функции.

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

Способ 2. В Конфигураторе: загрузка поверх

  1. Запустите Конфигуратор и откройте Конфигурация → Расширения конфигурации.
  2. В списке выделите расширение и откройте его дерево.
  3. В меню дерева расширения выберите загрузку конфигурации из файла и укажите .cfe.
  4. Подтвердите замену. Содержимое расширения заменится целиком.
  5. Нажмите «Обновить конфигурацию базы данных» (F7) для этого расширения.

Шаги 3 и 5 — разные операции. Пока не выполнено обновление конфигурации БД, пользователи работают со старой версией.

Способ 3. В Конфигураторе: сравнение и объединение

Нужен, когда расширение дорабатывали в базе, а разработчик прислал новую версию.

  1. Откройте дерево расширения.
  2. Выберите в меню сравнение и объединение с конфигурацией из файла, укажите новый .cfe.
  3. В окне сравнения отметьте, какие объекты брать из файла, а какие оставить свои.
  4. Для модулей с обеих сторон изменений используйте объединение с приоритетом нужной стороны и проверьте результат вручную.
  5. Выполните объединение и обновите конфигурацию БД.
СпособКогдаРиски
Предприятие, «из файла»типовая на БСП, правок в базе нетминимальные
Конфигуратор, загрузкалюбая конфигурация, правок нетпропущенный шаг F7
Сравнение и объединениерасширение правили в базеошибки ручного слияния модулей

Разрешение конфликтов после обновления типовой

Самая частая ситуация: обновили БП или ЗУП, а при запуске появилось сообщение, что расширение не может быть применено. Расширение при этом обычно отключается, и программа работает без него.

Причины укладываются в четыре группы:

  • 🧩 Заимствованный объект удалён или переименован. В новом релизе объекта больше нет, расширению не к чему привязаться.
  • 📝 Изменились контролируемые свойства. Расширение запомнило свойства заимствованного объекта (тип реквизита, состав формы), а в типовой они поменялись.
  • 🔍 Не прошёл контроль &ИзменениеИКонтроль. Эта аннотация сверяет текст исходного метода. Фирма 1С поправила процедуру — проверка не проходит.
  • ⚙️ Режим совместимости. Основная конфигурация осталась на старом режиме, а расширение собрано под более новый.

Как снимать:

  1. Откройте расширение в Конфигураторе и выполните синтаксическую проверку модулей. Сообщения покажут конкретные объекты и методы.
  2. Для объектов, которых больше нет, удалите заимствование и перенесите логику на объект-замену.
  3. Для изменившихся свойств приведите заимствованный объект в соответствие с основной конфигурацией и сохраните расширение.
  4. Для &ИзменениеИКонтроль сравните старый и новый текст исходного метода. Перенесите свои вставки (#Вставка … #КонецВставки) и удаления в обновлённый текст.
  5. Обновите конфигурацию БД и перезапустите программу.

Перехваты &Перед и &После переживают обновления типовой лучше, чем &Вместо и &ИзменениеИКонтроль. Если расширение ломается после каждого релиза, это разговор с разработчиком о переписывании перехватов.

Как снизить число конфликтов в следующих релизах

  • 🗓️ Ставьте релизы типовой не реже раза в квартал. Перескок через пять-шесть релизов копит изменения, и разбирать их приходится пачкой.
  • 🧪 Сначала обновляйте копию базы вместе с расширением и только потом рабочую.
  • 📋 Ведите список заимствованных объектов и перехваченных методов. С ним за пять минут видно, задевает ли новый релиз ваши доработки.

Если расширение покупное, а исходников нет, самостоятельно чинить его не стоит. Запросите у поставщика версию под ваш релиз типовой.

Диагностика: выберите симптом

Тестирование после обновления: что проверить

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

Проверка после обновления расширения
Выполнено: 0 / 8

Проводить тестовые документы лучше в копии базы. Если проверяете в рабочей — проведите документ, сверьте движения и отмените проведение, чтобы не оставлять следов в учёте.

Ошибки при обновлении расширений, которых легко избежать

Это не сообщения программы, а действия администратора, которые приводят к проблемам:

  • ❌ Загрузка .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 подставьте под установленную у вас версию платформы.

Что учесть при автоматизации:

  1. Имя расширения в -Extension должно совпадать с именем в базе, а не с именем файла.
  2. Лог /Out проверяйте после каждого запуска. Пакетный режим не показывает диалогов, ошибки видны только там.
  3. Пароль в скрипте храните в файле с ограниченным доступом или передавайте через планировщик от служебной учётной записи.
  4. Время запуска. Расширение без изменения структуры данных можно обновлять днём, но пользователям всё равно нужно перезапустить сеанс. Расширение с данными обновляйте вне рабочих часов.

Для нескольких баз сделайте список в текстовом файле и пройдите его циклом for /f. В новых версиях платформы для серверных баз есть и утилита ibcmd; её команды для работы с расширениями смотрите в справке ibcmd help.

Если обновление запускается регламентно, перед ним делайте выгрузку .dt той же задачей. Ошибка в расширении, разосланная скриптом по десяти базам, без копий превращается в десять аварий.

Частые вопросы

Нужно ли выгонять пользователей, чтобы обновить расширение?
Нет, если расширение не меняет структуру данных. Новая версия применится у пользователей после перезапуска программы.
Сбросятся ли настройки и данные расширения при обновлении?
Значения реквизитов сохраняются, если в новой версии эти реквизиты остались. Удалённые в новой версии объекты удаляются вместе с данными.
Можно ли обновить расширение в базе 1С:Фреш или другом облаке?
Зависит от сервиса. В облачных базах расширения обычно ставятся через интерфейс сервиса или по заявке, а не через Конфигуратор.
Почему после обновления типовой расширение перестало работать?
Платформа не применяет расширение, которое не прошло проверку применимости, и запускает программу без него. После исправления убедитесь, что у расширения включён флажок «Активно», и перезапустите сеанс.
Как откатить расширение на прошлую версию?
Загрузите сохранённый до обновления .cfe тем же способом, что и новую версию. Если пострадали данные, восстанавливайте базу из резервной копии.