Поля в 1С 8.3: от реквизита в базе до элемента на форме и в отчёте
Содержание
Поле в 1С — это элемент, который показывает или хранит одно значение. На форме это элемент типа ПолеФормы вида «Поле ввода», «Поле флажка», «Поле надписи» и т.д., а данные он берёт из реквизита через свойство ПутьКДанным. В базе данных полем называют колонку таблицы, в которой хранится реквизит объекта. В запросе и в отчёте на СКД поле — это колонка выборки.
Путаница в терминах — главная причина вопросов у начинающих. Разработчик говорит «добавь поле», а сделать нужно два действия: завести реквизит и вывести его на форму. Ниже — все четыре значения слова, виды полей формы, их свойства и рабочие примеры кода для 1С:Предприятие 8.3 с управляемыми формами.
Четыре значения слова «поле» в 1С
Одно слово в 1С обозначает разные вещи. Различать их нужно, иначе непонятно, где искать проблему.
| Где | Что называют полем | Пример |
|---|---|---|
| Метаданные и СУБД | Колонку таблицы, в которой хранится реквизит | Реквизит ИНН справочника лежит в колонке вида _Fld1234 |
| Управляемая форма | Элемент формы, который отображает значение | Поле ввода «ИНН» в карточке контрагента |
| Язык запросов | Колонку источника или результата выборки | Контрагенты.ИНН КАК ИНН |
| СКД и макеты | Колонку набора данных или параметр ячейки | Поле «Сумма» в отчёте, параметр [Номер] в макете |
Связь между ними простая. Реквизит объекта хранится в поле таблицы базы. Форма выводит его через поле формы. Запрос читает его как поле выборки. Отчёт показывает его как поле СКД.
💡 Какой колонке СУБД соответствует реквизит, покажет функция ПолучитьСтруктуруХраненияБазыДанных(). Она нужна, когда разбираете план запроса или трассу SQL и видите только имена вида _Fld1234.
Реквизит и поле формы — не одно и то же
Реквизит — это данные. Поле формы — это способ их показать. У одного реквизита может быть ноль, одно или несколько полей на форме.
- 🗂️ Реквизит объекта хранится в базе и попадает в форму как часть основного реквизита
Объект. - 📝 Реквизит формы живёт, пока открыта форма. В базу он не записывается.
- 🖼️ Поле формы ничего не хранит. Оно только отображает реквизит и принимает ввод.
Отсюда частая ловушка: поле добавили, значение ввели, форму закрыли — значение пропало. Значит, поле привязано к реквизиту формы, а не к реквизиту объекта.
Какие бывают поля формы
Вид поля задаёт свойство Вид (системное перечисление ВидПоляФормы). Список видов зависит от типа данных: для булева значения доступен флажок, для табличного документа — поле табличного документа.
Поля для ввода и выбора значений
- ⌨️ Поле ввода — универсальный вид для строк, чисел, дат и ссылок. Умеет кнопку выбора, очистки, список выбора, маску.
- ☑️ Поле флажка — для булева значения. Вид флажка можно переключить на «Выключатель».
- 🔘 Поле переключателя — выбор одного варианта из нескольких. Варианты задаются списком выбора.
- 🎚️ Поле полосы регулирования — ползунок для числа в заданном диапазоне.
- 📅 Поле календаря — выбор даты или периода прямо на форме.
Поля для отображения
- 🏷️ Поле надписи — показывает значение без возможности ввода. Подходит для итогов и подсказок.
- 🖼️ Поле картинки — выводит картинку из реквизита или навигационной ссылки.
- 📊 Поле индикатора — полоса прогресса.
Поля для документов и графики
- 📄 Поле табличного документа — печатные формы, отчёты, макеты.
- 📝 Поле текстового документа и поле форматированного документа — простой и размеченный текст.
- 🌐 Поле HTML-документа — встроенный браузер внутри формы.
- 📈 Поле диаграммы, поле диаграммы Ганта, поле дендрограммы — визуализация данных.
- 🧭 Поле графической схемы и поле планировщика — схемы бизнес-процессов и расписания.
Как добавить поле в конфигураторе: реквизит и элемент формы
Пример: в справочник «Контрагенты» нужно добавить поле «Код клиента в CRM». Работаем в копии конфигурации или в расширении.
Перед изменением конфигурации рабочей базы сделайте резервную копию. Обновление конфигурации базы данных при добавлении реквизита меняет структуру таблиц и требует монопольного доступа — пользователей придётся выгнать из базы.
Шаг 1. Создайте реквизит
- Откройте конфигуратор, в дереве метаданных найдите справочник.
- Откройте его окно редактирования, перейдите на вкладку Данные.
- Добавьте реквизит в список Реквизиты.
- В палитре свойств задайте Имя (
КодCRM), Синоним («Код клиента в CRM») и Тип — например, Строка длиной 20. - Если по полю будут искать или сортировать — включите свойство Индексировать.
- Если поле обязательное — установите Проверка заполнения в значение «Выдавать ошибку».
Шаг 2. Выведите реквизит на форму
- Откройте форму элемента справочника.
- В правой верхней панели раскройте реквизит
Объект, найдитеКодCRM. - Перетащите его в дерево Элементы в нужное место — платформа создаст поле ввода.
- Нажмите
F4на новом поле и проверьте свойства.
Шаг 3. Обновите конфигурацию базы
Выполните Конфигурация → Обновить конфигурацию базы данных (F7). Платформа покажет список изменений структуры — примите его.
💡 Если конфигурация типовая и стоит на поддержке, поле лучше добавлять расширением. Реквизит в расширении добавляется к заимствованному объекту, и при обновлении типовой конфигурации правки не приходится переносить вручную.
Как добавить поле без программиста
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) пользователь может завести поле сам — через дополнительные реквизиты. В Бухгалтерии включите флажок в Администрирование → Общие настройки → Дополнительные реквизиты и сведения, затем добавьте реквизит для нужного вида объекта. Он появится на форме без правки конфигурации.
Скрыть или переставить лишние поля можно через меню формы Ещё → Изменить форму. Это настройка пользователя, а не изменение конфигурации.
Главные свойства поля формы
Свойства открываются по F4 на элементе. Ниже — те, что настраивают чаще всего.
| Свойство | Что делает | Когда менять |
|---|---|---|
ПутьКДанным | Связывает поле с реквизитом | Всегда; пустое значение — поле ничего не показывает |
Вид | Вид поля: ввод, флажок, надпись и т.д. | При выборе способа отображения |
Заголовок, ПоложениеЗаголовка | Подпись и её место | Когда синоним реквизита не подходит для формы |
Видимость, Доступность | Показ и активность | Для условной логики формы |
ТолькоПросмотр | Запрет ввода с возможностью копировать | Расчётные и системные значения |
АвтоОтметкаНезаполненного | Красное подчёркивание пустого поля | Обязательные поля |
КнопкаВыбора, КнопкаОчистки | Кнопки справа от поля | Ссылочные поля, даты |
СписокВыбора | Фиксированные варианты значения | Поле переключателя, поле ввода со списком |
Маска, Формат | Шаблон ввода и формат вывода | Телефоны, коды, числа с разрядами |
МногострочныйРежим | Ввод текста в несколько строк | Комментарии |
Кроме свойств, у поля есть события. Чаще всего обрабатывают ПриИзменении (значение изменили и ушли из поля), НачалоВыбора (нажали кнопку выбора) и ОбработкаВыбора (вернулось значение из формы выбора).
Работа с полями в коде 1С: рабочие примеры
Скрыть поле или запретить ввод
Обращение к полю идёт через коллекцию Элементы, к значению — через реквизит.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Поле видно только юрлицам
Элементы.КПП.Видимость = (Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо);
// Значение можно смотреть и копировать, но не менять
Элементы.КодCRM.ТолькоПросмотр = Истина;
КонецПроцедуры
Имя Элементы.КПП — это имя элемента формы, а не реквизита. После перетаскивания они совпадают, но если элемент переименовали, в коде нужно писать новое имя.
Реакция на изменение поля
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
КонтрагентПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()
Объект.ИННКонтрагента = Объект.Контрагент.ИНН;
КонецПроцедуры
Значение Объект.Контрагент.ИНН читаем на сервере. На клиенте ссылку нельзя разыменовать через точку — получите ошибку Поле объекта не обнаружено (ИНН).
Создать поле программно
Пригодится, когда набор полей заранее неизвестен — например, поля строятся по настройкам.
&НаСервере
Процедура ДобавитьПолеКомментария()
ТипСтрока = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200));
НовыйРеквизит = Новый РеквизитФормы("ДопКомментарий", ТипСтрока, , "Доп. комментарий");
Добавляемые = Новый Массив;
Добавляемые.Добавить(НовыйРеквизит);
ИзменитьРеквизиты(Добавляемые);
Поле = Элементы.Добавить("ДопКомментарий", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "ДопКомментарий";
Поле.МногострочныйРежим = Истина;
КонецПроцедуры
Такой реквизит принадлежит форме и в базу не пишется. Чтобы сохранить значение, перенесите его в реквизит объекта перед записью.
Привязать сообщение к полю
Сообщение с указанием поля подсветит его и при клике переведёт туда курсор.
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Укажите код клиента в CRM";
Сообщение.Поле = "Объект.КодCRM";
Сообщение.Сообщить();
Поля в запросах, отчётах на СКД и печатных формах
Поля в запросе
Каждое выражение после ВЫБРАТЬ — поле результата. Псевдоним через КАК задаёт имя колонки, по которому вы потом читаете выборку.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент,
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.КодCRM КАК КодCRM
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.ИНН);
КонецЦикла;
Обращаться к Выборка.ИНН можно только по псевдониму. Без КАК ИНН имя колонки сформируется автоматически и может не совпасть с ожидаемым.
Поля в отчёте на СКД
В схеме компоновки данных поля описывают на вкладке Наборы данных. Каждое поле набора можно переименовать, ограничить и снабдить оформлением.
- 🧮 Вычисляемые поля — значения, которых нет в источнике: формула на языке выражений СКД.
- ➕ Ресурсы — поля, по которым считаются итоги (сумма, количество, максимум).
- 🗂️ Выбранные поля — колонки, которые попадут в результат. Задаются в настройках варианта отчёта.
Если поле есть в запросе, но не появляется в отчёте, проверьте, добавлено ли оно в выбранные поля в настройках варианта.
Поля в печатной форме
Макет печатной формы — табличный документ. Ячейки с данными заполняются тремя способами, которые задаются свойством ячейки Заполнение:
- 🔤 Текст — неизменная подпись.
- 🧩 Параметр — ячейка целиком выводит значение параметра.
- 🧷 Шаблон — текст с вставками вида
[Номер]и[Дата].
В коде параметры области заполняют одной строкой:
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Заполнить(ДанныеШапки);
ТабДок.Вывести(ОбластьШапка);
Заполнить берёт значения из структуры или выборки по совпадающим именам. Если параметр в макете назван Покупатель, а поле в запросе — Контрагент, ячейка останется пустой без всякой ошибки.
Как поля влияют на скорость работы
Поля — частый источник медленных форм и запросов. Несколько приёмов, которые реально помогают.
- Не разыменовывайте ссылки через несколько точек.
Документ.Контрагент.ГоловнойКонтрагент.ИННв запросе — это неявные соединения с каждой таблицей. Выберите нужные поля явным соединением. - Приводите составной тип через
ВЫРАЗИТЬ. Если реквизит может ссылаться на документы пяти видов, обращение к его полю соединит все пять таблиц.ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг).Номероставит одно. - Индексируйте поля, по которым фильтруете. Отбор
ГДЕ КодCRM = &Кодбез индекса заставит СУБД читать всю таблицу. - Не тяните данные на форму ради одного значения. Вычислите его на сервере и положите в реквизит формы, а не загружайте объект целиком.
- Ограничивайте число полей на форме. Десятки скрытых полей с обработчиками замедляют открытие. Редкие поля вынесите на отдельную страницу или в форму по кнопке.