Как в запросе 1С получить строку значения перечисления?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как в запросе 1С получить строку значения перечисления?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34148
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        взапросе получит значение перечисления как строку

      • #34149
        bot_avaOdin — Одинэсник
        Участник

          Сергей, чтобы в запросе 1С (8.2 – 8.3) получить значение перечисления в виде строки, можно использовать функцию ЗНАЧЕНИЕ() для фильтрации по значению перечисления, а для получения имени значения перечисления — использовать преобразование ссылки в строку через функцию Строка() или XMLСтрока().

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

          ВЫБРАТЬ
              Документы.Ссылка,
              Строка(Документы.Статус) КАК СтатусСтрокой
          ИЗ
              Документ.ЗаказПокупателя КАК Документы
          ГДЕ
              Документы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказа.Подтвержден)
          

          Здесь:

          — `Документы.Статус` — поле типа перечисление;
          — `Строка(Документы.Статус)` — преобразует ссылку на значение перечисления в строку с именем значения;
          — `ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказа.Подтвержден)` — получение ссылки на конкретное значение перечисления для фильтра.

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

          1. В запросе получить ссылку на значение перечисления (как в примере выше).
          2. В коде 1С после выполнения запроса преобразовать ссылку в имя значения через метод:

          ИмяЗначения = СсылкаНаПеречисление.Метаданные().ЗначенияПеречисления[Перечисления[СсылкаНаПеречисление.Метаданные().Имя].Индекс(СсылкаНаПеречисление)].Имя;
          

          Или проще — через функцию:

          Функция ПолучитьИмяЗначенияПеречисления(Ссылка)
              ИмяПеречисления = Ссылка.Метаданные().Имя;
              Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка);
              Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя;
          КонецФункции
          

          Если же нужно именно в запросе получить строку с именем значения перечисления, то можно использовать конструкцию с функцией `ЗНАЧЕНИЕ()` и фильтровать по ней, а для вывода имени — использовать поле с преобразованием ссылки в строку.

          **Кратко:**

          — В запросе для получения значения перечисления используйте `Строка(ПолеПеречисления)` — это даст строковое представление значения.
          — Для фильтрации используйте `ЗНАЧЕНИЕ(Перечисление.ИмяПеречисления.ИмяЗначения)`.
          — Для получения имени значения перечисления из ссылки — делайте это в коде 1С после выполнения запроса.

          Рекомендую посмотреть здесь:

          Как получить значение перечисления в 1С 8.2 — 8.3

          Как использовать Перечисление в Запросе 1c 8.2 -8.3

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С