В процессе разработки и доработки конфигураций на платформе «1С:Предприятие» нередко возникает ситуация, когда поле присутствует на форме документа и к нему можно успешно обратиться через объектную модель, однако в дереве метаданных внутри конкретного документа этот реквизит отсутствует. Разберем детально, почему это происходит, как устроен механизм общих реквизитов и какие еще причины могут приводить к подобному поведению системы.
Рассмотрим типовую ситуацию. При работе с документом в коде выполняется стандартное чтение и запись данных:
Док = МойДокумент.ПолучитьОбъект();
Док.НужныйРеквизит = ПодставитьНужноеЗначение;
Док.Записать();
Код выполняется без ошибок, свойство успешно модифицируется и сохраняется в базе данных. На форме документа элемент управления также привязан к данным и отображает значение. Однако при попытке найти это поле в конфигураторе в ветке Документы -> [ИмяДокумента] -> Реквизиты нужного поля нет, а в некоторых консолях запросов оно не отображается в списке доступных полей таблицы.
Главная причина такого поведения — использование объекта метаданных «Общий реквизит».
Выясним, как устроены общие реквизиты и почему они ведут себя именно так:
Общие -> Общие реквизиты. Они создаются один раз и могут использоваться сразу во множестве документов, справочников или других объектов конфигурации. Именно поэтому в дереве самого документа такой реквизит не отображается.ДокументОбъект.ИмяОбщегоРеквизита.
ВЫБРАТЬ
Док.Ссылка КАК Документ,
Док.ИмяОбщегоРеквизита КАК ЗначениеРеквизита
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
Если внешняя консоль запросов не выводит поле в дереве полей, это может быть связано с особенностями построения метаданных в самой обработке или с режимом разделения данных.
Общие реквизиты часто применяются в качестве разделителей данных в архитектуре разделенных баз (SaaS, работа в сервисе, разделение по организациям или областям данных). Рассмотрим важные нюансы:
Если вы столкнулись с ситуацией, когда поле есть на форме, но отсутствует в реквизитах документа, проанализируем другие возможные варианты реализации:
*.cfe), в основной конфигурации оно отображаться не будет. При этом в пользовательском режиме реквизит полностью функционален.ДополнительныеРеквизиты или в независимом регистре сведений ДополнительныеСведения, а не в виде отдельных колонок таблицы документа.DataPath) элемента формы. Отображаемый заголовок или имя элемента могут отличаться от реального имени реквизита в базе данных.Разберем по шагам, как быстро локализовать происхождение реквизита:
Объект.[ИмяПоля] (или ДокументОбъект.[ИмяПоля]), но в ветке реквизитов документа его нет — перейдите в ветку Общие -> Общие реквизиты и найдите реквизит с таким именем.