Правка расширения конфигурации 1С без потери доработок и данных

· 10 мин

Содержание

Изменить расширение 1С можно двумя путями. Доработать его код и объекты — в конфигураторе через Конфигурация → Расширения конфигурации. Заменить готовую версию файлом .cfe — там же или в режиме 1С:Предприятие, в разделе Администрирование → Печатные формы, отчеты и обработки → Расширения. После правки в конфигураторе расширение нужно обновить в базе, иначе пользователи изменений не увидят.

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

С чего начать изменение расширения: подготовка

Расширения появились в платформе 8.3.6. Всё, что описано дальше, относится к 8.3 с интерфейсом «Такси» на платформе 8.3.2x. Механизм общий для всех конфигураций: Бухгалтерии, ЗУП, УТ, ERP.

Перед правкой проверьте четыре вещи:

  • 🔐 Права. Для управления расширениями нужен пользователь с полными правами (роль администратора). В конфигураторе — пользователь, которому разрешено открывать конфигуратор.
  • 💾 Копия. Сохраните текущее расширение в файл .cfe. Это ваша точка отката.
  • 🗂️ Данные расширения. Если в расширении есть собственные справочники, документы или регистры, в них уже лежат данные. Удаление или замена таких объектов уничтожит записи.
  • 🔀 Хранилище. Если расширение подключено к хранилищу конфигурации, сначала захватите объекты, иначе правка будет недоступна.

Самый дешёвый откат — файл .cfe текущей версии. Сохраните его до любых изменений: Конфигурация → Расширения конфигурации, выделите расширение, в окне его дерева выберите команду сохранения в файл.

Если расширение хранит данные, делайте полную выгрузку базы в .dt. Файл .cfe данных не содержит, только структуру и код.

Как поменять имя, версию и свойства расширения

Свойства расширения меняют в конфигураторе:

  1. Откройте Конфигурация → Расширения конфигурации.
  2. Двойным щелчком откройте нужное расширение. Появится отдельное дерево объектов.
  3. Встаньте на корневой элемент дерева и откройте палитру свойств (Alt+Enter).
  4. Измените нужные поля.
  5. Обновите расширение в базе: при активном окне расширения нажмите F7 или выберите команду обновления конфигурации базы данных.

Что обычно меняют в палитре свойств:

СвойствоЗачем менятьНа что влияет
ИмяПривести к единому стилю, отличить от чужого расширенияИдентификатор расширения в базе
СинонимПонятное название для пользователейТолько отображение
Префикс имёнЗадать префикс для новых объектовИмена собственных объектов
ВерсияОтметить новую сборкуВидна в списке расширений
НазначениеИсправление, Адаптация или ДополнениеПорядок применения расширений
Режим совместимостиВыровнять с основной конфигурациейДоступные возможности платформы

Назначение определяет порядок. Сначала применяются расширения с назначением «Исправление», затем «Адаптация», последними — «Дополнение». Если два расширения перехватывают одну процедуру, порядок решает, чей код выполнится первым.

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

Переименование расширения, которое хранит данные, сначала проверьте на копии базы. Платформа связывает данные с расширением, и после смены имени вы рискуете получить «новое» расширение с пустыми таблицами.

Синоним, версию и префикс можно менять свободно. Префикс влияет только на объекты, которые вы создадите дальше: уже созданные объекты он не переименует.

Замена расширения новой версией из файла

Это сценарий администратора: разработчик прислал файл .cfe, его нужно поставить вместо старого.

В режиме 1С:Предприятие

Пути в типовых конфигурациях на БСП:

КонфигурацияГде список расширений
Бухгалтерия предприятия 3.0Администрирование → Печатные формы, отчеты и обработки → Расширения
ЗУП 3.1Администрирование → Печатные формы, отчеты и обработки → Расширения
Управление торговлей 11НСИ и администрирование → Печатные формы, отчеты и обработки → Расширения

Порядок:

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

Флажок «Передавать в подчиненные узлы РИБ» нужен, если у вас распределённая база. Тогда новая версия расширения уйдёт в филиалы вместе с очередным обменом, и ставить файл в каждом узле вручную не придётся. Без флажка расширение останется только в той базе, где его загрузили.

Если в конфигурации нет такого раздела, откройте стандартную обработку: Все функции → Стандартные → Управление расширениями конфигурации. Пункт «Все функции» включается в настройках программы, в параметрах отображения.

Не удаляйте старое расширение, чтобы потом «добавить новое». Для расширения с данными это означает потерю всех записей в его справочниках и документах. Используйте именно обновление выделенного расширения.

В конфигураторе

  1. Конфигурация → Расширения конфигурации, выделите расширение.
  2. Откройте его и выберите команду загрузки конфигурации из файла, укажите .cfe.
  3. Нажмите F7 при активном окне расширения, чтобы применить изменения к базе.

Загрузка файла и обновление конфигурации базы данных — два разных шага. Если пропустить второй, в базе останется старая версия.

Пакетный режим для нескольких баз

Когда одно расширение стоит в десяти базах, удобнее командная строка. Пример для файловой базы:

"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"" ^
  /LoadCfg "D:\Ext\Korrektirovki.cfe" -Extension "Корректировки" ^
  /UpdateDBCfg -Extension "Корректировки" ^
  /Out "D:\Ext\log.txt"

