Разработка и Конфигурация · 11 мин
Как найти поле объекта в 1С
Как найти поле объекта в 1С: поиск реквизита в конфигураторе, через метаданные, запросом и в коде. Пошаговые способы, проверка результата и типичные ошибки.
Под «полем объекта» в 1С обычно понимают реквизит справочника, документа, регистра или другого объекта конфигурации — либо колонку табличной части. Найти его приходится в разных ситуациях: при доработке отчёта, написании запроса, поиске источника данных для формы или разборе чужой конфигурации. Способ поиска зависит от того, что известно: имя поля, его синоним (видимое название), значение в базе или только объект, которому поле должно принадлежать.
Основные рабочие инструменты — конфигуратор с его деревом метаданных и глобальным поиском, встроенный язык с коллекцией «Метаданные», консоль запросов и поиск по данным информационной базы. Ниже разобраны все практические сценарии: от простого поиска реквизита по имени до случая, когда поле вообще не видно в структуре объекта.
Что считать полем объекта и где оно может скрываться
Прежде чем искать, важно понимать, где поле физически может располагаться. У типового объекта конфигурации есть несколько групп полей: стандартные реквизиты (Ссылка, Код, Наименование, Номер, Дата, ПометкаУдаления и другие, которые платформа создаёт автоматически), реквизиты, добавленные разработчиком, табличные части с их колонками, а также общие реквизиты, подключённые сразу к нескольким объектам.
Частая причина «пропавшего» поля — оно не является реквизитом самого объекта, а лежит в табличной части, в регистре сведений, связанном с объектом, или является общим реквизитом конфигурации. Ещё один вариант — поле существует только на форме как реквизит формы и не хранится в базе данных вообще.
Как найти поле через конфигуратор по имени или синониму
Если известно имя реквизита или его видимое название, откройте конфигуратор и разверните нужную ветку дерева конфигурации: «Справочники», «Документы», «Регистры сведений» и так далее. У каждого объекта реквизиты видны на закладке «Данные» в палитре свойств либо непосредственно в дереве под узлом объекта.
Когда объект неизвестен, используйте глобальный поиск: меню «Правка — Глобальный поиск» или сочетание Ctrl+Shift+F. Введите имя или часть синонима, отметьте поиск в конфигурации. Поиск найдёт совпадения в именах, синонимах, модулях и формах. По двойному щелчку на результате откроется нужное место в метаданных или модуле.
Дополнительный приём — функция «Поиск ссылок на объекты метаданных» (правый клик по объекту в дереве, пункт «Поиск ссылок»). Она показывает, где объект или реквизит используется в коде и других объектах, что помогает понять роль поля.
- 1Откройте конфигуратор и дождитесь загрузки дерева конфигурации.
- 2Разверните ветку с нужным типом объекта (Справочники, Документы, Регистры).
- 3Откройте объект и посмотрите закладку «Данные»: реквизиты, табличные части, стандартные реквизиты.
- 4Если поле не найдено — запустите глобальный поиск (Ctrl+Shift+F) по имени или синониму.
- 5Проверьте ветку «Общие — Общие реквизиты»: поле может быть подключено к объекту оттуда.
Как найти поле программно через метаданные
Когда поиск нужно выполнить в коде — например, для универсальной обработки или проверки наличия реквизита перед обращением к нему — используется объект «Метаданные». У каждого объекта метаданных есть коллекции «Реквизиты», «ТабличныеЧасти» и «СтандартныеРеквизиты».
Типовой приём — метод Найти() у коллекции реквизитов: он возвращает объект метаданных реквизита или Неопределено, если поля нет. Это безопасный способ проверки перед обращением к полю, который защищает код от падения при различиях конфигураций.
МетаОбъект = Метаданные.Справочники.Номенклатура;
Реквизит = МетаОбъект.Реквизиты.Найти("Артикул");
Если Реквизит = Неопределено Тогда
// поля нет — проверяем стандартные реквизиты и табличные части
Иначе
Сообщить("Тип поля: " + Реквизит.Тип);
КонецЕсли;
Для полного перебора используйте цикл по коллекциям: сначала Реквизиты, затем ТабличныеЧасти и внутри каждой — её Реквизиты. Не забудьте про общие реквизиты: коллекция Метаданные.ОбщиеРеквизиты, у каждого из которых есть состав с признаком использования в конкретном объекте.
Как найти поле через запрос и консоль запросов
Если нужно найти, в каком поле хранится конкретное значение, или проверить содержимое реквизита, удобна консоль запросов (внешняя обработка, широко применяемая разработчиками). В тексте запроса поля указываются по именам реквизитов: «ВЫБРАТЬ Ссылка, Артикул ИЗ Справочник.Номенклатура».
Признак того, что имя поля указано неверно, — ошибка «Поле не найдено» при выполнении запроса. В этом случае сверьте имя с конфигуратором: в запросах используются имена реквизитов, а не синонимы. Также помните, что поля табличных частей в запросе доступны через точку: Документ.РеализацияТоваровУслуг.Товары, где Товары — имя табличной части.
Для поиска значения по всем строковым реквизитам объекта можно сформировать запрос с условиями ПОДОБНО по каждому полю, предварительно получив список реквизитов через метаданные. Это рабочий способ ответить на вопрос «где вообще хранится это значение».
Как найти поле по данным информационной базы
Иногда известно только значение, которое пользователь видит на экране, а поле неизвестно. В этом случае помогает поиск ссылок на объект в пользовательском режиме («Ещё — Найти ссылки» в карточке объекта) и глобальный поиск по строкам в данных, если он включён администратором.
Для разработчика рабочий путь такой: открыть форму объекта в конфигураторе, найти элемент формы с нужной подписью и посмотреть его свойство «ПутьКДанным» — там указано, к какому реквизиту привязано поле. Это самый надёжный способ сопоставить видимое на экране поле с полем в базе.
Как выбрать способ поиска
Типичные ошибки и ограничения
Самая распространённая ошибка — путать имя и синоним реквизита. В интерфейсе поле может называться «Основной склад», а в метаданных иметь имя «Склад». Запросы и код работают только с именами, поэтому всегда сверяйте оба значения в палитре свойств.
Вторая ошибка — искать поле в неправильном объекте. Данные, которые выглядят как поле документа, могут храниться в регистре сведений с измерением по этому документу или в связанном справочнике. Признак такой ситуации: поле видно в форме, но отсутствует в реквизитах объекта и его табличных частях.
Третья группа проблем — права доступа. Если поле не видно в пользовательском режиме, но есть в конфигураторе, возможно, на реквизит настроено ограничение через роли (права на уровне полей) или функциональная опция скрывает его на форме. Проверьте права роли пользователя и состав функциональных опций объекта.
Как проверить, что найдено именно то поле
После того как поле найдено, убедитесь, что это именно оно. Откройте палитру свойств реквизита и проверьте тип значения, синоним и, при необходимости, состав типа — совпадает ли он с ожидаемыми данными. Затем выполните простой запрос к объекту с выборкой этого поля и сравните значения с тем, что видит пользователь на форме.
Если поле используется в доработке, проверьте места его использования через «Поиск ссылок на объект метаданных»: так вы заранее увидите, какие модули, формы и отчёты зависят от этого реквизита, и не сломаете их изменением.
Как проверить результат
Имя используется в коде и запросах, синоним совпадает с подписью на форме
Синоним совпадает, а имя другое — риск ошибки «Поле не найдено»
Тип соответствует данным, которые планируется читать или записывать
Составной тип или ссылка на другой объект, чем ожидалось
Запрос возвращает значения, совпадающие с формой
Пустой результат или ошибка выполнения запроса
Поиск ссылок показывает понятный список модулей и форм
Поле используется в десятках объектов — любое изменение требует тестирования
Частые вопросы
Почему поле видно на форме, но его нет в реквизитах объекта?
Наиболее вероятные причины: это реквизит формы (хранится только на форме), колонка табличной части, общий реквизит конфигурации или данные из связанного регистра сведений. Проверьте свойство «ПутьКДанным» элемента формы — оно точно укажет источник.
Как найти поле, если известно только его название на экране?
Откройте форму объекта в конфигураторе, найдите элемент с такой подписью и посмотрите свойство «ПутьКДанным». Альтернатива — глобальный поиск по синониму через Ctrl+Shift+F по всей конфигурации.
Что означает ошибка «Поле объекта не обнаружено»?
Код обращается к реквизиту, которого нет у объекта: либо имя указано с ошибкой, либо реквизит удалён, либо обращение идёт не к тому типу объекта. Проверьте имя через Метаданные и добавьте проверку Найти() перед обращением.
Как найти все объекты, где есть поле с определённым именем?
Программно — перебором коллекций метаданных (Справочники, Документы, Регистры) и вызовом Реквизиты.Найти(Имя) у каждого объекта. Вручную — глобальным поиском по конфигурации, но он найдёт и упоминания в модулях, поэтому программный перебор точнее.
Почему поле есть в конфигураторе, но не видно пользователю?
Проверьте права роли пользователя на этот реквизит, функциональные опции объекта и настройки видимости элемента на форме. Ограничение доступа на уровне записей и полей (RLS) также может скрывать значения.
Можно ли искать поле по значению, хранящемуся в нём?
Да: сформируйте запрос с условием по нужному полю или, если поле неизвестно, постройте запросы по всем строковым реквизитам объекта, получив их список через метаданные. Для больших баз ограничивайте выборку, чтобы не нагружать систему.
Что важно запомнить
Поле объекта 1С ищется через конфигуратор (дерево метаданных и Ctrl+Shift+F), программно через коллекцию Метаданные и через запросы по именам реквизитов. Если поле не находится, проверяйте табличные части, стандартные и общие реквизиты, реквизиты формы и связанные регистры. Перед обращением к полю в коде проверяйте его наличие, а перед изменением — делайте копию базы и анализ ссылок.