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