Работа с перечислениями в запросах 1С

Устали бороться с перечислениями 1С? Открываем магию ЗНАЧЕНИЕ, простые отборы и получение синонимов. Читай и пиши запросы как профи!

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Работа с перечислениями в запросах 1С — одна из базовых задач разработчика. Перечисления хранятся в базе данных как ссылки, и часто возникает необходимость получить их представление (синоним), выполнить отбор по значению перечисления или проверить тип значения. В этой статье разберём все основные приёмы.

Отбор по конкретному значению перечисления

Если нужно выбрать записи, где реквизит равен определённому значению перечисления, используется конструкция ЗНАЧЕНИЕ:

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

Это самый быстрый и правильный способ: значение перечисления указывается напрямую в тексте запроса, без передачи параметров.

Отбор через параметр запроса

Если значение перечисления определяется динамически в коде, его можно передать как параметр:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ТипТМЦ = &ЗначениеПеречисления";

Запрос.УстановитьПараметр("ЗначениеПеречисления",
 Перечисления.ТипПечатающегоОборудования.Принтеры);

Отбор по типу перечисления (для составных реквизитов)

Если реквизит имеет составной тип и может хранить значения нескольких разных перечислений, а нужно выбрать записи, относящиеся к конкретному перечислению (независимо от значения), используется функция ТИПЗНАЧЕНИЯ совместно с ТИП:

ВЫБРАТЬ
 Номенклатура.Ссылка
ИЗ
 Справочник.Номенклатура КАК Номенклатура
ГДЕ
 ТИПЗНАЧЕНИЯ(Номенклатура.ТипТМЦ) = ТИП(Перечисление.ТипПечатающегоОборудования)

Такой запрос вернёт все записи, где реквизит содержит любое значение именно этого перечисления.

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

Перечисления в запросе не имеют поля «Представление» напрямую, как ссылочные объекты. Есть несколько способов получить читаемое название значения:

Способ 1: ПРЕДСТАВЛЕНИЕ

ВЫБРАТЬ
 ПРЕДСТАВЛЕНИЕ(Номенклатура.ТипТМЦ) КАК ТипТМЦПредставление
ИЗ
 Справочник.Номенклатура КАК Номенклатура

Функция ПРЕДСТАВЛЕНИЕ возвращает синоним значения перечисления в виде строки.

Способ 2: ПРЕДСТАВЛЕНИЕССЫЛКИ

ВЫБРАТЬ
 ПРЕДСТАВЛЕНИЕССЫЛКИ(Номенклатура.ТипТМЦ) КАК ТипТМЦПредставление
ИЗ
 Справочник.Номенклатура КАК Номенклатура

Работает аналогично, возвращая строковое представление ссылочного значения.

Способ 3: получение представления уже в коде

Если запрос возвращает ссылку на значение перечисления, представление можно получить после выполнения запроса:

Выборка = Запрос.Выполнить.Выбрать;
Пока Выборка.Следующий Цикл
 ПредставлениеЗначения = Строка(Выборка.ТипТМЦ);
КонецЦикла;

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

Для отбора записей с незаполненным перечислением используется ПустаяСсылка:

ГДЕ
 Номенклатура.ТипТМЦ = ЗНАЧЕНИЕ(Перечисление.ТипПечатающегоОборудования.ПустаяСсылка)

Порядок значений перечисления

Значения перечислений можно сравнивать операторами >, < — сравнение идёт по порядку следования значений в конфигураторе. Также доступна сортировка:

УПОРЯДОЧИТЬ ПО
 Номенклатура.ТипТМЦ
  • ЗНАЧЕНИЕ(Перечисление.Имя.Значение) — отбор по конкретному значению;
  • ТИПЗНАЧЕНИЯ = ТИП(Перечисление.Имя) — отбор по типу перечисления для составных реквизитов;
  • ПРЕДСТАВЛЕНИЕ и ПРЕДСТАВЛЕНИЕССЫЛКИ, получение строкового представления значения;
  • Параметры запроса, для динамической передачи значений из кода.

Используя эти приёмы, вы сможете гибко работать с перечислениями в запросах 1С и получать данные в нужном виде.