Как вычислить время в пути, если рейс переходит через полночь?

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

При решении задач, связанных с расчетом длительности событий, часто возникает проблема «перехода через полночь». Например, если самолет вылетает в 22:00, а прилетает в 02:00 следующего дня, простая разность значений даст отрицательное число, что не соответствует логике полета. Давайте разберем, как эффективно решить эту задачу в запросе 1С, не создавая громоздких и трудночитаемых конструкций.

Метод 1: Использование конструкции ВЫБОР

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

Рассмотрим пример кода для вычисления времени в пути в часах:


ВЫБРАТЬ
    Рейсы.ВремяОтправления,
    Рейсы.ВремяПрибытия,
    ВЫБОР 
        КОГДА (Рейсы.ВремяПрибытия - Рейсы.ВремяОтправления) < 0 
        ТОГДА (Рейсы.ВремяПрибытия - Рейсы.ВремяОтправления) + 24
        ИНАЧЕ (Рейсы.ВремяПрибытия - Рейсы.ВремяОтправления)
    КОНЕЦ КАК ДлительностьВЧасах
ИЗ
    Справочник.Рейсы КАК Рейсы

Этот подход хорош тем, что он не требует сложных манипуляций с датами и работает максимально быстро, так как выполняется внутри одной выборки данных. Мы просто проверяем условие: если разница отрицательная — значит, произошел переход через полночь, и мы корректируем результат на полные сутки.

Метод 2: Приведение к единой единице измерения

Для более точных расчетов, когда нас интересуют минуты, рекомендуется приводить все данные к единой шкале — «минутам от начала суток». Это исключает ошибки при работе с типами данных и упрощает сравнение.

  1. Извлекаем часы и минуты из исходных полей.
  2. Пересчитываем всё в минуты: Минуты = Часы * 60 + Минуты.
  3. Применяем ту же логику с конструкцией ВЫБОР, но для минут прибавляем 1440 (количество минут в сутках).

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

Почему не стоит использовать сложные манипуляции с датами?

Многие разработчики стараются использовать функции типа ДОБАВИТЬКДАТЕ или РАЗНОСТЬДАТ. Однако, если у вас есть только время без привязки к конкретной дате выполнения рейса, попытка «собрать» дату искусственно может привести к следующим проблемам:

Рекомендации по реализации

Для того чтобы ваш отчет или обработка работали максимально стабильно, придерживайтесь следующих правил:

Таким образом, мы видим, что решение задачи по расчету времени полета не требует громоздких алгоритмов. Достаточно использовать математическую логику с проверкой знака разности, что позволяет получить корректный результат даже в самых сложных случаях перехода через полночь. Работайте с числами, избегайте лишних приведений типов, и ваши запросы будут летать так же быстро, как самолеты в вашей базе данных.

← На главную