В процессе разработки на платформе 1С:Предприятие часто возникает необходимость получить не синоним (то, что видит пользователь), а именно системное имя (идентификатор), заданное в конфигураторе. Рассмотрим основные способы решения этой задачи, чтобы вы могли выбрать наиболее подходящий для вашего случая.
Этот метод считается наиболее профессиональным и надежным, так как он напрямую обращается к структуре конфигурации. Суть метода заключается в нахождении индекса перечисления в коллекции и извлечении свойства Имя из объекта Метаданные.
Разберем процесс по шагам:
Метаданные.ЗначенияПеречисления по полученному индексу.Давайте посмотрим на готовый пример реализации данной логики в виде функции:
Процедура ДобавитьВСписокПеречисление(Список, ЗначениеПеречисления)
МетаданныеПеречисления = ЗначениеПеречисления.Метаданные();
ИндексЗначения = Перечисления[МетаданныеПеречисления.Имя].Индекс(ЗначениеПеречисления);
ЗначениеМетаданных = МетаданныеПеречисления.ЗначенияПеречисления[ИндексЗначения];
Имя = ЗначениеМетаданных.Имя;
Синоним = ЗначениеМетаданных.Синоним;
Список.Добавить(Имя, Синоним);
КонецПроцедуры
Этот подход работает стабильно даже в сложных архитектурах. Если вы работаете через COM-соединение, помните об области видимости: необходимо корректно обращаться к менеджеру перечислений через корневой объект COM-соединения, как показано ниже:
Индекс = v83.Перечисления.СтавкиНДС.Индекс(Ставка_в_виде_СОМ_Объекта);
НаименованиеСтавки = v83.Метаданные.Перечисления.СтавкиНДС.ЗначенияПеречисления.Получить(Индекс).Имя;
Если вам нужно максимально быстрое и лаконичное решение, можно воспользоваться функцией XMLСтрока(). Она преобразует значение перечисления в строковый формат, который выглядит как ИмяПеречисления.ИмяЗначения.
Рассмотрим применение:
// Предположим, у нас есть переменная СсылкаНаПеречисление
ИмяЗначения = XMLСтрока(СсылкаНаПеречисление);
// Результат будет строкой вида: Перечисление.ВидыОперацийРКО.ОплатаПоставщику
Этот способ крайне удобен для быстрой отладки или написания коротких обработок. Однако учтите, что если вам нужно получить только вторую часть строки (имя самого значения), потребуется дополнительно обработать полученную строку, например, с помощью функции СтрРазделить() или СтрНайти().
Мы проанализировали оба метода. Подведем итоги:
Теперь вы знаете, как извлечь идентификатор перечисления в любой ситуации. Применяйте эти инструменты в зависимости от контекста вашей задачи, и разработка станет еще проще!