Поля в 1С 8.3: от реквизита в базе до элемента на форме и в отчёте

· 10 мин

Содержание

Поле в 1С — это элемент, который показывает или хранит одно значение. На форме это элемент типа ПолеФормы вида «Поле ввода», «Поле флажка», «Поле надписи» и т.д., а данные он берёт из реквизита через свойство ПутьКДанным. В базе данных полем называют колонку таблицы, в которой хранится реквизит объекта. В запросе и в отчёте на СКД поле — это колонка выборки.

Путаница в терминах — главная причина вопросов у начинающих. Разработчик говорит «добавь поле», а сделать нужно два действия: завести реквизит и вывести его на форму. Ниже — все четыре значения слова, виды полей формы, их свойства и рабочие примеры кода для 1С:Предприятие 8.3 с управляемыми формами.

Четыре значения слова «поле» в 1С

Одно слово в 1С обозначает разные вещи. Различать их нужно, иначе непонятно, где искать проблему.

ГдеЧто называют полемПример
Метаданные и СУБДКолонку таблицы, в которой хранится реквизитРеквизит ИНН справочника лежит в колонке вида _Fld1234
Управляемая формаЭлемент формы, который отображает значениеПоле ввода «ИНН» в карточке контрагента
Язык запросовКолонку источника или результата выборкиКонтрагенты.ИНН КАК ИНН
СКД и макетыКолонку набора данных или параметр ячейкиПоле «Сумма» в отчёте, параметр [Номер] в макете

Связь между ними простая. Реквизит объекта хранится в поле таблицы базы. Форма выводит его через поле формы. Запрос читает его как поле выборки. Отчёт показывает его как поле СКД.

💡 Какой колонке СУБД соответствует реквизит, покажет функция ПолучитьСтруктуруХраненияБазыДанных(). Она нужна, когда разбираете план запроса или трассу SQL и видите только имена вида _Fld1234.

Реквизит и поле формы — не одно и то же

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

  • 🗂️ Реквизит объекта хранится в базе и попадает в форму как часть основного реквизита Объект.
  • 📝 Реквизит формы живёт, пока открыта форма. В базу он не записывается.
  • 🖼️ Поле формы ничего не хранит. Оно только отображает реквизит и принимает ввод.

Отсюда частая ловушка: поле добавили, значение ввели, форму закрыли — значение пропало. Значит, поле привязано к реквизиту формы, а не к реквизиту объекта.

Какие бывают поля формы

Вид поля задаёт свойство Вид (системное перечисление ВидПоляФормы). Список видов зависит от типа данных: для булева значения доступен флажок, для табличного документа — поле табличного документа.

Поля для ввода и выбора значений

  • ⌨️ Поле ввода — универсальный вид для строк, чисел, дат и ссылок. Умеет кнопку выбора, очистки, список выбора, маску.
  • ☑️ Поле флажка — для булева значения. Вид флажка можно переключить на «Выключатель».
  • 🔘 Поле переключателя — выбор одного варианта из нескольких. Варианты задаются списком выбора.
  • 🎚️ Поле полосы регулирования — ползунок для числа в заданном диапазоне.
  • 📅 Поле календаря — выбор даты или периода прямо на форме.

Поля для отображения

  • 🏷️ Поле надписи — показывает значение без возможности ввода. Подходит для итогов и подсказок.
  • 🖼️ Поле картинки — выводит картинку из реквизита или навигационной ссылки.
  • 📊 Поле индикатора — полоса прогресса.

Поля для документов и графики

  • 📄 Поле табличного документа — печатные формы, отчёты, макеты.
  • 📝 Поле текстового документа и поле форматированного документа — простой и размеченный текст.
  • 🌐 Поле HTML-документа — встроенный браузер внутри формы.
  • 📈 Поле диаграммы, поле диаграммы Ганта, поле дендрограммы — визуализация данных.
  • 🧭 Поле графической схемы и поле планировщика — схемы бизнес-процессов и расписания.
Какой вид поля выбрать для реквизита?

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

