Поля управляемой формы 1С 8.3: привязка, свойства, форматы и управление из кода

· 10 мин

Содержание

Поле в 1С 8.3 настраивают в Конфигураторе, в редакторе формы: на вкладке «Реквизиты» создают реквизит, перетаскивают его в дерево «Элементы», а затем в палитре свойств поля задают вид, заголовок, ширину, формат и маску. Пользователь без Конфигуратора может только скрыть или переставить уже существующие поля: Ещё → Изменить форму.

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

С чего начинается настройка полей в Конфигураторе

Редактор управляемой формы открывают так: в дереве метаданных разверните объект (справочник, документ, обработку), затем ветку «Формы» и дважды щёлкните нужную форму. Окно делится на три части:

  • 🗂 Элементы (слева вверху) — дерево того, что видно на форме: группы, поля, таблицы, кнопки.
  • 📦 Реквизиты (справа вверху) — данные формы. Главный реквизит обычно называется Объект, в нём все реквизиты объекта метаданных.
  • 🧩 Модуль (вкладка внизу) — код формы: обработчики событий и процедуры.

Палитра свойств открывается двойным щелчком по элементу или через Alt+Enter. Именно в ней и делается почти вся настройка полей.

Типовую конфигурацию (Бухгалтерию, ЗУП, УТ) правьте через расширение, а не снимая её с поддержки. Иначе каждое обновление превратится в ручное сравнение и объединение.

Правки в типовой: расширение конфигурации

Расширения появились в платформе 8.3.6 и сейчас стали основным способом доработки типовых решений. Порядок такой:

  1. Конфигурация → Расширения конфигурации, добавьте новое расширение.
  2. В дереве основной конфигурации найдите объект, щёлкните правой кнопкой по нужной форме и выберите Добавить в расширение.
  3. Откройте заимствованную форму в расширении. Новые поля и реквизиты добавляйте прямо в ней.
  4. Новый реквизит самого объекта (не формы) тоже добавляется в расширении, в заимствованном объекте метаданных.
  5. Обновите расширение в базе: F7 или кнопка обновления конфигурации базы данных.

Реквизит и поле: как связать данные с формой

Связь задаёт свойство поля «Путь к данным». Для поля реквизита документа там будет, например, Объект.Комментарий, для реквизита самой формы — просто ПериодОтчета.

Быстрый способ: перетаскивание

  1. На вкладке «Реквизиты» разверните Объект.
  2. Возьмите нужный реквизит мышью и перетащите в дерево «Элементы» внутрь нужной группы.
  3. Платформа сама создаст поле, подберёт вид под тип данных и заполнит путь к данным.

Для табличной части перетаскивают её целиком: получится таблица формы с колонками-полями. Лишние колонки потом удаляют из дерева элементов.

Реквизит формы или реквизит объекта

Где создан реквизитСохраняется в базеКогда использовать
Реквизит объекта (Объект.…)Да, при записи объектаДанные документа или справочника
Реквизит формыНет, живёт пока открыта формаОтбор, период, служебный флаг, расчётное значение
Реквизит формы с флажком «Сохраняемые данные»В настройках пользователя, не в объектеЗапомнить выбор пользователя между открытиями

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

Проверка заполнения

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

У поля формы есть ещё «Автоотметка незаполненного». Она только подсвечивает пустое поле, но запись не запрещает. Путать эти два свойства не стоит.

Внешний вид поля: вид, размеры, заголовок

Свойство «Вид» определяет, как выглядит поле. Набор зависит от типа данных:

  • ✏️ Поле ввода — обычный ввод строки, числа, даты, ссылки.
  • 🔤 Поле надписи — только показ значения, без редактирования.
  • ☑️ Поле флажка — для булевых реквизитов.
  • 🔘 Поле переключателя — когда вариантов немного (2–4 значения перечисления).
  • 🖼 Поле картинки — для изображений из хранилища значения или навигационной ссылки.
  • 📝 Поле текстового документа, поле HTML-документа, поле табличного документа — для больших и сложных данных.

Размеры и растягивание

  • «Ширина» и «Высота» задаются в условных символах, а не в пикселях. Ширина 10 вмещает дату, 15–20 — номер договора.
  • «Растягивать по горизонтали» — поле займёт всю свободную ширину группы. Удобно для комментария и наименования.
  • «Многострочный режим» у поля ввода строки плюс высота 3–4 — нормальное поле для длинного комментария.

