При работе с документами в системе 1С:ЗУП пользователи часто сталкиваются с ситуацией, когда попытка отбора документов за конкретную дату не дает ожидаемых результатов. Например, при использовании стандартной обработки Групповое изменение реквизитов документы, созданные «этим же днем», игнорируются фильтром. Давайте разберемся, почему так происходит и как правильно работать с датами в 1С.
Важно понимать фундаментальное устройство платформы 1С:Предприятие: тип данных Дата всегда содержит в себе и календарную дату, и время (часы, минуты, секунды). Даже если в интерфейсе программы вы видите только дату (например, 30.04.2023), это лишь результат настройки представления данных в конкретной форме или отчете.
В базе данных значение такой даты выглядит как 30.04.2023 00:00:00. Однако, если документ был создан автоматически, путем копирования или через программный код, в поле времени могут быть записаны данные, отличные от полуночи (например, 30.04.2023 14:35:12).
Когда вы устанавливаете отбор в Групповом изменении реквизитов или в Консоли запросов по условию Дата Равно 30.04.2023, система интерпретирует ваше условие как поиск значения 30.04.2023 00:00:00. Если же у документа в базе время заполнено (отличается от нуля), условие равенства не выполняется, так как 14:35:12 не равно 00:00:00.
Именно поэтому возникает ощущение, что «документы пропали» или «фильтр не работает». На самом деле они просто не соответствуют строгому условию равенства.
Чтобы найти все документы за конкретный день, вне зависимости от того, какое время в них указано, необходимо использовать диапазон дат. Вместо оператора Равно применяйте конструкцию «Больше или равно начала дня» и «Меньше или равно конца дня».
Рассмотрим, как это выглядит в коде 1С, если вы пишете свой алгоритм или запрос:
// Пример правильного формирования отбора за день
НачалоДня = НачалоДня(ДатаДокумента);
КонецДня = КонецДня(ДатаДокумента);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НачислениеЗарплаты.Ссылка
|ИЗ
| Документ.НачислениеЗарплатыИВзносов КАК НачислениеЗарплаты
|ГДЕ
| НачислениеЗарплаты.Дата МЕЖДУ &НачалоДня И &КонецДня";
Запрос.УстановитьПараметр("НачалоДня", НачалоДня);
Запрос.УстановитьПараметр("КонецДня", КонецДня);
Результат = Запрос.Выполнить();
Разберем типичные сценарии, при которых время документа становится отличным от 00:00:00:
Дата может записываться текущее время сервера ТекущаяДата().Если вам нужно выяснить, какое именно время записано в конкретном документе, не обязательно обращаться к программисту. Вы можете воспользоваться встроенными средствами:
Еще.Показать значения полей (может называться Техническая информация).Дата — там будет отображено полное значение с часами, минутами и секундами.Помните, что время документа в 1С:ЗУП играет ключевую роль для движений по регистрам. Система использует его для упорядочивания записей в рамках одной даты. Это критически важно для корректного расчета среднего заработка, где важна последовательность кадровых событий (например, прием должен быть раньше перевода).
При выполнении массовых операций по изменению реквизитов всегда учитывайте наличие скрытого времени. Старайтесь избегать условия Равно для даты и всегда задавайте временной интервал — это позволит избежать ошибок и пропусков данных при обработке документов.