Расширения конфигурации 1С 8.3: как устроены, где подключать и что можно менять

· 9 мин

Содержание

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

Расширения появились в платформе 8.3.6. До этого любая правка в типовой конфигурации означала снятие с поддержки и мучительное объединение при каждом обновлении. Сейчас это основной способ доработки типовых решений: БП, ЗУП, УТ, Розницы.

Зачем нужны расширения и чем они лучше правки типовой

Главная причина одна: обновление не ломает доработки. Типовая конфигурация остаётся «чистой» и на поддержке, а всё своё живёт в расширении.

Что это даёт на практике:

  • 🔄 обновление релиза проходит как у обычной типовой базы, без ручного сравнения и объединения;
  • 🧩 доработки можно включать и выключать, не трогая основную конфигурацию;
  • 🧪 можно проверить гипотезу: отключил расширение — база ведёт себя как типовая;
  • 📦 одно расширение подключается к нескольким базам — например, к рабочей и тестовой;
  • 👥 разные подрядчики пишут независимые расширения для одной базы.

Сравнение с классической доработкой:

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

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

Как расширение «вклинивается» в типовой код

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

Заимствованные и собственные объекты

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

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

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

Перехват методов

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

  • &Перед — ваш код выполняется до типовой процедуры;
  • &После — после неё;
  • &Вместо — вместо типовой; внутри можно вызвать оригинал через ПродолжитьВызов();
  • &ИзменениеИКонтроль — копия типового тела, в которой помечаются вставки и удаления. Платформа следит, чтобы после обновления типовая процедура не поменялась незаметно для вас.

Пример: перед записью документа нужно проверить, что заполнен договор.

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

Имя процедуры в расширении обязательно получает префикс, который вы задаёте в свойствах расширения (в примере Расш1_). Он защищает от конфликта имён с типовым кодом и с другими расширениями.

&Вместо без вызова ПродолжитьВызов() полностью отключает типовое поведение. Если в следующем релизе в типовой процедуре появится новая логика, она тоже не сработает. Используйте &Вместо только когда другого пути нет.

Что именно можно сделать в расширении

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

  1. Добавить реквизит или табличную часть в справочник или документ.
  2. Вынести новый реквизит на форму, изменить расположение и видимость полей.
  3. Добавить команду на форму или в раздел интерфейса.
  4. Создать новый отчёт, обработку, справочник, регистр.
  5. Изменить поведение при записи, проведении, заполнении.
  6. Подключить собственные подписки на события.
  7. Добавить свои роли и права доступа .
  8. Доработать печатную форму или добавить новую.

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

Создание и подключение расширения: пошагово

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

Создание в конфигураторе

  1. Откройте базу в конфигураторе. Если база на поддержке и не защищена от изменений, создавать расширение это не мешает.
  2. Выберите Конфигурация → Расширения конфигурации.
  3. В открывшемся списке нажмите кнопку добавления нового расширения.
  4. Задайте имя, синоним и префикс для новых процедур и объектов. Префикс короткий и уникальный: например, по названию вашей организации.
  5. В свойствах задайте режим совместимости (по умолчанию он совпадает с основной конфигурацией) и признаки безопасности.
  6. Откройте дерево расширения. Чтобы изменить типовой объект, добавьте его заимствованием: правая кнопка на объекте в основной конфигурации, пункт про заимствование в расширение.
  7. Добавьте реквизиты, формы, модули — уже внутри заимствованного объекта.
  8. Обновите конфигурацию базы данных клавишей F7. Без этого изменения в работающей базе не появятся.

Три флага безопасности

Каждое расширение имеет настройки, которые защищают базу от чужого кода:

ФлагЧто делает
Безопасный режимКод расширения выполняется с ограничениями: нельзя работать с внешними программами и файлами, пока вызов не разрешён
Защита от опасных действийПри старте пользователь получает предупреждение о потенциально опасных операциях в расширении
Использовать основные роли для всех пользователейРасширению не нужно отдельно настраивать права: действуют роли основной конфигурации

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

Сохранение в файл и подключение к другой базе

Готовое расширение выгружается в файл .cfe. В списке расширений конфигуратора есть команды сохранения в файл и загрузки из файла.

Для пользователей без конфигуратора в типовых решениях на БСП есть раздел Администрирование → Печатные формы, отчёты и обработки → Расширения. Там можно подключить файл расширения и посмотреть список установленных.

