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

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

Что такое предопределенные элементы в 1С и зачем нужно их имя

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

  • 🔹 Стандартных справочников (валюты, единицы измерения, страны мира)
  • 🔹 Статусов документов ("Проведен", "Не проведен", "Удален")
  • 🔹 Типовых ролей (например, "Полные права" в пользователях)
  • 🔹 Системных констант (организация по умолчанию, основной склад)

Имя предопределенного элемента может понадобиться для:

  • 📋 Отображения пользователю в отчетах или печатных формах
  • 🔍 Поиска и фильтрации данных в запросах
  • 🛠️ Отладки и логирования (чтобы понять, какой именно элемент используется)
  • 🔄 Миграции данных между базами (сопоставление по именам)

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

📊 Какой способ получения имен предопределенных элементов вы используете чаще?
Через Метод()
Через Запрос
Через Метаданные
Через Прямое обращение по UID

Способ 1: Получение имени через метод ПолноеИмя()

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

Пример кода для получения имени предопределенной валюты "Рубль":

СсылкаНаВалюту = Справочники.Валюты.Рубль;

ИмяЭлемента = СсылкаНаВалюту.ПолноеИмя();

// Вернет строку вида: "Справочник.Валюты.Рубль"

Чтобы выделить только имя элемента (без пути к справочнику), можно использовать функцию СтрЗаменить():

ИмяБезПути = СтрЗаменить(ИмяЭлемента, "Справочник.Валюты.", "");

Этот метод работает для:

  • 📄 Справочников (Справочник.Имя.Элемент)
  • 📑 Документов (Документ.Имя.Статус)
  • 📊 Планов видов характеристик (ПланВидовХарактеристик.Имя.Значение)
  • 🔧 Констант (Константа.Имя)
⚠️ Внимание: Метод ПолноеИмя() может вернуть пустую строку, если предопределенный элемент был удален из конфигурации, но ссылки на него остались в коде. В этом случае проверяйте существование элемента через Справочники.Имя.НайтиПоНаименованию().
💡

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

Способ 2: Использование запроса для получения имен

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

Пример запроса для получения имен всех предопределенных валют:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Справочник.Валюты.Ссылка КАК Ссылка,

| Справочник.Валюты.Наименование КАК Имя

|ИЗ

| Справочник.Валюты КАК Справочник.Валюты

|ГДЕ

| Справочник.Валюты.ЭтоГруппа = ЛОЖЬ

| И Справочник.Валюты.Предопределенный = ИСТИНА";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Выборка.Имя); // Выведет: Рубль, Доллар США и т.д.

КонецЦикла;

Преимущества этого способа:

  • 🔍 Можно получить имена сразу для группы элементов
  • 📊 Легко добавить дополнительные поля (код, пометка удаления и т.д.)
  • 🔄 Удобно использовать в циклах и массовых операциях

Недостатки:

  • ⚠️ Более медленная работа по сравнению с прямым обращением
  • 📉 Требует знания синтаксиса запросов
Способ Скорость Универсальность Сложность
ПолноеИмя() ⚡ Быстро ✅ Высокая 🟢 Низкая
Запрос 🐢 Медленно ✅ Высокая 🟡 Средняя
Метаданные ⚡ Быстро ❌ Низкая 🔴 Высокая

Способ 3: Работа с метаданными через Конфигуратор

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

Инструкция:

  1. Откройте конфигурацию в режиме Конфигуратор.
  2. Перейдите в меню Операции → Открыть консоль запросов (или нажмите Ctrl+Alt+Q).
  3. Введите запрос для получения метаданных:
    ВЫБРАТЬ
    

    Метаданные.Справочники.Имя КАК ИмяСправочника,

    Метаданные.Справочники.ПредопределенныеЭлементы.Имя КАК ИмяЭлемента,

    Метаданные.Справочники.ПредопределенныеЭлементы.Идентификатор КАК UID

    ИЗ

    Метаданные.Справочники КАК Метаданные.Справочники

    ГДЕ

    Метаданные.Справочники.Имя = "Валюты"

  4. Нажмите Выполнить и проанализируйте результат.

