Правка расширения конфигурации: от файла .cfe до готовой доработки
Содержание
Отредактировать расширение
1С (файл .cfe) в режиме Предприятия нельзя: там его можно только подключить, отключить, заменить новым файлом или удалить. Сами изменения — реквизиты, формы, код — вносят в Конфигураторе (или в 1C:Enterprise Development Tools), а затем готовый файл загружают обратно в рабочую базу.
Типичная ситуация: программист год назад сделал доработку печатной формы, оставил файл .cfe и пропал. Теперь бухгалтеру нужно поменять одну строку в макете, а в списке расширений есть только кнопки «Добавить» и «Удалить». Ниже — полный путь: от открытия файла до проверки после обновления типовой конфигурации.
Что можно сделать с расширением в режиме Предприятия, а что — только в Конфигураторе
Расширения конфигурации появились в платформе 8.3.6. Они хранятся в информационной базе отдельно от основной конфигурации, поэтому типовая остаётся «на поддержке» и обновляется без снятия с замка.
Список расширений в пользовательском режиме открывается двумя способами:
- 📂 в БП 3.0, ЗУП 3.1, УТ 11:
Администрирование → Печатные формы, отчеты и обработки → Расширения; - 🧰 в любой конфигурации:
Главное меню → Все функции → Стандартные → Управление расширениями конфигурации. Если пункта «Все функции» нет, включите его:Главное меню → Сервис → Параметры → Отображать команду «Все функции».
Что доступно в этих формах и где делается остальное:
| Действие | Режим Предприятия | Конфигуратор / EDT |
|---|---|---|
Подключить файл .cfe | ✅ | ✅ |
| Отключить (снять флажок активности) | ✅ | ✅ |
| Заменить на новую версию файла | ✅ | ✅ |
| Сохранить расширение в файл | ✅ | ✅ |
| Изменить реквизиты, формы, макеты | ❌ | ✅ |
| Изменить код модулей | ❌ | ✅ |
| Отлаживать по точкам останова | ❌ | ✅ |
Если у вас нет исходников, но расширение работает в базе, — исходник у вас есть. Сохраните его в файл из формы расширений: это и есть .cfe, который откроется в Конфигураторе.
Ограничение по правам: для работы со списком расширений пользователю нужна роль с административными правами. Без неё форма либо не откроется, либо будет только для просмотра.
Подготовка: копия базы и открытие файла .cfe в Конфигураторе
Не правьте расширение сразу в рабочей базе. Ошибка в коде расширения, подключённого ко всем пользователям, ломает работу всем сразу. Безопасный порядок такой.
Шаг 1. Сделайте тестовую копию
- Выгрузите рабочую базу:
Конфигуратор → Администрирование → Выгрузить информационную базу(файл.dt). - Создайте пустую файловую базу
и загрузите в неё
.dtчерезАдминистрирование → Загрузить информационную базу.
Расширения, подключённые в рабочей базе, переедут в копию вместе с данными.
Шаг 2. Откройте окно расширений
В Конфигураторе тестовой копии выберите Конфигурация → Расширения конфигурации. Откроется список: имя, синоним, версия, назначение, флажок активности.
- Если нужное расширение уже в списке — выделите его и откройте его конфигурацию через меню действий окна (команда «Конфигурация» → «Открыть конфигурацию»), либо двойным щелчком.
- Если у вас только файл — нажмите «Добавить», задайте любое имя, затем для нового расширения выполните
Конфигурация → Загрузить конфигурацию из файлаи укажите.cfe.
Шаг 3. Проверьте свойства расширения
Откройте свойства корня дерева расширения. Важные поля:
- 🏷️ Префикс имён — например,
Расш1_. Платформа подставляет его в имена новых объектов и процедур, чтобы они не пересеклись с типовыми. - 🎯 Назначение: «Исправление», «Адаптация» или «Дополнение». От него зависит порядок применения, если расширений несколько: сначала исправления, потом адаптации, потом дополнения.
- 🔢 Версия — заполняйте при каждой правке (
1.0.3,1.0.4). Так в рабочей базе сразу видно, какой файл загружен.
Как устроено дерево расширения: заимствованные и собственные объекты
Дерево метаданных расширения похоже на обычное, но объекты в нём бывают двух видов.
Заимствованные — копии-ссылки на объекты основной конфигурации. Значок у них со стрелкой. Заимствуют то, что хотят изменить: справочник, документ, форму, общий модуль, роль.
Собственные — новые объекты, которых нет в типовой: отчёт, обработка, справочник, общий модуль. Их имена начинаются с префикса.
Как заимствовать объект:
- Откройте основную конфигурацию (
Конфигурация → Открыть конфигурацию). - Найдите объект в дереве, например документ «Реализация товаров и услуг».
- Правой кнопкой — «Добавить в расширение» и выберите расширение.
Заимствуется только сам объект. Его формы, модули и макеты подтягиваются по отдельности — тем же пунктом контекстного меню на конкретной форме или макете.
У заимствованного объекта есть свойства с флажками контроля (например, «Контролировать»). Если флажок включён, при подключении расширение сверит это свойство с основной конфигурацией. Не снимайте контроль без причины: он предупреждает о несовместимости после обновления.
Навигация в больших расширениях: в дереве расширения видны только заимствованные и собственные объекты, а не вся типовая. Поэтому заимствуйте лишь то, что действительно меняете, — иначе дерево разрастётся и свои правки придётся искать.
Добавление реквизита и правка формы в расширении
Самая частая доработка — новое поле в документе или справочнике. Порядок:
- Заимствуйте объект (справочник, документ).
- В заимствованном объекте на вкладке «Данные» добавьте реквизит. Имя получит префикс:
Расш1_НомерДоговораПоставщика. - Заимствуйте форму объекта — обычно
ФормаЭлементаилиФормаДокумента. - Откройте форму в редакторе. В дереве реквизитов формы раскройте
Объект, найдите новый реквизит и перетащите его в дерево элементов, в нужную группу. - Обновите конфигурацию базы данных (
F7) и запустите Предприятие.
Расширение с новыми реквизитами меняет структуру данных: платформа создаёт для них отдельные поля в таблицах базы. Отсюда два следствия.
- 🗄️ Если расширение отключить или удалить, значения этих реквизитов будут потеряны.
- 🔒 При подключении такого расширения в рабочей базе нужно обновление структуры, а для него — монопольный доступ. Делайте это, когда пользователи вышли из базы.
Что ещё можно менять на форме
- Перемещать и скрывать типовые элементы (свойство «Видимость»).
- Добавлять свои команды и кнопки.
- Менять заголовки и подсказки.
- Добавлять реквизиты формы, которые не хранятся в базе (например, вспомогательная таблица).
Удалять типовые элементы формы в расширении нельзя — их скрывают. Иначе после обновления типовой платформа не сможет сопоставить форму.
Код в расширении: перехват процедур и событий
Изменять модули типовой напрямую в расширении нельзя — вы пишете свою процедуру и указываете, какую типовую она перехватывает.
События форм
В заимствованной форме откройте палитру свойств формы или элемента, вкладку событий. У каждого события можно выбрать, когда вызывать ваш обработчик:
- Перед — до типового обработчика;
- После — после типового;
- Вместо — вместо типового (типовой не выполнится, если вы его не вызовете явно).
Платформа сама создаст процедуру в модуле формы расширения с префиксом и суффиксом, например Расш1_ПриСозданииНаСервереПосле.
Процедуры модулей: аннотации
Для общих модулей, модулей объектов и менеджеров используют аннотации перед процедурой. Имя в скобках должно точно совпадать с именем перехватываемой процедуры. В примерах ниже имена типовых процедур условные — подставьте свои из модуля типовой.
&После("ЗаполнитьПоОснованию")
Процедура Расш1_ЗаполнитьПоОснованиюПосле(Основание)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
Комментарий = "Создан на основании: " + Строка(Основание);
КонецЕсли;
КонецПроцедуры
Аннотация &Вместо полностью подменяет процедуру. Внутри неё можно вызвать типовую через ПродолжитьВызов(...):
&Вместо("ПроверитьЗаполнение")
Функция Расш1_ПроверитьЗаполнение(Параметр)
Если Параметр = Неопределено Тогда
Возврат Истина;
КонецЕсли;
Возврат ПродолжитьВызов(Параметр);
КонецФункции
Для точечных правок внутри длинной типовой процедуры есть аннотация &ИзменениеИКонтроль. Вы копируете процедуру целиком и отмечаете свои строки:
&ИзменениеИКонтроль("СформироватьТекстЗапроса")
Функция Расш1_СформироватьТекстЗапроса()
Текст = "ВЫБРАТЬ ...";
#Вставка
Текст = Текст + " ГДЕ НЕ Товары.ПометкаУдаления";
#КонецВставки
#Удаление
Текст = СтрЗаменить(Текст, "ПЕРВЫЕ 100", "");
#КонецУдаления
Возврат Текст;
КонецФункции
Её плюс — контроль: если после обновления типовая процедура изменилась, расширение не применится и Конфигуратор покажет расхождения. Минус — весь текст процедуры живёт у вас, и при каждом обновлении его надо сверять.
| Способ | Когда выбирать | Риски |
|---|---|---|
&Перед / &После | Добавить действия до или после типовых | Минимальные, обновления переживает лучше всего |
&Вместо + ПродолжитьВызов | Условно отключить или обернуть типовую логику | Без ПродолжитьВызов типовая не выполнится |
&ИзменениеИКонтроль | Поменять строки внутри процедуры | Расширение перестаёт применяться после правки этой процедуры в релизе |
Перехватить можно только процедуру, которая есть в модуле типовой. Локальные переменные чужой процедуры из &После недоступны — только параметры и реквизиты объекта.
Отладка и тестирование изменений расширения
Отладчик работает с расширениями так же, как с основной конфигурацией.
- Поставьте точку останова в модуле расширения (
F9). - Запустите
Отладка → Начать отладку → Тонкий клиент(илиF5). - Выполните в Предприятии действие, которое вызывает ваш код.
Если точка не срабатывает, вероятные причины:
- 🔌 расширение неактивно — проверьте флажок в окне расширений;
- 📝 конфигурация расширения не обновлена в базе — нажмите
F7; - 🖥️ код выполняется на сервере в клиент-серверной базе, а отладка на сервере не включена. В файловой копии этой проблемы нет — ещё одна причина тестировать на ней.
Чек-лист перед переносом в рабочую базу:
Синтаксический контроль запускают в редакторе модуля (Ctrl+F7) или для всего расширения через меню Конфигурация → Проверка конфигурации при открытом дереве расширения.
Перенос в рабочую базу
- Сохраните расширение: в дереве расширения
Конфигурация → Сохранить конфигурацию в файл. Имя файла — с версией:Dorabotka_1.0.4.cfe. - В рабочей базе в режиме Предприятия откройте список расширений, выделите старую версию и замените её из файла (команда обновления из файла в форме расширений) — или удалите и добавьте заново.
- Пользователи должны перезайти в программу.
Если расширение добавляет реквизиты, «удалить и добавить заново» не подходит — при удалении теряются данные. Используйте замену из файла.
Обновление типовой и слияние версий расширения
Главная причина, по которой расширения «ломаются», — обновление основной конфигурации. Новый релиз меняет форму или процедуру, а расширение ссылается на старый вариант.
Как проверить совместимость
- Обновите типовую в тестовой копии.
- Откройте
Конфигурация → Расширения конфигурациии запустите проверку применимости расширений из меню окна. - Платформа выведет список объектов, свойств и процедур, которые разошлись.
Как исправить расхождения
- Форма изменилась. Откройте заимствованную форму — Конфигуратор предложит обновить её по основной конфигурации. Ваши добавленные элементы сохранятся, но их место в новой группе стоит проверить глазами.
- Процедура с
&ИзменениеИКонтроль. Сравните текст перехвата с новой типовой процедурой: Конфигуратор при проверке показывает, где тексты разошлись. Перенесите новые строки типовой, оставив свои блоки#Вставкаи#Удаление. - Процедура переименована или удалена. Найдите, куда перенесли логику, и перехватите новую процедуру. Старый перехват удалите.
Слияние двух версий расширения
Бывает, что расширение правили двое: подрядчик прислал новый .cfe, а у вас в базе своя доработанная версия. Порядок:
- Сохраните свою версию в файл — это страховка.
- В дереве своего расширения выберите
Конфигурация → Сравнить, объединить с конфигурацией из файлаи укажите файл подрядчика. - В окне сравнения отметьте флажками, какие объекты и модули брать из файла. Для модулей можно объединять по процедурам.
- Выполните объединение, обновите конфигурацию базы (
F7) и прогоните тесты.
Для команды из нескольких разработчиков расширение подключают к собственному хранилищу конфигурации — так же, как основную конфигурацию. Это снимает проблему «двух файлов» совсем.