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