Капитально об программе 1С 8.0-8.3-8.4, 7.7

Перечисление в запросе 1С

В запросе значение перечисления задается через функцию Значение().

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

Например:

ВЫБРАТЬ ЗНАЧЕНИЕ(Перечисление.ПолФизическихЛиц.Мужской) КАК Поле

Пустое (не выбранное) значение:

ВЫБРАТЬ ЗНАЧЕНИЕ(Перечисление.ПолФизическихЛиц.ПустаяСсылка) КАК Поле

Системное перечисление получается аналогично, но без указания «Перечисление»:

ВЫБРАТЬ ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК Поле

А не в запросе?

В коде модулей получить значение можно двумя способами:

Знач = Перечисления.ПолФизическихЛиц.Мужской;
//или 
Знач = ПредопределенноеЗначение("Перечисление.ПолФизическихЛиц.Мужской");

Второй более универсальный, т.к. выполняется и &НаКлиенте. Первоначальный вызов значение выполняется медленнее, далее —  кэшируется системой.

В 8.1 доступен только первый вариант.

Поведение Максимум() в запросе с перечислением

Если взять Минимум или Максимум от значения перечисления, запрос показывает стабильный, но не понятный результат:

Задача

Есть перечисление со значениями

Необходимо в запросе получать максимальное или минимальное значение согласно его порядка

Решение

В данном случае решение усложнено, отсутствием для вас реальных данных, ведь не надо было делать вложенные соединения   — порядок можно получить из значения непосредственно

ВЫБРАТЬ
  ЗНАЧЕНИЕ(Перечисление.ВидыСтраховыхПродуктов.Каско) КАК Поле
ПОМЕСТИТЬ Перечисления
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ВидыСтраховыхПродуктов.ОСАГО)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ВидыСтраховыхПродуктов.ВЗР)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ВидыСтраховыхПродуктов.ГО)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ВидыСтраховыхПродуктов.ОПО)
;

ВЫБРАТЬ
ОценкаМин.Ссылка как МинПоПорядку,
Влож.МинСтандарт,
ОценкаМакс.Ссылка как МаксПоПорядку,
Влож.МаксСтандарт

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

Результат