Обработка «Расчёт разницы между датами с корректным склонением и учётом високосных годов»
Назначение
Обработка предназначена для расчёта разницы между двумя датами в понятном человеку формате: с разбивкой на годы, месяцы, дни, часы, минуты и секунды. Результат выводится с корректным склонением слов («год/года/лет» и т. д.) по правилам русского языка, а учёт високосных лет и разной длины месяцев обеспечивается за счёт работы с календарём платформы 1С.
Основные возможности
- Точный расчёт разницы: вычисляет разницу в секундах, затем преобразует её в дни, часы, минуты, секунды.
- «Человеческая» разбивка: отдельно формирует представление интервала в годах, месяцах и днях, корректно учитывая реальную длину месяцев и високосные годы (через функцию
ДобавитьМесяц). - Корректное склонение единиц измерения: автоматически подставляет «год», «года» или «лет» с учётом исключений для чисел 11–19.
- Учёт направления разницы: если конечная дата меньше начальной, в начале результата добавляется знак «−».
- Демонстрационный режим: встроенная процедура
Рандом()генерирует случайные интервалы дат для быстрой проверки работы обработки. - Отображение полного числа дней: в скобках выводится точное количество полных дней между датами — это полезно для сверки и отчётности.
Особенности реализации
- Серверная функция
ПолучитьРазностьДатвыполняет основные вычисления, включая нормализацию порядка дат и расчёт как точной, так и «человеческой» разницы. - Клиентская функция
СклонитьГодреализует логику склонения по правилам русского языка: обрабатывает исключения для чисел 11–19 и корректно формирует окончания в зависимости от последней цифры. - Процедура
ОбновитьРазностьформирует итоговую строку вывода, пропуская нулевые значения для лет и месяцев (если нет остатка), но всегда показывая дни, если они есть или являются единственной единицей измерения. - Генерация тестовых данных (
Рандом) позволяет быстро проверить обработку на разных интервалах — от нескольких часов до 50 лет.
Сценарии использования
- В отчётах и формах документов: для наглядного отображения длительности периодов (например, «срок просрочки», «длительность проекта», «возраст объекта»).
- Для пользовательских интерфейсов: когда важно показать разницу в привычном формате («2 года 3 месяца 5 дней»), а не просто в днях или секундах.
- При тестировании и демонстрации: встроенный генератор случайных дат упрощает проверку корректности расчётов на разных временных интервалах, включая переходы через високосные годы.
- Для интеграции в другие обработки: функцию
ПолучитьРазностьДатможно вынести в общий модуль и использовать в других частях конфигурации.
Технические требования
- Платформа: 1С:Предприятие 8.3 и выше.
- Конфигурация: любая, поддерживающая управляемые формы.
- Зависимости: не требуются.
Важные нюансы
- Учёт високосных годов происходит автоматически за счёт платформенной функции
ДобавитьМесяц, поэтому не требуется ручное определение високосности года. - Для месяцев и дней используется сокращённая форма («мес.», «дн.») — это общепринятый формат в интерфейсах 1С; склонение для них не применяется.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.27.61
Вступайте в нашу телеграмм-группу Инфостарт