К статье
Практический материал

Разработка и Конфигурация · 12 мин

Расширение формы в 1С: что это и как его использовать

Что такое расширение формы в 1С, чем оно отличается от доработки конфигурации, как добавить реквизиты и команды на форму без снятия с поддержки.

Расширение формы — это механизм платформы 1С:Предприятие, который позволяет изменить внешний вид и поведение формы объекта (документа, справочника, отчёта) без изменения самой конфигурации. Доработка хранится в отдельном объекте — расширении конфигурации — и подключается к базе поверх типового решения.

Главная причина использовать расширение — сохранить конфигурацию на полной поддержке поставщика. Типовые конфигурации (Бухгалтерия, Управление торговлей, Зарплата и управление персоналом) регулярно обновляются, и любые прямые изменения форм усложняют или блокируют автоматическое обновление. Расширение решает эту проблему: форма дорабатывается «снаружи», а типовой код остаётся нетронутым.

Механизм доступен в управляемых формах на платформе 8.3.6 и новее, при этом с каждой версией платформы список того, что можно изменять через расширение, расширяется. В современных версиях через расширение можно добавлять реквизиты, элементы, команды, обработчики событий и даже переопределять типовые процедуры модуля формы.

Чем расширение формы отличается от обычной доработки

При классической доработке разработчик открывает конфигуратор, включает возможность изменения объекта и правит форму напрямую. С этого момента объект считается изменённым, и при обновлении конфигурации платформа потребует ручного сравнения и объединения — каждое обновление превращается в работу для специалиста.

Расширение работает иначе. Оно существует как отдельный объект, который «наслаивается» на типовую форму в момент открытия. Платформа берёт типовую форму и применяет к ней изменения из расширения: добавляет элементы, подменяет обработчики, вставляет команды. Сама типовая форма при этом физически не меняется.

При обновлении конфигурации расширение продолжает работать, если изменения в типовой форме не затронули заимствованные элементы. Если же поставщик переименовал элемент или процедуру, на которые ссылается расширение, механизм контроля применимости покажет ошибку — и её можно исправить точечно, а не разбирать всю форму.

Доработка формы: два подхода

Изменение конфигурации

Полная свобода изменений, но объект снимается с поддержки, каждое обновление требует сравнения и объединения

Расширение формы

Конфигурация остаётся типовой, обновления проходят автоматически, но есть ограничения на состав изменений

Дополнительные реквизиты и сведения (БСП)

Подходит для простых полей без программной логики, настраивается пользователем без конфигуратора

Что можно изменить в форме через расширение

Состав возможных изменений зависит от версии платформы, но в актуальных релизах через расширение формы можно выполнять большинство практических задач. Основные возможности:

  • добавление новых реквизитов формы и элементов (полей, групп, таблиц, кнопок);
  • добавление команд формы и размещение их в командной панели;
  • изменение свойств существующих элементов — заголовка, видимости, доступности, расположения;
  • добавление собственных обработчиков событий формы и элементов;
  • перехват типовых процедур и функций модуля формы — с вызовом до, после или вместо типового кода;
  • добавление параметров формы и работа с ними в обработчиках.

Есть и ограничения. Нельзя удалять типовые элементы формы — можно только скрыть их, установив видимость. Нельзя изменить тип существующего реквизита. Переопределение типовых методов возможно только через специальные аннотации (&Перед, &После, &Вместо, &ИзменениеИКонтроль), и некорректный перехват может нарушить логику формы.

Как создать расширение и заимствовать форму

Работа ведётся в конфигураторе. Общий порядок такой: сначала создаётся само расширение, затем в него заимствуется нужная форма, после чего вносятся изменения.

Порядок создания расширения формы
  1. 1
    Откройте конфигуратор и в меню «Конфигурация» выберите «Расширения конфигурации»
  2. 2
    Создайте новое расширение, задайте имя и префикс — префикс будет добавляться к именам ваших объектов и процедур
  3. 3
    В дереве конфигурации найдите нужный объект (документ, справочник), раскройте его формы
  4. 4
    Через контекстное меню формы выберите «Добавить в расширение» — форма появится в дереве расширения
  5. 5
    Откройте заимствованную форму в расширении и внесите изменения: добавьте реквизиты, элементы, команды, обработчики
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте форму в режиме предприятия

