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

· 9 мин

Содержание

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

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

Назначение расширений и что они дают бизнесу

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

Расширение решает эту проблему так:

  • 🧩 Отдельный слой. Основная конфигурация остаётся на поддержке «как есть», без замочков и снятых флажков.
  • 🔄 Обновления без объединения. Типовой релиз ставится штатно, расширение подключается к новой версии само.
  • 🎚️ Включение и отключение. Доработку можно выключить одной галочкой, не трогая основную конфигурацию.
  • 📦 Переносимость. Расширение сохраняется в файл .cfe и загружается в другую базу с той же конфигурацией.
  • 👥 Работа в пользовательском режиме. Готовое расширение администратор загружает без Конфигуратора.

Для бизнеса это прямая экономия на сопровождении. Обновления ставятся быстрее, база не отстаёт от релизов, а доработки не теряются при смене программиста.

В свойствах расширения задаётся назначение. От него зависит порядок применения, если расширений несколько:

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

Правка интерфейса и печатных форм через расширение

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

Формы объектов и списков

Чтобы изменить форму, её заимствуют: в дереве расширения в Конфигураторе нажимают правой кнопкой на объект основной конфигурации и выбирают Добавить в расширение. После этого в заимствованной форме можно:

  1. Добавить поля, группы, кнопки и команды.
  2. Скрыть или переставить типовые элементы.
  3. Добавить реквизиты формы.
  4. Повесить свои обработчики на события формы и элементов.

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

Печатные формы

Для печатных форм есть два пути:

  • 🖨️ Только поправить макет — сдвинуть поле, добавить подпись, логотип. В типовых на БСП это часто делается без расширения: Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм.
  • 🛠️ Изменить состав данных — вывести реквизит, которого нет в типовом макете, или добавить новую печатную форму в меню «Печать». Здесь нужно расширение: заимствуют макет и модуль менеджера, где формируется печатная форма.

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

Новые реквизиты в типовых объектах

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

Расширение логики и алгоритмов программы

Расширение умеет не только рисовать кнопки. Оно встраивается в код типовых модулей и меняет поведение программы. Для этого в модуле расширения процедуру помечают аннотацией с именем перехватываемой процедуры.

АннотацияЧто делаетКогда брать
&ПередВаш код выполняется до типовогоПроверка, заполнение перед записью
&ПослеВаш код выполняется после типовогоДозаполнить, добавить движения
&ВместоТиповой код не выполняется, работает вашПолная замена алгоритма
&ИзменениеИКонтрольКопия типовой процедуры с пометками вставок и удаленийТочечная правка внутри длинной процедуры

Пример: дозаполнить поле после создания формы заказа.

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

Пример точечной правки в проведении:

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

Главный плюс &ИзменениеИКонтроль — контроль. Если после обновления типовая процедура изменилась, платформа сообщит, что расширение больше не совпадает с основной конфигурацией. Правку не придётся искать по всему коду вручную.

&Вместо — самый рискованный вариант. Вы полностью отключаете типовой код, и исправления фирмы 1С в этой процедуре до вас больше не доходят. Используйте только когда без этого никак.

Кроме перехвата, в расширении можно создавать собственные объекты: справочники, документы, регистры, отчёты, обработки, роли. Набор доступных видов объектов расширялся от версии к версии платформы, поэтому смотрите, что поддерживает ваша.

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

Выбор инструмента зависит от задачи. Сравнение по сути:

КритерийРасширениеИзменение основной конфигурацииВнешняя обработка / отчёт
Поддержка типовойСохраняетсяСнимается или ослабляетсяСохраняется
Обновление релизаШтатно, затем проверка расширенияСравнение и объединениеШтатно
Правка форм и кода типовойДаДаНет
Новые реквизиты в типовых объектахДаДаНет
ПодключениеЗагрузка в базу, применяется к новым сеансамОбновление конфигурации БДЧерез «Дополнительные отчеты и обработки»
Кто ставитАдминистратор или программистТолько программист в КонфигуратореПользователь с правами администратора
Какой способ доработки выбрать?

Мини-кейс: три доработки торговой компании

Компания на УТ 11 попросила три правки: поле «Ответственный логист» в заказе клиента, запрет проведения реализации без указанного договора и свою печатную форму накладной с QR-кодом.

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

С расширением сделали так:

  1. Заимствовали документ «Заказ клиента», добавили реквизит и вывели его на форму.
  2. В модуле объекта реализации повесили &Перед("ОбработкаПроверкиЗаполнения"): если договор пустой, выставляется отказ и выводится сообщение.
  3. Добавили новую печатную форму через заимствованный модуль менеджера.

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

Ограничения расширений, о которых узнают слишком поздно

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

  • 🔒 Безопасный режим. По умолчанию расширение работает в безопасном режиме: без доступа к файлам, COM-объектам, внешним компонентам. Если код должен, например, читать файл с диска, флажок снимают в свойствах расширения. Платформа при этом предупредит об опасных действиях.
  • 🔁 Зависимость от типовой. Расширение ссылается на заимствованные объекты по именам. Типовая переименовала реквизит или удалила процедуру — расширение не применится.
  • 🧱 Роли и права. Новые объекты расширения недоступны пользователям, пока им не выданы права через роли расширения. Есть свойство, которое разрешает работу через основные роли, но его включают осознанно.
  • 🗃️ Данные в собственных объектах. Если расширение добавило свой справочник или реквизит, данные лежат в базе. При удалении расширения их можно потерять.
  • 🐢 Производительность. Каждый перехват — дополнительный вызов. Десяток расширений с тяжёлыми обработчиками на записи документа заметно замедлит проведение.
  • ⏳ Применение не сразу. Изменённое расширение начинает работать в новых сеансах. Пользователям, которые уже в базе, нужно перезайти.

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

Как загрузить, включить и обновить расширение

В пользовательском режиме (типовые на БСП)

  1. Откройте Администрирование → Печатные формы, отчеты и обработки → Расширения.
  2. Нажмите кнопку добавления из файла и выберите .cfe.
  3. Подтвердите предупреждение о безопасности, если расширение работает без безопасного режима.
  4. Проверьте, что в списке стоит флажок активности.
  5. Перезапустите сеанс 1С и проверьте доработку.

Из этого же списка расширение отключают, обновляют из нового файла и сохраняют в файл для переноса.

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

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

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

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

Обновление релиза при подключённых расширениях
Выполнено: 0 / 6

Префикс имён (Расш1_, Ком_ и т.п.) задавайте сразу и одинаковый для всех объектов. Так собственные объекты и процедуры расширения никогда не совпадут по имени с объектами следующего релиза.

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

Типовые ситуации, с которыми приходят после обновления или установки:

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