Проверка пустого значения перечисления в запросах 1С:Предприятие

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

+7 (800) 302-87-29

Реклама jurik.ru

В 1С:Предприятие перечисления часто используются для хранения ограниченного набора значений (например‚ виды занятости‚ статусы документов и т.д.). Иногда требуется определить‚ содержит ли реквизит‑перечисление пустое значение (то есть не выбрано ни одного элемента). В обычном коде это делается с помощью функции ЗначениеЗаполнено или сравнения с Перечисления.ИмяПеречисления.ПустаяСсылка. В запросах язык 1С предоставляет аналогичные возможности‚ но синтаксис немного отличается.

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

  1. Сравнение с пустой ссылкой – используем функцию ПустаяСсылка у нужного перечисления.
  2. Функция ЗНАЧЕНИЕЗАПОЛНЕНО – возвращает Истина‚ если значение не пустое.
  3. Оператор ЕСТЬNULL – полезно‚ когда реквизит может содержать NULL (например‚ при левом соединении).

Пример 1: Прямое сравнение с пустой ссылкой

Допустим‚ у нас есть регистр сведений КадроваяИсторияСотрудников с реквизитом ВидЗанятости (перечисление ВидыЗанятости). Нужно выбрать только те записи‚ где вид занятости не выбран (пустое значение).

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

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

Пример 2: Использование функции ЗНАЧЕНИЕЗАПОЛНЕНО

Если требуется обратное условие – выбрать записи‚ где вид занятости выбран (не пустой)‚ удобно применить ЗНАЧЕНИЕЗАПОЛНЕНО:

ВЫБРАТЬ
 Кадры.Сотрудник КАК Сотрудник‚
 Кадры.ВидЗанятости КАК ВидЗанятости
ИЗ
 РегистрСведений.КадроваяИсторияСотрудников КАК Кадры
ГДЕ
 ЗНАЧЕНИЕЗАПОЛНЕНО(Кадры.ВидЗанятости) = ИСТИНА

Функция возвращает Истина‚ если значение реквизита не является пустой ссылкой перечисления.

Пример 3: Комбинация с левым соединением и проверкой на NULL

Иногда реквизит перечисления может отсутствовать в результате соединения (например‚ при левом соединении с другой таблицей‚ где совпадений нет). В таких случаях значение будет NULL‚ и прямое сравнение с пустой ссылкой не сработает. Нужно добавить проверку на NULL:

ВЫБРАТЬ
 Сотр.Сотрудник КАК Сотрудник‚
 Кадры.ВидЗанятости КАК ВидЗанятости
ИЗ
 Справочник.Сотрудники КАК Сотр
 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников КАК Кадры
 ПО Кадры.Сотрудник = Сотр.Ссылка
ГДЕ
 (Кадры.ВидЗанятости IS NULL) // нет записи в регистре
 ИЛИ
 (Кадры.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка)) // запись есть‚ но значение пустое

Здесь используется условие IS NULL для обнаружения отсутствующих строк после левого соединения‚ а также стандартная проверка на пустую ссылку.

Полезные советы и типичные ошибки

  • Всегда указывайте полное имя перечисления в функции ЗНАЧЕНИЕ‚ иначе запрос не скомпилируется.
  • Не путайте ПустаяСсылка и NULL – первое относится к типу перечисления‚ второе – к отсутствию значения вообще.
  • Для проверки «не пустое» удобно использовать отрицание: НЕ ЗНАЧЕНИЕЗАПОЛНЕНО(Реквизит) или Реквизит <> ЗНАЧЕНИЕ(Перечисление.Имя.ПустаяСсылка).
  • При работе с параметрами запроса передавайте значение перечисления так же‚ как и обычное значение: Параметры.Вставить("ВидЗанятости"‚ Перечисления.ВидыЗанятости.Неопределено) – но помните‚ что Неопределено – это не пустая ссылка‚ а специальное значение‚ указывающее на отсутствие выбора в форме.

Проверка перечисления на пустое значение в запросе 1С выполняется либо через прямое сравнение с результатом функции ПустаяСсылка у нужного перечисления‚ либо через функцию ЗНАЧЕНИЕЗАПОЛНЕНО. При использовании соединений‚ где может появиться NULL‚ необходимо дополнительно проверять отсутствие значения через оператор IS NULL. Правильное применение этих приёмов позволяет гибко фильтровать данные в отчетах‚ обработках и других объектах конфигурации‚ не прибегая к избыточному коду в модулях.

Надеюсь‚ представленные примеры и рекомендации помогут вам эффективно работать с пустыми значениями перечислений в запросах 1С.