После подключения расширения сеансы нужно перезапустить: расширение вступает в силу при следующем входе. Подключайте в нерабочее время, чтобы не обрывать сеансы пользователей.

Примеры из практики

Дополнительный реквизит и его вывод в печатной форме

Задача: в счёте покупателю нужен реквизит «Номер заказа клиента». Что делаем в расширении:

  1. Заимствуем документ «Счёт на оплату» и добавляем реквизит строкой.
  2. Заимствуем форму документа, выносим новое поле рядом с договором.
  3. Заимствуем макет печатной формы, добавляем область и параметр.
  4. Перехватываем процедуру формирования печатной формы через &После и заполняем параметр.

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

Запрет проведения при условии

Задача: не давать проводить реализацию без контрагента в определённом статусе. Решение: &Перед("ПередЗаписью") с проверкой и установкой Отказ. Это одна процедура на 5–10 строк.

Новый отчёт для руководителя

Собственный объект расширения — отчёт на СКД. Он не имеет отношения к типовому коду, поэтому не ломается при обновлении. В расширение его можно добавить и вывести командой в нужный раздел.

Выгрузка в нестандартный формат

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

Отладка расширений

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

  1. Запускайте отладку из конфигуратора (меню Отладка → Начать отладку) в той же базе, где подключено расширение. Остановки в модулях расширения работают как в обычных.
  2. Точки останова ставьте в модуле расширения. Если процедура перехватывает типовую, отладчик остановится и в вашей, и в оригинальной.
  3. Вызов оригинала (ПродолжитьВызов()) в отладчике виден как переход в типовой код. Если типовой модуль закрыт паролем, он недоступен, а в остальных случаях можно ходить по стеку.
  4. Журнал регистрации показывает ошибки загрузки расширения и исполнения: ищите события с пометкой ошибки и именем расширения.

Если расширение не применяется

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

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

Ограничения и подводные камни

Расширения не всемогущи. Вот места, где разработчики чаще всего ошибаются.

Технические ограничения

  • ❌ Нельзя удалить объект основной конфигурации или изменить его тип.
  • ❌ Нельзя менять стандартные реквизиты (код, наименование и подобные) на уровне структуры.
  • ❌ Нельзя переопределить поведение самой платформы.
  • ❌ Некоторые свойства заимствованных объектов доступны только для чтения.
  • ⚠️ Несколько расширений, перехватывающих одну процедуру, выполняются по очереди. Порядок зависит от порядка расширений в списке.

Подводные камни

  • Расхождение после обновления. Если вы заимствовали форму и поменяли её, а в новом релизе поставщик переработал форму, платформа сообщит о расхождении. Нужно вручную привести форму расширения к новой.
  • Скорость. Перехваты добавляют небольшую нагрузку. Один-два перехвата незаметны, но десятки на горячем пути, например в цикле проведения, ощутимы.
  • Конфликт расширений. Два расширения, добавляющие одноимённый реквизит или перехватывающие одну процедуру с &Вместо, будут конфликтовать. Для таких случаев нужен общий префикс и согласованный список изменений.
  • Хранение в базе. Расширение хранится в информационной базе, поэтому оказывается в выгрузке .dt вместе со всем остальным. Для переноса расширения без данных используйте файл .cfe.
  • Совместимость. Расширение, созданное на новой платформе, может не загрузиться на старой. Версию платформы указывайте в описании расширения.

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

Правила работы с расширениями

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

  1. Один префикс — один автор. Если базу дорабатывают несколько команд, у каждой свой префикс.
  2. Минимум &Вместо. Сначала пробуйте &Перед и &После. Они переживают обновления с меньшими потерями.
  3. Не копируйте типовые процедуры целиком. Чем больше вашего кода рядом с типовым, тем больше расхождений после релиза. Пользуйтесь &ИзменениеИКонтроль: платформа покажет, что в оригинале изменилось.
  4. Описывайте расширение. В свойствах пишите, что оно делает, кто автор и для какого релиза.
  5. Храните расширение в системе контроля версий. Файл .cfe — бинарный. Для истории изменений выгружайте расширение в файлы через конфигуратор и храните их в репозитории.
  6. После каждого обновления типовой проверяйте список расширений на предмет расхождений и пересобирайте тестовую копию.
  7. Отключайте ненужное. Старые расширения, которыми никто не пользуется, замедляют запуск и усложняют диагностику.
После обновления релиза с расширениями
Выполнено: 0 / 5

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

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