Пример: в справочник «Контрагенты» нужно добавить поле «Код клиента в CRM». Работаем в копии конфигурации или в расширении.

Перед изменением конфигурации рабочей базы сделайте резервную копию. Обновление конфигурации базы данных при добавлении реквизита меняет структуру таблиц и требует монопольного доступа — пользователей придётся выгнать из базы.

Шаг 1. Создайте реквизит

  1. Откройте конфигуратор, в дереве метаданных найдите справочник.
  2. Откройте его окно редактирования, перейдите на вкладку Данные.
  3. Добавьте реквизит в список Реквизиты.
  4. В палитре свойств задайте Имя (КодCRM), Синоним («Код клиента в CRM») и Тип — например, Строка длиной 20.
  5. Если по полю будут искать или сортировать — включите свойство Индексировать.
  6. Если поле обязательное — установите Проверка заполнения в значение «Выдавать ошибку».

Шаг 2. Выведите реквизит на форму

  1. Откройте форму элемента справочника.
  2. В правой верхней панели раскройте реквизит Объект, найдите КодCRM.
  3. Перетащите его в дерево Элементы в нужное место — платформа создаст поле ввода.
  4. Нажмите F4 на новом поле и проверьте свойства.

Шаг 3. Обновите конфигурацию базы

Выполните Конфигурация → Обновить конфигурацию базы данных (F7). Платформа покажет список изменений структуры — примите его.

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

Как добавить поле без программиста

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) пользователь может завести поле сам — через дополнительные реквизиты. В Бухгалтерии включите флажок в Администрирование → Общие настройки → Дополнительные реквизиты и сведения, затем добавьте реквизит для нужного вида объекта. Он появится на форме без правки конфигурации.

Скрыть или переставить лишние поля можно через меню формы Ещё → Изменить форму. Это настройка пользователя, а не изменение конфигурации.

Главные свойства поля формы

Свойства открываются по F4 на элементе. Ниже — те, что настраивают чаще всего.

СвойствоЧто делаетКогда менять
ПутьКДаннымСвязывает поле с реквизитомВсегда; пустое значение — поле ничего не показывает
ВидВид поля: ввод, флажок, надпись и т.д.При выборе способа отображения
Заголовок, ПоложениеЗаголовкаПодпись и её местоКогда синоним реквизита не подходит для формы
Видимость, ДоступностьПоказ и активностьДля условной логики формы
ТолькоПросмотрЗапрет ввода с возможностью копироватьРасчётные и системные значения
АвтоОтметкаНезаполненногоКрасное подчёркивание пустого поляОбязательные поля
КнопкаВыбора, КнопкаОчисткиКнопки справа от поляСсылочные поля, даты
СписокВыбораФиксированные варианты значенияПоле переключателя, поле ввода со списком
Маска, ФорматШаблон ввода и формат выводаТелефоны, коды, числа с разрядами
МногострочныйРежимВвод текста в несколько строкКомментарии

Кроме свойств, у поля есть события. Чаще всего обрабатывают ПриИзменении (значение изменили и ушли из поля), НачалоВыбора (нажали кнопку выбора) и ОбработкаВыбора (вернулось значение из формы выбора).

Работа с полями в коде 1С: рабочие примеры

Скрыть поле или запретить ввод

Обращение к полю идёт через коллекцию Элементы, к значению — через реквизит.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	// Поле видно только юрлицам
	Элементы.КПП.Видимость = (Объект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо);

	// Значение можно смотреть и копировать, но не менять
	Элементы.КодCRM.ТолькоПросмотр = Истина;

КонецПроцедуры

Имя Элементы.КПП — это имя элемента формы, а не реквизита. После перетаскивания они совпадают, но если элемент переименовали, в коде нужно писать новое имя.

Реакция на изменение поля

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	КонтрагентПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()
	Объект.ИННКонтрагента = Объект.Контрагент.ИНН;
КонецПроцедуры

