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

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

Как найти реквизит на форме в 1С

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

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

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

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

Что нужно понимать перед поиском: реквизит объекта, реквизит формы и элемент формы

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

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

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

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

Окно редактора управляемой формы разделено на области: слева вверху — дерево элементов формы, справа вверху — список реквизитов формы, внизу — модуль формы. Чтобы понять, к какому реквизиту привязано конкретное поле, выделите элемент в дереве и откройте палитру свойств (правый клик → «Свойства» или Alt+Enter). Найдите строку «ПутьКДанным» — там будет имя реквизита, например «Объект.Контрагент» или «Комментарий».

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

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

Как найти элемент формы, если известно только то, что видно на экране

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

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

Другой вариант — воспользоваться поиском по модулю формы (Ctrl+F в модуле): обработчики элементов обычно содержат имя элемента в названии процедуры, например КонтрагентПриИзменении. Найдя такую процедуру, вы узнаёте имя элемента, а затем через палитру свойств — и путь к данным.

Как найти реквизит программно и через отладчик

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

Установите точку останова в обработчике «ПриСозданииНаСервере» или «ПриОткрытии», запустите отладку и в момент остановки добавьте в табло (Ctrl+Shift+W) выражение ЭтаФорма.Элементы. Раскрыв коллекцию, вы увидите все элементы формы с их именами, видами и значениями. Аналогично можно вычислить ЭтаФорма.ПолучитьРеквизиты() — метод вернёт массив реквизитов формы с типами и путями.

Для программного поиска конкретного элемента используется метод Элементы.Найти("ИмяЭлемента") — он возвращает элемент или Неопределено, если элемента нет. Это безопасный способ обращения, который не вызовет ошибку при отсутствии элемента:

Элемент = Элементы.Найти("Контрагент");

Если Элемент <> Неопределено Тогда

Элемент.Видимость = Ложь;

КонецЕсли;

bsl
МассивРеквизитов = ЭтаФорма.ПолучитьРеквизиты();
Для Каждого Реквизит Из МассивРеквизитов Цикл
    Сообщить(Реквизит.Путь + "." + Реквизит.Имя);
КонецЦикла;

Особенности поиска в динамически создаваемых формах

В типовых конфигурациях (БП, УТ, ERP, ЗУП) значительная часть форм строится программно: реквизиты добавляются методом ИзменитьРеквизиты(), элементы — через Элементы.Добавить(), а связь настраивается присваиванием ПутьКДанным в коде. В редакторе формы таких элементов нет, и поиск в конфигураторе ничего не даст.

Чтобы найти такой реквизит, ищите по модулю формы и общим модулям вызовы ИзменитьРеквизиты и Элементы.Добавить. В типовых решениях создание элементов часто вынесено в общие модули подсистем, поэтому используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по имени видимого на экране поля или его заголовку.

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

Типичные ошибки при поиске и обращении к реквизитам

Самая распространённая ошибка — обращение к элементу формы как к данным. Конструкция Элементы.Контрагент возвращает элемент управления, а не значение. Чтобы получить значение, нужно обратиться к данным: Объект.Контрагент или ЭтаФорма.ИмяРеквизита.

Вторая частая проблема — попытка обратиться к реквизиту объекта напрямую в контексте, где объект недоступен. На клиенте основной реквизит формы (Объект) доступен, но часть серверных данных — нет. Если код ругается на отсутствие поля, проверьте директиву компиляции процедуры (&НаКлиенте, &НаСервере) и доступность данных в этом контексте.

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

Типичные ошибки
01
Обращение к Элементы.Имя вместо реквизита данных — возвращается элемент управления, а не значение, что приводит к ошибкам присваивания
02
Поиск элемента конструкцией Элементы.Имя без проверки — если элемент создан программно или отсутствует, возникает ошибка; используйте Элементы.Найти()
03
Поиск реквизита по заголовку поля — заголовок могли изменить, надёжнее искать по свойству ПутьКДанным
04
Игнорирование динамических списков — колонки списка берутся из запроса, а не из реквизитов формы

Как проверить, что вы нашли нужный реквизит

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

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

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

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

Свойство «ПутьКДанным» элемента
Норма

Указан ожидаемый реквизит объекта или формы

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

Свойство пустое или указывает на другой реквизит

Изменение значения в отладчике
Норма

Поле на форме обновляется

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

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

Наличие реквизита в ПолучитьРеквизиты()
Норма

Реквизит есть в списке с нужным путём

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

Реквизита нет — он создаётся программно или удалён

Часто задаваемые вопросы

Как узнать, к какому реквизиту привязано поле, если нет доступа к конфигуратору?

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

Почему реквизит есть в объекте, но его нет на форме?

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

Как найти реквизит табличной части на форме?

В редакторе формы реквизиты табличной части отображаются в списке реквизитов с путём вида «Объект.Товары.Номенклатура». В дереве элементов колонки таблицы вложены в элемент-таблицу. Путь к данным колонки покажет и табличную часть, и конкретный реквизит.

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

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

Как программно получить список всех элементов формы?

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

Итог

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

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