К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как создать реквизит формы в 1С

Как создать реквизит формы в 1С: работа в конфигураторе и программно, типы реквизитов, привязка к элементам, типичные ошибки и проверка результата.

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

Реквизиты формы нужны практически в любой доработке интерфейса: вывести итоговую сумму по табличной части, показать вычисляемое поле, организовать отбор в динамическом списке, временно хранить таблицу значений для обработки. В управляемых формах именно реквизиты формы служат «мостом» между данными объекта и элементами интерфейса.

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

Что такое реквизит формы и когда он нужен

Реквизит формы — это данные, привязанные к самой форме, а не к объекту базы данных. Типичные сценарии использования: вычисляемые показатели (суммы, количество строк, проценты), флаги состояния интерфейса («ПоказыватьАрхив», «ТолькоПроведенные»), временные таблицы значений для обработки данных перед записью, параметры отбора динамических списков.

Ключевое отличие от реквизита объекта: реквизит объекта (например, документа) хранится в базе данных и сохраняется при записи, реквизит формы — нет. Если пользователь ввёл значение в реквизит формы и закрыл форму без обработки, значение будет потеряно. Поэтому реквизиты формы применяют для промежуточных и производных данных, а не для того, что должно храниться постоянно.

У каждой формы есть один основной реквизит — обычно это объект данных (например, «Объект» типа ДанныеФормыСтруктура для формы документа или «Список» для формы списка). Он выделяется жирным шрифтом в редакторе. Дополнительные реквизиты вы добавляете самостоятельно под конкретную задачу.

Создание реквизита формы в конфигураторе

Стандартный путь — через редактор формы в конфигураторе. Откройте конфигурацию, найдите нужный объект (документ, справочник, обработку), раскройте его формы и откройте нужную двойным щелчком. Если формы ещё нет, создайте её через кнопку «Добавить» на закладке «Формы» объекта.

В окне редактора формы перейдите на закладку «Реквизиты» в правой части окна. Нажмите кнопку «Добавить» (зелёный плюс) или клавишу Insert. В появившейся строке задайте имя реквизита — оно должно быть осмысленным и соответствовать правилам именования идентификаторов: без пробелов, начиная с буквы. Затем укажите тип данных, кликнув по кнопке выбора в колонке «Тип».

После создания реквизит появится в списке, но на форме он ещё не отображается. Чтобы пользователь мог видеть и редактировать значение, перетащите реквизит мышью из панели реквизитов в дерево элементов формы (левое верхнее окно). Платформа автоматически создаст подходящий элемент — поле ввода, флажок или таблицу.

Порядок действий в конфигураторе
  1. 1
    Откройте объект конфигурации и его форму в редакторе
  2. 2
    Перейдите на закладку «Реквизиты» в правой панели
  3. 3
    Нажмите «Добавить», задайте имя и тип реквизита
  4. 4
    При необходимости укажите длину строки или точность числа
  5. 5
    Перетащите реквизит в дерево элементов формы
  6. 6
    Обновите конфигурацию базы данных и проверьте форму в режиме 1С:Предприятие

Выбор типа данных реквизита

Тип определяет, какие значения может хранить реквизит и как он будет выглядеть на форме. Простые типы — Строка, Число, Булево, Дата — подходят для одиночных значений. Для строки указывайте длину: если оставить неограниченную длину, поле ввода будет работать медленнее и хуже выглядеть, поэтому неограниченные строки используйте только при реальной необходимости.

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

Для табличных данных используются специальные типы формы: ТаблицаЗначений и ДинамическийСписок. Таблица значений при добавлении требует создать колонки — подчинённые реквизиты: выделите реквизит-таблицу и нажмите «Добавить реквизит», чтобы описать каждую колонку с её типом. Динамический список привязывается к произвольному запросу и сам обновляется при изменении данных.

Тип реквизитаНазначениеОсобенности
Строка, Число, Дата, БулевоОдиночные значения, флаги, показателиДля строки задавайте разумную длину
Ссылочные типыВыбор объекта из базы данныхАвтоматическое поле выбора
ТаблицаЗначенийРедактируемая таблица на формеТребует описания колонок-подчинённых реквизитов
ДинамическийСписокОтображение данных по запросуТолько чтение, автообновление
Картинка, ФорматированныйДокументСпециализированное отображениеОграниченная поддержка в тонком клиенте

Программное создание реквизита формы

Иногда состав реквизитов нельзя определить заранее: например, обработка строит по одному полю на каждый вид номенклатуры, выбранный пользователем. В этом случае реквизиты создаются программно в обработчике ПриСозданииНаСервере методом ИзменитьРеквизиты().

Метод принимает два массива: добавляемые и удаляемые реквизиты. Каждый новый реквизит описывается объектом РеквизитФормы, где задаются имя, тип (через ОписаниеТипов) и путь — для подчинённых реквизитов таблицы. Важно: вызывать ИзменитьРеквизиты можно только в серверном контексте, и повторный вызов с уже существующим именем приведёт к ошибке.

После создания реквизита обычно нужно программно создать и связанный элемент формы: метод Элементы.Добавить() с указанием типа элемента и свойства ПутьКДанным, которое связывает поле с реквизитом. Без этой связи элемент не будет отображать данные.

1c
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ДобавляемыеРеквизиты = Новый Массив;
    НовыйРеквизит = Новый РеквизитФормы("ИтоговаяСумма", Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15, 2)));
    ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    
    НовыйЭлемент = Элементы.Добавить("ИтоговаяСумма", Тип("ПолеФормы"));
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "ИтоговаяСумма";
    НовыйЭлемент.Заголовок = "Итоговая сумма";