Этот метод позволяет:

  • 🔍 Найти элемент по UID, даже если его имя неизвестно
  • 📋 Получить полный список предопределенных элементов в справочнике
  • 🔧 Проверить, не был ли элемент удален или переименован
⚠️ Внимание: Работа с метаданными через консоль запросов требует прав администратора. В некоторых конфигурациях (например, 1С:ERP или 1С:УТ 11) доступ к метаданным может быть ограничен.
Как найти UID предопределенного элемента без Конфигуратора?

Если у вас нет доступа к Конфигуратору, можно получить UID через встроенный язык. Например, для валюты "Рубль" используйте код:

Ссылка = Справочники.Валюты.Рубль;

Сообщить(Ссылка.УникальныйИдентификатор());

Этот код вернет строку вида {550e8400-e29b-41d4-a716-446655440000}, которую можно использовать для поиска в метаданных.

Способ 4: Прямое обращение через встроенный язык

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

Примеры:

// Для справочника

ИмяВалюты = Справочники.Валюты.Рубль.Наименование;

// Для документа

ИмяСтатуса = Документы.ЗаказПокупателя.Статусы.Проведен;

// Для плана видов характеристик

ИмяХарактеристики = ПланыВидовХарактеристик.ВидыНоменклатуры.Услуга;

Особенности метода:

  • Максимальная скорость — нет дополнительных вызовов функций
  • 📌 Компактный код — идеально для часто используемых элементов
  • ⚠️ Опасность ошибок — если элемент переименован, код перестанет работать

Чтобы избежать ошибок при переименовании, используйте конструкцию Попытка...Исключение:

Попытка

ИмяЭлемента = Справочники.Валюты.НесуществующаяВалюта.Наименование;

Исключение

Сообщить("Элемент не найден: " + ОписаниеОшибки());

КонецПопытки;

Проверьте существование элемента в конфигураторе|Убедитесь, что имя не содержит опечаток|Используйте Попытка...Исключение для критических участков|Документируйте используемые предопределенные элементы-->

Способ 5: Получение имени через API (для внешних систем)

Если вы работаете с через REST API, OData или другие внешние интерфейсы, получить имя предопределенного элемента можно с помощью стандартных методов API. Этот способ актуален для интеграций с веб-сервисами или мобильными приложениями.

Пример запроса через OData (для 1С:Предприятие 8.3.20+):

GET /odata/standard.odata/Catalog_Валюты?$filter=IsPredefined eq true&$select=Description

Host: ваш_сервер:порт

Authorization: Basic ваш_токен

Ответ будет содержать массив объектов с полем Description, которое соответствует имени элемента:

{

"value": [

{"Description": "Рубль"},

{"Description": "Доллар США"},

{"Description": "Евро"}

]

}

Особенности работы с API:

  • 🌐 Подходит для внешних систем (сайты, мобильные приложения)
  • 🔒 Требует настройки прав доступа и аутентификации
  • 📡 Может быть медленнее, чем внутренние методы 1С
  • 🔧 Поддерживается не во всех версиях платформы (требуется 8.3.15+)
⚠️ Внимание: При работе с API имена предопределенных элементов могут возвращаться на разных языках в зависимости от настроек локализации сервера 1С. Убедитесь, что язык сеанса соответствует ожидаемому.

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