Заимствованная форма в расширении выглядит как копия типовой, но платформа хранит только изменения. Элементы, которые вы не трогали, остаются «унаследованными» от типовой формы и автоматически подхватывают её изменения при обновлениях конфигурации.

Префикс расширения важен: все добавляемые вами реквизиты, команды и процедуры должны именоваться с этим префиксом. Это исключает конфликты имён с типовой конфигурацией и с другими расширениями, подключёнными к той же базе.

Добавление реквизита на форму: практический пример

Типовая задача — вывести на форму документа дополнительное поле, например «Комментарий для склада». Если данные нужно хранить в базе, одного расширения формы недостаточно: реквизит объекта добавляется через расширение конфигурации (заимствование объекта и добавление реквизита), а на форму он выводится уже через расширение формы. Если же поле нужно только для отображения или промежуточных расчётов, достаточно реквизита формы.

Для реквизита формы в редакторе формы расширения добавьте реквизит нужного типа, затем перетащите его в дерево элементов в нужное место — например, после поля «Комментарий». Платформа показывает заимствованные элементы серым, а добавленные вами — обычным цветом, так что структура изменений хорошо видна.

Если нужно отреагировать на изменение поля, добавьте обработчик события «ПриИзменении» прямо в модуле формы расширения. Код обработчика пишется в модуле формы расширения и имеет доступ как к вашим реквизитам, так и к реквизитам типовой формы.

bsl
&НаКлиенте
Процедура Расш1_КомментарийДляСкладаПриИзменении(Элемент)
	Если СтрДлина(Объект.Расш1_КомментарийДляСклада) > 200 Тогда
		Сообщить("Комментарий слишком длинный");
	КонецЕсли;
КонецПроцедуры

Перехват типовых процедур модуля формы

Часто требуется не добавить новое, а изменить поведение существующего кода — например, выполнить дополнительную проверку при записи документа. Для этого типовая процедура заимствуется в модуль формы расширения, и к ней применяется аннотация перехвата.

Доступны четыре варианта перехвата. &Перед — ваш код выполняется до типового, &После — после него. &Вместо — полностью заменяет типовую процедуру (типовой код можно вызвать вручную через специальную конструкцию, если платформа это позволяет). &ИзменениеИКонтроль — самый безопасный вариант: вы вставляете свои фрагменты в текст типовой процедуры через специальные директивы, и платформа контролирует, что заимствованный код совпадает с актуальным типовым.

Маршрут решения

Как выбрать способ перехвата

Нужно выполнить свою проверку или заполнение до типовой логикиИспользуйте аннотацию &Перед — типовой код выполнится после вашего
Нужно дополнить результат работы типовой процедурыИспользуйте &После — типовая логика отработает первой
Нужно вставить код в середину типовой процедуры и контролировать её изменения при обновленияхИспользуйте &ИзменениеИКонтроль с директивами #Вставка и #КонецВставки
Типовая процедура должна быть заменена полностьюИспользуйте &Вместо, но учтите: при обновлении типового кода вы его не увидите, контроль придётся вести вручную

Аннотация &Вместо — самая рискованная. После обновления конфигурации типовая процедура может измениться, но расширение продолжит подменять её старой логикой, и вы этого не заметите до появления ошибок в работе пользователей. По возможности выбирайте &Перед, &После или &ИзменениеИКонтроль.

Проверка работы и контроль применимости

После обновления базы откройте форму в режиме предприятия и проверьте: добавленные элементы видны и расположены правильно, команды выполняются, обработчики срабатывают. Проверяйте форму под пользователем с теми же правами, что у реальных пользователей, — расширение применяется с учётом ролей и может вести себя иначе, чем под администратором.

Платформа умеет проверять применимость расширения: в списке расширений есть команда контроля, которая покажет, какие заимствованные объекты перестали соответствовать конфигурации. Эту проверку обязательно запускайте после каждого обновления конфигурации — именно она покажет, что поставщик переименовал элемент или изменил типовую процедуру, на которую вы опирались.

Контрольные точки

Как проверить результат

Форма открывается в режиме предприятия
Норма

Форма открывается без ошибок, новые элементы на месте

Тревожный признак

