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