Расширение конфигурации 1С 8.3: доработки без снятия типовой с поддержки
Содержание
Расширение конфигурации — это отдельный модуль доработок, который «накладывается» поверх типовой конфигурации и меняет её поведение, не трогая сам код поставщика. Типовая остаётся на полной поддержке, поэтому обновляется штатно, без сравнения и объединения. Механизм появился в платформе 8.3.6 и сегодня работает во всех актуальных конфигурациях: БП 3.0, ЗУП 3.1, УТ 11, КА 2, ERP.
Если вам нужна своя печатная форма, новый реквизит в документе или проверка перед проведением, а программист каждый раз говорит «придётся снимать с поддержки» — расширения решают ровно эту проблему. Разберём, как они устроены, когда их выбирать и как подключить готовый файл .cfe.
Как устроено расширение конфигурации
Расширение хранится в базе отдельно от основной конфигурации. Платформа при запуске берёт типовую, применяет к ней одно или несколько расширений и получает итоговую конфигурацию, с которой работает пользователь.
Внутри расширения два вида объектов:
- 🔗 Заимствованные — копии-ссылки на объекты типовой (документ, справочник, форма, общий модуль). Их добавляют в расширение, чтобы что-то в них поменять: дописать обработчик, добавить реквизит , поставить кнопку на форму.
- 🆕 Собственные — новые объекты, которых нет в типовой: справочник, регистр сведений
, отчёт, обработка, общий модуль. Их имена начинаются с префикса расширения, например
Расш1_.
Код типовой при этом не переписывается. Вместо правки процедуры разработчик пишет в расширении свою и помечает её аннотацией: выполнить до типовой, после неё или вместо неё.
Аннотации перехвата методов
| Аннотация | Что делает | Когда уместна |
|---|---|---|
&Перед("Метод") | Ваш код выполняется до типового | Проверки, подготовка данных |
&После("Метод") | Ваш код выполняется после типового | Дозаполнение, доп. движения |
&Вместо("Метод") | Типовой код не выполняется, если не вызвать ПродолжитьВызов() | Полная замена логики |
&ИзменениеИКонтроль("Метод") | Копия типового метода с вставками #Вставка и удалениями #Удаление | Точечная правка в середине процедуры |
&ИзменениеИКонтроль удобнее остальных для правки «в середине», но и хрупче: если поставщик в новом релизе изменит текст исходного метода, расширение перестанет применяться, пока вы не обновите копию.
Назначение расширения
У каждого расширения есть свойство «Назначение» с тремя вариантами: Исправление, Адаптация, Дополнение. Оно задаёт порядок применения: сначала исправления, затем адаптации, затем дополнения. Для собственных доработок организации обычно выбирают «Адаптация» или «Дополнение».
Расширение, внешняя обработка или правка типовой
Дорабатывать 1С можно тремя способами. Они не взаимозаменяемы, и выбор определяет, сколько будет стоить каждое следующее обновление.
| Способ | Что умеет | Что не умеет | Цена обновлений |
|---|---|---|---|
Внешняя обработка или отчёт (.epf, .erf) | Печатные формы, отчёты, заполнение табличных частей, разовые обработки | Менять формы и модули типовых объектов, добавлять реквизиты | Почти нулевая |
Расширение (.cfe) | Новые реквизиты и объекты, правка форм, перехват обработчиков, свои роли и права | Удалять типовые объекты, менять типы их реквизитов | Низкая: проверить применимость |
| Правка конфигурации с включённой возможностью изменения | Всё | — | Высокая: сравнение и объединение на каждом релизе |
Внешние обработки подключаются через справочник дополнительных отчётов и обработок и живут как отдельные файлы. Их предел — то, что можно сделать «снаружи» объекта.
Прямая правка типовой снимает ограничения, но переводит конфигурацию в режим «на поддержке с возможностью изменения». После этого каждый релиз ставится через объединение, а программист вручную разбирает конфликты в изменённых модулях.
Что можно сделать расширением: типовые задачи
На практике расширения закрывают почти все запросы бухгалтерии и отдела продаж. Вот что делают чаще всего.
- 📄 Свой реквизит в документе или справочнике. Например, поле «Номер договора с заводом» в «Поступлении товаров» с выводом в список документов.
- 🖨️ Изменённый макет печатной формы. Заимствуется макет типовой формы, правится оформление — и типовая команда печати выводит уже вашу версию.
- ✅ Проверки при записи и проведении. Запрет провести реализацию без заполненного комментария, контроль суммы по договору.
- 📊 Новые отчёты и обработки внутри конфигурации, с включением в нужную подсистему и командный интерфейс раздела.
- 🔐 Свои роли. Расширение может добавлять роли и права на собственные и заимствованные объекты.
- 🔄 Интеграции. HTTP-сервисы, регламентные задания для обмена с сайтом или складской программой.
- 🩹 Исправление ошибки типовой до выхода релиза с исправлением. Для этого назначение ставят «Исправление».
Пример: проверка комментария перед записью
Документ «Реализация (акт, накладная, УПД)» добавлен в расширение, в модуле объекта расширения написана процедура:
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение
И Не ЗначениеЗаполнено(Комментарий) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Перед проведением заполните комментарий.",
ЭтотОбъект, "Комментарий", , Отказ);
КонецЕсли;
КонецПроцедуры
Аннотация &Перед перехватывает только тот обработчик, который уже есть в типовом модуле. Если его там нет, обработчик нужно назначить объекту в самом расширении, без аннотации.
Как создать расширение в конфигураторе: пошагово
Создание требует прав администратора и запуска базы в режиме Конфигуратор. Пользователей из базы для этого выгонять не нужно — монопольный доступ понадобится только в момент обновления структуры, если расширение добавляет реквизиты или собственные объекты с данными.
Перед первым экспериментом сделайте выгрузку базы в .dt (Администрирование → Выгрузить информационную базу) или проверьте, что есть свежая резервная копия. Отрабатывать расширение лучше на копии рабочей базы.
Шаг 1. Создайте пустое расширение
- Откройте
Конфигурация → Расширения конфигурации. - В окне списка нажмите
Добавить. - Задайте имя (латиницей или кириллицей без пробелов), синоним, префикс и назначение.
- Нажмите
ОК— откроется дерево расширения, пока пустое, только с корневым элементом.
Префикс лучше сделать коротким и уникальным: Расш1_, НашаФирма_. Он нужен, чтобы имена ваших объектов не совпали с объектами следующих релизов типовой.
Шаг 2. Заимствуйте нужные объекты
- В дереве основной конфигурации найдите объект, например документ или его форму.
- Щёлкните правой кнопкой и выберите
Добавить в расширение. - Объект появится в дереве расширения с пометкой заимствования.
Заимствовать нужно только то, что меняете. Лишние объекты увеличивают риск, что расширение перестанет применяться после очередного обновления.
Шаг 3. Внесите доработки
- Для нового реквизита — добавьте его в заимствованный объект, а затем выведите на заимствованную форму.
- Для перехвата кода — откройте модуль в расширении и напишите процедуру с аннотацией.
- Для обработчиков формы — в свойствах события формы задайте вызов «перед», «после» или «вместо» типового обработчика.
Шаг 4. Обновите конфигурацию базы данных
В окне дерева расширения нажмите F7 или используйте команду обновления конфигурации базы данных. Этот шаг отдельный от сохранения файла — без него пользователи изменений не увидят.
Шаг 5. Сохраните расширение в файл
В меню дерева расширения выберите сохранение в файл — получите .cfe. Храните его рядом с документацией по доработке: файл пригодится для переноса в рабочую базу и для восстановления.
Как подключить готовое расширение в пользовательском режиме
Расширение от программиста или партнёра можно установить без Конфигуратора. В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11, КА 2, ERP) для этого есть отдельный список.
| Конфигурация | Где список расширений |
|---|---|
| Бухгалтерия предприятия 3.0 | Администрирование → Печатные формы, отчеты и обработки → Расширения |
| ЗУП 3.1 | Администрирование → Печатные формы, отчеты и обработки → Расширения |
| УТ 11, КА 2, ERP | НСИ и администрирование → Печатные формы, отчеты и обработки → Расширения |
Порядок подключения:
- Откройте список расширений и нажмите
Добавить из файла. - Подтвердите предупреждение о безопасности и выберите файл
.cfe. - Проверьте флажки «Безопасный режим» и «Защита от опасных действий» — их смысл ниже.
- Перезапустите программу. Расширение применяется только при новом сеансе.
Безопасный режим запрещает расширению работать с файлами, внешними компонентами и другими «опасными» операциями. Если расширение пишет файлы на диск или обращается к веб-сервисам, его разрабатывают с расчётом на отключение безопасного режима. Снимайте флажок только для расширений из проверенного источника.
Расширение с собственными объектами, у которых есть данные, меняет структуру базы. Ставьте его, когда в базе мало пользователей: другие сеансы получат сообщение о необходимости перезапуска.
Обновление типовой конфигурации и сопровождение расширений
Главный плюс расширений проявляется в день выхода релиза. Типовая обновляется обычным способом, а расширение платформа пытается применить к новой версии автоматически.
Что проверяет платформа
- 🔍 Есть ли в новой версии все заимствованные объекты.
- 🔍 Совпадают ли контролируемые свойства заимствованных объектов с тем, что было при создании расширения.
- 🔍 Не изменился ли текст методов, перехваченных через
&ИзменениеИКонтроль.
Если проверка не прошла, расширение не применяется, а при запуске появляется сообщение с перечнем расхождений. Работа базы при этом не останавливается — просто доработка временно не действует.
Порядок действий при обновлении
- Обновите тестовую копию базы на новый релиз.
- Запустите её и убедитесь, что расширения применились без ошибок.
- Если есть ошибки — откройте расширение в Конфигураторе, исправьте заимствования или копии методов и сохраните новый
.cfe. - Обновите рабочую базу и при необходимости замените файл расширения.
💡 Чем меньше вы заимствуете и чем реже используете &ИзменениеИКонтроль, тем чаще расширение переживает обновление без единой правки.
Версии и несколько расширений
В базе может быть несколько расширений одновременно. Держите в синониме или комментарии версию и дату — например, «Доработки продаж, v1.4». Когда одно и то же событие перехватывают два расширения, разберитесь с порядком их применения, иначе результат будет зависеть от назначения и последовательности.
Ограничения и частые ошибки при работе с расширениями
Механизм мощный, но не безграничный. Вот с чем сталкиваются на практике.
- ❌ Нельзя удалить или переименовать типовой объект, нельзя изменить тип существующего типового реквизита.
- ❌ Удаление расширения стирает данные его собственных объектов. Справочник, созданный расширением, исчезнет вместе с записями. Для временного отключения есть флажок активности.
- ❌ Пересоздание вместо обновления. Если удалить расширение и загрузить «свежее» под тем же именем, платформа воспримет его как новое, и данные собственных объектов потеряются. Новую версию загружают поверх существующего расширения.
- ❌ Перехват метода, которого нет. Аннотация с именем процедуры, отсутствующей в типовом модуле, даёт ошибку применения расширения.
- ❌ Конфликт имён. Объект без префикса может совпасть с объектом, который поставщик добавит в следующем релизе.
- ❌ Старые сеансы у пользователей. Изменения видны только после перезапуска сеанса; в клиент-серверной базе уже открытые сеансы продолжают работать со старой версией.
Частые вопросы
Нужна ли отдельная лицензия для работы с расширениями?
Кто может устанавливать расширения?
Работают ли расширения в 1С:Фреш и других облаках?
Что будет с расширением при переносе базы через .dt?
.dt вместе с базой и загружаются вместе с ней. Отдельно переносить .cfe не нужно.