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

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

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

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

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

Термин используется в двух близких смыслах. Первый — программное дополнение формы: элементы создаются и настраиваются кодом в модуле формы, обычно в обработчике «ПриСозданииНаСервере». Второй — дополнение формы через механизм расширений конфигурации, когда форма заимствуется из основной конфигурации и дорабатывается в расширении, а исходный объект остаётся нетронутым.

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

Что такое элемент формы и зачем его дополнять

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

Типовые конфигурации поставляются с готовыми формами, но реальные процессы компании почти всегда требуют доработок. Типичные сценарии: вывести на форму документа дополнительный реквизит «Номер договора поставщика», добавить кнопку отправки печатной формы по почте, показать в списке справочника колонку с остатком, скрыть поля, которые не используются в учёте.

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

Два способа дополнения формы: код и расширение

Программное дополнение выполняется в модуле формы. Разработчик в обработчике «ПриСозданииНаСервере» добавляет реквизиты формы через метод «ИзменитьРеквизиты», создаёт элементы через «Элементы.Добавить» и привязывает их к данным. Этот способ гибок: можно строить интерфейс динамически в зависимости от прав пользователя, вида операции или настроек.

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

Сравнение вариантов

Программное дополнение в модуле формы

Подходит для динамических интерфейсов и условной логики; требует аккуратного кода и не виден визуально в конфигураторе.

Расширение конфигурации

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

Прямая правка формы в конфигураторе

Подходит только для собственных конфигураций; для типовых ведёт к снятию с поддержки и сложному обновлению.

На практике способы комбинируют: статичные элементы добавляют в расширении, а условную видимость и динамические колонки формируют кодом.

Программное добавление элемента: порядок действий

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

Порядок действий
  1. 1
    Откройте модуль формы и создайте или найдите обработчик ПриСозданииНаСервере
  2. 2
    Опишите новый реквизит формы через объект ОписаниеРеквизитаФормы (имя, тип, путь)
  3. 3
    Вызовите ИзменитьРеквизиты с массивом добавляемых реквизитов
  4. 4
    Создайте элемент: Элементы.Добавить с указанием имени и типа (ПолеФормы, КнопкаФормы)
  5. 5
    Задайте родителя элемента (группу), вид поля и ПутьКДанным
  6. 6
    Настройте свойства: Заголовок, Видимость, Доступность, положение
  7. 7
    Для кнопок создайте команду формы и назначьте ей обработчик
  8. 8
    Откройте форму в режиме предприятия и проверьте отображение и работу элемента

Пример типового кода добавления поля:

ДобавляемыеРеквизиты = Новый Массив;

Описание = Новый ОписаниеРеквизитаФормы("НомерДоговораПоставщика",

Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50)));

ДобавляемыеРеквизиты.Добавить(Описание);

ИзменитьРеквизиты(ДобавляемыеРеквизиты);

НовыйЭлемент = Элементы.Добавить("НомерДоговораПоставщика", Тип("ПолеФормы"), Элементы.ГруппаШапка);

НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;

НовыйЭлемент.ПутьКДанным = "НомерДоговораПоставщика";

НовыйЭлемент.Заголовок = "Номер договора поставщика";

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

Дополнение формы через расширение конфигурации

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

Новые элементы можно размещать относительно существующих: в свойствах расширения формы указывается, после какого элемента вставить новый. Также в расширении доступно изменение ряда свойств заимствованных элементов — заголовка, видимости, доступности, подсказки. Состав изменяемых свойств ограничен платформой: например, нельзя поменять тип поля или путь к данным у заимствованного элемента.

Для кнопок в расширении создаётся собственная команда с обработчиком в модуле формы расширения. Обработчики событий типовой формы можно перехватывать директивами «&После», «&Перед» и «&Вместо», что позволяет дополнять логику без изменения исходного кода.

Типичные сценарии дополнения элементов

Добавление колонки в табличную часть или динамический список

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

Добавление кнопки с командой

Кнопка без команды не выполняет действий. Сначала создаётся команда формы (Команды.Добавить), ей назначается обработчик — имя процедуры с директивой «&НаКлиенте» или «&НаСервере», затем кнопка привязывается к команде через свойство «ИмяКоманды».

Условное изменение видимости и заголовков

Самый безопасный сценарий — изменение свойств существующих элементов: «Элементы.Склад.Видимость = Ложь». Такие правки не меняют структуру данных и легко откатываются. Условная видимость часто строится по функциональным опциям или ролям пользователя.

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

Проверка результата и ограничения

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

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

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

Отображение элемента
Норма

Элемент виден в нужной группе, заголовок корректен

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

Элемент отсутствует, смещён или без заголовка

Работа с данными
Норма

Введённое значение сохраняется и читается при повторном открытии

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

Значение пропадает после записи или переоткрытия формы

Права пользователей
Норма

Форма открывается у пользователей с ограниченными правами

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

Ошибка доступа или пустые данные у части пользователей

Поведение после обновления
Норма

Расширение применяется, форма открывается без ошибок

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

Ошибка при открытии формы после обновления конфигурации

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

FAQ

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

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

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

Удалить элемент, созданный в конфигураторе, программно нельзя — можно только скрыть его (Видимость = Ложь) или сделать недоступным. Для полного исключения элемента из интерфейса обычно достаточно скрытия; оно не влияет на данные и легко отменяется.

Где хранить значение программно добавленного поля?

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

Почему после обновления конфигурации расширение формы сломалось?

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

Можно ли добавить элемент на форму списка или форму выбора?

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

Нужны ли особые права для подключения расширения конфигурации?

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

Итог

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

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