При разработке печатных форм, отчетов и обработок разработчики 1С часто сталкиваются с задачей преобразования типа Дата в текстовое представление определенного формата — например, "01.05.2015" (без указания времени).
Рассмотрим по шагам основные способы решения этой задачи, возможные причины ошибок и полезные инструменты платформы.
Основным и наиболее гибким способом преобразования даты в текстовый вид является встроенная функция Формат. Если необходимо получить дату в виде "ДД.ММ.ГГГГ", в качестве второго параметра передается форматная строка с маской ДФ.
Разберем пример кода:
ДатаСтрокой = Формат(ТвояДата, "ДФ=""дд.ММ.гггг""");
Обратим внимание на следующие важные технические нюансы:
""дд.ММ.гггг""). Также допускается использование одинарных кавычек внутри внешних двойных: "ДФ='дд.ММ.гггг'".ММ выводят порядковый номер месяца, тогда как строчные мм выведут минуты. Использование строчных букв ("дд.мм.гггг") приведет к некорректному выводу минут вместо месяца.Согласно стандартам разработки платформы 1С, вместо жесткого применения маски ДФ часто рекомендуется использовать параметр локального формата даты ДЛФ. Это позволяет автоматически учитывать региональные настройки сеанса пользователя.
Посмотрим на пример применения краткой даты:
ДатаСтрокой = Формат(ТвояДата, "ДЛФ=Д");
При русской локализации сеанса данный код вернет дату точно в формате "ДД.ММ.ГГГГ".
Проанализируем ситуацию, когда исходная переменная не заполнена. В 1С значение пустой даты равно '00010101000000'. При применении маски "ДФ=дд.ММ.гггг" результат будет равен строке "01.01.0001".
Чтобы избежать вывода нулевого года и выводить пустую строку для незаполненной даты, следует добавить параметр ДП (формат пустой даты):
ДатаСтрокой = Формат(ТвояДата, "ДФ=дд.ММ.гггг; ДП=");
Чтобы не запоминать специфику синтаксиса форматных строк и избежать ошибок с кавычками, в конфигураторе 1С предусмотрен встроенный инструмент:
Формат.Дата, настраиваем нужные параметры вывода и нажимаем ОК. Конструктор автоматически сформирует корректную код-строку с нужным экранированием.