Значение Объект.Контрагент.ИНН читаем на сервере. На клиенте ссылку нельзя разыменовать через точку — получите ошибку Поле объекта не обнаружено (ИНН).

Создать поле программно

Пригодится, когда набор полей заранее неизвестен — например, поля строятся по настройкам.

&НаСервере
Процедура ДобавитьПолеКомментария()

	ТипСтрока = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200));
	НовыйРеквизит = Новый РеквизитФормы("ДопКомментарий", ТипСтрока, , "Доп. комментарий");

	Добавляемые = Новый Массив;
	Добавляемые.Добавить(НовыйРеквизит);
	ИзменитьРеквизиты(Добавляемые);

	Поле = Элементы.Добавить("ДопКомментарий", Тип("ПолеФормы"));
	Поле.Вид = ВидПоляФормы.ПолеВвода;
	Поле.ПутьКДанным = "ДопКомментарий";
	Поле.МногострочныйРежим = Истина;

КонецПроцедуры

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

Привязать сообщение к полю

Сообщение с указанием поля подсветит его и при клике переведёт туда курсор.

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Укажите код клиента в CRM";
Сообщение.Поле = "Объект.КодCRM";
Сообщение.Сообщить();

Поля в запросах, отчётах на СКД и печатных формах

Поля в запросе

Каждое выражение после ВЫБРАТЬ — поле результата. Псевдоним через КАК задаёт имя колонки, по которому вы потом читаете выборку.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Контрагенты.Ссылка КАК Контрагент,
|	Контрагенты.ИНН КАК ИНН,
|	Контрагенты.КодCRM КАК КодCRM
|ИЗ
|	Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|	НЕ Контрагенты.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(Выборка.ИНН);
КонецЦикла;

Обращаться к Выборка.ИНН можно только по псевдониму. Без КАК ИНН имя колонки сформируется автоматически и может не совпасть с ожидаемым.

Поля в отчёте на СКД

В схеме компоновки данных поля описывают на вкладке Наборы данных. Каждое поле набора можно переименовать, ограничить и снабдить оформлением.

  • 🧮 Вычисляемые поля — значения, которых нет в источнике: формула на языке выражений СКД.
  • ➕ Ресурсы — поля, по которым считаются итоги (сумма, количество, максимум).
  • 🗂️ Выбранные поля — колонки, которые попадут в результат. Задаются в настройках варианта отчёта.

Если поле есть в запросе, но не появляется в отчёте, проверьте, добавлено ли оно в выбранные поля в настройках варианта.

Поля в печатной форме

Макет печатной формы — табличный документ. Ячейки с данными заполняются тремя способами, которые задаются свойством ячейки Заполнение:

  • 🔤 Текст — неизменная подпись.
  • 🧩 Параметр — ячейка целиком выводит значение параметра.
  • 🧷 Шаблон — текст с вставками вида [Номер] и [Дата].

В коде параметры области заполняют одной строкой:

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Заполнить(ДанныеШапки);
ТабДок.Вывести(ОбластьШапка);

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

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

Поля — частый источник медленных форм и запросов. Несколько приёмов, которые реально помогают.

  1. Не разыменовывайте ссылки через несколько точек. Документ.Контрагент.ГоловнойКонтрагент.ИНН в запросе — это неявные соединения с каждой таблицей. Выберите нужные поля явным соединением.
  2. Приводите составной тип через ВЫРАЗИТЬ. Если реквизит может ссылаться на документы пяти видов, обращение к его полю соединит все пять таблиц. ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг).Номер оставит одно.
  3. Индексируйте поля, по которым фильтруете. Отбор ГДЕ КодCRM = &Код без индекса заставит СУБД читать всю таблицу.
  4. Не тяните данные на форму ради одного значения. Вычислите его на сервере и положите в реквизит формы, а не загружайте объект целиком.
  5. Ограничивайте число полей на форме. Десятки скрытых полей с обработчиками замедляют открытие. Редкие поля вынесите на отдельную страницу или в форму по кнопке.

Типичные ошибки с полями и их причины

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

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

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