Разработка и Конфигурация · 13 мин
Как сделать расширение конфигурации в 1С 8.3
Как создать расширение конфигурации в 1С 8.3: подготовка, добавление форм и процедур, контроль применимости, типовые ошибки и проверка результата после обновлений.
Расширение конфигурации в 1С 8.3 — это механизм, который позволяет добавить или изменить функциональность типовой конфигурации без снятия её с поддержки. Вместо правки самой конфигурации вы создаёте отдельный «слой» изменений, который подключается к базе и работает поверх исходного кода. При обновлении типовой конфигурации расширение сохраняется, и вам не нужно заново вносить доработки.
Типовые сценарии использования расширений: добавить кнопку или команду на форму документа, изменить печатную форму, дописать проверки при проведении, добавить реквизит или отчёт. Всё это делается через конфигуратор в режиме работы с расширениями, без изменения основной конфигурации поставщика.
Ниже — полный практический цикл: от подготовки базы до проверки работоспособности расширения после обновления конфигурации. Материал ориентирован на платформу 8.3.11 и новее, где механизм расширений достаточно развит для большинства прикладных задач.
Когда расширение подходит, а когда нужна доработка конфигурации
Расширение — не универсальный инструмент. Оно позволяет добавлять новые объекты (справочники, документы, отчёты, обработки, роли), заимствовать формы и модули типовых объектов, переопределять обработчики событий через аннотации &ИзменениеИКонтроль, &Вместо, &Перед, &После. Но есть ограничения: нельзя изменять структуру существующих реквизитов, типы данных, составы движений документов и ряд других свойств, жёстко заданных в основной конфигурации.
Если задача — изменить типовую печатную форму, добавить кнопку на форму, вставить дополнительную проверку перед записью документа — берите расширение. Если нужно поменять логику проведения документа на уровне движений по регистрам или изменить состав измерений регистра — расширение не справится, потребуется доработка основной конфигурации с частичным снятием с поддержки.
Как выбрать действие
Подготовка: что проверить перед созданием расширения
Перед началом работы убедитесь, что версия платформы поддерживает нужные возможности расширений. Механизм появился в 8.3.6, но полноценная работа с формами, ролями и аннотацией &ИзменениеИКонтроль потребовала более поздних релизов. Для комфортной разработки ориентируйтесь на платформу не ниже 8.3.11, а для изменения ролей и некоторых объектов — на ещё более свежие версии. Проверить версию можно через «Сервис → О программе».
Обязательно сделайте резервную копию базы перед любыми изменениями — даже расширение с ошибкой в обработчике может нарушить работу пользователей, например заблокировать запись документов. Для файловой базы достаточно скопировать файл 1Cv8.1CD или выгрузить базу через «Администрирование → Выгрузить информационную базу». Для клиент-серверной — используйте штатные средства СУБД.
Также проверьте, что у вас есть права на изменение конфигурации и что база не находится в режиме, запрещающем подключение расширений. В некоторых конфигурациях администраторы включают профили безопасности, ограничивающие расширения, — уточните этот момент до начала разработки.
Создание расширения в конфигураторе: пошагово
Откройте конфигуратор и загрузите основную конфигурацию («Конфигурация → Открыть конфигурацию»). Затем перейдите в меню «Конфигурация → Расширения конфигурации». В открывшемся списке нажмите «Создать». Появится окно свойств нового расширения — задайте имя (латиницей, без пробелов, например ДоработкиПечати), префикс для новых объектов и, при необходимости, синоним для отображения пользователям.
После создания в дереве конфигурации появится ветка расширения. Работа с ней похожа на обычную разработку, но с ключевым отличием: чтобы изменить типовой объект, его нужно сначала заимствовать. Для этого в основной конфигурации найдите нужный объект (например, форму документа), вызовите контекстное меню и выберите «Добавить в расширение». Объект появится в дереве расширения, и вы сможете его изменять.
Новые объекты (отчёты, обработки, общие модули, подсистемы) добавляются прямо в расширение обычным способом — через контекстное меню «Добавить» в ветке расширения. Они будут существовать только внутри расширения и не затронут основную конфигурацию.
- 1Сделайте резервную копию базы и работайте на копии
- 2Откройте конфигуратор, загрузите основную конфигурацию
- 3Конфигурация → Расширения конфигурации → Создать, задайте имя и префикс
- 4Заимствуйте нужные объекты через «Добавить в расширение» или создайте новые
- 5Добавьте код, формы, команды; сохраните расширение (Ctrl+S)
- 6Обновите конфигурацию базы данных (F7) и проверьте работу в режиме предприятия
Изменение кода: аннотации перехвата обработчиков
Главный инструмент доработки типовой логики — заимствование процедур и функций из модулей основной конфигурации. Когда вы добавляете в расширение процедуру с тем же именем, платформа требует указать, как она соотносится с типовой. Для этого используются аннотации перед объявлением процедуры.
Аннотация &Вместо("ИмяПроцедуры") полностью заменяет типовой обработчик — исходный код не выполнится. Это рискованный вариант: после обновления конфигурации вы можете потерять новые исправления поставщика. Аннотации &Перед и &После выполняют ваш код до или после типового, не трогая его самого — это самый безопасный способ. Аннотация &ИзменениеИКонтроль позволяет вставить свой код внутрь типовой процедуры с помощью директив #Вставка и #КонецВставки, при этом платформа контролирует, что неизменённые участки совпадают с типовым кодом.
&После("ПриЗаписи")
Процедура Расш1_ПриЗаписи(Отказ)
Если Не ЗначениеЗаполнено(Комментарий) Тогда
Комментарий = "Проверено расширением";
КонецЕсли;
КонецПроцедурыИмена процедур в расширении рекомендуется начинать с префикса расширения (например, Расш1_), чтобы избежать конфликтов имён при обновлениях. Платформа сама предложит такое имя при заимствовании обработчика через контекстное меню модуля.
Доработка форм и добавление команд
Чтобы добавить кнопку или изменить расположение элементов на типовой форме, заимствуйте форму в расширение и откройте её редактор. В заимствованной форме можно добавлять новые элементы, менять свойства существующих (доступность, видимость, заголовки) и создавать команды. Удалить типовые элементы нельзя — можно только скрыть их через свойство «Видимость».
Новая команда создаётся в дереве команд формы, после чего перетаскивается в дерево элементов (например, в командную панель). Для команды назначается обработчик — процедура в модуле формы расширения с директивой &НаКлиенте или &НаСервере. Если обработчику нужны данные с сервера (запрос к базе, проведение), вызывайте из клиентской процедуры серверную — стандартная схема клиент-серверного взаимодействия в управляемых формах.
Проверяйте результат в режиме предприятия сразу после сохранения: откройте изменённый документ, нажмите новую кнопку, убедитесь, что типовые элементы формы работают как раньше. Частая проблема — после доработки форма «поехала»: элементы наложились друг на друга. Это лечится настройкой группировки и свойств растягивания элементов в редакторе формы.
Подключение, отладка и контроль применимости
После сохранения расширения и обновления конфигурации базы данных (F7) расширение подключается автоматически. Управлять подключением можно в режиме предприятия: «Администрирование → Печатные формы, отчёты и обработки → Расширения» (в типовых конфигурациях путь может отличаться). Там же расширение можно временно отключить — это полезно для диагностики: если ошибка исчезла после отключения, причина в расширении.
Отладка кода расширения работает так же, как отладка основной конфигурации: точки останова ставятся в модулях расширения, конфигуратор подключается к сеансу предприятия через «Отладка → Подключение». Убедитесь, что в настройках отладки разрешена отладка расширений — в старых версиях платформы это отдельная настройка.
Критически важный этап — контроль применимости после обновления основной конфигурации. Если поставщик изменил заимствованный объект, расширение может стать неприменимым. Платформа проверяет это автоматически и отключает проблемное расширение, а в конфигураторе в списке расширений появляется признак несоответствия. Ваша задача после каждого обновления — открыть список расширений, убедиться, что все они применимы, и при необходимости синхронизировать заимствованные объекты с новой версией типовой конфигурации.
Как проверить результат
Расширение подключено, признаков несовместимости нет
Расширение отключено платформой или помечено как неприменимое
Документы проводятся, отчёты формируются как раньше
Ошибки при записи или проведении после подключения расширения
Кнопка/печатная форма/проверка работают на тестовых данных
Обработчик не вызывается или падает с ошибкой
Контроль применимости пройден, расширение активно
Появились сообщения о несоответствии заимствованных объектов
Типичные ошибки и ограничения расширений
Самая частая ошибка новичков — попытка изменить в расширении то, что механизм не поддерживает: тип реквизита, состав движений, обязательность заполнения на уровне свойств объекта. Конфигуратор в таких случаях либо не даст изменить свойство, либо расширение не пройдёт проверку применимости. Второе по частоте — использование &Вместо там, где достаточно &После, что приводит к потере типовых исправлений при обновлениях.
Ещё одна группа проблем — конфликты нескольких расширений. Если два расширения изменяют один и тот же обработчик, порядок их выполнения определяется порядком подключения, и результат может быть неожиданным. Держите количество расширений минимальным и документируйте, какое расширение за что отвечает.
Перенос расширения между базами
Готовое расширение сохраняется в файл через кнопку «Сохранить в файл» в списке расширений конфигуратора — получается файл с расширением *.cfe. Этот файл загружается в другую базу через «Загрузить из файла». Учтите: расширение привязано к структуре конкретной конфигурации, поэтому переносить его имеет смысл только между базами с одинаковой (или совместимой) версией конфигурации поставщика.
При загрузке в рабочую базу действуйте вне пиковой нагрузки: обновление конфигурации базы данных в клиент-серверном режиме может потребовать монопольного доступа или завершения сеансов пользователей. После загрузки сразу проверьте применимость и работу ключевых сценариев.
Что важно запомнить
Расширение создаётся через «Конфигурация → Расширения конфигурации», изменяет типовые объекты через заимствование и аннотации, не снимает конфигурацию с поддержки. Разрабатывайте на копии, предпочитайте &Перед и &После аннотации &Вместо, и после каждого обновления проверяйте применимость расширения.
Частые вопросы
Снимается ли конфигурация с поддержки при подключении расширения?
Нет. Расширение хранится отдельно от основной конфигурации и не изменяет её код. Конфигурация остаётся на полной поддержке поставщика и обновляется штатно. Это главное преимущество механизма перед прямой доработкой.
Можно ли в расширении изменить проведение типового документа?
Частично. Вы можете добавить обработчики «ПередПроведением» или «ПослеПроведения» через аннотации, создать дополнительные проверки и даже отменить проведение установкой Отказ = Истина. Но изменить состав движений по регистрам или логику формирования существующих движений через расширение нельзя — для этого потребуется доработка основной конфигурации.
Что делать, если после обновления конфигурации расширение отключилось?
Откройте конфигуратор, перейдите в список расширений и посмотрите признак применимости. Обычно проблема в том, что поставщик изменил заимствованный объект. Обновите заимствование: удалите объект из расширения и добавьте его заново, затем перенесите свои изменения в новую версию. Для процедур с &ИзменениеИКонтроль платформа покажет, какие участки типового кода изменились.
Сколько расширений можно подключить к одной базе?
Жёсткого ограничения нет, но практический совет — минимизировать количество. Каждое расширение усложняет диагностику ошибок и контроль при обновлениях, а два расширения, изменяющие один обработчик, могут конфликтовать. Логично объединять связанные доработки в одно расширение с понятным именем.
Работают ли расширения в файловой и клиент-серверной базе одинаково?
Да, механизм одинаков. Различия только в развёртывании: в клиент-серверном варианте при обновлении конфигурации базы данных может потребоваться завершение сеансов пользователей, а в файловой базе достаточно, чтобы никто не работал в момент обновления.
Можно ли отладить код расширения точками останова?
Да. Отладка расширений поддерживается штатно: ставьте точки останова в модулях расширения в конфигураторе и запускайте отладку предприятия обычным способом. Если точки не срабатывают, проверьте, что расширение подключено и применимо, а в настройках отладки разрешена отладка расширений.