Расширения конфигурации 1С 8.3: как устроены, где подключать и что можно менять
Содержание
Расширение конфигурации 1С — это отдельный набор доработок, который лежит в базе рядом с типовой конфигурацией и изменяет её поведение, не трогая её код. Типовую конфигурацию можно обновлять с сайта поставщика как обычно, а ваши доработки остаются на месте.
Расширения появились в платформе 8.3.6. До этого любая правка в типовой конфигурации означала снятие с поддержки и мучительное объединение при каждом обновлении. Сейчас это основной способ доработки типовых решений: БП, ЗУП, УТ, Розницы.
Зачем нужны расширения и чем они лучше правки типовой
Главная причина одна: обновление не ломает доработки. Типовая конфигурация остаётся «чистой» и на поддержке, а всё своё живёт в расширении.
Что это даёт на практике:
- 🔄 обновление релиза проходит как у обычной типовой базы, без ручного сравнения и объединения;
- 🧩 доработки можно включать и выключать, не трогая основную конфигурацию;
- 🧪 можно проверить гипотезу: отключил расширение — база ведёт себя как типовая;
- 📦 одно расширение подключается к нескольким базам — например, к рабочей и тестовой;
- 👥 разные подрядчики пишут независимые расширения для одной базы.
Сравнение с классической доработкой:
| Правка типовой конфигурации | Расширение | |
|---|---|---|
| Поддержка поставщика | Снимается с изменённых объектов | Сохраняется полностью |
| Обновление релиза | Сравнение и объединение вручную | Обычное обновление |
| Откат доработки | Сложно, нужна копия конфигурации | Отключить или удалить расширение |
| Что можно менять | Всё | Большую часть, но не всё |
| Скорость работы | Без накладных расходов | Небольшие накладные расходы на подмену |
Если доработка делается через расширение, в базе остаётся одна «чистая» типовая конфигурация и один файл с вашими изменениями. Передать его другому разработчику или перенести в другую базу — вопрос нескольких минут.
Как расширение «вклинивается» в типовой код
Расширение не копирует конфигурацию целиком. Оно хранит только то, что вы изменили, и ссылается на объекты основной конфигурации.
Заимствованные и собственные объекты
В расширении бывают два вида объектов:
- Заимствованные — «тени» объектов основной конфигурации. Вы заимствуете справочник, чтобы добавить в него реквизит или изменить форму. Всё остальное по-прежнему берётся из основной конфигурации.
- Собственные — новые объекты, которых в типовой нет: новый справочник, отчёт, обработка, регистр, общий модуль.
Собственные объекты полностью принадлежат расширению. Заимствованные подчиняются правилам: часть свойств доступна для изменения, часть закрыта.
Перехват методов
Самый востребованный приём — перехват процедур и функций типовых модулей. В заимствованный модуль объекта добавляется своя процедура с директивой, которая задаёт момент вызова:
&Перед— ваш код выполняется до типовой процедуры;&После— после неё;&Вместо— вместо типовой; внутри можно вызвать оригинал черезПродолжитьВызов();&ИзменениеИКонтроль— копия типового тела, в которой помечаются вставки и удаления. Платформа следит, чтобы после обновления типовая процедура не поменялась незаметно для вас.
Пример: перед записью документа нужно проверить, что заполнен договор.
&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Не ЗначениеЗаполнено(Договор) Тогда
Сообщить("Заполните договор");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Имя процедуры в расширении обязательно получает префикс, который вы задаёте в свойствах расширения (в примере Расш1_). Он защищает от конфликта имён с типовым кодом и с другими расширениями.
&Вместо без вызова ПродолжитьВызов() полностью отключает типовое поведение. Если в следующем релизе в типовой процедуре появится новая логика, она тоже не сработает. Используйте &Вместо только когда другого пути нет.
Что именно можно сделать в расширении
Список возможностей большой. Самые частые задачи:
- Добавить реквизит или табличную часть в справочник или документ.
- Вынести новый реквизит на форму, изменить расположение и видимость полей.
- Добавить команду на форму или в раздел интерфейса.
- Создать новый отчёт, обработку, справочник, регистр.
- Изменить поведение при записи, проведении, заполнении.
- Подключить собственные подписки на события.
- Добавить свои роли и права доступа .
- Доработать печатную форму или добавить новую.
Чего не получится: подменить сам механизм платформы, изменить состав стандартных реквизитов объекта, удалить заимствованный объект, добавить объект, зависящий от пока не заимствованного. Подробнее — в разделе про ограничения.
Создание и подключение расширения: пошагово
Создаётся расширение в конфигураторе, а подключается и в нём, и из обычного режима. Платформа должна быть 8.3.6 или выше, а в реальной работе — актуальной ветки 8.3.2x.
Создание в конфигураторе
- Откройте базу в конфигураторе. Если база на поддержке и не защищена от изменений, создавать расширение это не мешает.
- Выберите
Конфигурация → Расширения конфигурации. - В открывшемся списке нажмите кнопку добавления нового расширения.
- Задайте имя, синоним и префикс для новых процедур и объектов. Префикс короткий и уникальный: например, по названию вашей организации.
- В свойствах задайте режим совместимости (по умолчанию он совпадает с основной конфигурацией) и признаки безопасности.
- Откройте дерево расширения. Чтобы изменить типовой объект, добавьте его заимствованием: правая кнопка на объекте в основной конфигурации, пункт про заимствование в расширение.
- Добавьте реквизиты, формы, модули — уже внутри заимствованного объекта.
- Обновите конфигурацию базы данных клавишей
F7. Без этого изменения в работающей базе не появятся.
Три флага безопасности
Каждое расширение имеет настройки, которые защищают базу от чужого кода:
| Флаг | Что делает |
|---|---|
| Безопасный режим | Код расширения выполняется с ограничениями: нельзя работать с внешними программами и файлами, пока вызов не разрешён |
| Защита от опасных действий | При старте пользователь получает предупреждение о потенциально опасных операциях в расширении |
| Использовать основные роли для всех пользователей | Расширению не нужно отдельно настраивать права: действуют роли основной конфигурации |
Для расширений, полученных от стороннего поставщика, оставляйте безопасный режим включённым. Отключайте только если расширение действительно обращается к файловой системе или внешним службам, и вы доверяете автору.
Сохранение в файл и подключение к другой базе
Готовое расширение выгружается в файл .cfe. В списке расширений конфигуратора есть команды сохранения в файл и загрузки из файла.
Для пользователей без конфигуратора в типовых решениях на БСП есть раздел Администрирование → Печатные формы, отчёты и обработки → Расширения. Там можно подключить файл расширения и посмотреть список установленных.
После подключения расширения сеансы нужно перезапустить: расширение вступает в силу при следующем входе. Подключайте в нерабочее время, чтобы не обрывать сеансы пользователей.
Примеры из практики
Дополнительный реквизит и его вывод в печатной форме
Задача: в счёте покупателю нужен реквизит «Номер заказа клиента». Что делаем в расширении:
- Заимствуем документ «Счёт на оплату» и добавляем реквизит строкой.
- Заимствуем форму документа, выносим новое поле рядом с договором.
- Заимствуем макет печатной формы, добавляем область и параметр.
- Перехватываем процедуру формирования печатной формы через
&Послеи заполняем параметр.
Типовой код печатной формы остаётся нетронутым. После обновления релиза доработка продолжает работать.
Запрет проведения при условии
Задача: не давать проводить реализацию без контрагента в определённом статусе. Решение: &Перед("ПередЗаписью") с проверкой и установкой Отказ. Это одна процедура на 5–10 строк.
Новый отчёт для руководителя
Собственный объект расширения — отчёт на СКД. Он не имеет отношения к типовому коду, поэтому не ломается при обновлении. В расширение его можно добавить и вывести командой в нужный раздел.
Выгрузка в нестандартный формат
Если контрагент требует выгрузки в формат, которого нет в типовой, создайте обработку в расширении, а запуск привяжите к команде в журнале документов.
Отладка расширений
Отлаживать расширения можно тем же отладчиком, что и основную конфигурацию, но с несколькими нюансами.
- Запускайте отладку из конфигуратора (меню
Отладка → Начать отладку) в той же базе, где подключено расширение. Остановки в модулях расширения работают как в обычных. - Точки останова ставьте в модуле расширения. Если процедура перехватывает типовую, отладчик остановится и в вашей, и в оригинальной.
- Вызов оригинала (
ПродолжитьВызов()) в отладчике виден как переход в типовой код. Если типовой модуль закрыт паролем, он недоступен, а в остальных случаях можно ходить по стеку. - Журнал регистрации показывает ошибки загрузки расширения и исполнения: ищите события с пометкой ошибки и именем расширения.
Если расширение не применяется
Симптом: доработка в базе не появилась. Проверьте по порядку.
Ограничения и подводные камни
Расширения не всемогущи. Вот места, где разработчики чаще всего ошибаются.
Технические ограничения
- ❌ Нельзя удалить объект основной конфигурации или изменить его тип.
- ❌ Нельзя менять стандартные реквизиты (код, наименование и подобные) на уровне структуры.
- ❌ Нельзя переопределить поведение самой платформы.
- ❌ Некоторые свойства заимствованных объектов доступны только для чтения.
- ⚠️ Несколько расширений, перехватывающих одну процедуру, выполняются по очереди. Порядок зависит от порядка расширений в списке.
Подводные камни
- Расхождение после обновления. Если вы заимствовали форму и поменяли её, а в новом релизе поставщик переработал форму, платформа сообщит о расхождении. Нужно вручную привести форму расширения к новой.
- Скорость. Перехваты добавляют небольшую нагрузку. Один-два перехвата незаметны, но десятки на горячем пути, например в цикле проведения, ощутимы.
- Конфликт расширений. Два расширения, добавляющие одноимённый реквизит или перехватывающие одну процедуру с
&Вместо, будут конфликтовать. Для таких случаев нужен общий префикс и согласованный список изменений. - Хранение в базе. Расширение хранится в информационной базе, поэтому оказывается в выгрузке
.dtвместе со всем остальным. Для переноса расширения без данных используйте файл.cfe. - Совместимость. Расширение, созданное на новой платформе, может не загрузиться на старой. Версию платформы указывайте в описании расширения.
Расширение подключено ко всей базе сразу, и все пользователи начинают работать с его кодом. Перед включением нового расширения проверьте его на тестовой копии.
Правила работы с расширениями
Несколько приёмов, которые облегчают жизнь тем, кто поддерживает расширения годами.
- Один префикс — один автор. Если базу дорабатывают несколько команд, у каждой свой префикс.
- Минимум
&Вместо. Сначала пробуйте&Переди&После. Они переживают обновления с меньшими потерями. - Не копируйте типовые процедуры целиком. Чем больше вашего кода рядом с типовым, тем больше расхождений после релиза. Пользуйтесь
&ИзменениеИКонтроль: платформа покажет, что в оригинале изменилось. - Описывайте расширение. В свойствах пишите, что оно делает, кто автор и для какого релиза.
- Храните расширение в системе контроля версий. Файл
.cfe— бинарный. Для истории изменений выгружайте расширение в файлы через конфигуратор и храните их в репозитории. - После каждого обновления типовой проверяйте список расширений на предмет расхождений и пересобирайте тестовую копию.
- Отключайте ненужное. Старые расширения, которыми никто не пользуется, замедляют запуск и усложняют диагностику.
Частые вопросы
Чем расширение отличается от внешней обработки?
Нужно ли снимать конфигурацию с поддержки для расширений?
Можно ли одно расширение подключить в несколько баз?
.cfe и загрузите в другую базу той же конфигурации. Версии конфигурации лучше сохранять одинаковыми или близкими.