Работа с перечислениями в запросах 1С — одна из базовых задач разработчика. Перечисления хранятся в базе данных как ссылки, и часто возникает необходимость получить их представление (синоним), выполнить отбор по значению перечисления или проверить тип значения. В этой статье разберём все основные приёмы.
Отбор по конкретному значению перечисления
Если нужно выбрать записи, где реквизит равен определённому значению перечисления, используется конструкция ЗНАЧЕНИЕ:
ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.ТипТМЦ ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ТипТМЦ = ЗНАЧЕНИЕ(Перечисление.ТипПечатающегоОборудования.Принтеры)
Это самый быстрый и правильный способ: значение перечисления указывается напрямую в тексте запроса, без передачи параметров.
Отбор через параметр запроса
Если значение перечисления определяется динамически в коде, его можно передать как параметр:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ТипТМЦ = &ЗначениеПеречисления";
Запрос.УстановитьПараметр("ЗначениеПеречисления",
Перечисления.ТипПечатающегоОборудования.Принтеры);
Отбор по типу перечисления (для составных реквизитов)
Если реквизит имеет составной тип и может хранить значения нескольких разных перечислений, а нужно выбрать записи, относящиеся к конкретному перечислению (независимо от значения), используется функция ТИПЗНАЧЕНИЯ совместно с ТИП:
ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ ТИПЗНАЧЕНИЯ(Номенклатура.ТипТМЦ) = ТИП(Перечисление.ТипПечатающегоОборудования)
Такой запрос вернёт все записи, где реквизит содержит любое значение именно этого перечисления.
Получение представления перечисления в запросе
Перечисления в запросе не имеют поля «Представление» напрямую, как ссылочные объекты. Есть несколько способов получить читаемое название значения:
Способ 1: ПРЕДСТАВЛЕНИЕ
ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(Номенклатура.ТипТМЦ) КАК ТипТМЦПредставление ИЗ Справочник.Номенклатура КАК Номенклатура
Функция ПРЕДСТАВЛЕНИЕ возвращает синоним значения перечисления в виде строки.
Способ 2: ПРЕДСТАВЛЕНИЕССЫЛКИ
ВЫБРАТЬ ПРЕДСТАВЛЕНИЕССЫЛКИ(Номенклатура.ТипТМЦ) КАК ТипТМЦПредставление ИЗ Справочник.Номенклатура КАК Номенклатура
Работает аналогично, возвращая строковое представление ссылочного значения.
Способ 3: получение представления уже в коде
Если запрос возвращает ссылку на значение перечисления, представление можно получить после выполнения запроса:
Выборка = Запрос.Выполнить.Выбрать; Пока Выборка.Следующий Цикл ПредставлениеЗначения = Строка(Выборка.ТипТМЦ); КонецЦикла;
Проверка на пустое значение перечисления
Для отбора записей с незаполненным перечислением используется ПустаяСсылка:
ГДЕ Номенклатура.ТипТМЦ = ЗНАЧЕНИЕ(Перечисление.ТипПечатающегоОборудования.ПустаяСсылка)
Порядок значений перечисления
Значения перечислений можно сравнивать операторами >, < — сравнение идёт по порядку следования значений в конфигураторе. Также доступна сортировка:
УПОРЯДОЧИТЬ ПО Номенклатура.ТипТМЦ
- ЗНАЧЕНИЕ(Перечисление.Имя.Значение) — отбор по конкретному значению;
- ТИПЗНАЧЕНИЯ = ТИП(Перечисление.Имя) — отбор по типу перечисления для составных реквизитов;
- ПРЕДСТАВЛЕНИЕ и ПРЕДСТАВЛЕНИЕССЫЛКИ, получение строкового представления значения;
- Параметры запроса, для динамической передачи значений из кода.
Используя эти приёмы, вы сможете гибко работать с перечислениями в запросах 1С и получать данные в нужном виде.