Расширение конфигурации 1С: от пустого проекта до публикации
Содержание
Расширение создают в Конфигураторе: открываете меню Конфигурация → Расширения конфигурации, добавляете новое расширение, заимствуете нужные объекты из основной конфигурации и правите их. Основную конфигурацию при этом не трогаете, поэтому типовые обновления ставятся без «танцев» со слиянием.
Есть три пути доработки. Правка самой конфигурации на поддержке даёт максимум свободы, но каждое обновление превращается в объединение вручную. Внешние обработки и отчёты безопасны, но не умеют менять поведение штатных документов. Расширение стоит посередине: оно меняет формы, добавляет реквизиты, перехватывает процедуры, а обновление платформы и конфигурации переживает.
Пара ориентиров по срокам. Добавить поле на форму и вывести его пользователю — час-два вместе с проверкой. Перехват записи документа с новой проверкой — полдня, если логику уже описали. Разобраться с конфликтами после крупного обновления — от нескольких часов до дня, в зависимости от числа заимствованных объектов.
Что понадобится до начала работы
Нужны три вещи: права, версия и копия.
- 🔑 Права администратора в информационной базе и режим Конфигуратора (запуск через кнопку «Конфигуратор» в списке баз).
- 🧩 Платформа 8.3 не ниже 8.3.6, лучше свежая. Расширения появились в 8.3.6, а полноценная работа с формами и перехватом методов отточена в более поздних релизах.
- 💾 Свежая выгрузка базы в
.dt. Расширение базу не ломает, но ошибка в нём может не дать пользователям войти.
Если основная конфигурация не на поддержке, расширения всё равно работают. Но тогда проще править саму конфигурацию. Расширение особенно полезно на типовых решениях с обновлениями от фирмы-разработчика.
Решите заранее, где работать. Для первого знакомства подойдёт копия базы на своём компьютере. Разработку в рабочей базе не ведут: каждое сохранение в Конфигураторе блокирует обновление структуры у пользователей.
Режимы и свойства, которые стоит выбрать сразу
Правка свойств расширения доступна после создания, но часть решений лучше принять на старте.
| Свойство | Что значит | Какое выбрать |
|---|---|---|
| Назначение | Исправление, Дополнение или Прикладное | «Дополнение» для новых возможностей, «Исправление» для правки поведения типовых объектов |
| Безопасный режим | Расширение работает без права вызывать опасные операции | Включён по умолчанию, отключать только осознанно |
| Защита от опасных действий | Запрос подтверждения при потенциально опасных действиях | Оставьте включённой для расширений от сторонних авторов |
| Активно | Применяется ли расширение в базе | Сначала выключите, включите после проверки |
Не путайте «Назначение» с тем, что расширение умеет. Это метка для администратора и порядка подключения, а не ограничение возможностей.
Создание нового расширения в Конфигураторе
Пошагово это выглядит так.
- Откройте конфигуратор нужной базы.
- Выберите
Конфигурация→Расширения конфигурации. - В открывшемся окне нажмите «Добавить».
- Задайте имя на латинице или кириллице без пробелов (например,
ДоработкиСклада), синоним для людей и префикс имён объектов. - Выберите назначение и сохраните.
Префикс важен: он добавляется к именам новых объектов, чтобы они не конфликтовали с типовыми и с другими расширениями. Для ДоработкиСклада разумный префикс — ДС_.
После создания в левой части появится дерево расширения. Оно пустое: из основной конфигурации в него ничего не попадает автоматически.
💡 Можно открыть расширение отдельным окном через кнопку на панели расширений. Тогда дерево основной конфигурации и расширения лежат рядом, и удобно перетаскивать объекты.
Добавление и заимствование объектов
Объекты в расширении бывают двух видов.
- 🆕 Собственные. Создаёте их так же, как в обычной конфигурации: правой кнопкой на ветке «Справочники» → «Добавить». Имя получит ваш префикс.
- 📎 Заимствованные. Это «тень» объекта основной конфигурации, которую можно менять. Заимствованный справочник сохраняет связь с оригиналом.
Чтобы заимствовать объект, выделите его в основной конфигурации, вызовите контекстное меню и выберите пункт про добавление в расширение (формулировка зависит от версии платформы; ищите слово «заимствовать» или «расширение»).
Заимствуется объект с минимальным набором: имя и свойства, которые вы реально изменяете. Платформа сама тянет зависимости: если у справочника есть форма, формы можно заимствовать отдельно.
Заимствовать всё подряд не нужно. Каждый лишний объект — это место, где после обновления конфигурации может возникнуть конфликт.
Что можно менять в заимствованном объекте
| Элемент | Можно ли | Комментарий |
|---|---|---|
| Реквизиты и табличные части | Добавлять новые | Удалять типовые нельзя |
| Формы | Менять расположение и добавлять элементы | Типовые команды остаются |
| Модули объекта и менеджера | Перехватывать процедуры | Через аннотации (ниже) |
| Права и роли | Добавлять свои роли | Типовые не правятся |
| Свойства объекта | Часть свойств | Что заблокировано, видно по серому цвету |
Изменение форм и пользовательского интерфейса
Форма в расширении открывается так же, как обычная, но элементы типовой формы показываются отдельно от ваших.
Типовой сценарий: добавить на форму документа поле «Комментарий склада».
- Заимствуйте документ и его основную форму.
- Откройте форму в расширении, добавьте реквизит
КомментарийСкладатипа «Строка». - Перетащите реквизит в дерево элементов формы, выберите, куда он встанет.
- Если реквизит должен храниться в базе, добавьте его и в сам документ (расширение-документ), иначе он будет жить только пока открыта форма.
Через расширение можно также спрятать лишнюю колонку, переименовать заголовок поля, поставить на кнопку свой обработчик.
Если оставить элемент формы без привязки к данным, пользователь увидит пустое поле, которое ничего не сохраняет. Проверяйте связку «реквизит формы — реквизит объекта».
Когда нужно изменить поведение при открытии формы, пользуйтесь событием ПриСозданииНаСервере в модуле формы. Типовой обработчик остаётся, ваш код добавляется к нему через аннотации.
Перехват процедур: общие модули и серверный код
Главная сила расширения — возможность подложить свой код до, после или вместо типового. Для этого есть четыре аннотации.
| Аннотация | Когда выполняется | Типичная задача |
|---|---|---|
&Перед("Имя") | До типовой процедуры | Проверить условия, подготовить данные |
&После("Имя") | После типовой | Дописать реакцию, записать в журнал |
&Вместо("Имя") | Вместо типовой, типовую можно вызвать ПродолжитьВызов() | Изменить логику с возможностью сохранить базовую |
&ИзменениеИКонтроль("Имя") | Копирует тело процедуры, вы редактируете копию | Точечная правка в середине типового кода |
Простой пример: типовая процедура проверяет заполнение, а нужно добавить своё условие.
&После("ПередЗаписью")
Процедура ДС_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Не ЗначениеЗаполнено(КомментарийСклада) Тогда
Сообщить("Заполните комментарий склада");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
У процедуры, перехватывающей типовую, оно обязательно начинается с префикса расширения, а в аннотации указывается имя оригинала.
Общие модули
В расширении можно создать собственный общий модуль с серверными функциями и вызывать его из перехватов. А можно заимствовать типовой общий модуль и перехватить его экспортные процедуры.
Две особенности.
- 🖥 Директивы
&НаСервереи&НаКлиентеработают как всегда. Если типовая процедура серверная, ваш перехват тоже должен компилироваться на сервере. - 🔒 Модуль с признаком «Привилегированный» в расширении создавать не получится в безопасном режиме. Это не баг, так задумано.
&ИзменениеИКонтроль — самый хрупкий способ. После обновления конфигурации платформа сравнивает копию с новой версией оригинала и показывает расхождения. Это полезно, но придётся править вручную. Если можно обойтись &Перед или &После, обходитесь ими.
Роли и права доступа для расширения
Новые объекты расширения по умолчанию никому не доступны. Пользователи увидят справочник и документ только после выдачи прав.
- В расширении создайте роль (ветка «Роли» → «Добавить»), например
ДС_РаботаСоСкладом. - Откройте вкладку «Права», найдите свои объекты и отметьте чтение, просмотр, редактирование.
- Назначьте роль пользователям в списке пользователей базы.
Заимствованные объекты берут права основной конфигурации. Права на ваш новый реквизит в типовом документе наследуются от документа.
В свойствах расширения есть пункт про использование основных ролей для всех пользователей. Он полезен на тестовой базе, но в рабочей лучше выдавать права явно: так проще понять, кто видит доработку.
Если у пользователя «ничего не изменилось», проверьте две вещи: перезапущен ли у него клиент и есть ли у него роль расширения. В половине случаев причина именно в этом.
Загрузка, обновление и публикация расширения
Расширение хранится в самой базе и применяется, когда его сохранили в Конфигураторе и обновили конфигурацию базы данных. Чтобы перенести расширение на другую базу, его выгружают в файл.
Как перенести расширение
- В окне расширений выберите нужное и нажмите «Выгрузить» (файл с расширением
.cfe). - В целевой базе откройте то же окно и нажмите «Загрузить».
- Проверьте, что флаг «Активно» включён, а при необходимости обновите конфигурацию БД.
Для рабочей базы удобнее порядок «разработка → тестовая копия → рабочая». Не загружайте расширение сразу в бой.
Работа в режиме Предприятия
Часть операций с расширениями доступна из клиента. В типовых решениях на библиотеке стандартных подсистем есть раздел администрирования с настройкой расширений; точный путь зависит от конфигурации, поищите «Расширения» через поиск по меню. Там их можно отключить без Конфигуратора, что важно, когда расширение мешает входу.
Что происходит при обновлении основной конфигурации
Когда вы ставите новый релиз типовой конфигурации, расширение остаётся. Платформа проверяет, не удалён ли заимствованный объект и не изменился ли перехваченный метод.
- Всё совпало: ничего делать не нужно.
- Объект исчез или изменилась сигнатура: в расширении появятся ошибки, нужно исправить код.
Перед обновлением сделайте копию и прогоните проверку «Конфигурация» → «Проверка конфигурации» с включённой проверкой расширений.
Расширение для нескольких баз
Если у вас пять одинаковых баз, поддерживайте одно расширение в одном месте. Файл .cfe — единственная копия кода. Меняйте его в одной базе и раскатывайте на остальные.
Для командной работы выгружайте исходники в файлы (Конфигурация → Выгрузить конфигурацию в файлы) и храните в Git. Разница между версиями тогда видна построчно.
Когда что-то пошло не так: ошибки и диагностика
Ошибки с расширениями почти всегда укладываются в короткий список.
Если не помогло
Попробуйте метод «деления пополам»: отключите расширение, убедитесь, что без него база работает, затем включайте обратно с урезанным набором объектов. Так вы найдёте объект, который ломает работу.
Ещё помогает технологический журнал: он показывает, какая процедура падает и на какой строке расширения.
Частые вопросы
Можно ли создать расширение без программирования?
Расширение замедлит базу?
ПередЗаписью, нагрузку создаёт, и это вина кода, а не расширения.