КонецПроцедуры

Связывание реквизита с элементом формы

Реквизит сам по себе невидим: чтобы пользователь увидел значение, нужен элемент формы, у которого свойство ПутьКДанным указывает на реквизит. При перетаскивании реквизита в дерево элементов платформа заполняет это свойство автоматически и подбирает вид элемента: для Булево — флажок, для ссылки — поле ввода с выбором, для таблицы — таблицу формы.

Вид элемента можно изменить в палитре свойств. Например, строковый реквизит можно показать как поле надписи (только чтение), поле ввода или поле переключателя. Для реквизита типа Булево доступны флажок и переключатель. Если элемент должен только отображать значение, установите свойство ТолькоПросмотр в Истина или используйте вид «Поле надписи».

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

Особенности работы в управляемых и обычных формах

В управляемых формах (режим «Такси» и обычный управляемый интерфейс) все описанные механизмы работают именно через реквизиты формы: данные объекта преобразуются в данные формы, и код работает с ними через объект ЭтаФорма. Прямой доступ к данным объекта с клиента невозможен — модификация выполняется на сервере.

В обычных формах (устаревший режим обычного приложения) реквизиты формы тоже существуют, но создаются иначе — через диалог «Реквизиты формы» и без разделения на клиентский и серверный контекст. Если вы поддерживаете старую конфигурацию на обычных формах, учитывайте, что метод ИзменитьРеквизиты там недоступен: состав реквизитов фиксируется в конфигураторе.

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

Способы создания реквизита

В конфигураторе

Подходит для постоянных реквизитов, известных на этапе разработки. Наглядно, проверяется при сохранении, но состав фиксирован.

Программно через ИзменитьРеквизиты

Подходит для динамического состава полей. Гибко, но требует аккуратного кода и работает только на сервере.

Через расширение конфигурации

Для доработки типовых решений без снятия с поддержки. Ограничения зависят от режима совместимости расширения.

Типичные ошибки и проверка результата

Самая частая ошибка — реквизит создан, но не перенесён в элементы формы, и разработчик не понимает, почему поле не видно. Вторая типичная ситуация: элемент создан, но в свойстве ПутьКДанным указано неверное имя — тогда поле отображается пустым или форма выдаёт ошибку при открытии. Проверяйте точное совпадение имени реквизита и пути к данным, включая регистр букв.

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

После любых изменений обновите конфигурацию базы данных (F7) и откройте форму в режиме 1С:Предприятие. Проверьте: поле отображается, значение вводится и сохраняется в реквизите (это видно через отладку), табличные реквизиты позволяют добавлять строки, а обработчики событий элемента срабатывают.

Типичные ошибки
01
Реквизит создан, но не добавлен в элементы формы — поле невидимо для пользователя
02
Несовпадение имени реквизита и свойства ПутьКДанным элемента — пустое поле или ошибка открытия формы
03
Неограниченная длина строки без необходимости — замедление работы и проблемы с отображением
04
Вызов ИзменитьРеквизиты на клиенте — ошибка выполнения, метод доступен только на сервере
05
Попытка хранить важные данные в реквизите формы — они теряются при закрытии формы без сохранения
Контрольные точки

Как проверить результат

Отображение поля
Норма

Элемент виден на форме с заданным заголовком

Тревожный признак

Поля нет — реквизит не перенесён в элементы или скрыт свойством Видимость

Ввод значения
Норма

Значение вводится и сохраняется при переходе между полями

Тревожный признак

Значение сбрасывается — проверьте ПутьКДанным

Работа таблицы
Норма

Строки добавляются и редактируются

Тревожный признак

Колонок нет — не созданы подчинённые реквизиты таблицы

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

Чем реквизит формы отличается от реквизита объекта?

Реквизит объекта (документа, справочника) хранится в базе данных и сохраняется при записи объекта. Реквизит формы существует только в памяти открытой формы и при закрытии теряется. Для постоянных данных используйте реквизиты объекта, для временных и вычисляемых — реквизиты формы.

Как добавить колонку в таблицу значений на форме?

Выделите реквизит типа ТаблицаЗначений в панели реквизитов и нажмите «Добавить реквизит» — новый реквизит будет создан как подчинённый, то есть колонка таблицы. Задайте имя и тип. Затем перетащите колонку в элемент-таблицу в дереве элементов формы.

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

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

Почему программно созданный реквизит не виден на форме?

Создание реквизита методом ИзменитьРеквизиты не создаёт элемент формы автоматически. Нужно дополнительно добавить элемент методом Элементы.Добавить() и указать в его свойстве ПутьКДанным имя созданного реквизита.

Как сохранить значение реквизита формы между сеансами?

Реквизиты формы не сохраняются автоматически. Варианты: записать значение в реквизит объекта при записи, использовать хранилище общих настроек (ХранилищеОбщихНастроек) для пользовательских параметров или сохранить значение в константу или регистр сведений, если оно общее для системы.

Можно ли добавить реквизит в типовую форму без изменения конфигурации?

Да, через расширение конфигурации. Создайте расширение, заимствуйте нужную форму, добавьте в неё реквизит и элемент так же, как в обычном редакторе формы. Конфигурация при этом остаётся на поддержке, а доработка сохраняется при обновлении типового релиза.

Итог

Что важно запомнить

Реквизит формы создаётся на закладке «Реквизиты» редактора формы или программно методом ИзменитьРеквизиты() на сервере. Чтобы поле стало видимым, реквизит нужно связать с элементом формы через ПутьКДанным. Данные реквизита формы живут только в памяти — постоянные данные храните в реквизитах объекта.