К статье
Практический материал

Разработка и Конфигурация · 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

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

bsl
Функция МинутыМеждуДатами(ДатаНачала, ДатаОкончания) Экспорт
	Если Не ЗначениеЗаполнено(ДатаНачала) Или Не ЗначениеЗаполнено(ДатаОкончания) Тогда
		Возврат 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, наивный расчёт через Час() и Минута() даст отрицательное значение. Корректный способ — всегда вычитать полные даты, а не отдельные компоненты времени.

Типичные ошибки
01
Вывод разности дат без деления на 60 — пользователь видит секунды вместо минут.
02
Хранение длительности в реквизите типа Дата — ломаются итоги, сортировка и обмен данными.
03
Расчёт через Час() и Минута() отдельно — ошибка при переходе через полночь.
04
Суммирование отформатированных строк «2:30» вместо числовых минут — итоги не считаются.
05
Использование клиентского времени вместо ТекущаяДатаСеанса() — расхождения при разных часовых поясах.

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

Проверить расчёт просто: возьмите пару дат с известной разницей, например ровно 1 час 30 минут, и убедитесь, что функция возвращает 90. Добавьте контрольные случаи: переход через полночь, нулевая длительность, незаполненная дата. Если все четыре случая дают ожидаемые числа — формула корректна.

Самостоятельно безопасно менять формулы в отчётах и функции представления: это не затрагивает хранимые данные. Осторожнее с изменением типа существующего реквизита (например, с Дата на Число): при конвертации значения могут быть потеряны, поэтому перед реструктуризацией сделайте выгрузку базы и проверьте, где реквизит используется. Массовые пересчёты длительности в проведённых документах лучше поручить специалисту — ошибка изменит учётные данные задним числом.

Контрольные точки

Как проверить результат

Разность ровно 1 час 30 минут
Норма

Функция возвращает 90

Тревожный признак

Возвращает 5400 (секунды) или 1,5

Переход через полночь (23:50–00:10)
Норма

Возвращает 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. Правило округления зафиксируйте в настройках учёта, чтобы расчёты были воспроизводимы.