Функция разности дат в 1С позволяет быстро и удобно вычислять интервалы между двумя датами. Это очень полезный инструмент для анализа данных и формирования отчетов. Давайте разберемся, как использовать эту функцию в запросах и отчетах 1С.
Назначение и синтаксис функции РазностьДат
Функция РазностьДат в 1С предназначена для вычисления разницы между двумя датами в заданных единицах измерения. Она позволяет легко получить количество дней, месяцев, лет и других интервалов между датами.
Синтаксис функции РазностьДат выглядит следующим образом:
РазностьДат(Дата1, Дата2, ТипРазности) Где:
- Дата1 - дата начала периода
- Дата2 - дата окончания периода
- ТипРазности - единица измерения разности (День, Месяц, Год и т.д.)
Например, чтобы посчитать разницу между датами 15.05.2022 и 03.06.2022 в днях, запрос будет выглядеть так:
РазностьДат(Дата(2022, 5, 15), Дата(2022, 6, 3), День) // Результат: 19 В качестве типа разности можно указать:
- Секунда
- Минута
- Час
- День
- Неделя
- Месяц
- Квартал
- Год
Таким образом, используя разные типы разности, можно гибко вычислять интервал между датами в нужных единицах измерения.
Использование в запросах 1С
Функция РазностьДат часто используется в запросах 1С для анализа и обработки дат. Рассмотрим основные варианты применения.

Простые запросы к одной таблице
Самый распространенный случай - вычисление разности дат в рамках одной таблицы:
ВЫБРАТЬ Документ.Дата КАК ДатаДок, РазностьДат(Документ.Дата, ТекущаяДата(), День) КАК ДнейПрошло ИЗ Документ.ЗаказПокупателя КАК Документ Здесь мы вычисляем для каждого документа количество дней от его даты до текущего момента.
Использование в условиях запроса
Функцию РазностьДат можно использовать в условии запроса, например:
ВЫБРАТЬ Документ.Номер КАК НомерЗаказа ИЗ Документ.ЗаказПокупателя КАК Документ ГДЕ РазностьДат(Документ.Дата, ТекущаяДата(), День) > 30 Это позволит отфильтровать документы, у которых дата отличается от текущей более чем на 30 дней.

