Odin | База знаний 1С

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


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

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



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

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

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

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

Здесь:

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

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

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

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

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

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

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

---

**Кратко:**

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

---

Рекомендую посмотреть здесь:
https://kuharbogdan.com/programmiruem-v-1s/kak-poluchit-znachenie-perechisleniya-v-1s-8-2-8-3/
https://kuharbogdan.com/programmiruem-v-1s/kak-ispolzovat-perechislenie-v-zaprose-1c-8-2-8-3/



   
ОтветитьЦитата