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

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

1С: в чём отличие реквизитов форм от реквизитов объектов

Чем реквизиты формы в 1С отличаются от реквизитов объекта: хранение данных, время жизни, поведение при записи, типичные ошибки разработчиков и практические примеры.

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

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

Ниже разобраны механика хранения, время жизни, поведение при записи, типичные сценарии выбора и ошибки, которые чаще всего допускают при работе с реквизитами обоих типов.

Что такое реквизит объекта и как он хранится

Реквизит объекта конфигурации — это поле, описанное в метаданных: у справочника, документа, плана счетов, обработки, регистра сведений и других объектов. Платформа создаёт для него физическое хранилище — колонку в таблице базы данных (в файловом варианте — в файле 1Cv8.1CD, в клиент-серверном — в таблице СУБД).

Когда пользователь нажимает «Записать», значение реквизита объекта попадает в базу и остаётся там до следующего изменения. При повторном открытии объекта значение читается из базы и подставляется в форму. Это делает реквизиты объекта единственным корректным местом для учётных данных: наименований, сумм, дат, ссылок на другие объекты.

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

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

Реквизит формы создаётся в конфигураторе на закладке «Реквизиты» редактора формы или программно методом ИзменитьРеквизиты(). Он не привязан к структуре данных в базе: платформа не создаёт для него колонку в таблице. Значение реквизита формы существует в оперативной памяти (на клиенте и в кэше формы на сервере) только пока форма открыта.

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

Главный реквизит формы — особый случай. В форме документа это, как правило, реквизит Объект типа «ДанныеФормыСтруктура», через который форма работает с данными самого документа. Обращение Объект.Дата — это обращение к реквизиту объекта через форму, а не к самостоятельному реквизиту формы.

Где описанВ редакторе формы или в метаданных объекта

Откройте форму в конфигураторе: реквизиты формы видны на закладке «Реквизиты», реквизиты объекта — в дереве метаданных объекта

Куда пишетсяБаза данных или только память

Запишите объект и откройте заново: реквизит объекта сохранит значение, реквизит формы сбросится

Как обращаютсяОбъект.Имя или ИмяРеквизита

Обращение через «Объект.» — это данные объекта; прямое имя в модуле формы — реквизит формы

Сравнение по ключевым параметрам

Различия удобно свести в таблицу — она помогает быстро принять решение при проектировании формы.

КритерийРеквизит объектаРеквизит формы
ХранениеТаблица базы данныхПамять, пока форма открыта
Время жизниДо изменения или удаления объектаДо закрытия формы
Доступность в запросахДаНет
Изменение структурыТребует обновления конфигурации БДДостаточно изменить форму
Типичное назначениеУчётные данныеИнтерфейсные, временные данные

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

Когда выбирать реквизит объекта

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

Пример: в документе «Заказ клиента» нужно хранить согласованный процент скидки. Это учётная величина — она влияет на сумму, печатается в документе, анализируется в отчётах по продажам. Правильное решение — реквизит документа. Если сделать его реквизитом формы, после записи и переоткрытия значение обнулится, а проведение не сможет его прочитать.

Когда выбирать реквизит формы

Реквизит формы оправдан, когда данные нужны только для текущего сеанса работы с формой: отборы и фильтры списка, введённые пользователем; промежуточные результаты вычислений для отображения; флаги управления интерфейсом (показать/скрыть группу, режим редактирования); временные таблицы значений и деревья для вспомогательных подборов.

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

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

Маршрут решения

Как выбрать, куда поместить данные

Значение должно сохраняться после записи и закрытия формыРеквизит объекта или табличная часть
Данные нужны только для отбора, отображения или вычисления в открытой формеРеквизит формы
Значение нужно в запросах, отчётах, проведении или обменахТолько реквизит объекта
Нужно помнить настройку пользователя между сеансами, но не хранить в объектеРеквизит формы + сохранение в хранилище настроек

Программная работа: обращение и типичные приёмы

В модуле формы реквизит объекта доступен через главный реквизит формы: Объект.ИмяРеквизита. Реквизит формы доступен напрямую по имени: СтрокаПоиска = "гвозди";. Путаница между этими двумя обращениями — частый источник ошибок «Поле объекта не обнаружено».

Реквизиты формы можно создавать динамически:

Процедура ДобавитьРеквизитФормы(ИмяРеквизита)

Добавляемые = Новый Массив;

Добавляемые.Добавить(Новый РеквизитФормы(

ИмяРеквизита,

Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100))));

ИзменитьРеквизиты(Добавляемые);

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

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

Типичные ошибки и как их избежать

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

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

Типичные ошибки
01
Хранение учётных данных в реквизите формы — значения теряются при закрытии, проведение их не видит
02
Обращение к реквизиту объекта без префикса «Объект.» — ошибка «Поле объекта не обнаружено»
03
Попытка выбрать реквизит формы в запросе или СКД — платформа не имеет к нему доступа
04
Прямое присваивание ТаблицыЗначений реквизиту формы — нужно ЗначениеВДанныеФормы()
05
Дублирование данных: одно и то же поле и в объекте, и в форме — рассинхронизация значений

Проверка результата после доработки

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

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

Контрольные точки

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

Сохранение значения после записи и переоткрытия
Норма

Реквизит объекта сохранил значение; реквизит формы сбросился к начальному

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

Реквизит объекта пуст после переоткрытия — значение не записывается

Доступность в отчётах и запросах
Норма

Поле объекта выбирается запросом

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

Поле не видно в конструкторе запроса — это реквизит формы

Инициализация реквизита формы
Норма

При открытии формы значение задано в ПриСозданииНаСервере

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

Поле пустое или содержит неожиданное значение

Итог

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

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

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

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

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

Почему обращение к реквизиту по имени выдаёт «Поле объекта не обнаружено»?

Скорее всего, вы обращаетесь к реквизиту объекта без префикса Объект., либо к реквизиту формы, который не создан. Проверьте, где описано поле: в метаданных объекта — обращайтесь через Объект.Имя, в реквизитах формы — напрямую по имени.

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

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

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

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

Влияют ли реквизиты формы на производительность?

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

Что такое главный реквизит формы?

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