Расширение конфигурации 1С 8.3: доработки без снятия типовой с поддержки

· 9 мин

Содержание

Расширение конфигурации — это отдельный модуль доработок, который «накладывается» поверх типовой конфигурации и меняет её поведение, не трогая сам код поставщика. Типовая остаётся на полной поддержке, поэтому обновляется штатно, без сравнения и объединения. Механизм появился в платформе 8.3.6 и сегодня работает во всех актуальных конфигурациях: БП 3.0, ЗУП 3.1, УТ 11, КА 2, ERP.

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

Как устроено расширение конфигурации

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

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

  • 🔗 Заимствованные — копии-ссылки на объекты типовой (документ, справочник, форма, общий модуль). Их добавляют в расширение, чтобы что-то в них поменять: дописать обработчик, добавить реквизит , поставить кнопку на форму.
  • 🆕 Собственные — новые объекты, которых нет в типовой: справочник, регистр сведений , отчёт, обработка, общий модуль. Их имена начинаются с префикса расширения, например Расш1_.

Код типовой при этом не переписывается. Вместо правки процедуры разработчик пишет в расширении свою и помечает её аннотацией: выполнить до типовой, после неё или вместо неё.

Аннотации перехвата методов

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

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

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

У каждого расширения есть свойство «Назначение» с тремя вариантами: Исправление, Адаптация, Дополнение. Оно задаёт порядок применения: сначала исправления, затем адаптации, затем дополнения. Для собственных доработок организации обычно выбирают «Адаптация» или «Дополнение».

Расширение, внешняя обработка или правка типовой

Дорабатывать 1С можно тремя способами. Они не взаимозаменяемы, и выбор определяет, сколько будет стоить каждое следующее обновление.

СпособЧто умеетЧто не умеетЦена обновлений
Внешняя обработка или отчёт (.epf, .erf)Печатные формы, отчёты, заполнение табличных частей, разовые обработкиМенять формы и модули типовых объектов, добавлять реквизитыПочти нулевая
Расширение (.cfe)Новые реквизиты и объекты, правка форм, перехват обработчиков, свои роли и праваУдалять типовые объекты, менять типы их реквизитовНизкая: проверить применимость
Правка конфигурации с включённой возможностью измененияВсё—Высокая: сравнение и объединение на каждом релизе

Внешние обработки подключаются через справочник дополнительных отчётов и обработок и живут как отдельные файлы. Их предел — то, что можно сделать «снаружи» объекта.

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

Какой способ доработки выбрать?

Что можно сделать расширением: типовые задачи

На практике расширения закрывают почти все запросы бухгалтерии и отдела продаж. Вот что делают чаще всего.

  • 📄 Свой реквизит в документе или справочнике. Например, поле «Номер договора с заводом» в «Поступлении товаров» с выводом в список документов.
  • 🖨️ Изменённый макет печатной формы. Заимствуется макет типовой формы, правится оформление — и типовая команда печати выводит уже вашу версию.
  • ✅ Проверки при записи и проведении. Запрет провести реализацию без заполненного комментария, контроль суммы по договору.
  • 📊 Новые отчёты и обработки внутри конфигурации, с включением в нужную подсистему и командный интерфейс раздела.
  • 🔐 Свои роли. Расширение может добавлять роли и права на собственные и заимствованные объекты.
  • 🔄 Интеграции. HTTP-сервисы, регламентные задания для обмена с сайтом или складской программой.
  • 🩹 Исправление ошибки типовой до выхода релиза с исправлением. Для этого назначение ставят «Исправление».

Пример: проверка комментария перед записью

Документ «Реализация (акт, накладная, УПД)» добавлен в расширение, в модуле объекта расширения написана процедура:

&Перед("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

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

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

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

Как создать расширение в конфигураторе: пошагово

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

Перед первым экспериментом сделайте выгрузку базы в .dt (Администрирование → Выгрузить информационную базу) или проверьте, что есть свежая резервная копия. Отрабатывать расширение лучше на копии рабочей базы.

Шаг 1. Создайте пустое расширение

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

Префикс лучше сделать коротким и уникальным: Расш1_, НашаФирма_. Он нужен, чтобы имена ваших объектов не совпали с объектами следующих релизов типовой.

Шаг 2. Заимствуйте нужные объекты

  1. В дереве основной конфигурации найдите объект, например документ или его форму.
  2. Щёлкните правой кнопкой и выберите Добавить в расширение.
  3. Объект появится в дереве расширения с пометкой заимствования.

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

Шаг 3. Внесите доработки

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

Шаг 4. Обновите конфигурацию базы данных

В окне дерева расширения нажмите F7 или используйте команду обновления конфигурации базы данных. Этот шаг отдельный от сохранения файла — без него пользователи изменений не увидят.

Шаг 5. Сохраните расширение в файл

В меню дерева расширения выберите сохранение в файл — получите .cfe. Храните его рядом с документацией по доработке: файл пригодится для переноса в рабочую базу и для восстановления.

Как подключить готовое расширение в пользовательском режиме

Расширение от программиста или партнёра можно установить без Конфигуратора. В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11, КА 2, ERP) для этого есть отдельный список.

