Расширение конфигурации 1С 8.3: от пустого шаблона до работающей доработки
Содержание
Чтобы создать расширение в 1С, откройте базу в Конфигураторе, выберите Конфигурация → Расширения конфигурации и нажмите «Добавить». Задайте имя, префикс и назначение, откройте дерево расширения, заимствуйте нужные объекты типовой конфигурации и пишите в них свой код. Сохраняется расширение клавишей F7, а в другую базу переносится файлом .cfe.
Частое заблуждение: «чтобы что-то поменять в типовой, придётся снять её с поддержки». Не придётся. Расширение лежит поверх конфигурации отдельным слоем, типовая остаётся на полной поддержке и обновляется штатно. Механизм появился в платформе 8.3.6 и с тех пор стал основным способом дорабатывать БП 3.0, ЗУП 3.1 и УТ 11.
Что проверить до создания расширения
Пять минут подготовки избавляют от ситуации «всё сделал в рабочей базе, и она перестала открываться у бухгалтерии».
- 🗂 Работайте в копии. Выгрузите базу в
.dtили скопируйте каталог файловой базы и разрабатывайте там. В рабочую базу потом переносится только готовый файл.cfe. - 🔢 Версия платформы. Номер должен быть не ниже 8.3.6. Перехват с контролем изменений (
&ИзменениеИКонтроль) и расширение данных доступны только в более поздних версиях 8.3, поэтому на сервере и у клиентов держите актуальную платформу, которую требует ваш релиз конфигурации. - 👤 Права. Для Конфигуратора нужен пользователь с административными правами. Подключать готовое расширение в пользовательском режиме может и не полный администратор, если в его роли есть право на администрирование расширений конфигурации.
- 📝 Задача на бумаге. Запишите, какие объекты тронете: документ, его форму, отчёт, общий модуль. От этого зависит, что придётся заимствовать.
Какой инструмент выбрать
| Инструмент | Когда подходит | Ограничения |
|---|---|---|
| Конфигуратор | Одна-две доработки, правки печатных форм, перехват событий | Нет нормального хранения истории версий |
| 1С:EDT | Командная разработка, Git, много расширений | Требует отдельной установки и ресурсов машины |
| Внешняя обработка | Разовая процедура, печатная форма, которую подключают через справочник | Не меняет поведение типовых объектов |
Если нужно изменить логику типового документа или формы, внешней обработкой не обойтись. Это работа для расширения.
Создаём расширение в конфигураторе шаг за шагом
- Запустите базу в режиме Конфигуратор. Основную конфигурацию открывать не обязательно, но для заимствования объектов она понадобится:
Конфигурация → Открыть конфигурацию. - Откройте
Конфигурация → Расширения конфигурации. Появится список расширений базы, у новой базы он пуст. - Нажмите «Добавить». Платформа предложит параметры нового расширения.
- Заполните Имя латиницей или кириллицей без пробелов, например
ДоработкиПечати, и понятный Синоним. - Проверьте Префикс. По умолчанию стоит
Расш1_. Замените его на короткий осмысленный, напримерпч_илиДП_. Префикс получат все ваши новые объекты и процедуры, и он защищает от совпадения имён с будущими релизами типовой. - Выберите Назначение: «Исправление», «Адаптация» или «Дополнение».
- Нажмите «ОК». Расширение появится в списке. Откройте его: в дереве будет корневой узел расширения и пустые ветки метаданных.
Какое назначение выбрать
Назначение определяет порядок, в котором платформа применяет расширения: сначала «Исправление», потом «Адаптация», затем «Дополнение».
- 🩹 Исправление — точечные заплатки ошибок типовой, которые потом уйдут с обновлением.
- 🛠 Адаптация — доработки под конкретную компанию: свои реквизиты, поля на формах, правка логики. Это самый частый выбор.
- ➕ Дополнение — новый независимый функционал: свои отчёты, справочники, обработки.
Если сомневаетесь, ставьте «Адаптация». Назначение можно поменять позже в свойствах расширения.
Сразу задайте в свойствах корня расширения версию и поставщика. Через полгода, когда в базе окажется четыре расширения от разных подрядчиков, это сэкономит разбор.
Заимствование объектов и перехват методов в расширении
Своё в расширение добавляется как в обычную конфигурацию: правой кнопкой по ветке «Отчеты» или «Обработки» → «Добавить». А вот чтобы изменить типовой объект, его сначала заимствуют.
Как заимствовать объект
- В дереве основной конфигурации найдите объект, например документ «Реализация (акт, накладная, УПД)».
- Правой кнопкой вызовите команду «Добавить в расширение» и выберите ваше расширение.
- Объект появится в дереве расширения с пометкой заимствования. Вместе с ним подтянутся объекты, без которых он не работает .
Заимствованная форма редактируется визуально: добавьте поле или кнопку, и они встанут поверх типовой формы. Заимствованный модуль поначалу пуст. Код типовой туда не копируется, вы пишете только перехватчики.
Аннотации перехвата
| Аннотация | Что делает | Когда брать |
|---|---|---|
&Перед("Имя") | Выполняет ваш код до типовой процедуры | Проверки, подготовка данных |
&После("Имя") | Выполняет код после типовой | Доп. поля на форме, дозаполнение |
&Вместо("Имя") | Подменяет процедуру; оригинал вызывается через ПродолжитьВызов() | Нужно решать, вызывать ли типовой код |
&ИзменениеИКонтроль("Имя") | Копия процедуры с правками в блоках #Вставка/#Удаление | Нужно поменять строчку в середине типового метода |
Пример: запретить запись реализации без комментария. В модуле объекта заимствованного документа:
&Перед("ОбработкаПроверкиЗаполнения")
Процедура ДП_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Заполните комментарий: укажите номер договора или заявки";
Сообщение.Поле = "Комментарий";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Пример с формой: показать на форме документа своё поле после того, как типовая форма создана.
&НаСервере
&После("ПриСозданииНаСервере")
Процедура ДП_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Элементы.Комментарий.АвтоОтметкаНезаполненного = Истина;
КонецПроцедуры
Имя процедуры в кавычках аннотации должно совпадать с типовым дословно. Опечатка не даст ошибки при вводе кода: расширение просто не применится или ругнётся при проверке.
Изменение с контролем
&ИзменениеИКонтроль удобен, но коварен. Платформа хранит текст типовой процедуры и сравнивает его с текущим. Если в новом релизе 1С переписала метод, расширение перестанет применяться, пока вы не перенесёте правку. Для &Перед и &После такой проверки нет, поэтому где можно, обходитесь ими.
Чего расширение не умеет: ограничения метаданных
Расширение добавляет, но не удаляет. Таблица поможет понять заранее, решаема ли задача без снятия с поддержки.
| Хотите сделать | Через расширение |
|---|---|
| Добавить свой отчёт, обработку, справочник, документ, регистр | ✅ Да |
| Добавить реквизит или табличную часть в типовой документ | ✅ Да, в актуальных версиях 8.3 (расширение данных) |
| Добавить поле, кнопку, команду на типовую форму | ✅ Да |
| Изменить код типовой процедуры | ✅ Через перехват |
| Удалить типовой реквизит или объект | ❌ Нет, можно только скрыть на форме |
| Сменить тип у типового реквизита | ❌ Нет |
| Переименовать типовой объект | ❌ Нет |
Ещё три практических ограничения:
- 🔒 Безопасный режим. Расширение, загруженное из пользовательского режима, по умолчанию работает в безопасном режиме. Там недоступны, например, COM-объекты и запись в произвольные файлы. Снимать этот флаг стоит только для расширения, которому вы доверяете.
- 🔗 Контроль заимствованных свойств. Если вы опираетесь на свойство типового объекта, а 1С его изменила в обновлении, расширение не применится до правки.
- 🏷 Свои имена с префиксом. Объекты и процедуры без префикса платформа подсветит при проверке. Не игнорируйте: следующий релиз может принести типовой объект с таким же именем.
Публикация расширения: из конфигуратора в рабочую базу
Готовое расширение нужно сохранить в базе и, если вы работали в копии, перенести в рабочую.
Сохранить в той же базе
Находясь в дереве расширения, нажмите F7 («Обновить конфигурацию базы данных»). Платформа проверит расширение и запишет его в информационную базу. Новые объекты увидят пользователи, которые зашли после этого. Тем, кто уже работает, нужно перезапустить 1С.
Перенести в другую базу файлом
- В окне
Конфигурация → Расширения конфигурациивыделите расширение. - В меню окна выберите сохранение в файл. Получится
ДоработкиПечати.cfe. - В рабочей базе подключите файл одним из способов ниже.
Через Конфигуратор. Откройте там же список расширений, добавьте новое (или выделите существующее) и загрузите в него конфигурацию из файла .cfe. Затем откройте дерево расширения и нажмите F7. Загрузка файла и обновление конфигурации
базы данных — два разных шага. Без второго пользователи ничего не увидят.
В пользовательском режиме. В БП 3.0 и ЗУП 3.1 откройте Администрирование → Печатные формы, отчеты и обработки → Расширения. В УТ 11 этот же пункт находится в разделе НСИ и администрирование. Нажмите «Добавить из файла» и укажите .cfe. Конфигуратор для этого не нужен.
Если в расширении есть новые реквизиты типовых объектов или свои регистры, при подключении изменится структура данных. Делайте это вне рабочего времени и после резервной копии базы.
Управление списком расширений в базе
Со временем расширений становится несколько: печатные формы от одного подрядчика, обмен с сайтом от другого, свои правки. Список удобно держать в порядке.
Где смотреть список
- 🖥 В Конфигураторе:
Конфигурация → Расширения конфигурации. - 👥 У пользователя: раздел «Расширения» в администрировании, как выше.
- 🧰 В любой конфигурации:
Все функции → Стандартные → Управление расширениями конфигурации. Команду «Все функции» включают вСервис и настройки → Параметры.
Флажки в списке
| Флажок | Что значит |
|---|---|
| Активно | Расширение применяется. Сняли флажок — оно отключено, но не удалено |
| Безопасный режим | Ограничивает опасные операции из кода расширения |
| Защита от опасных действий | Предупреждает пользователя при подключении расширения |
Когда после обновления типовой что-то сломалось, первым делом снимите «Активно» у подозрительного расширения и перезайдите. Если ошибка ушла, виновник найден, а данные при этом не теряются.
Удалять расширение с собственными реквизитами осторожно. Данные, которые хранились в его реквизитах и регистрах, удалятся вместе с ним. Если хотите сохранить их, сначала отключите расширение, а не удаляйте.
Отладка и поиск ошибок в коде расширения
Отладчик работает с расширениями так же, как с основной конфигурацией.
- Сохраните расширение в базе (F7). Точки останова в несохранённом коде не сработают.
- Поставьте точку останова в процедуре-перехватчике: F9 на строке.
- Запустите отладку:
Отладка → Начать отладкуили F5. - В пользовательском режиме выполните действие: откройте документ, нажмите «Провести».
- Если точка не срабатывает, проверьте, что перехватчик вообще вызывается: временно добавьте
Сообщить("ДП: сработал перехват")в начало процедуры.
Для серверной базы отладку на сервере нужно разрешить: кластер запускают с ключом -debug. Без этого серверные процедуры в отладчике не остановятся. Перезапуск службы сервера 1С оборвёт сеансы всех пользователей, поэтому включайте отладку в нерабочее время или на тестовом сервере.
Синтаксис проверяйте до сохранения: в модуле Ctrl+F7, а для всего расширения есть проверка конфигурации в меню дерева расширения. Она находит отсутствующие процедуры в аннотациях и объекты без префикса.