Поля управляемой формы 1С 8.3: привязка, свойства, форматы и управление из кода
Содержание
Поле в 1С 8.3 настраивают в Конфигураторе, в редакторе формы: на вкладке «Реквизиты» создают реквизит, перетаскивают его в дерево «Элементы», а затем в палитре свойств поля задают вид, заголовок, ширину, формат и маску. Пользователь без Конфигуратора может только скрыть или переставить уже существующие поля: Ещё → Изменить форму.
Частое заблуждение — что «поле» и «реквизит» одно и то же. Реквизит хранит данные. Поле лишь показывает их на форме. Один реквизит можно вывести двумя полями разного вида, а поле без привязки к реквизиту ничего не сохранит. Отсюда и большинство проблем: «ввёл значение, а оно пропало».
С чего начинается настройка полей в Конфигураторе
Редактор управляемой формы открывают так: в дереве метаданных разверните объект (справочник, документ, обработку), затем ветку «Формы» и дважды щёлкните нужную форму. Окно делится на три части:
- 🗂 Элементы (слева вверху) — дерево того, что видно на форме: группы, поля, таблицы, кнопки.
- 📦 Реквизиты (справа вверху) — данные формы. Главный реквизит обычно называется
Объект, в нём все реквизиты объекта метаданных. - 🧩 Модуль (вкладка внизу) — код формы: обработчики событий и процедуры.
Палитра свойств открывается двойным щелчком по элементу или через Alt+Enter. Именно в ней и делается почти вся настройка полей.
Типовую конфигурацию (Бухгалтерию, ЗУП, УТ) правьте через расширение, а не снимая её с поддержки. Иначе каждое обновление превратится в ручное сравнение и объединение.
Правки в типовой: расширение конфигурации
Расширения появились в платформе 8.3.6 и сейчас стали основным способом доработки типовых решений. Порядок такой:
Конфигурация → Расширения конфигурации, добавьте новое расширение.- В дереве основной конфигурации найдите объект, щёлкните правой кнопкой по нужной форме и выберите
Добавить в расширение. - Откройте заимствованную форму в расширении. Новые поля и реквизиты добавляйте прямо в ней.
- Новый реквизит самого объекта (не формы) тоже добавляется в расширении, в заимствованном объекте метаданных.
- Обновите расширение в базе:
F7или кнопка обновления конфигурации базы данных.
Реквизит и поле: как связать данные с формой
Связь задаёт свойство поля «Путь к данным». Для поля реквизита документа там будет, например, Объект.Комментарий, для реквизита самой формы — просто ПериодОтчета.
Быстрый способ: перетаскивание
- На вкладке «Реквизиты» разверните
Объект. - Возьмите нужный реквизит мышью и перетащите в дерево «Элементы» внутрь нужной группы.
- Платформа сама создаст поле, подберёт вид под тип данных и заполнит путь к данным.
Для табличной части перетаскивают её целиком: получится таблица формы с колонками-полями. Лишние колонки потом удаляют из дерева элементов.
Реквизит формы или реквизит объекта
| Где создан реквизит | Сохраняется в базе | Когда использовать |
|---|---|---|
Реквизит объекта (Объект.…) | Да, при записи объекта | Данные документа или справочника |
| Реквизит формы | Нет, живёт пока открыта форма | Отбор, период, служебный флаг, расчётное значение |
| Реквизит формы с флажком «Сохраняемые данные» | В настройках пользователя, не в объекте | Запомнить выбор пользователя между открытиями |
Если пользователь жалуется, что поле «не сохраняется», первым делом проверьте путь к данным. Почти всегда поле привязано к реквизиту формы, а не к реквизиту объекта.
Проверка заполнения
Обязательность поля задают не в форме, а у реквизита объекта метаданных: свойство «Проверка заполнения» = «Выдавать ошибку». Тогда платформа не даст записать объект с пустым значением и сама подсветит поле красным пунктиром.
У поля формы есть ещё «Автоотметка незаполненного». Она только подсвечивает пустое поле, но запись не запрещает. Путать эти два свойства не стоит.
Внешний вид поля: вид, размеры, заголовок
Свойство «Вид» определяет, как выглядит поле. Набор зависит от типа данных:
- ✏️ Поле ввода — обычный ввод строки, числа, даты, ссылки.
- 🔤 Поле надписи — только показ значения, без редактирования.
- ☑️ Поле флажка — для булевых реквизитов.
- 🔘 Поле переключателя — когда вариантов немного (2–4 значения перечисления).
- 🖼 Поле картинки — для изображений из хранилища значения или навигационной ссылки.
- 📝 Поле текстового документа, поле HTML-документа, поле табличного документа — для больших и сложных данных.
Размеры и растягивание
- «Ширина» и «Высота» задаются в условных символах, а не в пикселях. Ширина 10 вмещает дату, 15–20 — номер договора.
- «Растягивать по горизонтали» — поле займёт всю свободную ширину группы. Удобно для комментария и наименования.
- «Многострочный режим» у поля ввода строки плюс высота 3–4 — нормальное поле для длинного комментария.
Заголовок и подсказка
- «Заголовок» — текст рядом с полем. Если пусто, берётся синоним реквизита.
- «Положение заголовка» — слева, сверху, справа, снизу или нет. Для узких колонок формы удобен заголовок сверху.
- «Подсказка» и «Отображение подсказки» — пояснение для пользователя. Вариант «Кнопка» добавляет значок вопроса, «Всплывающая» показывает текст при наведении.
Кнопки поля ввода
Для ссылочных полей пригодятся «Кнопка выбора», «Кнопка открытия», «Кнопка очистки» и «Быстрый выбор». Быстрый выбор показывает выпадающий список вместо формы выбора. Его включают для маленьких справочников, где десяток элементов.
Группы
Поля сами по себе не выстраиваются в колонки. Расположение задают группы:
- Добавьте в дерево элементов группу вида «Обычная группа».
- Установите у неё «Группировка» = «Горизонтальная».
- Внутри создайте две вертикальные группы и разложите по ним поля.
Так получаются привычные две колонки в шапке документа.
Формат вывода и маска ввода
Формат влияет только на отображение. Значение в базе остаётся прежним.
Формат и формат редактирования
У поля ввода два свойства: «Формат» (как видно, когда поле не в фокусе) и «Формат редактирования» (как видно при вводе). Строку формата удобно собирать конструктором — кнопка «…» у свойства.
| Задача | Строка формата | Что получится |
|---|---|---|
| Два знака после запятой | ЧДЦ=2 | 1 250,50 |
| Без разделителя тысяч | ЧДЦ=0; ЧГ=0 | 1250 |
| Прочерк вместо нуля | ЧН=— | — |
| Дата без времени | ДФ=dd.MM.yyyy | 07.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. КодЭлементы.Комментарийбудет менять другое поле. - 🔍 Формат меняет только вид. Если число округлено форматом до целого, в базе остались копейки. Для точности меняйте квалификаторы реквизита: длину и точность.