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