Номер платформы в пути подставьте свой. Для серверной базы вместо /F используется /S"сервер\база". Результат смотрите в файле лога: при ошибке применимости там будет её текст.

Выгрузить расширение в файл тем же способом можно ключом /DumpCfg "путь.cfe" -Extension "Имя".

Чем файл .cfe отличается от .cf, .cfu и .dt

Путаница в форматах — частая причина того, что «обновление не встало». Коротко:

ФайлЧто внутриГде используетсяРасширения
.cfeОдно расширение: объекты, модули, формы, ролиЗагрузка и выгрузка расширенияЭто и есть расширение
.cfПолная основная конфигурацияЗагрузка конфигурации, поставкаНе содержит
.cfuФайл обновления основной конфигурацииОбновление типовойНе содержит, расширение им не обновить
.dtВся база: конфигурация и данныеРезервная копия, перенос базыСодержит вместе с данными

Из таблицы следуют три практических вывода:

  • 📦 Загрузка .cf с новой типовой не трогает расширения. Они остаются в базе, но их применимость проверяется заново.
  • 🚫 Файла обновления .cfu для расширения не существует. Новая версия расширения — это всегда новый .cfe целиком.
  • 🔁 Загрузка .dt заменяет всё: и основную конфигурацию, и расширения, и данные. Расширения, добавленные после выгрузки, пропадут.

Для командной разработки расширение выгружают ещё и в XML-файлы (команда сохранения в файлы в окне расширения). Так его хранят в системе контроля версий и открывают в 1С:EDT.

Как изменить состав объектов в расширении

Объекты в расширении бывают двух видов:

  • 📌 Заимствованные — взяты из основной конфигурации. Их модули, формы и макеты можно дополнять.
  • 🆕 Собственные — созданы в расширении. Имя начинается с префикса, например мп_ЖурналОшибок.

Как добавить объект основной конфигурации

  1. Откройте дерево основной конфигурации.
  2. Щёлкните правой кнопкой по объекту, например по документу «Реализация товаров и услуг».
  3. Выберите Добавить в расширение и укажите нужное расширение.

Объект появится в дереве расширения со значком заимствования. Теперь в нём можно заимствовать форму, макет или модуль и вносить правки.

Как перехватить процедуру

В модуле заимствованного объекта создайте обработчик с аннотацией:

  • &Перед — ваш код выполнится до типового;
  • &После — после типового;
  • &Вместо — вместо типового (типовой можно вызвать через ПродолжитьВызов());
  • &ИзменениеИКонтроль — копия типовой процедуры с пометками вставок и удалений.
&После("ПередЗаписью")
Процедура мп_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	Если Не ЗначениеЗаполнено(Комментарий) Тогда
		Комментарий = "Создан " + Формат(ТекущаяДата(), "ДЛФ=D");
	КонецЕсли;
КонецПроцедуры

&ИзменениеИКонтроль удобна для мелкой правки внутри длинной процедуры. Её плюс — после обновления типовой платформа сравнит исходный текст и сообщит, если он изменился. Минус — при каждом изменении типовой процедуры расширение придётся поправить.

Как удалить объект из расширения

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

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

Контроль свойств

У заимствованного объекта есть флажок контроля свойств. Если он включён, расширение проверяет, что свойство в основной конфигурации не изменилось. Включайте контроль только там, где ваш код на это свойство опирается. Лишний контроль — частая причина того, что расширение отключается после обновления типовой.

Права доступа: роли расширения и их назначение пользователям

Собственные объекты расширения недоступны пользователям, пока на них не выданы права. Есть два способа.

Собственная роль расширения. Создайте в расширении роль, отметьте в ней права на новые объекты. Затем добавьте роль пользователям.

Дополнение заимствованной роли. Заимствуйте типовую роль, например роль для работы с документами продаж, и добавьте в неё права на свои объекты. Тогда все, у кого есть типовая роль, получат доступ автоматически.

Какой способ выбрать:

СитуацияСпособ
Новый отчёт нужен узкой группе, например только главбухуСобственная роль расширения
Новый реквизит или документ должен быть у всех, кто работает с продажамиДополнение заимствованной роли
Расширение ставится в разные конфигурацииСобственная роль: она не зависит от имён типовых ролей

Второй способ проще в эксплуатации, но работает только для новых объектов расширения. Изменить права типовой роли на типовые объекты через заимствование нельзя.

В конфигурациях на БСП роли выдают не напрямую, а через профили групп доступа:

  1. Администрирование → Настройки пользователей и прав → Профили групп доступа.
  2. Откройте профиль или скопируйте поставляемый.
  3. В списке ролей отметьте роль расширения.
  4. Запишите профиль и проверьте под рядовым пользователем.

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

Отдельно о флажке «Безопасный режим». В безопасном режиме код расширения не может работать с файлами, внешними компонентами и COM-объектами. Если расширение выгружает файл на диск и после подключения выдаёт ошибку доступа, причина часто именно в этом флажке. Снимайте его только для расширений от проверенного разработчика.

Ошибки при изменении расширения и что с ними делать

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

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

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

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

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