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

Ниже — как выбрать назначение расширения, создать его в конфигураторе, добавить новый справочник и реквизит к типовому объекту, вывести его на форму двумя способами и передать заказчику. Пример — на базе ЗУП 3.1, но порядок действий одинаков для любой типовой конфигурации.

Зачем нужны расширения

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

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

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

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

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

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

  • Исправление — оперативное исправление ошибок типового решения. Часто использует аннотацию &Вместо или &ИзменениеИКонтроль. Привязано к конкретному релизу: при выходе следующей версии нужно проверить, не исправила ли ошибку фирма «1С», и отключить ставшее ненужным исправление.
  • Адаптация — доработки под конкретного заказчика. Таких расширений в базе должно быть немного; если изменений много, их разбивают по крупным блокам (например, «Склад», «Зарплата»), а не по задачам.
  • Дополнение — новая функциональность, слабо связанная с версией типовой: набор отчётов, интеграция, отдельный модуль. Таких расширений может быть сколько угодно.
Расширение конфигурации 1С: доработки лежат слоем поверх неизменной типовой конфигурации
Расширение конфигурации 1С: доработки лежат слоем поверх неизменной типовой конфигурации

Создаём расширение в конфигураторе

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

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

Новый справочник и реквизит у типового объекта

Задача: в ЗУП добавить справочник «Категории должностей по классификатору предприятия» и реквизит «Категория» у справочника «Должности».

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

В дереве расширения добавьте справочник обычным образом — он получит префикс: ркм_КатегорииДолжностей. Чтобы он появился в интерфейсе, нужна подсистема:

  1. В дереве основной конфигурации найдите подсистему (например, «Штатное расписание»).
  2. Контекстное меню → «Добавить в расширение». Подсистема заимствуется.
  3. В заимствованной подсистеме добавьте новый справочник в состав.

Реквизит у типового справочника

  1. Заимствуйте справочник «Должности» в расширение («Добавить в расширение»).
  2. В заимствованном объекте добавьте реквизит ркм_Категория с типом СправочникСсылка.ркм_КатегорииДолжностей.

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

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

Способ 1. Заимствовать форму

Заимствуйте форму элемента «Должности» в расширение и перетащите реквизит в нужную группу. Чтобы реквизит объекта был виден в дереве реквизитов формы, сам объект тоже должен быть заимствован — мы это уже сделали.

Плюс — наглядность. Минус — при каждом обновлении типовой формы нужно проверять, что ваша группа никуда не делась. Заимствованные формы — самое частое место, где расширение «ломается» после обновления.

Способ 2. Добавить элемент кодом

Элемент можно добавить программно, не заимствуя форму. В типовых конфигурациях на БСП удобная точка входа — процедуры, которые типовые формы вызывают из ПриСозданииНаСервере, например УправлениеСвойствами.ПриСозданииНаСервере. Заимствуйте общий модуль УправлениеСвойствами и добавьте процедуру с аннотацией «Вызывать после»:

1С
&После("ПриСозданииНаСервере")
Процедура ркм_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

	// Работаем только с формой элемента справочника «Должности».
	Если Форма.ИмяФормы <> "Справочник.Должности.Форма.ФормаЭлемента" Тогда
		Возврат;
	КонецЕсли;

	ИмяЭлемента = "ркм_Категория";
	Если Форма.Элементы.Найти(ИмяЭлемента) <> Неопределено Тогда
		Возврат;
	КонецЕсли;

	// Группу-родителя ищем по имени; если её нет, кладём на форму.
	Родитель = Форма.Элементы.Найти("ОплатаГруппа");
	Если Родитель = Неопределено Тогда
		Родитель = Форма;
	КонецЕсли;

	Поле = Форма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Родитель);
	Поле.Вид = ВидПоляФормы.ПолеВвода;
	Поле.ПутьКДанным = "Объект.ркм_Категория";

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

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

Минус способа — он зависит от того, что типовая форма продолжит вызывать эту процедуру. Альтернатива — заимствовать форму, но не трогать её элементы, а добавить только обработчик ПриСозданииНаСервере с аннотацией &После и создавать элементы в нём. Так визуальных изменений в заимствованной форме нет, и конфликтов при обновлении меньше.

Ограничения расширений

Механизм расширений развивается: с каждой версией платформы список того, что можно создать или изменить, растёт. Поэтому список ограничений из статей пятилетней давности уже неточен. Ориентируйтесь так:

  • Проверяйте по документации своей версии платформы — в руководстве разработчика есть раздел о расширениях с актуальным перечнем.
  • Структура данных типовых объектов. Возможности менять структуру (реквизиты, табличные части, измерения регистров) различаются для разных видов объектов. Если нужное изменение недоступно, обычно выручает отдельный регистр сведений расширения, связанный с типовым объектом.
  • Базовые версии типовых решений работу с расширениями не поддерживают.
  • Данные расширения. Собственные объекты и добавленные реквизиты хранят данные, которые зависят от расширения. Удалили расширение — потеряли данные.

Подключение у заказчика

Готовое расширение сохраняется в файл: в списке расширений «Конфигурация» → «Сохранить конфигурацию в файл». Получается файл .cfe.

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

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

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

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

Типичные ошибки

  • Всё в одном расширении «Доработки». Через год там сотни объектов, и непонятно, что можно отключить. Делите по назначению и блокам.
  • Заимствование форм ради одного поля. Добавляйте поле кодом — меньше конфликтов при обновлении.
  • &Вместо там, где хватит &После. Полная замена типовой процедуры перестаёт получать исправления из релизов.
  • Без префикса или с длинным префиксом. Конфликты имён или нечитаемый код.
  • Удаление расширения с данными без резервной копии. Данные добавленных реквизитов пропадут.
  • Нет проверки после обновления. Расширение «тихо» перестаёт работать, когда типовую форму переделали.
Расширение не избавляет от сопровождения доработок — оно делает его предсказуемым: типовая обновляется штатно, а вы точно знаете, что и где нужно проверить.

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

Коротко

  • Расширение дорабатывает конфигурацию без её изменения и без снятия с поддержки.
  • Назначение: Исправление — ошибки релиза, Адаптация — заказчик, Дополнение — новая функциональность.
  • Типовые объекты заимствуются, новые получают префикс; реквизиты у типовых объектов добавляются в заимствованный объект.
  • На форму выводите кодом из &После-обработчика — так меньше конфликтов при обновлениях.
  • Ограничения зависят от версии платформы; данные расширения исчезают вместе с ним.