Как в отчете СКД изменить формат вывода даты на "16 марта 2022"?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов на системе компоновки данных (СКД) программисты часто сталкиваются с тем, что стандартный вывод даты в иерархии периодов (например, через ЧастиДат.День) выглядит недружелюбно для пользователя. Вместо привычного "16 марта 2022 г." система может выводить просто число или дату в техническом формате. Разберем подробно, как решить эту задачу несколькими способами, от простого условного оформления до использования выражений представления и макетов.

Способ 1. Использование условного оформления

Это самый быстрый и часто рекомендуемый способ, который не требует изменения структуры запроса. Рассмотрим пошагово, как его настроить:

  1. Откроем вкладку Настройки в схеме компоновки данных.
  2. Перейдем на вкладку Условное оформление.
  3. Добавим новый элемент оформления.
  4. В поле Оформление нажмем на кнопку выбора и найдем параметр Формат.
  5. В строке формата введем выражение: ДФ='dd MMMM yyyy'. Если мы хотим добавить в конце букву "г.", используем: ДФ='dd MMMM yyyy ''г.'''.
  6. В поле Оформляемые поля выберем наше поле периода (например, ПериодДень или День).
  7. Важный нюанс: Условие в оформлении заполнять не обязательно, если нужно применить формат ко всем записям.

Проанализируем ситуацию: иногда условное оформление «не срабатывает». Выясним причину. Часто это происходит из-за того, что в настройках Области использования (в нижней части окна настройки оформления) не стоят галочки В группировке или В иерархии. Убедимся, что оформление применяется именно к тем элементам отчета, где выводится дата.

Способ 2. Настройка формата в наборе данных

Если мы хотим, чтобы формат применялся везде, где используется это поле, логичнее настроить его непосредственно в определении поля в наборе данных.

  1. Перейдем на вкладку Наборы данных.
  2. Найдем в списке наше поле.
  3. В колонке Оформление нажмем на кнопку выбора и установим нужный формат даты в конструкторе (аналогично первому способу).

Этот метод хорош тем, что настройки «переезжают» вместе с полем во все варианты отчетов, которые будут созданы на базе этой схемы.

Способ 3. Выражение представления

Рассмотрим случай, когда поле является не просто датой, а сложным объектом, или когда стандартный формат не подхватывается. В этом случае мы можем явно указать СКД, как «превращать» значение в строку через Выражение представления.

В колонке Выражение представления для поля периода напишем следующий код:

Формат(Период, "ДФ='dd MMMM yyyy'")

Посмотрим на пример синтаксиса в конфигураторе: если вы пишете выражение внутри строки СКД, иногда требуется использование двойных кавычек для строк формата, чтобы система корректно интерпретировала вложенные кавычки:

Формат(Период, ""ДФ='dd MMMM yyyy'"" )

Однако чаще всего достаточно стандартного написания. Использование этого метода гарантирует, что даже если в поле хранится пустая дата или специфический тип, функция Формат попытается обработать его по заданному шаблону.

Способ 4. Вычисляемые поля и приведение к типу Дата

Иногда использование ЧастиДат.День приводит к тому, что система воспринимает значение как число или системный объект, к которому формат даты просто не применим. Проанализируем, как обойти это ограничение через Вычисляемые поля.

  1. Перейдем на вкладку Вычисляемые поля.
  2. Добавим новое поле, например, ДатаДляЗаголовка.
  3. В колонке Выражение напишем: НачалоПериода(Период, "День")
  4. Для этого нового поля установим тип значения Дата.
  5. В колонке Оформление зададим наш формат dd MMMM yyyy.

Использование функции НачалоПериода принудительно возвращает объект с типом Дата, что снимает все вопросы с применением форматов компоновки.

Способ 5. Использование макетов (Ультимативный метод)

Если ни один из вышеперечисленных способов не помогает (например, при сложной иерархии или специфических требованиях локализации), мы можем использовать механизм макетов.

  1. Перейдем на вкладку Макеты.
  2. Добавим Макет группировки, выбрав поле, отвечающее за день.
  3. В области макета создадим параметр, например ПараметрДата.
  4. В таблице параметров для ПараметрДата укажем выражение: Формат(День, "ДФ='dd MMMM yyyy'")

Этот метод позволяет полностью переопределить визуальное представление ячейки, игнорируя любые системные настройки оформления.

Важные технические детали

Разберем несколько тонкостей, которые могут повлиять на результат:

Таким образом, мы проанализировали основные инструменты управления форматом дат в СКД. Для большинства задач достаточно Условного оформления, но для гарантированного результата в сложных отчетах лучше использовать Вычисляемые поля с явным приведением к типу Дата.

← На главную