При работе с предопределенными элементами разработчики часто сталкиваются с типичными ошибками, которые ведут к падению кода или некорректным результатам. Вот самые распространенные из них:

  1. Обращение к несуществующему элементу

    Если предопределенный элемент был удален или переименован, прямое обращение вызовет ошибку. Всегда проверяйте существование:

    Если Не ЗначениеЗаполнено(Справочники.Валюты.Рубль) Тогда
    

    Сообщить("Элемент не найден!");

    КонецЕсли;

  2. Путаница между именем и синонимом

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

    ПользовательскоеИмя = Справочники.Валюты.Рубль.Представление();
  3. Неучет прав доступа

    Если у пользователя нет прав на чтение справочника, методы вроде ПолноеИмя() вернут пустую строку. Проверяйте права через:

    Если Не ПравоДоступа("Чтение", Метаданные.Справочники.Валюты) Тогда
    

    Сообщить("Нет прав на чтение!");

    КонецЕсли;

  4. Кэширование имен

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

    Перем ИмяВалютыРубль;
    
    

    Функция ПолучитьИмяВалютыРубль()

    Если Не ЗначениеЗаполнено(ИмяВалютыРубль) Тогда

    ИмяВалютыРубль = Справочники.Валюты.Рубль.Наименование;

    КонецЕсли;

    Возврат ИмяВалютыРубль;

    КонецФункции

Еще одна распространенная проблема — разные имена в разных конфигурациях. Например, в 1С:Бухгалтерия предопределенная валюта может называться "Рубль", а в 1С:ERP"Рубль РФ". Всегда уточняйте имена в конкретной базе!

💡

Перед использованием предопределенных элементов в коде проверьте их существование через Конфигуратор или запрос к метаданным. Это избавит от ошибок при обновлении конфигурации.

FAQ: Частые вопросы по работе с предопределенными элементами

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

Если у вас есть только UID (например, {550e8400-e29b-41d4-a716-446655440000}), используйте следующий код:

UID = Новый УникальныйИдентификатор("550e8400-e29b-41d4-a716-446655440000");

Ссылка = Справочники.Валюты.НайтиПоUID(UID);

Если Ссылка.Пустая() Тогда

Сообщить("Элемент не найден!");

Иначе

Сообщить(Ссылка.Наименование);

КонецЕсли;

Этот метод работает для всех типов объектов (справочники, документы, планы видов характеристик).

Почему метод ПолноеИмя() возвращает пустую строку?

Это может происходить по нескольким причинам:

  1. Элемент был удален из конфигурации, но ссылки на него остались в коде.
  2. У пользователя нет прав на чтение этого справочника.
  3. Вы обращаетесь к элементу неверного типа (например, пытаетесь получить имя документа как справочника).
  4. В конфигурации отключена поддержка предопределенных данных (редко, но встречается в сильно кастомизированных базах).

Для диагностики используйте:

Сообщить(Ссылка.Пустая()); // Проверит, существует ли ссылка

Сообщить(Метаданные.Справочники.Валюты.Предопределенный); // Проверит, включена ли поддержка

Можно ли изменить имя предопределенного элемента?

Технически да, но это не рекомендуется. Изменение имени предопределенного элемента может привести к:

  • 🔴 Ошибкам в типовом функционале (если элемент используется в стандартных процедурах)
  • 🔴 Проблемам при обновлении конфигурации (конфликты с новой версией)
  • 🔴 Потере данных, если элемент используется в регистрах или документах

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

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

Используйте следующий код для получения полного списка:

Справочник = Метаданные.Справочники.Валюты;

СписокЭлементов = Новый Массив;

Для Каждого Элемент Из Справочник.ПредопределенныеЭлементы Цикл

Ссылка = Справочники.Валюты.НайтиПоНаименованию(Элемент.Имя);

Если Не Ссылка.Пустая() Тогда

СписокЭлементов.Добавить(Ссылка.Наименование);

КонецЕсли;

КонецЦикла;

Для вывода результата:

Для Каждого Имя Из СписокЭлементов Цикл

Сообщить(Имя);

КонецЦикла;

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

В управляемых формах (например, в 1С 8.3) для работы с предопределенными элементами используйте серверные методы. Пример для заполнения поля со списком валют:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Справочник.Валюты.Ссылка КАК Ссылка

ИЗ Справочник.Валюты КАК Справочник.Валюты

ГДЕ Справочник.Валюты.Предопределенный = ИСТИНА";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

ЭлементСписка = ЭлементыФормы.СписокВалют.Список.Добавить(

Выборка.Ссылка.Наименование,

Выборка.Ссылка

);

КонецЦикла;

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

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