Правка расширения конфигурации: от файла .cfe до готовой доработки

· 10 мин

Содержание

Отредактировать расширение 1С (файл .cfe) в режиме Предприятия нельзя: там его можно только подключить, отключить, заменить новым файлом или удалить. Сами изменения — реквизиты, формы, код — вносят в Конфигураторе (или в 1C:Enterprise Development Tools), а затем готовый файл загружают обратно в рабочую базу.

Типичная ситуация: программист год назад сделал доработку печатной формы, оставил файл .cfe и пропал. Теперь бухгалтеру нужно поменять одну строку в макете, а в списке расширений есть только кнопки «Добавить» и «Удалить». Ниже — полный путь: от открытия файла до проверки после обновления типовой конфигурации.

Что можно сделать с расширением в режиме Предприятия, а что — только в Конфигураторе

Расширения конфигурации появились в платформе 8.3.6. Они хранятся в информационной базе отдельно от основной конфигурации, поэтому типовая остаётся «на поддержке» и обновляется без снятия с замка.

Список расширений в пользовательском режиме открывается двумя способами:

  • 📂 в БП 3.0, ЗУП 3.1, УТ 11: Администрирование → Печатные формы, отчеты и обработки → Расширения;
  • 🧰 в любой конфигурации: Главное меню → Все функции → Стандартные → Управление расширениями конфигурации. Если пункта «Все функции» нет, включите его: Главное меню → Сервис → Параметры → Отображать команду «Все функции».

Что доступно в этих формах и где делается остальное:

ДействиеРежим ПредприятияКонфигуратор / EDT
Подключить файл .cfe✅✅
Отключить (снять флажок активности)✅✅
Заменить на новую версию файла✅✅
Сохранить расширение в файл✅✅
Изменить реквизиты, формы, макеты❌✅
Изменить код модулей❌✅
Отлаживать по точкам останова❌✅

Если у вас нет исходников, но расширение работает в базе, — исходник у вас есть. Сохраните его в файл из формы расширений: это и есть .cfe, который откроется в Конфигураторе.

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

Подготовка: копия базы и открытие файла .cfe в Конфигураторе

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

Шаг 1. Сделайте тестовую копию

  1. Выгрузите рабочую базу: Конфигуратор → Администрирование → Выгрузить информационную базу (файл .dt).
  2. Создайте пустую файловую базу и загрузите в неё .dt через Администрирование → Загрузить информационную базу.

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

Шаг 2. Откройте окно расширений

В Конфигураторе тестовой копии выберите Конфигурация → Расширения конфигурации. Откроется список: имя, синоним, версия, назначение, флажок активности.

  • Если нужное расширение уже в списке — выделите его и откройте его конфигурацию через меню действий окна (команда «Конфигурация» → «Открыть конфигурацию»), либо двойным щелчком.
  • Если у вас только файл — нажмите «Добавить», задайте любое имя, затем для нового расширения выполните Конфигурация → Загрузить конфигурацию из файла и укажите .cfe.

Шаг 3. Проверьте свойства расширения

Откройте свойства корня дерева расширения. Важные поля:

  • 🏷️ Префикс имён — например, Расш1_. Платформа подставляет его в имена новых объектов и процедур, чтобы они не пересеклись с типовыми.
  • 🎯 Назначение: «Исправление», «Адаптация» или «Дополнение». От него зависит порядок применения, если расширений несколько: сначала исправления, потом адаптации, потом дополнения.
  • 🔢 Версия — заполняйте при каждой правке (1.0.3, 1.0.4). Так в рабочей базе сразу видно, какой файл загружен.

Как устроено дерево расширения: заимствованные и собственные объекты

Дерево метаданных расширения похоже на обычное, но объекты в нём бывают двух видов.

Заимствованные — копии-ссылки на объекты основной конфигурации. Значок у них со стрелкой. Заимствуют то, что хотят изменить: справочник, документ, форму, общий модуль, роль.