Запросы с параметрами
При использовании параметров, функция РазностьДат помогает динамически формировать отчеты:
ПАРАМЕТР Период ЧИСЛО = 7 ВЫБРАТЬ Документ.Номер КАК НомерЗаказа ИЗ Документ.ЗаказПокупателя КАК Документ ГДЕ РазностьДат(Документ.Дата, ТекущаяДата(), ДЕНЬ) < Период Здесь параметр Период задает интервал дней от текущей даты, за который нужно выбрать заказы.
Использование в отчетах и на формах 1С
Помимо запросов, функция РазностьДат активно применяется в отчетах и на формах объектов в 1С.
Добавление поля в отчет
Чтобы добавить поле с разностью дат в отчет, достаточно указать выражение вида:
РазностьДат(Документ.Дата, ТекущаяДата(), День) При формировании отчета это выражение вычислится для каждой строки.
Использование в условиях отбора отчета
Функцию РазностьДат можно использовать в отчетах в условиях отбора, например:
РазностьДат(Документ.Дата, ТекущаяДата(), Месяц) > 6 Это позволит отфильтровать в отчете документы старше 6 месяцев.
Отчеты с группировкой по РазностьДат
Еще один распространенный прием - группировка данных в отчете по разности дат:
Группировать по РазностьДат(Документ.Дата, &ДатаНачала, Месяц) Это позволяет получить отчет по месяцам от заданной начальной даты.
Как видно из приведенных примеров, функция РазностьДат в 1С является очень гибким инструментом для работы с датами в запросах и отчетах. Она избавляет от громоздких конструкций и позволяет быстро решать многие практические задачи.
Примеры практического применения функции РазностьДат
Давайте рассмотрим несколько практических задач, которые можно решить с помощью функции РазностьДат в 1С.
Анализ сроков выполнения заказов
Например, нам нужно проанализировать, за какое время в среднем выполняются заказы клиентов в разрезе менеджеров:
ВЫБРАТЬ Документ.Менеджер КАК Менеджер, СРЗНАЧ(РазностьДат(Документ.ДатаЗакрытия, Документ.ДатаСоздания, День)) КАК СрСрокЗаказа ИЗ Документ.ЗаказКлиента КАК Документ ГДЕ Документ.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен) СГРУППИРОВАТЬ ПО Документ.Менеджер Таким образом мы рассчитаем средний срок выполнения заказов в днях для каждого менеджера.
Определение просроченной задолженности
С помощью РазностьДат можно легко выявить просроченную дебиторскую задолженность:
ВЫБРАТЬ Документ.Контрагент КАК Контрагент, СУММА(Документ.СуммаДокумента) КАК СуммаЗадолженности ИЗ Документ.РеализацияТоваровУслуг КАК Документ ГДЕ РазностьДат(Документ.ДатаОплаты, ТекущаяДата(), День) > 30 СГРУППИРОВАТЬ ПО Документ.Контрагент Здесь мы отбираем неоплаченные в течение 30 дней документы реализации и группируем их по контрагентам.
Анализ средних сроков поставок
Средний срок поставки товаров от поставщиков можно проанализировать таким запросом:
ВЫБРАТЬ Документ.Контрагент КАК Поставщик, СРЗНАЧ(РазностьДат(Документ.ДатаОприходования, Документ.ДатаСоздания, День)) КАК СрСрокПоставки ИЗ Документ.ПоступлениеТоваров КАК Документ ГДЕ НЕ Документ.ПометкаУдаления СГРУППИРОВАТЬ ПО Документ.Контрагент Это позволит выявить наиболее быстрых и медленных поставщиков.
Расчет возраста и стажа сотрудников
На основе даты рождения сотрудника можно рассчитать его возраст:
ВЫБРАТЬ Сотрудник.ФИО КАК Сотрудник, РазностьДат(ТекущаяДата(), Сотрудник.ДатаРождения, Год) КАК Возраст ИЗ Справочник.Сотрудники КАК Сотрудник Аналогично для даты приема на работу можно посчитать трудовой стаж в годах.
Планирование отпусков
При планировании отпусков удобно отслеживать, когда сотрудникам положен очередной отпуск:
ВЫБРАТЬ Сотрудник.ФИО КАК Сотрудник, РазностьДат(ТекущаяДата(), ПоследнийОтпуск, Год) КАК ЛетСПрошлогоОтпуска ИЗ Справочник.Сотрудники КАК Сотрудник ГДЕ РазностьДат(ТекущаяДата(), ПоследнийОтпуск, Год) >= 1 Здесь ПоследнийОтпуск - дата последнего использованного отпуска сотрудника. Таким образом можно отслеживать, у кого уже набрался годичный интервал после предыдущего отпуска.
Оптимизация запросов с РазностьДат
При активном использовании функции РазностьДат в запросах и отчетах с большим объемом данных стоит обращать внимание на оптимизацию. Рассмотрим несколько приемов.
Использование индексов
На поля документов, участвующих в функции РазностьДат, рекомендуется создавать индексы. Это позволит существенно ускорить запросы.
Ограничение выборки
Если РазностьДат используется только для фильтрации, имеет смысл сначала отфильтровать данные другими средствами, например диапазоном дат, а затем уже вычислять разность.
Вычисление в запросе
Лучше вычислять РазностьДат непосредственно в запросе, а не выносить в отдельную переменную или поле, т.к. при этом можно избежать лишних обращений к БД.
Следуя этим простым рекомендациям и правильно используя РазностьДат, можно добиться эффективной работы с датами в 1С даже при больших объемах данных.