Как убрать пустые строки из результата запроса в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов или обработок на платформе 1С часто возникает ситуация, когда в выборку попадают записи с незаполненными (пустыми) полями. Это может искажать данные и делать отчет нечитаемым. Давайте разберем, как правильно фильтровать такие значения на уровне языка запросов 1С, чтобы получать только нужные нам данные.

Метод использования конструкции ЗНАЧЕНИЕ для ссылочных типов

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

Рассмотрим пример, где мы отбираем продажи, но хотим исключить из них те, где поле Ходим осталось пустым:


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

В данном примере мы добавили условие НЕ Продажи.Ходим = ЗНАЧЕНИЕ(Справочник.Ходимлар.ПустаяСсылка). Это говорит системе: «Выбирай только те записи, в которых значение поля Ходим не является пустым». Это стандартный подход для 1С, который корректно обрабатывает пустые ссылки в базе данных.

Работа с другими типами данных

Иногда требуется отфильтровать пустые значения не только для справочников, но и для других типов полей. Давайте проанализируем, как поступить в таких случаях:

  1. Числовые поля: Для них мы просто сравниваем поле с нулем. Используйте условие ГДЕ НЕ Поле = 0.
  2. Строковые поля: Если поле имеет строковый тип, мы можем исключить пустые строки, используя сравнение с пустой строкой в кавычках: ГДЕ НЕ Поле = "".
  3. Даты: Для полей типа Дата пустая дата обозначается конструкцией ДАТАВРЕМЯ(1, 1, 1). Соответственно, условие будет выглядеть как ГДЕ НЕ Поле = ДАТАВРЕМЯ(1, 1, 1).

Использование конструкции ВЫБОР КОГДА

В более сложных сценариях, когда логика отбора требует проверки вычисляемых выражений, нам на помощь приходит конструкция ВЫБОР. Это мощный инструмент, который позволяет задать гибкие правила фильтрации прямо внутри запроса.

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


ВЫБРАТЬ
    Продажи.Товар,
    ВЫБОР
        КОГДА Продажи.Ходим ЕСТЬ NULL ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК ЕстьХодим
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    ВЫБОР
        КОГДА Продажи.Ходим ЕСТЬ NULL ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ = ИСТИНА

Этот метод полезен, когда нужно обработать значения NULL, которые могут возникнуть при использовании ЛЕВОГО СОЕДИНЕНИЯ в запросах. Помните, что NULL — это отсутствие значения вообще, в отличие от ПустаяСсылка, которая является существующим объектом с «пустым» состоянием.

Важные советы по оптимизации

При написании запросов всегда старайтесь следовать этим правилам, чтобы отчеты работали быстро:

Используя эти методы, вы сможете легко очистить свои выборки от «пустых» записей и сделать отчеты более точными и качественными. Удачи в разработке!

← На главную