Найти в Дзене

Примеры запросов с условием на пустой параметр

Пояснение: При работе с параметрами запросов в 1С часто возникает необходимость учитывать ситуацию, когда параметр не заполнен. В таких случаях, как правило, требуется выбрать все данные, не применяя фильтрацию по этому параметру. Рассмотрим несколько примеров: SQL ВЫБРАТЬ
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура
ГДЕ
(&Наименование = Номенклатура.Наименование ИЛИ ЕСТЬNULL(&Наименование)) Логика: Если параметр &Наименование заполнен, то отбираются только те элементы номенклатуры, у которых наименование совпадает с параметром. Если параметр пуст, то условие ЕСТЬNULL(&Наименование) всегда истинно, и выбираются все элементы. 2. Выбор документов за период: SQL ВЫБРАТЬ
Документ.Номер, Документ.Дата
ИЗ
Документ.Продажа
ГДЕ
(Документ.Дата >= &ДатаНачала ИЛИ ЕСТЬNULL(&ДатаНачала)) И
(Документ.Дата <= &ДатаОкончания ИЛИ ЕСТЬNULL(&ДатаОкончания)) SQL ВЫБРАТЬ
Контрагент.Наименование
ИЗ
Справочник.Контрагенты
ГДЕ
(Контрагент.Группа = &Группа ИЛИ Е
Оглавление

Пояснение:

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

Рассмотрим несколько примеров:

1. Выбор номенклатуры по наименованию:

SQL

ВЫБРАТЬ
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура
ГДЕ
(&Наименование = Номенклатура.Наименование ИЛИ ЕСТЬNULL(&Наименование))

Логика: Если параметр &Наименование заполнен, то отбираются только те элементы номенклатуры, у которых наименование совпадает с параметром. Если параметр пуст, то условие ЕСТЬNULL(&Наименование) всегда истинно, и выбираются все элементы.

2. Выбор документов за период:

SQL

ВЫБРАТЬ
Документ.Номер, Документ.Дата
ИЗ
Документ.Продажа
ГДЕ
(Документ.Дата >= &ДатаНачала ИЛИ ЕСТЬNULL(&ДатаНачала)) И
(Документ.Дата <= &ДатаОкончания ИЛИ ЕСТЬNULL(&ДатаОкончания))

  • Логика: Если параметры &ДатаНачала или &ДатаОкончания пустые, то соответствующие условия отбора всегда истинны, и выбираются все документы за любой период.

3. Выбор контрагентов по группе:

SQL

ВЫБРАТЬ
Контрагент.Наименование
ИЗ
Справочник.Контрагенты
ГДЕ
(Контрагент.Группа = &Группа ИЛИ ЕСТЬNULL(&Группа))

  • Логика: Если параметр &Группа пуст, то выбираются все контрагенты, независимо от группы.

4. Выбор товаров по нескольким критериям:

SQL

ВЫБРАТЬ
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура
ГДЕ
((Номенклатура.Вид = &ВидНоменклатуры ИЛИ ЕСТЬNULL(&ВидНоменклатуры)) И
(Номенклатура.Цена > &МинимальнаяЦена ИЛИ ЕСТЬNULL(&МинимальнаяЦена)))

Логика: В этом примере комбинируется несколько условий. Если какой-либо параметр пуст, то соответствующее условие не влияет на результат отбора.

Ключевые моменты:

  • Функция ЕСТЬNULL: Проверяет, является ли значение параметра пустым.
  • Условие ИЛИ: Позволяет объединить несколько условий отбора.
  • Скобки: Используются для группировки условий и повышения читаемости запроса.

Дополнительные рекомендации:

  • Индексация: Для повышения производительности запросов рекомендуется создавать индексы на полях, по которым осуществляется отбор.
  • Оптимизация запросов: Старайтесь избегать сложных вложенных условий и использовать функции, оптимизированные для работы с большими объемами данных.
  • Проверка параметров: Перед использованием параметров в запросе всегда проверяйте их на корректность и тип данных.

Использование ВЫБОР КОГДА:

Для более сложных условий можно использовать конструкцию ВЫБОР КОГДА:

SQL

ВЫБРАТЬ
*
ИЗ
Справочник.Номенклатура
ГДЕ
ВЫБОР
КОГДА ЕСТЬNULL(&Параметр) ТОГДА ИСТИНА
ИНАЧЕ Номенклатура.Код = &Параметр
КОНЕЦ

Заключение:

Выбор конкретного метода зависит от структуры вашей базы данных, сложности условий отбора и требований к производительности. Приведенные примеры демонстрируют основные подходы к работе с пустыми параметрами в запросах 1С и могут быть адаптированы под различные задачи.