Заголовок и подсказка

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

Кнопки поля ввода

Для ссылочных полей пригодятся «Кнопка выбора», «Кнопка открытия», «Кнопка очистки» и «Быстрый выбор». Быстрый выбор показывает выпадающий список вместо формы выбора. Его включают для маленьких справочников, где десяток элементов.

Группы

Поля сами по себе не выстраиваются в колонки. Расположение задают группы:

  1. Добавьте в дерево элементов группу вида «Обычная группа».
  2. Установите у неё «Группировка» = «Горизонтальная».
  3. Внутри создайте две вертикальные группы и разложите по ним поля.

Так получаются привычные две колонки в шапке документа.

Формат вывода и маска ввода

Формат влияет только на отображение. Значение в базе остаётся прежним.

Формат и формат редактирования

У поля ввода два свойства: «Формат» (как видно, когда поле не в фокусе) и «Формат редактирования» (как видно при вводе). Строку формата удобно собирать конструктором — кнопка «…» у свойства.

ЗадачаСтрока форматаЧто получится
Два знака после запятойЧДЦ=21 250,50
Без разделителя тысячЧДЦ=0; ЧГ=01250
Прочерк вместо нуляЧН=——
Дата без времениДФ=dd.MM.yyyy07.10.2026
Дата и время до минутДФ='dd.MM.yyyy HH:mm'07.10.2026 14:30
Булево словамиБЛ=Нет; БИ=ДаДа / Нет

Тот же синтаксис работает в функции Формат() в коде:

ТекстСуммы = Формат(Сумма, "ЧДЦ=2; ЧГ=0");
ТекстДаты  = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

💡 Если в дате показывается лишнее время 0:00:00, проверьте не только формат поля, но и квалификаторы реквизита: у типа «Дата» есть состав «Дата», «Время» или «Дата и время». Правильнее хранить только дату, чем прятать время форматом.

Маска ввода

Маска задаётся свойством «Маска» у поля ввода строки. Она ограничивает, какие символы можно ввести в каждую позицию. Основные символы:

  • 9 — только цифра;
  • N — буква или цифра;
  • U — буква или цифра, буква переводится в верхний регистр;
  • X — любой символ;
  • остальные символы (скобки, дефисы, пробелы) выводятся как есть.

Примеры:

  • телефон: +7 (999) 999-99-99;
  • код подразделения в паспорте: 999-999;
  • серия и номер паспорта: 99 99 999999.

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

Маска не проверяет смысл: она пропустит телефон из одних девяток. Содержательную проверку пишут в обработке ОбработкаПроверкиЗаполнения модуля объекта.

Видимость и доступность полей из модуля формы

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

Основные свойства

  • Видимость — поле есть на экране или нет.
  • Доступность — поле видно, но серое и неактивное.
  • ТолькоПросмотр — значение видно и можно выделить и скопировать, но не изменить.
  • Заголовок, ОтметкаНезаполненного — тоже меняются из кода.

Пример: поле зависит от флажка

Допустим, на форме документа есть флажок ЕстьДоставка и поле АдресДоставки. Поле должно появляться только при включённом флажке.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	УправлениеВидимостью();
КонецПроцедуры

&НаКлиенте
Процедура ЕстьДоставкаПриИзменении(Элемент)
	УправлениеВидимостью();
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимость(Элементы, ЕстьДоставка)
	Элементы.АдресДоставки.Видимость = ЕстьДоставка;
КонецПроцедуры

&НаКлиентеНаСервере
Процедура УправлениеВидимостью()
	УстановитьВидимость(Элементы, Объект.ЕстьДоставка);
КонецПроцедуры

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

Процедуру УправлениеВидимостью вызывайте из одного места при открытии и из каждого «При изменении» влияющих полей. Тогда логика не разъедется.

Поле, созданное программно

Иногда поле нужно добавить кодом, например в расширении или по настройке:

&НаСервере
Процедура ДобавитьПолеКомментария()
	НовоеПоле = Элементы.Добавить("ПолеКомментарийДоп", Тип("ПолеФормы"), Элементы.ГруппаШапка);
	НовоеПоле.Вид = ВидПоляФормы.ПолеВвода;
	НовоеПоле.ПутьКДанным = "Объект.Комментарий";
	НовоеПоле.Заголовок = "Примечание";