Собственные — новые объекты, которых нет в типовой: отчёт, обработка, справочник, общий модуль. Их имена начинаются с префикса.

Как заимствовать объект:

  1. Откройте основную конфигурацию (Конфигурация → Открыть конфигурацию).
  2. Найдите объект в дереве, например документ «Реализация товаров и услуг».
  3. Правой кнопкой — «Добавить в расширение» и выберите расширение.

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

У заимствованного объекта есть свойства с флажками контроля (например, «Контролировать»). Если флажок включён, при подключении расширение сверит это свойство с основной конфигурацией. Не снимайте контроль без причины: он предупреждает о несовместимости после обновления.

Навигация в больших расширениях: в дереве расширения видны только заимствованные и собственные объекты, а не вся типовая. Поэтому заимствуйте лишь то, что действительно меняете, — иначе дерево разрастётся и свои правки придётся искать.

Добавление реквизита и правка формы в расширении

Самая частая доработка — новое поле в документе или справочнике. Порядок:

  1. Заимствуйте объект (справочник, документ).
  2. В заимствованном объекте на вкладке «Данные» добавьте реквизит. Имя получит префикс: Расш1_НомерДоговораПоставщика.
  3. Заимствуйте форму объекта — обычно ФормаЭлемента или ФормаДокумента.
  4. Откройте форму в редакторе. В дереве реквизитов формы раскройте Объект, найдите новый реквизит и перетащите его в дерево элементов, в нужную группу.
  5. Обновите конфигурацию базы данных (F7) и запустите Предприятие.

Расширение с новыми реквизитами меняет структуру данных: платформа создаёт для них отдельные поля в таблицах базы. Отсюда два следствия.

  • 🗄️ Если расширение отключить или удалить, значения этих реквизитов будут потеряны.
  • 🔒 При подключении такого расширения в рабочей базе нужно обновление структуры, а для него — монопольный доступ. Делайте это, когда пользователи вышли из базы.

Что ещё можно менять на форме

  • Перемещать и скрывать типовые элементы (свойство «Видимость»).
  • Добавлять свои команды и кнопки.
  • Менять заголовки и подсказки.
  • Добавлять реквизиты формы, которые не хранятся в базе (например, вспомогательная таблица).

Удалять типовые элементы формы в расширении нельзя — их скрывают. Иначе после обновления типовой платформа не сможет сопоставить форму.

Код в расширении: перехват процедур и событий

Изменять модули типовой напрямую в расширении нельзя — вы пишете свою процедуру и указываете, какую типовую она перехватывает.

События форм

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

  • Перед — до типового обработчика;
  • После — после типового;
  • Вместо — вместо типового (типовой не выполнится, если вы его не вызовете явно).

Платформа сама создаст процедуру в модуле формы расширения с префиксом и суффиксом, например Расш1_ПриСозданииНаСервереПосле.

Процедуры модулей: аннотации

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

&После("ЗаполнитьПоОснованию")
Процедура Расш1_ЗаполнитьПоОснованиюПосле(Основание)

	Если Не ЗначениеЗаполнено(Комментарий) Тогда
		Комментарий = "Создан на основании: " + Строка(Основание);
	КонецЕсли;

КонецПроцедуры

Аннотация &Вместо полностью подменяет процедуру. Внутри неё можно вызвать типовую через ПродолжитьВызов(...):

&Вместо("ПроверитьЗаполнение")
Функция Расш1_ПроверитьЗаполнение(Параметр)

	Если Параметр = Неопределено Тогда
		Возврат Истина;
	КонецЕсли;

	Возврат ПродолжитьВызов(Параметр);

КонецФункции

Для точечных правок внутри длинной типовой процедуры есть аннотация &ИзменениеИКонтроль. Вы копируете процедуру целиком и отмечаете свои строки:

&ИзменениеИКонтроль("СформироватьТекстЗапроса")
Функция Расш1_СформироватьТекстЗапроса()

	Текст = "ВЫБРАТЬ ...";
	#Вставка
	Текст = Текст + " ГДЕ НЕ Товары.ПометкаУдаления";
	#КонецВставки
	#Удаление
	Текст = СтрЗаменить(Текст, "ПЕРВЫЕ 100", "");
	#КонецУдаления

	Возврат Текст;

