Расширение конфигурации 1С 8.3: от пустого шаблона до работающей доработки

· 9 мин

Содержание

Чтобы создать расширение в 1С, откройте базу в Конфигураторе, выберите Конфигурация → Расширения конфигурации и нажмите «Добавить». Задайте имя, префикс и назначение, откройте дерево расширения, заимствуйте нужные объекты типовой конфигурации и пишите в них свой код. Сохраняется расширение клавишей F7, а в другую базу переносится файлом .cfe.

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

Что проверить до создания расширения

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

  • 🗂 Работайте в копии. Выгрузите базу в .dt или скопируйте каталог файловой базы и разрабатывайте там. В рабочую базу потом переносится только готовый файл .cfe.
  • 🔢 Версия платформы. Номер должен быть не ниже 8.3.6. Перехват с контролем изменений (&ИзменениеИКонтроль) и расширение данных доступны только в более поздних версиях 8.3, поэтому на сервере и у клиентов держите актуальную платформу, которую требует ваш релиз конфигурации.
  • 👤 Права. Для Конфигуратора нужен пользователь с административными правами. Подключать готовое расширение в пользовательском режиме может и не полный администратор, если в его роли есть право на администрирование расширений конфигурации.
  • 📝 Задача на бумаге. Запишите, какие объекты тронете: документ, его форму, отчёт, общий модуль. От этого зависит, что придётся заимствовать.

Какой инструмент выбрать

ИнструментКогда подходитОграничения
КонфигураторОдна-две доработки, правки печатных форм, перехват событийНет нормального хранения истории версий
1С:EDTКомандная разработка, Git, много расширенийТребует отдельной установки и ресурсов машины
Внешняя обработкаРазовая процедура, печатная форма, которую подключают через справочникНе меняет поведение типовых объектов

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

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

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

Какое назначение выбрать

Назначение определяет порядок, в котором платформа применяет расширения: сначала «Исправление», потом «Адаптация», затем «Дополнение».

  • 🩹 Исправление — точечные заплатки ошибок типовой, которые потом уйдут с обновлением.
  • 🛠 Адаптация — доработки под конкретную компанию: свои реквизиты, поля на формах, правка логики. Это самый частый выбор.
  • ➕ Дополнение — новый независимый функционал: свои отчёты, справочники, обработки.

Если сомневаетесь, ставьте «Адаптация». Назначение можно поменять позже в свойствах расширения.

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

Заимствование объектов и перехват методов в расширении

Своё в расширение добавляется как в обычную конфигурацию: правой кнопкой по ветке «Отчеты» или «Обработки» → «Добавить». А вот чтобы изменить типовой объект, его сначала заимствуют.

Как заимствовать объект

  1. В дереве основной конфигурации найдите объект, например документ «Реализация (акт, накладная, УПД)».
  2. Правой кнопкой вызовите команду «Добавить в расширение» и выберите ваше расширение.
  3. Объект появится в дереве расширения с пометкой заимствования. Вместе с ним подтянутся объекты, без которых он не работает .

Заимствованная форма редактируется визуально: добавьте поле или кнопку, и они встанут поверх типовой формы. Заимствованный модуль поначалу пуст. Код типовой туда не копируется, вы пишете только перехватчики.

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

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

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

&Перед("ОбработкаПроверкиЗаполнения")
Процедура ДП_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

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

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

Пример с формой: показать на форме документа своё поле после того, как типовая форма создана.

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

	Элементы.Комментарий.АвтоОтметкаНезаполненного = Истина;

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

Имя процедуры в кавычках аннотации должно совпадать с типовым дословно. Опечатка не даст ошибки при вводе кода: расширение просто не применится или ругнётся при проверке.

Изменение с контролем

&ИзменениеИКонтроль удобен, но коварен. Платформа хранит текст типовой процедуры и сравнивает его с текущим. Если в новом релизе 1С переписала метод, расширение перестанет применяться, пока вы не перенесёте правку. Для &Перед и &После такой проверки нет, поэтому где можно, обходитесь ими.

Чего расширение не умеет: ограничения метаданных

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

