Разработка и Конфигурация · 9 мин
Сколько минут в 1С: как считать и хранить время и длительность
Как в 1С посчитать минуты между датами, хранить длительность и вывести время в документах и отчётах. Функции, примеры кода и типичные ошибки.
Вопрос «сколько минут в 1С» обычно возникает в трёх ситуациях: нужно посчитать разницу между двумя датами в минутах, сохранить длительность операции (например, время работы мастера или длительность звонка) или вывести время в человекочитаемом виде в документе или отчёте. Во всех случаях важно понимать: в 1С нет отдельного типа данных «длительность» или «интервал». Есть тип Дата, который хранит момент времени с точностью до секунды, и есть числовые типы, в которых длительность принято хранить в секундах, минутах или часах.
Из-за этого новички часто путаются: пытаются вычесть одну дату из другой и получить «время», а получают число секунд. Или сохраняют длительность как дату 01.01.0001 02:30:00, что позже ломает сортировку, итоги и обмен данными. Ниже разобраны рабочие способы считать минуты, хранить длительность и выводить её пользователю — с примерами кода на встроенном языке.
Как устроены дата и время в 1С
Тип Дата в 1С содержит одновременно календарную дату и время суток с точностью до секунды. Минимальное значение — 01.01.0001 00:00:00. Дробных секунд тип не хранит: если нужна точность выше секунды (например, для замеров производительности), используют универсальные механизмы вроде ТекущаяУниверсальнаяДатаВМиллисекундах(), но это уже число, а не дата.
Ключевое следствие: дата — это точка на шкале времени, а не отрезок. «2 часа 30 минут» датой выразить нельзя корректно, хотя технически можно записать 01.01.0001 02:30:00 и некоторые так делают. Такой приём считается ошибкой проектирования: при выгрузке в другие системы, сортировке и группировке значение ведёт себя как дата, а не как длительность.
Как посчитать минуты между двумя датами
Операция вычитания дат в 1С возвращает число — количество секунд между моментами. Чтобы получить минуты, разделите результат на 60. Для целого числа минут используйте функцию Цел() или округление в зависимости от бизнес-правила.
НачалоРаботы = Дата(2026, 5, 10, 9, 15, 0);
ОкончаниеРаботы = Дата(2026, 5, 10, 11, 45, 30);
РазницаВСекундах = ОкончаниеРаботы - НачалоРаботы; // 9030
МинутДробных = РазницаВСекундах / 60; // 150,5
МинутЦелых = Цел(РазницаВСекундах / 60); // 150
Обратите внимание на порядок операндов: из более поздней даты вычитают более раннюю. Если перепутать местами, получите отрицательное число. В прикладном коде перед расчётом полезно проверить, что обе даты заполнены и конец не раньше начала — иначе в отчётах появятся отрицательные длительности.
Функция МинутыМеждуДатами(ДатаНачала, ДатаОкончания) Экспорт
Если Не ЗначениеЗаполнено(ДатаНачала) Или Не ЗначениеЗаполнено(ДатаОкончания) Тогда
Возврат 0;
КонецЕсли;
Возврат Макс(0, Цел((ДатаОкончания - ДатаНачала) / 60));
КонецФункцииКак правильно хранить длительность в реквизитах
Для хранения длительности в справочниках и документах заводите числовой реквизит и фиксируйте единицу измерения в имени или синониме: «ДлительностьМин», «ВремяВСекундах». Это избавляет от неоднозначности при доработках: любой разработчик сразу видит, в чём значение.
Выбор единицы зависит от задачи. Для учёта рабочего времени, звонков, пауз удобны минуты — точности достаточно, числа компактные. Для замеров операций, интеграций и SLA лучше секунды: не теряется остаток при делении, проще суммировать. Хранить длительность в часах дробным числом (1,5 часа) допустимо, но менее наглядно при вводе пользователем.
В каких единицах хранить длительность
Подходят для точных замеров и суммирования без потерь. Минус — пользователю неудобно читать большие числа, нужна функция представления.
Оптимальны для учёта времени работ, звонков, перерывов. Минус — теряется остаток секунд, если он важен.
Удобны для табелей и расчётов стоимости. Минус — ввод вида 1,33 вместо 1:20 часто вызывает ошибки у пользователей.
Не рекомендуется: значение ведёт себя как момент времени, ломает сортировку, итоги и обмены.
Вывод длительности в формате «часы:минуты»
Число минут в отчёте читается плохо: «150 минут» пользователю приходится переводить в уме. Стандартный приём — форматировать значение функцией, которая выделяет часы и остаток минут и склеивает строку вида «2 ч 30 мин» или «02:30».
Функция ПредставлениеМинут(ВсегоМинут)
Часы = Цел(ВсегоМинут / 60);
Минуты = ВсегоМинут % 60;
Возврат СтрШаблон("%1:%2", Формат(Часы, "ЧГ="), Формат(Минуты, "ЧЦ=2; ЧВН="));
КонецФункции
В СКД и запросах аналогичное преобразование делается вычисляемыми полями: в запросе делением и операцией остатка, в ресурсах — суммированием исходных минут с последующим форматированием в макете. Важно: суммируйте всегда исходные числовые минуты, а не отформатированные строки — строки не складываются.
Получение текущего времени и его особенности
Для фиксации момента в серверном коде используют ТекущаяДатаСеанса() — она учитывает часовой пояс сеанса и согласована с датами документов. Функция ТекущаяДата() на клиенте возвращает время компьютера пользователя, которое может отличаться от серверного; в тонком клиенте она недоступна в серверных вызовах.
Если нужно извлечь из даты только время — например, чтобы сравнить, попадает ли событие в рабочие часы, — используйте функции Час(), Минута(), Секунда() или вычтите начало дня: ДатаСобытия - НачалоДня(ДатаСобытия) даст число секунд от полуночи. Деление на 60 даст минуты от начала суток, что удобно для проверок вида «позже 18:00».
Типичные ошибки при работе с минутами
Самая частая ошибка — забыть, что разность дат даёт секунды, и вывести пользователю «длительность 9030» вместо «150 минут». Вторая по распространённости — хранение длительности в реквизите типа Дата с последующими сюрпризами в отчётах и при синхронизации.
Третья группа ошибок связана с границами суток и часовыми поясами: если операция началась в 23:50 и завершилась в 00:10, наивный расчёт через Час() и Минута() даст отрицательное значение. Корректный способ — всегда вычитать полные даты, а не отдельные компоненты времени.
Проверка результата и границы самостоятельной работы
Проверить расчёт просто: возьмите пару дат с известной разницей, например ровно 1 час 30 минут, и убедитесь, что функция возвращает 90. Добавьте контрольные случаи: переход через полночь, нулевая длительность, незаполненная дата. Если все четыре случая дают ожидаемые числа — формула корректна.
Самостоятельно безопасно менять формулы в отчётах и функции представления: это не затрагивает хранимые данные. Осторожнее с изменением типа существующего реквизита (например, с Дата на Число): при конвертации значения могут быть потеряны, поэтому перед реструктуризацией сделайте выгрузку базы и проверьте, где реквизит используется. Массовые пересчёты длительности в проведённых документах лучше поручить специалисту — ошибка изменит учётные данные задним числом.
Как проверить результат
Функция возвращает 90
Возвращает 5400 (секунды) или 1,5
Возвращает 20 минут
Отрицательное значение или ошибка
Возвращается 0 или понятное сообщение
Ошибка выполнения или отрицательное число
Итог совпадает с суммой минут по строкам
Итог пустой или склеенные строки
Что важно запомнить
Разность дат в 1С — это секунды; минуты получают делением на 60. Длительность храните в числовом реквизите с явной единицей измерения, форматируйте только при выводе, а расчёты ведите через полные даты, а не через отдельные часы и минуты.
Частые вопросы
Можно ли в запросе 1С сразу получить разницу в минутах?
Да. В языке запросов есть функция РАЗНОСТЬДАТ(Дата1, Дата2, МИНУТА), которая возвращает целое число минут между датами. Учтите, что она считает полные единицы: между 10:00:30 и 10:01:00 результат будет 0 минут, а не 0,5.
Как сложить длительность с датой, например прибавить 45 минут?
Прибавьте к дате число секунд: ДатаСобытия + 45 * 60. Операция сложения даты и числа в 1С интерпретирует число именно как секунды, поэтому минуты нужно предварительно умножить на 60.
Почему нельзя хранить длительность как дату 01.01.0001 02:30:00?
Такое значение — момент времени, а не отрезок. При сортировке, группировке, выгрузке в Excel или обмене с другими системами оно обрабатывается как дата: итоги не суммируются, а внешние системы интерпретируют его как первое января. Правильно хранить число минут или секунд.
Как вывести длительность больше суток, например 50 часов?
Выделяйте дни делением на 1440 (минут в сутках), затем часы и минуты из остатка, и формируйте строку вида «2 дн 2 ч 30 мин». Либо оставьте формат «часы:минуты» с часами свыше 24 (50:30) — такой вариант привычен в учёте рабочего времени.
Почему ТекущаяДата() на клиенте и на сервере дают разное время?
Клиент берёт время компьютера пользователя, сервер — время сервера 1С или СУБД; при разных часовых поясах или неверных настройках значения расходятся. Для прикладной логики используйте ТекущаяДатаСеанса() — она единообразна для всех пользователей сеанса.
Как округлить длительность до 15-минутных интервалов для тарификации?
Разделите минуты на 15, округлите вверх функцией Окр с отрицательной разрядностью или через Цел((Минуты + 14) / 15), затем умножьте на 15. Например, 32 минуты дадут 45. Правило округления зафиксируйте в настройках учёта, чтобы расчёты были воспроизводимы.