КонецФункции

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

СпособКогда выбиратьРиски
&Перед / &ПослеДобавить действия до или после типовыхМинимальные, обновления переживает лучше всего
&Вместо + ПродолжитьВызовУсловно отключить или обернуть типовую логикуБез ПродолжитьВызов типовая не выполнится
&ИзменениеИКонтрольПоменять строки внутри процедурыРасширение перестаёт применяться после правки этой процедуры в релизе

Перехватить можно только процедуру, которая есть в модуле типовой. Локальные переменные чужой процедуры из &После недоступны — только параметры и реквизиты объекта.

Отладка и тестирование изменений расширения

Отладчик работает с расширениями так же, как с основной конфигурацией.

  1. Поставьте точку останова в модуле расширения (F9).
  2. Запустите Отладка → Начать отладку → Тонкий клиент (или F5).
  3. Выполните в Предприятии действие, которое вызывает ваш код.

Если точка не срабатывает, вероятные причины:

  • 🔌 расширение неактивно — проверьте флажок в окне расширений;
  • 📝 конфигурация расширения не обновлена в базе — нажмите F7;
  • 🖥️ код выполняется на сервере в клиент-серверной базе, а отладка на сервере не включена. В файловой копии этой проблемы нет — ещё одна причина тестировать на ней.
Диагностика: выберите симптом

Чек-лист перед переносом в рабочую базу:

Перед загрузкой новой версии .cfe
Выполнено: 0 / 5

Синтаксический контроль запускают в редакторе модуля (Ctrl+F7) или для всего расширения через меню Конфигурация → Проверка конфигурации при открытом дереве расширения.

Перенос в рабочую базу

  1. Сохраните расширение: в дереве расширения Конфигурация → Сохранить конфигурацию в файл. Имя файла — с версией: Dorabotka_1.0.4.cfe.
  2. В рабочей базе в режиме Предприятия откройте список расширений, выделите старую версию и замените её из файла (команда обновления из файла в форме расширений) — или удалите и добавьте заново.
  3. Пользователи должны перезайти в программу.

Если расширение добавляет реквизиты, «удалить и добавить заново» не подходит — при удалении теряются данные. Используйте замену из файла.

Обновление типовой и слияние версий расширения

Главная причина, по которой расширения «ломаются», — обновление основной конфигурации. Новый релиз меняет форму или процедуру, а расширение ссылается на старый вариант.

Как проверить совместимость

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

Как исправить расхождения

  • Форма изменилась. Откройте заимствованную форму — Конфигуратор предложит обновить её по основной конфигурации. Ваши добавленные элементы сохранятся, но их место в новой группе стоит проверить глазами.
  • Процедура с &ИзменениеИКонтроль. Сравните текст перехвата с новой типовой процедурой: Конфигуратор при проверке показывает, где тексты разошлись. Перенесите новые строки типовой, оставив свои блоки #Вставка и #Удаление.
  • Процедура переименована или удалена. Найдите, куда перенесли логику, и перехватите новую процедуру. Старый перехват удалите.

Слияние двух версий расширения

Бывает, что расширение правили двое: подрядчик прислал новый .cfe, а у вас в базе своя доработанная версия. Порядок:

  1. Сохраните свою версию в файл — это страховка.
  2. В дереве своего расширения выберите Конфигурация → Сравнить, объединить с конфигурацией из файла и укажите файл подрядчика.
  3. В окне сравнения отметьте флажками, какие объекты и модули брать из файла. Для модулей можно объединять по процедурам.
  4. Выполните объединение, обновите конфигурацию базы (F7) и прогоните тесты.

Для команды из нескольких разработчиков расширение подключают к собственному хранилищу конфигурации — так же, как основную конфигурацию. Это снимает проблему «двух файлов» совсем.

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

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