При разработке отчетов на системе компоновки данных (СКД) программисты часто сталкиваются с тем, что стандартный вывод даты в иерархии периодов (например, через ЧастиДат.День) выглядит недружелюбно для пользователя. Вместо привычного "16 марта 2022 г." система может выводить просто число или дату в техническом формате. Разберем подробно, как решить эту задачу несколькими способами, от простого условного оформления до использования выражений представления и макетов.
Это самый быстрый и часто рекомендуемый способ, который не требует изменения структуры запроса. Рассмотрим пошагово, как его настроить:
ДФ='dd MMMM yyyy'. Если мы хотим добавить в конце букву "г.", используем: ДФ='dd MMMM yyyy ''г.'''.ПериодДень или День).Проанализируем ситуацию: иногда условное оформление «не срабатывает». Выясним причину. Часто это происходит из-за того, что в настройках Области использования (в нижней части окна настройки оформления) не стоят галочки В группировке или В иерархии. Убедимся, что оформление применяется именно к тем элементам отчета, где выводится дата.
Если мы хотим, чтобы формат применялся везде, где используется это поле, логичнее настроить его непосредственно в определении поля в наборе данных.
Этот метод хорош тем, что настройки «переезжают» вместе с полем во все варианты отчетов, которые будут созданы на базе этой схемы.
Рассмотрим случай, когда поле является не просто датой, а сложным объектом, или когда стандартный формат не подхватывается. В этом случае мы можем явно указать СКД, как «превращать» значение в строку через Выражение представления.
В колонке Выражение представления для поля периода напишем следующий код:
Формат(Период, "ДФ='dd MMMM yyyy'")
Посмотрим на пример синтаксиса в конфигураторе: если вы пишете выражение внутри строки СКД, иногда требуется использование двойных кавычек для строк формата, чтобы система корректно интерпретировала вложенные кавычки:
Формат(Период, ""ДФ='dd MMMM yyyy'"" )
Однако чаще всего достаточно стандартного написания. Использование этого метода гарантирует, что даже если в поле хранится пустая дата или специфический тип, функция Формат попытается обработать его по заданному шаблону.
Иногда использование ЧастиДат.День приводит к тому, что система воспринимает значение как число или системный объект, к которому формат даты просто не применим. Проанализируем, как обойти это ограничение через Вычисляемые поля.
ДатаДляЗаголовка.
НачалоПериода(Период, "День")
Дата.dd MMMM yyyy.Использование функции НачалоПериода принудительно возвращает объект с типом Дата, что снимает все вопросы с применением форматов компоновки.
Если ни один из вышеперечисленных способов не помогает (например, при сложной иерархии или специфических требованиях локализации), мы можем использовать механизм макетов.
ПараметрДата.ПараметрДата укажем выражение:
Формат(День, "ДФ='dd MMMM yyyy'")
Этот метод позволяет полностью переопределить визуальное представление ячейки, игнорируя любые системные настройки оформления.
Разберем несколько тонкостей, которые могут повлиять на результат:
Период, СКД может автоматически управлять его представлением. Попробуйте временно отключить роль, чтобы проверить влияние на формат.MMMM выводит месяц в именительном падеже ("Март"). Если вам нужно склонение ("Марта"), убедитесь, что используется актуальная версия платформы, которая поддерживает склонение в зависимости от региональных настроек, или используйте системный формат ДЛФ=DD.Таким образом, мы проанализировали основные инструменты управления форматом дат в СКД. Для большинства задач достаточно Условного оформления, но для гарантированного результата в сложных отчетах лучше использовать Вычисляемые поля с явным приведением к типу Дата.