При настройке отображения дат в отчетах, формах или элементах диаграммы Ганта часто возникает необходимость вывести дату вместе с кратким обозначением дня недели, например: Чт 25.05.17. Однако при попытке составить форматную строку разработчики нередко сталкиваются с ситуацией, когда дата отображается некорректно либо сбрасывается в значение по умолчанию со временем.
Разберем причины такого поведения парсера платформы 1С:Предприятие и рассмотрим правильные варианты настройки форматной строки.
Проанализируем структуру параметра ДФ (формат даты) функции Формат(). Форматная строка 1С состоит из отдельных управляющих параметров (таких как ДФ, Л, ЧЦ, ЧГ), которые разделяются точкой с запятой или пробелами.
Если мы передаем шаблон, содержащий пробел (например, "ДФ=ddd dd.MM.yy"), парсер платформы воспринимает пробел между ddd и dd как признак завершения текущего параметра и начало следующего. В результате строка парсится с ошибкой, и платформа возвращает дату в стандартном системном представлении (например, 25.05.2017 0:00:00).
Главное правило: если значение параметра ДФ содержит пробелы или специальные разделители, его шаблон обязательно нужно заключать в одинарные кавычки.
Рассмотрим по шагам, как правильно составить и применить форматную строку в различных сценариях.
Для вывода формата «Чт 25.05.17» используем спецификаторы ddd (краткий день недели), dd (день месяца из двух цифр), MM (номер месяца) и yy (две цифры года). Оборачиваем шаблон в одинарные кавычки:
ФорматированнаяДата = Формат(ТекущаяДата(), "ДФ='ddd dd.MM.yy'");
Стандартный спецификатор ddd формирует название дня недели с заглавной первой буквой и строчной второй (например, Чт, Пт, Сб). Платформа 1С средствами одной лишь форматной строки не умеет принудительно переводить день недели в верхний регистр. Если по требованиям интерфейса строго необходим вид ЧТ 25.05.17, применим функцию встроенного языка ВРег():
ДатаДляВывода = ВРег(Формат(ТекущаяДата(), "ДФ='ddd dd.MM.yy'"));
Если требуется получить развернутую запись, например «четверг 25.мая.2017», спецификаторы расширяются до dddd, MMM (или MMMM) и yyyy:
ПолнаяДата = Формат(ТекущаяДата(), "ДФ='dddd dd.MMM.yyyy'");
Чтобы день недели выводился по-русски независимо от региональных настроек конкретного клиентского сеанса или сервера, добавим в начало параметр локализации Л=ru_RU:
ЛокализованнаяДата = Формат(ТекущаяДата(), "Л=ru_RU; ДФ='ddd dd.MM.yy'");
Если форматирование настраивается для шкалы времени диаграммы Ганта, важно учесть работу системных свойств шкалы периода:
Формат элементов шкалы (коллекция ЭлементШкалыПериода).ФорматДня. Если для него выбрано конкретное системное значение, оно может переопределять пользовательскую форматную строку. Для использования произвольного шаблона ДФ='ddd dd.MM.yy' убедитесь, что свойство ФорматДня не конфликтует с заданным шаблоном.