КонфигурацияГде список расширений
Бухгалтерия предприятия 3.0Администрирование → Печатные формы, отчеты и обработки → Расширения
ЗУП 3.1Администрирование → Печатные формы, отчеты и обработки → Расширения
УТ 11, КА 2, ERPНСИ и администрирование → Печатные формы, отчеты и обработки → Расширения

Порядок подключения:

  1. Откройте список расширений и нажмите Добавить из файла.
  2. Подтвердите предупреждение о безопасности и выберите файл .cfe.
  3. Проверьте флажки «Безопасный режим» и «Защита от опасных действий» — их смысл ниже.
  4. Перезапустите программу. Расширение применяется только при новом сеансе.

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

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

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

Главный плюс расширений проявляется в день выхода релиза. Типовая обновляется обычным способом, а расширение платформа пытается применить к новой версии автоматически.

Что проверяет платформа

  • 🔍 Есть ли в новой версии все заимствованные объекты.
  • 🔍 Совпадают ли контролируемые свойства заимствованных объектов с тем, что было при создании расширения.
  • 🔍 Не изменился ли текст методов, перехваченных через &ИзменениеИКонтроль.

Если проверка не прошла, расширение не применяется, а при запуске появляется сообщение с перечнем расхождений. Работа базы при этом не останавливается — просто доработка временно не действует.

Порядок действий при обновлении

  1. Обновите тестовую копию базы на новый релиз.
  2. Запустите её и убедитесь, что расширения применились без ошибок.
  3. Если есть ошибки — откройте расширение в Конфигураторе, исправьте заимствования или копии методов и сохраните новый .cfe.
  4. Обновите рабочую базу и при необходимости замените файл расширения.

💡 Чем меньше вы заимствуете и чем реже используете &ИзменениеИКонтроль, тем чаще расширение переживает обновление без единой правки.

Версии и несколько расширений

В базе может быть несколько расширений одновременно. Держите в синониме или комментарии версию и дату — например, «Доработки продаж, v1.4». Когда одно и то же событие перехватывают два расширения, разберитесь с порядком их применения, иначе результат будет зависеть от назначения и последовательности.

Ограничения и частые ошибки при работе с расширениями

Механизм мощный, но не безграничный. Вот с чем сталкиваются на практике.

  • ❌ Нельзя удалить или переименовать типовой объект, нельзя изменить тип существующего типового реквизита.
  • ❌ Удаление расширения стирает данные его собственных объектов. Справочник, созданный расширением, исчезнет вместе с записями. Для временного отключения есть флажок активности.
  • ❌ Пересоздание вместо обновления. Если удалить расширение и загрузить «свежее» под тем же именем, платформа воспримет его как новое, и данные собственных объектов потеряются. Новую версию загружают поверх существующего расширения.
  • ❌ Перехват метода, которого нет. Аннотация с именем процедуры, отсутствующей в типовом модуле, даёт ошибку применения расширения.
  • ❌ Конфликт имён. Объект без префикса может совпасть с объектом, который поставщик добавит в следующем релизе.
  • ❌ Старые сеансы у пользователей. Изменения видны только после перезапуска сеанса; в клиент-серверной базе уже открытые сеансы продолжают работать со старой версией.
Диагностика: выберите симптом

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

Нужна ли отдельная лицензия для работы с расширениями?
Нет. Расширения — механизм платформы 8.3, отдельная лицензия на них не требуется. Достаточно обычных клиентских лицензий.
Кто может устанавливать расширения?
Пользователь с полными правами в базе. Обычному бухгалтеру список расширений недоступен, и это правильно: расширение меняет поведение программы для всех.
Работают ли расширения в 1С:Фреш и других облаках?
В облачных сервисах обычно можно загружать расширения в безопасном режиме, но правила зависят от сервиса. Некоторые требуют предварительной проверки расширения.
Что будет с расширением при переносе базы через .dt?
Расширения сохраняются в выгрузке .dt вместе с базой и загружаются вместе с ней. Отдельно переносить .cfe не нужно.
Можно ли в расширении заменить типовую печатную форму?
Да. Заимствуйте макет печатной формы и измените его в расширении — типовая команда печати выведет ваш вариант, а сама типовая останется на поддержке.