Ошибка при открытии или отсутствие добавленных элементов — проверьте, что расширение подключено и активно

Работа под обычным пользователем
Норма

Поведение формы одинаково под администратором и пользователем

Тревожный признак

Под пользователем элементы недоступны — проверьте роли и безопасный режим расширения

Контроль применимости после обновления конфигурации
Норма

Проверка не выявила несоответствий

Тревожный признак

Есть ошибки применимости — исправьте ссылки на переименованные или удалённые типовые элементы

Типичные ошибки и ограничения

Расширения форм снижают риски доработки, но не устраняют их полностью. Ошибки чаще всего связаны с перехватом кода и с зависимостью от типовых элементов.

Типичные ошибки
01
Использование &Вместо без необходимости — после обновления конфигурации типовые исправления перестают применяться, а ошибка проявляется не сразу
02
Добавление реквизита формы там, где нужен реквизит объекта — данные не сохраняются в базе и теряются при закрытии формы
03
Ссылка на типовой элемент по имени без контроля — после переименования элемента поставщиком расширение перестаёт применяться
04
Забытый префикс в именах — конфликт имён с типовыми объектами или другими расширениями
05
Проверка только под администратором — у пользователей с ограниченными правами форма ведёт себя иначе

Отдельно стоит помнить про безопасный режим. Расширение можно подключить в безопасном режиме — тогда код с обращением к файловой системе, COM-объектам и внешним компонентам будет заблокирован. Для расширений форм это редко проблема, но если обработчики обращаются к внешним ресурсам, проверьте настройки безопасного режима и профили безопасности в кластере.

Когда расширение не подходит

Расширение формы — не универсальный инструмент. Если требуется глубокая переработка бизнес-логики, изменение движений документа по регистрам, добавление новых объектов метаданных сложной структуры — возможностей расширения может не хватить, и придётся дорабатывать конфигурацию напрямую.

Для простых пользовательских полей без программной логики часто достаточно механизма дополнительных реквизитов и сведений, встроенного в типовые конфигурации на базе БСП. Он настраивается пользователем в режиме предприятия без конфигуратора и вообще не требует разработки. Расширение формы оправдано, когда нужна именно программная доработка: свои команды, обработчики, проверки, нестандартное расположение элементов.

Итог

Что важно запомнить

Расширение формы позволяет доработать форму без изменения типовой конфигурации: добавить реквизиты, элементы, команды и обработчики, перехватить типовые процедуры. Конфигурация остаётся на поддержке, обновления проходят автоматически, а после каждого обновления достаточно запустить контроль применимости расширения.

Частые вопросы

Снимает ли расширение формы конфигурацию с поддержки?

Нет. Расширение хранится отдельно от конфигурации и не изменяет её объекты. Конфигурация остаётся на полной поддержке поставщика и обновляется в автоматическом режиме.

Что произойдёт с расширением после обновления конфигурации?

Если обновление не затронуло заимствованные вами элементы и процедуры, расширение продолжит работать без изменений. Если поставщик переименовал или удалил элементы, на которые ссылается расширение, контроль применимости покажет ошибки — их нужно исправить в расширении.

Можно ли через расширение удалить элемент с типовой формы?

Нет, удалить типовой элемент нельзя. Можно скрыть его, установив свойство видимости в «Ложь», или переместить в другое место формы. Для пользователя скрытый элемент выглядит как удалённый.

Сколько расширений можно подключить к одной базе?

Жёсткого ограничения нет, к одной форме могут применяться несколько расширений одновременно. Порядок их применения определяется списком расширений, поэтому при конфликтах изменений учитывайте, какое расширение применяется последним.

Можно ли добавить на форму поле, данные которого хранятся в базе?

Да, но для этого реквизит нужно добавить в сам объект (документ или справочник) через расширение конфигурации, а на форму вывести уже через расширение формы. Реквизит формы, добавленный только в расширение формы, в базе не сохраняется.

Чем расширение формы отличается от дополнительных реквизитов в типовой конфигурации?

Дополнительные реквизиты настраиваются пользователем без конфигуратора и подходят для простых полей. Расширение формы требует разработки, но позволяет добавлять команды, обработчики событий, менять расположение элементов и перехватывать типовой код — то есть реализовать любую программную логику.