Расширение конфигурации 1С 8.3: от создания до удаления
Содержание
Чтобы настроить расширение в 1С 8.3, откройте конфигуратор, выберите Конфигурация → Расширения конфигурации, нажмите «Добавить», задайте имя, префикс и назначение. Затем заимствуйте нужные объекты основной конфигурации, допишите код или формы и выполните обновление конфигурации
базы данных для расширения. Типовая конфигурация при этом остаётся на поддержке и обновляется без ручного сравнения.
Готовое расширение можно подключить тремя способами: из конфигуратора, в пользовательском режиме через раздел администрирования или из командной строки. Первый удобен разработчику, второй — администратору клиента без доступа к конфигуратору, третий — для массовой раскатки по базам.
1. Подготовка базы и создание расширения
Расширения появились в платформе 8.3.6. На платформах 8.3.2x механизм заметно богаче: можно добавлять реквизиты в заимствованные объекты, создавать собственные справочники и документы с данными, менять тексты методов с контролем.
Что проверить до начала
- 🧩 Режим совместимости основной конфигурации. Он виден в свойствах корня конфигурации. Расширение получает свой режим совместимости, и он не должен быть новее, чем у основной конфигурации.
- 💾 Копия базы. Работайте на копии рабочей базы, а не на самой рабочей. Выгрузка
Администрирование → Выгрузить информационную базув конфигураторе даёт файл.dt. - 🔒 Права. Для создания расширения в конфигураторе нужны административные права в базе.
- 📦 Хранилище. Если основная конфигурация в хранилище, расширение подключают к своему, отдельному хранилищу.
Создание объекта расширения
- Откройте конфигуратор и основную конфигурацию (
Конфигурация → Открыть конфигурацию). - Выберите
Конфигурация → Расширения конфигурации. Откроется список расширений базы. - Нажмите «Добавить». Платформа создаст расширение с именем вида
Расширение1и префиксомРасш1_. - Откройте свойства расширения и задайте имя, синоним, версию и префикс.
- Выберите назначение и режим совместимости.
- Откройте дерево расширения двойным щелчком по строке в списке.
Свойства, которые решают дальнейшую работу
| Свойство | Что задаёт | Совет |
|---|---|---|
| Префикс | Начало имён новых объектов и методов | Короткий и уникальный: Скл_, Печ_ |
| Назначение | Порядок применения: Исправление → Адаптация → Дополнение | Для доработок под клиента обычно «Адаптация» |
| Режим совместимости | Какие возможности языка доступны | Не новее, чем у основной конфигурации |
| Версия | Номер сборки | Повышайте при каждой поставке |
| Безопасный режим | Ограничения на файлы, COM, внешние компоненты | Снимайте, только если код этого требует |
💡 Префикс спасает от конфликта имён. Если после обновления типовой в ней появится объект с тем же именем, что у вашего, расширение перестанет применяться. С префиксом этого не случится.
2. Заимствование объектов и перехват кода
Расширение не может просто так менять объекты основной конфигурации. Сначала объект нужно заимствовать.
Как заимствовать объект
- В дереве основной конфигурации найдите нужный объект, например документ или общий модуль.
- Правой кнопкой выберите «Добавить в расширение».
- Если расширений несколько, укажите нужное.
Объект появится в дереве расширения с пометкой заимствования. Вместе с ним платформа подтянет то, без чего он не работает : например, форма заимствуется вместе с объектом-владельцем.
У заимствованного объекта часть свойств становится контролируемой. Платформа запоминает их значения и при запуске сверяет с основной конфигурацией. Не включайте контроль без нужды: каждое лишнее контролируемое свойство — риск, что расширение отвалится после обновления.
Перехват методов: какие аннотации выбрать
Новый код пишут в модуле заимствованного объекта. Метод с аннотацией перехватывает одноимённый метод основной конфигурации.
| Аннотация | Когда срабатывает | Где уместна |
|---|---|---|
&Перед("Имя") | До исходного метода | Проверки, подготовка данных |
&После("Имя") | После исходного метода | Дозаполнение, доп. движения |
&Вместо("Имя") | Вместо исходного; вызвать исходный можно через ПродолжитьВызов() | Изменение результата функции |
&ИзменениеИКонтроль("Имя") | Копия метода с правками в маркерах | Правка в середине метода |
Пример: запрет записи документа без комментария. Процедура в модуле объекта заимствованного документа:
&После("ПередЗаписью")
Процедура Скл_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Отказ Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Комментарий) Тогда
ОбщегоНазначения.СообщитьПользователю("Заполните комментарий", ЭтотОбъект, "Комментарий");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
ОбщегоНазначения.СообщитьПользователю есть в конфигурациях на БСП: БП 3.0, ЗУП 3.1, УТ 11. В самописной базе замените вызов на Сообщить().
Шаблон для функции, где нужно поправить результат:
&Вместо("ИмяФункции")
Функция Скл_ИмяФункции(Параметр1, Параметр2)
Результат = ПродолжитьВызов(Параметр1, Параметр2);
// здесь меняем Результат по своим правилам
Возврат Результат;
КонецФункции
Изменение с контролем
&ИзменениеИКонтроль копирует в расширение весь текст исходного метода. Свои строки вы обрамляете маркерами #Вставка и #КонецВставки, лишние — #Удаление и #КонецУдаления.
Платформа сверяет копию с оригиналом при каждом запуске. Если после обновления типовой текст метода изменился, расширение не применится, и об этом будет сообщение. Это неудобство, но честное: вы сразу узнаете, что правку надо перенести.
Не злоупотребляйте &Вместо без ПродолжитьВызов(). Такой перехват полностью выключает исходный код. После обновления типовой новые исправления из этого метода к вам не попадут, и никакой проверки не будет.
3. Формы и новые реквизиты в расширении
Доработка формы
- Заимствуйте форму: правой кнопкой по форме в основной конфигурации → «Добавить в расширение».
- Откройте форму в расширении. Исходные элементы видны, их можно перемещать и скрывать.
- Добавьте свои реквизиты формы и элементы. Имена — с префиксом.
- Для события формы или элемента назначьте обработчик. Платформа спросит тип вызова: перед, после или вместо исходного обработчика.
Новые элементы удобно собирать в свою группу. Так их проще найти при следующем обновлении и не страшно, если типовая перестроит форму вокруг.
Новые реквизиты в типовом объекте
В заимствованный справочник или документ можно добавить реквизит
, например Скл_Ответственный. Данные хранятся в отдельной таблице расширения и связаны с основным объектом.
После добавления реквизитов нужно обновить конфигурацию базы данных для расширения. Это меняет структуру хранения, поэтому делайте это, когда в базе нет пользователей.
Собственные объекты
Можно создать в расширении новый справочник, документ, регистр, отчёт или обработку. Для пользователя они выглядят как обычные объекты. Чтобы объект появился в интерфейсе, включите его в подсистему: заимствуйте нужную подсистему основной конфигурации и добавьте в её состав свой объект.
4. Права и роли расширения
Новые объекты расширения сами по себе никому не доступны. Без настройки прав пользователь увидит ошибку о нарушении прав доступа.
Два способа выдать права
- 🔑 Своя роль в расширении. Создайте роль, например
Скл_РаботаСОтветственными, отметьте права на новые объекты. Роль потом назначают пользователям или включают в профили групп доступа. - 🔁 Заимствованная роль. Заимствуйте существующую роль основной конфигурации и отметьте в ней права на объекты расширения. Права на исходные объекты при этом менять нельзя, только добавлять права на свои.
Второй способ хорош для роли с полными правами: заимствуйте её и отметьте все права на свои объекты. Иначе администратор тоже может упереться в отказ.
Где назначить роль в рабочей базе
В конфигурациях на БСП роли напрямую пользователю не ставят. Порядок такой:
Администрирование → Настройки пользователей и прав → Профили групп доступа.- Скопируйте подходящий типовой профиль или создайте новый.
- На вкладке ролей отметьте роль расширения.
- Включите профиль в нужную группу доступа.
В самописной базе без БСП роль ставят пользователю в конфигураторе: Администрирование → Пользователи, вкладка «Прочие».
💡 После выдачи прав пользователю нужно перезапустить сеанс. Права подтягиваются при входе в программу.
5. Как подключить и обновить расширение в рабочей базе
Готовое расширение сохраняют в файл .cfe: в окне списка расширений меню «Конфигурация» → «Сохранить в файл». Дальше есть три пути.
| Способ | Кто делает | Когда удобно |
|---|---|---|
| Конфигуратор | Разработчик | Отладка, первая установка |
| Пользовательский режим | Администратор базы | Нет доступа к конфигуратору, облако |
| Командная строка | Админ серверов | Много баз, ночные обновления |
Через конфигуратор
Конфигурация → Расширения конфигурации, кнопка «Добавить».- В окне нового расширения: «Конфигурация» → «Загрузить из файла», выберите
.cfe. - Выполните «Обновить конфигурацию базы данных» для этого расширения.
Загрузка файла и обновление конфигурации БД — разные шаги. Без второго шага расширение в базе не применится.
В пользовательском режиме
В БП 3.0, ЗУП 3.1 и УТ 11 список находится в Администрирование → Печатные формы, отчеты и обработки → Расширения. Кнопка «Добавить из файла» загружает .cfe. Новое расширение открывается с флагом безопасного режима — снимите его, только если разработчик это предусмотрел.
Если раздел не найден, откройте функцию Все функции → Стандартные → Управление расширениями конфигурации. Она есть в любой конфигурации на 8.3. Пункт «Все функции» включают в параметрах программы.
Из командной строки
Пакетный режим конфигуратора принимает параметр -Extension с именем расширения:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /S "srv01\buh" /N "Админ" /P "пароль" ^
/LoadCfg "D:\ext\Sklad.cfe" -Extension Sklad ^
/UpdateDBCfg -Extension Sklad ^
/Out "D:\ext\log.txt"
Номер платформы в пути замените на свой. Пароль в bat-файле храните только на защищённом сервере.
Обновление расширения
Новая версия загружается поверх старой тем же способом. Данные собственных объектов и добавленных реквизитов сохраняются, если вы не удаляли сами реквизиты.
Удаление реквизита или объекта из расширения удаляет его данные при обновлении конфигурации БД. Перед поставкой такой версии сделайте выгрузку базы.
После установки или обновления пользователи увидят изменения только после перезапуска программы.
6. Ошибки применения и отладка расширения
Как отлаживать код
Модули расширения отлаживаются так же, как модули основной конфигурации. Ставьте точку останова в методе с аннотацией и запускайте Отладка → Начать отладку. Отладчик зайдёт в перехватчик, а по ПродолжитьВызов() — в исходный метод.
Для серверного кода в клиент-серверной базе включите отладку на сервере кластера. Без неё точки останова в серверных модулях не сработают.
Частые проблемы
💡 Список расширений в конфигураторе позволяет проверить применимость без запуска программы. Делайте эту проверку на копии базы сразу после обновления типовой, до выхода к пользователям.
7. Версии, отключение и удаление расширений
Как вести версии
- 🏷 Повышайте свойство «Версия» при каждой поставке. По нему в списке видно, что стоит в базе.
- 🗂 Храните
.cfeкаждой версии отдельно, хотя бы в папке с датами. - 👥 Если разработчиков несколько, подключите расширение к своему хранилищу конфигурации:
Конфигурация → Хранилище конфигурациив окне расширения.
Отключить, а не удалить
Для проверки, не расширение ли ломает базу, снимите флаг «Активно» в списке расширений. Расширение и его данные останутся, а программа запустится без доработки. Это первый шаг диагностики любой странной ошибки в базе с расширениями.
Удаление
- Сохраните расширение в файл
.cfe, чтобы его можно было вернуть. - Выгрузите базу в
.dt, если в расширении есть собственные данные. - Удалите расширение в списке (конфигуратор или раздел «Расширения» в программе).
Из командной строки расширение удаляют параметром /DeleteCfg -Extension Имя.
Удаление расширения стирает данные его объектов и добавленных реквизитов без возможности отменить. Если данные нужны, сначала перенесите их в основную конфигурацию или выгрузите.