Разработка и Конфигурация · 9 мин
Как получить имя объекта в 1С
Как получить имя объекта в 1С: методы НайтиПоСсылке, Метаданные, имя объекта метаданных, синоним и представление. Примеры кода на встроенном языке 1С.
Задача получить имя объекта в 1С возникает в нескольких разных ситуациях: нужно узнать имя объекта метаданных по ссылке, определить тип объекта в универсальном алгоритме, вывести пользователю понятное представление элемента справочника или документа. В каждом случае применяется свой механизм, и путаница между ними — частая причина ошибок в коде.
Важно сразу различить три понятия: имя объекта метаданных (например, «Номенклатура» или «РеализацияТоваровУслуг»), синоним (представление объекта в интерфейсе) и представление ссылки (строка, которую видит пользователь, например «Реализация товаров 000001 от 12.03.2026»). Это разные значения, и получаются они разными способами.
Ниже разобраны основные приёмы: работа с объектом Метаданные, получение имени по ссылке, определение имени таблицы для запросов, а также типичные ошибки и ограничения каждого подхода.
Различие имени, синонима и представления
Прежде чем писать код, определите, какое именно «имя» вам нужно. У любого объекта конфигурации есть как минимум три текстовых идентификатора, и они не взаимозаменяемы.
Имя — идентификатор объекта метаданных, заданный разработчиком в конфигураторе. Оно используется в коде и запросах: «Номенклатура», «ЗаказКлиента». Имя уникально внутри вида объектов и не меняется при переименовании в интерфейсе.
Синоним — представление объекта метаданных для пользователя, например «Номенклатура товаров». Он может меняться администратором без изменения кода, поэтому использовать синоним для логики нельзя.
Представление ссылки — строка, формируемая для конкретного элемента данных: наименование элемента справочника или номер и дата документа. Получается функцией Строка() или автоматически при выводе.
Получение имени объекта метаданных по ссылке
Самая распространённая задача: есть ссылка на элемент, нужно узнать, объект какого вида она представляет. Для этого у любой ссылки есть метод Метаданные(), возвращающий описание объекта конфигурации, а у него — свойство Имя.
ИмяОбъекта = Ссылка.Метаданные().Имя;
// Например: "Номенклатура"
ПолноеИмя = Ссылка.Метаданные().ПолноеИмя();
// Например: "Справочник.Номенклатура"
Разница между Имя и ПолноеИмя принципиальна: Имя возвращает только идентификатор внутри вида, а ПолноеИмя — полный путь с указанием вида объекта. Для сравнения типов в универсальных алгоритмах надёжнее использовать именно ПолноеИмя, так как имя «Валюты» может встречаться и среди справочников, и в других коллекциях.
Учтите, что вызов Ссылка.Метаданные() — это обращение к метаданным конфигурации, а не к базе данных, поэтому метод работает быстро и не требует чтения объекта. Это делает его безопасным для массовых обходов коллекций ссылок.
ИмяОбъекта = Ссылка.Метаданные().Имя;
ПолноеИмя = Ссылка.Метаданные().ПолноеИмя();
Синоним = Ссылка.Метаданные().Синоним;Определение имени по типу значения
Иногда ссылки как таковой нет — есть произвольное значение, и нужно понять, к какому объекту метаданных оно относится. Для этого существует метод глобального контекста Метаданные.НайтиПоТипу().
ТипЗначения = ТипЗнч(Значение);
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);
Если ОбъектМетаданных <> Неопределено Тогда
ИмяОбъекта = ОбъектМетаданных.Имя;
КонецЕсли;
Обязательно проверяйте результат на Неопределено: метод возвращает его для примитивных типов (Строка, Число, Дата) и для типов, не связанных с объектами метаданных. Обращение к свойству Имя без проверки приведёт к ошибке исполнения.
Обратная задача — получить объект метаданных по известному имени — решается через Метаданные.НайтиПоПолномуИмени("Справочник.Номенклатура"). Этот приём используется в универсальных обработках, где имя объекта приходит строкой из настроек или параметров.
Имя таблицы объекта для запросов
При динамическом построении запросов часто требуется получить имя таблицы, соответствующее объекту. В языке запросов таблица совпадает с полным именем метаданных: «Справочник.Номенклатура», «Документ.ЗаказКлиента», «РегистрСведений.КурсыВалют».
ПолноеИмя = Ссылка.Метаданные().ПолноеИмя();
ТекстЗапроса = "ВЫБРАТЬ Первые 1 Ссылка ИЗ " + ПолноеИмя;
Такой подход работает для справочников, документов, регистров и планов обмена. Однако будьте осторожны с перечислениями: у них нет ссылочной таблицы в привычном смысле, и обращение к значениям выполняется через ЗНАЧЕНИЕ(Перечисление.Имя.Значение).
Получение представления объекта для пользователя
Если цель — показать пользователю читаемое название конкретного элемента, используйте представление ссылки. Простейший способ — функция Строка(Ссылка), которая возвращает наименование элемента справочника или автопредставление документа.
Для управляемых форм и отчётов СКД представление формируется автоматически. Если нужен синоним объекта метаданных (например, для заголовка отчёта), обращайтесь к свойству Синоним объекта метаданных: Метаданные.Справочники.Номенклатура.Синоним.
Учтите, что получение представления ссылки на сервере может потребовать обращения к данным объекта. В типовых конфигурациях для этого существуют функции общих модулей, например формирование представления документа с учётом настроек нумерации.
Что использовать в разных задачах
Для логики, сравнения видов объектов, ветвления кода. Быстро, без обращения к БД.
Для динамических запросов и универсальных обработок, где нужен полный путь к таблице.
Для вывода в интерфейс и заголовки. Не использовать в программной логике.
Для отображения конкретного элемента пользователю.
Имя объекта внешней обработки и отчёта
Отдельный случай — определить имя текущей внешней обработки или отчёта из её собственного кода. Для этого используется свойство ЭтотОбъект.ИспользуемоеИмяФайла, доступное в модуле объекта внешней обработки.
ИмяФайла = ЭтотОбъект.ИспользуемоеИмяФайла;
// Например: "C:\Обработки\МояОбработка.epf"
Свойство возвращает полный путь к файлу, поэтому для получения только имени нужно извлечь подстроку. Если обработка встроена в конфигурацию, свойство может быть недоступно — тогда имя берут из метаданных: Метаданные().Имя в контексте объекта обработки.
Типичные ошибки и как их избежать
Наиболее частая ошибка — использование синонима или представления для сравнения в коде. Синоним могут переименовать в конфигураторе, и вся логика, завязанная на строку «Номенклатура товаров», перестанет работать. Для сравнений используйте только Имя или ПолноеИмя.
Вторая ошибка — обращение к свойствам объекта метаданных без проверки на Неопределено при работе с НайтиПоТипу и НайтиПоПолномуИмени. Третья — попытка получить имя через запрос к данным, когда достаточно метаданных: это лишняя нагрузка на базу.
Как проверить результат
Строка-идентификатор без пробелов, например «Номенклатура»
Пустая строка или ошибка обращения к свойству
Объект описания метаданных, не Неопределено
Неопределено — значит, тип не связан с объектом конфигурации
Строка вида «Вид.Имя», запрос выполняется
Ошибка компоновки запроса — имя таблицы неверно
Частые вопросы
Как узнать, справочник это или документ, имея только ссылку?
Получите полное имя: Ссылка.Метаданные().ПолноеИмя() и проверьте начало строки, либо используйте Метаданные.Справочники.Содержит(Ссылка.Метаданные()) — метод вернёт Истина, если объект относится к справочникам.
Можно ли получить имя объекта в запросе без кода?
Да, в языке запросов есть функция ТИПЗНАЧЕНИЯ() и оператор ССЫЛКА для проверки вида ссылки: ГДЕ Таблица.Поле ССЫЛКА Справочник.Номенклатура. Но само имя строкой запрос не возвращает — для этого нужен код.
Чем отличается Имя от ПредставлениеОбъекта?
Имя — неизменяемый идентификатор для кода, ПредставлениеОбъекта — настраиваемое представление вида объекта для интерфейса (например, «Товар» вместо «Номенклатура»). Представление может задаваться в свойствах метаданных и меняться без доработки кода.
Как получить имя регистра, в котором есть запись?
Через набор записей или менеджер регистра: РегистрыСведений.ИмяРегистра — это доступ по имени. Обратно, от записи регистра: Запись.Метаданные().Имя вернёт имя регистра, а ПолноеИмя() — например, «РегистрСведений.КурсыВалют».
Почему Ссылка.Метаданные() иногда недоступен на клиенте?
В тонком и веб-клиенте доступ к объекту Метаданные ограничен: полная работа с метаданными возможна на сервере. Вынесите получение имени в серверную процедуру общего модуля с признаком «Сервер» и возвращайте на клиент готовую строку.
Что важно запомнить
Имя объекта для логики получают через Ссылка.Метаданные().Имя или ПолноеИмя(), для произвольного значения — через Метаданные.НайтиПоТипу() с проверкой на Неопределено. Синоним и представление — только для интерфейса, использовать их в программных сравнениях нельзя.