Как дорабатывать типовую 1С без снятия с поддержки: всё о расширениях конфигурации

· 9 мин

Содержание

Расширение 1С — это отдельная маленькая конфигурация (файл .cfe), которая подключается к основной и меняет её поведение, не трогая исходный код. Типовая конфигурация остаётся на поддержке, обновляется штатно, а доработки живут рядом. Расширения появились в платформе 8.3.6 и с тех пор стали основным способом настройки типовых БП 3.0, ЗУП 3.1, УТ 11 и ERP.

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

Как устроено расширение и чем оно отличается от доработки «в лоб»

Платформа при запуске сеанса собирает итоговую конфигурацию: основная + все активные расширения. Если расширение не применилось, база работает как типовая, а пользователь видит сообщение о проблеме.

Что умеет расширение:

  • 🧩 Заимствовать объекты основной конфигурации (справочники, документы, формы, общие модули, роли) и менять их.
  • ➕ Добавлять собственные объекты: справочники, документы, регистры, отчёты, обработки, общие модули, роли.
  • 📝 Добавлять реквизиты и табличные части к заимствованным объектам.
  • 🔁 Перехватывать процедуры и функции модулей через аннотации.
  • 🖨️ Подменять макеты печатных форм.

Назначение расширения

У каждого расширения есть свойство «Назначение». Оно задаёт порядок применения, если расширений несколько:

НазначениеДля чегоПрименяется
ИсправлениеТочечные исправления ошибок типового кодаПервым
АдаптацияПодгонка типовой под процессы компанииВторым
ДополнениеНовый функционал поверх типовойПоследним

Префикс имён

При создании задаётся префикс, например Расш1_ или ТД_. Все новые объекты, реквизиты и процедуры расширения называйте с ним. Так в следующем релизе типовой не возникнет конфликта, если фирма-разработчик добавит реквизит с тем же именем.

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

В Конфигураторе

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

Сохранить расширение и обновить его в базе — два разных действия. Пока не выполнено обновление конфигурации БД для расширения, пользователи работают со старой версией.

Загрузка готового файла .cfe

Если расширение прислал разработчик:

  1. В списке Конфигурация → Расширения конфигурации добавьте пустое расширение или выберите существующее.
  2. Откройте его и загрузите файл через меню «Конфигурация» окна расширения — команда загрузки из файла.
  3. Отдельным шагом выполните обновление конфигурации БД.

Выгрузка в .cfe делается там же, командой сохранения в файл. Именно этот файл передают между базами.

Из пользовательского режима

В типовых конфигурациях на БСП есть форма управления расширениями: Администрирование → Печатные формы, отчеты и обработки → Расширения. Там можно добавить .cfe из файла, отключить, удалить и обновить расширение без Конфигуратора. Пользователю нужны административные права, в типовых — роль «Полные права».

Расширения, загруженные через пользовательский режим, по умолчанию работают в безопасном режиме. Если расширению нужен доступ к файлам или внешним компонентам, это придётся разрешить явно (см. раздел про безопасность).

Доработка форм, объектов и кода через расширение

Любая доработка начинается с заимствования. В дереве основной конфигурации нажмите правой кнопкой на объект или форму и выберите «Добавить в расширение». Объект появится в дереве расширения со значком заимствования.

Новый реквизит в типовом документе

  1. Заимствуйте документ, например «Реализация (акт, накладная)».
  2. В расширении у заимствованного документа добавьте реквизит Расш1_НомерДоговораПокупателя с типом «Строка».
  3. Заимствуйте форму документа и вытащите новый реквизит на форму.
  4. Обновите конфигурацию БД.

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

Изменение формы

В заимствованной форме можно:

  • добавлять свои элементы, группы, команды и реквизиты формы;
  • менять видимость, заголовок и порядок типовых элементов;
  • добавлять обработчики событий своих и типовых элементов.

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

Перехват процедур: аннотации

Чтобы вмешаться в типовую процедуру, её не копируют, а «перехватывают». В модуле заимствованного объекта создаётся процедура с аннотацией:

АннотацияЧто делаетКогда выбирать
&ПередВыполняет ваш код до типовогоПроверки, подготовка данных
&ПослеВыполняет ваш код после типовогоДозаполнение, доп. движения
&ВместоЗаменяет типовой код; вызвать его можно через ПродолжитьВызов()Условная подмена логики
&ИзменениеИКонтрольКопирует текст метода и даёт вставлять и удалять строкиПравка в середине типового алгоритма

Пример: при открытии формы документа показываем подсказку.