Хотите сделатьЧерез расширение
Добавить свой отчёт, обработку, справочник, документ, регистр✅ Да
Добавить реквизит или табличную часть в типовой документ✅ Да, в актуальных версиях 8.3 (расширение данных)
Добавить поле, кнопку, команду на типовую форму✅ Да
Изменить код типовой процедуры✅ Через перехват
Удалить типовой реквизит или объект❌ Нет, можно только скрыть на форме
Сменить тип у типового реквизита❌ Нет
Переименовать типовой объект❌ Нет

Ещё три практических ограничения:

  • 🔒 Безопасный режим. Расширение, загруженное из пользовательского режима, по умолчанию работает в безопасном режиме. Там недоступны, например, COM-объекты и запись в произвольные файлы. Снимать этот флаг стоит только для расширения, которому вы доверяете.
  • 🔗 Контроль заимствованных свойств. Если вы опираетесь на свойство типового объекта, а 1С его изменила в обновлении, расширение не применится до правки.
  • 🏷 Свои имена с префиксом. Объекты и процедуры без префикса платформа подсветит при проверке. Не игнорируйте: следующий релиз может принести типовой объект с таким же именем.

Публикация расширения: из конфигуратора в рабочую базу

Готовое расширение нужно сохранить в базе и, если вы работали в копии, перенести в рабочую.

Сохранить в той же базе

Находясь в дереве расширения, нажмите F7 («Обновить конфигурацию базы данных»). Платформа проверит расширение и запишет его в информационную базу. Новые объекты увидят пользователи, которые зашли после этого. Тем, кто уже работает, нужно перезапустить 1С.

Перенести в другую базу файлом

  1. В окне Конфигурация → Расширения конфигурации выделите расширение.
  2. В меню окна выберите сохранение в файл. Получится ДоработкиПечати.cfe.
  3. В рабочей базе подключите файл одним из способов ниже.

Через Конфигуратор. Откройте там же список расширений, добавьте новое (или выделите существующее) и загрузите в него конфигурацию из файла .cfe. Затем откройте дерево расширения и нажмите F7. Загрузка файла и обновление конфигурации базы данных — два разных шага. Без второго пользователи ничего не увидят.

В пользовательском режиме. В БП 3.0 и ЗУП 3.1 откройте Администрирование → Печатные формы, отчеты и обработки → Расширения. В УТ 11 этот же пункт находится в разделе НСИ и администрирование. Нажмите «Добавить из файла» и укажите .cfe. Конфигуратор для этого не нужен.

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

Управление списком расширений в базе

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

Где смотреть список

  • 🖥 В Конфигураторе: Конфигурация → Расширения конфигурации.
  • 👥 У пользователя: раздел «Расширения» в администрировании, как выше.
  • 🧰 В любой конфигурации: Все функции → Стандартные → Управление расширениями конфигурации. Команду «Все функции» включают в Сервис и настройки → Параметры.

Флажки в списке

ФлажокЧто значит
АктивноРасширение применяется. Сняли флажок — оно отключено, но не удалено
Безопасный режимОграничивает опасные операции из кода расширения
Защита от опасных действийПредупреждает пользователя при подключении расширения

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

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

Перед обновлением типовой конфигурации
Выполнено: 0 / 4

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

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

  1. Сохраните расширение в базе (F7). Точки останова в несохранённом коде не сработают.
  2. Поставьте точку останова в процедуре-перехватчике: F9 на строке.
  3. Запустите отладку: Отладка → Начать отладку или F5.
  4. В пользовательском режиме выполните действие: откройте документ, нажмите «Провести».
  5. Если точка не срабатывает, проверьте, что перехватчик вообще вызывается: временно добавьте Сообщить("ДП: сработал перехват") в начало процедуры.

Для серверной базы отладку на сервере нужно разрешить: кластер запускают с ключом -debug. Без этого серверные процедуры в отладчике не остановятся. Перезапуск службы сервера 1С оборвёт сеансы всех пользователей, поэтому включайте отладку в нерабочее время или на тестовом сервере.

Синтаксис проверяйте до сохранения: в модуле Ctrl+F7, а для всего расширения есть проверка конфигурации в меню дерева расширения. Она находит отсутствующие процедуры в аннотациях и объекты без префикса.

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

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

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