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

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

Что такое элемент формы в 1С и как с ним работать

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

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

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

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

Чем элемент формы отличается от реквизита и команды

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

Один реквизит может отображаться несколькими элементами или не отображаться вовсе. Например, реквизит «Комментарий» можно показать полем ввода на основной вкладке и одновременно надписью в подвале формы. И наоборот: элемент может существовать без реквизита — надписи-заголовки, декорации и кнопки команд данными не обладают.

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

Основные виды элементов формы

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

  • Поле формы — универсальный элемент для отображения и редактирования реквизита. В зависимости от типа данных и настройки принимает вид поля ввода, флажка, переключателя, поля картинки, поля HTML-документа и других.
  • Таблица формы — отображает табличную часть объекта или реквизит типа «ТаблицаЗначений» / «ДинамическийСписок». Содержит колонки, которые сами являются элементами.
  • Кнопка формы — связана с командой. Может размещаться в командной панели или непосредственно на форме.
  • Группа формы — контейнер для других элементов: обычная группа, страницы, страница, командная панель, группа кнопок. Управляет компоновкой вложенных элементов.
  • Декорация формы — надпись или картинка без привязки к данным, служит для оформления и пояснений.

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

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

Проверьте свойство ПутьКДанным — оно указывает на реквизит

Сетка со строками и колонкамиТаблица формы

Источником данных обычно служит табличная часть или динамический список

Нажатие выполняет действиеКнопка формы

Смотрите свойство ИмяКоманды и обработчик команды в модуле формы

Текст без возможности вводаДекорация или надпись

Текст задаётся свойством Заголовок, данных у элемента нет

Как добавить элемент формы в конфигураторе

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

Чтобы добавить поле для существующего реквизита, перетащите реквизит из панели «Реквизиты» в нужное место дерева элементов — платформа сама создаст поле подходящего вида. Для нового элемента без реквизита используйте контекстное меню дерева элементов: «Добавить» → нужный вид (группа, декорация, кнопка).

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

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

Ключевые свойства элементов и за что они отвечают

Свойства элемента задаются в палитре свойств конфигуратора или программно. Наиболее востребованные:

  • Имя — уникальный идентификатор элемента в пределах формы. По имени к элементу обращаются из кода: Элементы.Номенклатура.
  • ПутьКДанным — привязка к реквизиту. Именно через это свойство поле получает и сохраняет значение.
  • Видимость и Доступность — первое скрывает элемент полностью, второе оставляет его на экране, но запрещает редактирование.
  • ТолькоПросмотр — пользователь видит значение, но не может его изменить; в отличие от «Доступность = Ложь», элемент выглядит активным.
  • Заголовок — текст подписи. Если не задан, берётся синоним реквизита.
  • Подсказка и ОтображениеПодсказки — пояснение для пользователя, может выводиться всплывающей подсказкой или кнопкой.

Для таблиц отдельно важны свойства «КоманднаяПанель» (автозаполнение стандартными кнопками добавления и удаления строк) и «ИзменятьПорядокСтрок». У полей ввода ссылочных типов полезны «КнопкаВыбора», «КнопкаОчистки» и «БыстрыйВыбор» — они управляют тем, как пользователь подбирает значение.

Программная работа с элементами формы

В управляемой форме элементы доступны через коллекцию Элементы. Обращение идёт по имени: Элементы.Комментарий.Видимость = Ложь;. Добавление элемента из кода выполняется методом Элементы.Добавить(Имя, Тип, Родитель), при этом реквизит для поля придётся создать заранее через ИзменитьРеквизиты().

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

bsl
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	Элементы.Договор.Видимость = ЗначениеЗаполнено(Объект.Контрагент);
КонецПроцедуры

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

События элементов: когда срабатывают обработчики

Каждый вид элемента имеет свой набор событий. Для полей ввода ключевые — ПриИзменении (значение изменено пользователем), НачалоВыбора (открытие формы подбора), ОбработкаВыбора (завершение выбора), АвтоПодбор и ОкончаниеВводаТекста (работа с вводом по строке).

Для таблиц формы важны ПриАктивизацииСтроки, ПередНачаломДобавления, ПередУдалением и ПередОкончаниемРедактирования. Через параметр Отказ в этих событиях можно запретить действие — например, не дать удалить строку, если она уже отправлена в обработку.

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

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

Ограничения и особенности управляемых форм

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

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

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

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

Как проверить результат доработки формы

Открытие формы в режиме Предприятие
Норма

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

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

Ошибка «Поле объекта не обнаружено» или элемент отсутствует

Заполнение и сохранение объекта
Норма

Значение из нового поля сохраняется и восстанавливается при повторном открытии

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

Значение теряется — проверьте ПутьКДанным и наличие реквизита у объекта

Видимость и доступность
Норма

Элемент скрывается и блокируется по заданным условиям

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

Условие срабатывает только после перезаписи — логика не в том обработчике

Работа в веб-клиенте
Норма

Поведение совпадает с тонким клиентом

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

Использованы возможности, недоступные в веб-клиенте

Часто задаваемые вопросы

Чем элемент формы отличается от реквизита формы?

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

Как скрыть элемент формы программно?

В модуле управляемой формы установите свойство: Элементы.ИмяЭлемента.Видимость = Ложь;. Обычно это делают в обработчике ПриСозданииНаСервере для начального состояния или в ПриИзменении управляющего поля для динамического переключения.

Почему возникает ошибка «Поле объекта не обнаружено» при открытии формы?

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

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

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

Как сделать поле доступным только для чтения?

Установите у элемента свойство ТолькоПросмотр = Истина в палитре свойств или программно. Значение останется видимым и доступным для копирования, но редактировать его пользователь не сможет. Альтернатива — Доступность = Ложь, но тогда поле затеняется и копирование из него затруднено.

Почему добавленный кодом элемент пропадает после переоткрытия формы?

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

Итог

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

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