При настройке печатных форм или шаблонов документов в режиме «1С:Предприятие» (например, в конфигурации «1С:Университет» или «1С:Зарплата и управление персоналом») пользователи часто сталкиваются с тем, что дата выводится в стандартном системном виде с указанием времени: 22.03.2021 15:52:19. Однако для официальных документов, таких как заявления или приказы, требуется более строгий формат: «22 марта 2021 г.».
В этой статье мы подробно разберем, как с помощью встроенных функций 1С преобразовать дату к нужному виду непосредственно в строке формулы, проанализируем типичные ошибки и рассмотрим несколько вариантов решения задачи.
Выясним причину, по которой система выдает дату вместе со временем. В платформе 1С тип данных Дата всегда содержит и календарное число, и время (часы, минуты, секунды). Если мы просто складываем строку с переменной даты, например: "от " + &ДатаНачала, система автоматически преобразует дату в строку по умолчанию, включая все временные метки. Чтобы этого избежать, необходимо явно указать платформе, какие части даты нам нужны и в каком представлении.
Самый простой и эффективный способ получить дату с месяцем прописью — использовать функцию Формат() с параметром ДЛФ (Длинный Локальный Формат). Рассмотрим, как это выглядит на практике.
Если ваша формула выглядит как сложная конструкция со склонением ФИО и условиями, нам нужно найти фрагмент, отвечающий за вывод даты, и обернуть его в функцию. Проанализируем пример из обсуждения:
"Заявление от " + Формат(&ДатаНачала, "ДЛФ=DD")
В данном случае параметр DD (Long Date) дает следующие преимущества:
Иногда требуется более специфичный вывод, например, без буквы «г.» в конце или с сокращенным названием месяца. В этом случае мы используем параметр ДФ (Детальный Формат). Разберем по шагам составление форматной строки:
Формат(&ДатаНачала, "ДФ='дд ММММ гггг'")
Рассмотрим значения символов внутри кавычек:
дд — день месяца двумя цифрами (01, 02...).ММММ — полное название месяца (система сама склоняет его, если дата указана целиком).гггг — год четырьмя цифрами.Важный нюанс: Если вы пишете эту формулу внутри другой строки кода, используйте одинарные кавычки внутри двойных, чтобы не «разрывать» выражение. Например:
Результат = "Документ составлен " + Формат(ТекущаяДата(), "ДФ='дд ММММ гггг'") + " года";
В специализированных решениях формулы могут быть очень длинными из-за проверок гражданства или пола. Посмотрим на итоговый вариант корректной формулы, которая объединяет ФИО и отформатированную дату:
"заявление " + ?(УниверситетСервер.ПолучитьГражданствоФизическогоЛица(&ФизическоеЛицо)<>Справочники.СтраныМира.Россия,
ПолучитьПолноеФИОФизическогоЛица(&ФизическоеЛицо, 2),
ПолучитьСокращенноеФИОФизическогоЛица(&ФизическоеЛицо,,2)) +
" от " + Формат(&ДатаНачала, "ДЛФ=DD")
В этом выражении мы видим использование тернарного оператора ?() для выбора типа ФИО и конкатенацию (сложение) строк с результатом функции Формат(). Именно такая конструкция позволяет получить на выходе читаемый текст без лишних технических данных.
Проанализируем ситуации, когда формат не срабатывает:
ММ — это месяц, а мм — это минуты. Если вы напишете дд мм гггг, вы получите день, минуты и год.dd, и дд, но лучше придерживаться одного стандарта. Ошибка ДДММММГГ (как в сообщении пользователя) часто не срабатывает, так как «ГГ» — это сокращенный год (21), а для полного (2021) нужно гггг.При работе в режиме предприятия стоит учитывать, что дата может быть не заполнена. Если применить Формат() к пустой дате, пользователь увидит «01 января 0001 г.». Чтобы сделать вывод более профессиональным, рекомендуем использовать проверку:
?(ЗначениеЗаполнено(&ДатаНачала), Формат(&ДатаНачала, "ДЛФ=DD"), "_______")
В этом случае, если дата не указана, в документе будет выведена пустая строка для заполнения вручную, что выглядит гораздо аккуратнее.
Используя данные методы, мы можем гибко управлять отображением любых временных показателей в системе 1С, делая печатные формы удобными для конечного пользователя.