Как указать пустую дату в настройках отчета 1С для вывода незаполненных значений

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет
← На главную

В работе с типовыми отчетами 1С, особенно построенными на базе «Универсального отчета» (который в старых конфигурациях вроде УПП или КА 1.1 использует механизм ПостроительОтчета), пользователи часто сталкиваются с проблемой фильтрации пустых дат. Казалось бы, задача проста: вывести строки, где дата не указана (например, ДатаСнятияСУчетаОС). Однако на практике выбор условия «Равно» с пустым значением часто приводит к получению совершенно пустого отчета, даже если нужные данные в базе точно есть.

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

Почему стандартный отбор по пустой дате может не работать

Для начала проанализируем ситуацию с точки зрения хранения данных в 1С. Существует две принципиально разные причины, по которым поле даты в отчете может выглядеть «пустым»:

  1. Техническая пустая дата: В платформе 1С дата — это обязательный тип данных, который не может быть неопределенным. Если значение не задано, система подставляет «минимальную» дату: 01.01.0001 00:00:00.
  2. Значение NULL: Если отчет строится на основе запроса с левым соединением (например, мы берем список всех ОС и пытаемся присоединить к ним данные о снятии с учета), то для тех объектов, по которым записей в регистре сведений нет вовсе, система получает значение NULL.

Проблема заключается в том, что вид сравнения «Равно» в настройках отбора ищет именно конкретное значение (пустую дату 01.01.0001). Если в базе данных вместо этой даты стоит NULL, условие не срабатывает, и строка не попадает в отчет. Именно поэтому мы видим пустой результат.

Способ 1: Использование вида сравнения «Меньше»

Это самый надежный и «классический» способ обхода ограничений в отчетах на базе ПостроительОтчета. Если стандартное равенство игнорирует строки, попробуем применить логику исключения.

Рассмотрим по шагам, как настроить такой отбор:

  1. Откроем настройки отчета и найдем поле ДатаСнятияСУчетаОС.
  2. В колонке «Вид сравнения» вместо привычного «Равно» выберем «Меньше».
  3. В поле значения укажем любую дату, которая заведомо больше «пустой» даты 1С, но меньше любой реально возможной даты документа. Хорошим вариантом будет 01.01.1900 или даже 02.01.0001.

Поскольку техническая пустая дата (01.01.0001) меньше указанной вами границы, она попадет в выборку. В старых версиях платформы такой подход часто помогает «зацепить» и значения NULL, так как ПостроительОтчета при определенных настройках может интерпретировать их аналогичным образом при сравнении.

Способ 2: Использование условия «Не заполнено»

В более современных конфигурациях (например, на базе БП 3.0), где универсальный отчет реализован на системе компоновки данных (СКД), разработчики предусмотрели специальный вид сравнения. Если в вашем списке доступных вариантов есть «Не заполнено», это идеальное решение.

Этот оператор на уровне SQL-запроса автоматически генерирует условие, которое проверяет поле и на соответствие пустой дате 01.01.0001, и на значение NULL. Если же в вашем интерфейсе такого пункта нет (как в случае с ПостроительОтчета), переходите к следующему методу.

Способ 3: Трюк с пустым списком значений

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

  1. Выберите вид сравнения «В списке».
  2. Откройте окно редактирования списка значений.
  3. Не добавляйте в список ни одного элемента. Оставьте его абсолютно пустым и нажмите «ОК».

В ряде случаев движок отчетов интерпретирует условие «Поле В (ПустойСписок)» как требование найти незаполненные значения. Стоит попробовать этот метод, если предыдущие не дали результата.

Способ 4: Очистка поля через горячие клавиши

Иногда пользователь физически не может передать в отчет пустую дату, так как поле ввода автоматически подставляет текущую дату или выдает ошибку. Чтобы гарантированно установить значение в «Пусто» внутри ячейки выбора значения, проанализируем работу с клавиатурой:

  1. Активируйте поле ввода даты в настройках отбора.
  2. Нажмите комбинацию клавиш Shift + F4. Это стандартная команда 1С для очистки значения в поле.
  3. Поле должно стать абсолютно пустым или отобразить строку 01.01.0001. После этого попробуйте сформировать отчет с видом сравнения «Равно».

Технический взгляд: Почему данные «теряются» (для программистов)

Если вы являетесь разработчиком и имеете доступ к изменению запроса отчета, важно выяснить причину появления пустых значений. Если поле ДатаСнятияСУчетаОС выбирается из регистра сведений через левое соединение, обязательно используйте функцию ЕСТЬNULL в тексте запроса.

Посмотрим на пример кода, который решает проблему на уровне источника данных:


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

В данном примере функция ЕСТЬNULL принудительно заменяет отсутствие записи в регистре (NULL) на пустую дату 1С. После такой обработки в отчете стандартный фильтр «Равно [Пустая дата]» начнет работать безупречно, так как все неопределенные значения станут типизированными данными.

Итоги и рекомендации

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

Помните, что универсальный отчет — это мощный инструмент, но его поведение сильно зависит от того, как именно написан исходный запрос в конфигураторе. Понимание разницы между NULL и 01.01.0001 — ключ к успешной настройке любых сложных фильтров в системе 1С:Предприятие.

← На главную