&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

    Если Не ЗначениеЗаполнено(Объект.Расш1_НомерДоговораПокупателя) Тогда
        Элементы.Расш1_НомерДоговораПокупателя.ПодсказкаВвода = "Укажите номер из договора";
    КонецЕсли;

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

Пример с &ИзменениеИКонтроль: внутри скопированного метода новые строки оборачивают в #Вставка … #КонецВставки, удаляемые — в #Удаление … #КонецУдаления.

&ИзменениеИКонтроль("ЗаполнитьПоОснованию")
Процедура Расш1_ЗаполнитьПоОснованию(Основание)
    // ... типовой текст метода без изменений ...
    #Вставка
    Комментарий = "Создан на основании " + Строка(Основание);
    #КонецВставки
    // ... продолжение типового текста ...
КонецПроцедуры

&ИзменениеИКонтроль недоступна в старых версиях платформы и в режиме совместимости ниже 8.3.11. Аннотация контролирует исходный текст метода: если в новом релизе типовой метод изменится, расширение перестанет применяться, пока вы не сверите код.

Свои объекты

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

Отладка и тестирование

Расширение удобно проверять на копии рабочей базы. Порядок простой:

  1. Выгрузите рабочую базу в .dt и загрузите в тестовую.
  2. Подключите расширение к тестовой базе и обновите конфигурацию БД.
  3. Поставьте точки останова в модулях расширения и запустите отладку из Конфигуратора.
  4. Пройдите сценарий пользователя целиком: создайте документ, проведите, распечатайте.

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

Права доступа и безопасный режим расширений

Права на объекты расширения

Права на новые объекты расширения нужно выдать явно. Иначе рядовой пользователь при открытии нового справочника или документа получит ошибку нарушения прав доступа. Есть два пути:

  • 🔐 Своя роль в расширении — создайте роль, отметьте права на новые объекты и назначьте её пользователям или включите в профиль групп доступа.
  • 🔐 Заимствованная роль — заимствуйте типовую роль (например, роль для бухгалтера) и добавьте в неё права на объекты расширения. Тогда всем, у кого эта роль, права достанутся автоматически.

В типовых на БСП после добавления роли расширения проверьте профили групп доступа: Администрирование → Настройки пользователей и прав → Профили групп доступа.

Безопасный режим и защита от опасных действий

В списке расширений у каждого есть флаги:

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

Снимайте безопасный режим только для расширений из проверенного источника. Код расширения выполняется с правами сеанса, а в серверных процедурах — с полными правами на данные.

Расширения и распределённые базы

Для обменов РИБ у расширения есть флаг «Используется в распределённой информационной базе». Если он установлен, расширение передаётся в подчинённые узлы вместе с изменениями конфигурации. Без флага его нужно ставить в каждом узле вручную.

Обновление типовой конфигурации, когда есть расширения

Главный плюс расширений — типовая обновляется как обычно, через Конфигурация → Поддержка → Обновить конфигурацию или через интернет -поддержку. Расширения при этом не трогаются. Но после обновления платформа заново проверяет, применимы ли они.

Порядок, который снижает риск:

  1. Сделайте резервную копию базы . Обновление идёт с монопольным доступом к базе, поэтому пользователей нужно отключить.
  2. Перед установкой нового релиза разверните копию базы и обновите сначала её.
  3. В копии откройте расширения и запустите проверку возможности применения — команда есть в меню «Конфигурация» окна расширения.
  4. Исправьте замечания: заимствованный объект переименован, реквизит удалён, изменился текст метода под &ИзменениеИКонтроль.
  5. Выгрузите исправленное расширение в .cfe и только потом обновляйте рабочую базу.

Что ломается чаще всего

  • 🔸 В новом релизе удалили или переименовали заимствованный объект или реквизит.
  • 🔸 Изменился текст метода, который контролирует &ИзменениеИКонтроль.
  • 🔸 Типовая форма перестроена, а ваш элемент привязан к исчезнувшей группе.
  • 🔸 В типовой появился объект с тем же именем, что у объекта расширения без префикса.
  • 🔸 Режим совместимости расширения выше, чем у основной конфигурации.

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

После каждого обновления типовой
Выполнено: 0 / 5

Ошибки при работе с расширениями и как их устранить

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

Если база перестала открываться после подключения расширения, запустите Конфигуратор и снимите флаг «Активно» у последнего добавленного расширения. Типовая заработает, а в расширении можно спокойно искать ошибку.

Частые вопросы о расширениях 1С

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