КонецПроцедуры

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

Условное оформление для списков и таблиц

В таблице или динамическом списке менять свойства поля из кода бесполезно: они применяются ко всей колонке. Для построчной логики есть условное оформление — свойство формы «Условное оформление» (или его настройка в динамическом списке).

Пример: выделять красным строки, где сумма больше 100 000. Добавьте элемент оформления, в «Оформление» задайте цвет текста, в «Условие» — поле суммы и сравнение «Больше» 100000, в «Оформляемые поля» — нужные колонки. Так же через оформление можно сделать ячейку только для просмотра или скрыть значение.

Как поля влияют на скорость формы

Медленная форма — чаще всего не «тяжёлое железо», а лишние вызовы сервера и лишние поля в запросах.

Что тормозит

  • 🐢 Серверный вызов на каждое изменение. Процедура с директивой &НаСервере в «При изменении» гоняет всю форму на сервер и обратно. В табличной части с сотней строк это заметно.
  • 🐢 Лишние колонки динамического списка. Каждое поле через точку (Контрагент.ИНН, Договор.Организация.Наименование) добавляет соединение в запрос.
  • 🐢 Поля, которые всегда читаются. В динамическом списке флажок «Использовать всегда» заставляет выбирать поле, даже если колонка скрыта.

Что помогает

  1. Простую логику (видимость, доступность, пересчёт суммы) выполняйте на клиенте.
  2. Когда сервер нужен, используйте &НаСервереБезКонтекста и передавайте только нужные значения. Форма целиком не передаётся.
  3. Собирайте несколько серверных действий в один вызов вместо трёх подряд.
  4. В динамическом списке оставляйте «Использовать всегда» только для полей, которые нужны коду.
  5. Для показа по условию в списках берите условное оформление: оно применяется на сервере при получении данных, без кода на клиенте.

Замерить, что тормозит, помогает встроенный замер производительности: в режиме отладки он показывает время по строкам кода. Ищите строки с серверными вызовами внутри «При изменении».

Пользовательская настройка полей без Конфигуратора

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

  1. Открыть форму и нажать Ещё → Изменить форму.
  2. Снять флажки у полей, которые не нужны.
  3. Переставить поля стрелками или перетаскиванием.
  4. Нажать «ОК» — настройка сохранится только для этого пользователя.

Вернуть всё как было: та же команда, затем Ещё → Установить стандартные настройки в окне настройки формы.

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

Почему изменения из Конфигуратора не видны пользователю

Пользовательские настройки формы хранятся отдельно и накладываются поверх макета. Если поле переставили в Конфигураторе, а у пользователя прежний вид, сбросьте его настройки формы стандартной командой. Администратор может очистить настройки сразу нескольким пользователям в разделе Администрирование → Настройки пользователей и прав.

Ошибки при настройке полей и как их исправить

Диагностика: выберите симптом

Ещё две ловушки, которые легко пропустить:

  • 🔍 Имя элемента и имя реквизита разные. При перетаскивании они совпадают. Но если поле переименовали или добавили второе поле того же реквизита, оно получит имя с цифрой, например Комментарий1. Код Элементы.Комментарий будет менять другое поле.
  • 🔍 Формат меняет только вид. Если число округлено форматом до целого, в базе остались копейки. Для точности меняйте квалификаторы реквизита: длину и точность.

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

Можно ли добавить поле в типовую конфигурацию без снятия с поддержки?
Да. Создайте расширение конфигурации, заимствуйте форму и при необходимости объект, затем добавьте реквизит и поле в расширении.
Чем «Доступность» отличается от «Только просмотр»?
Недоступное поле серое, из него нельзя даже скопировать текст. Поле «Только просмотр» выглядит обычно, значение можно выделить и скопировать, но не изменить.
Как сделать поле обязательным для заполнения?
У реквизита объекта метаданных установите «Проверка заполнения» = «Выдавать ошибку». Платформа не даст записать объект с пустым значением.
Почему у поля ссылки нет выпадающего списка?
Включите у поля «Быстрый выбор» или задайте его у самого справочника. Для больших справочников лучше оставить обычную форму выбора.
Где задать порядок перехода по полям клавишей Enter?
Порядок обхода идёт по дереву элементов сверху вниз. Переставьте поля в дереве «Элементы» стрелками или перетаскиванием.