Как вывести дату без времени в отчете 1С при использовании макета с шаблоном

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

При разработке отчетов в системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда стандартные настройки оформления не срабатывают. Одной из самых распространенных проблем является вывод даты вместе с временем (часами, минутами и секундами), когда требуется отобразить только календарное число. Особенно остро этот вопрос встает при использовании собственных макетов оформления, где ячейки имеют тип заполнения Шаблон — для этой задачи есть редактор макетов и шаблонов печати 1С.

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

Почему стандартное форматирование не работает в шаблонах?

Прежде всего, проанализируем причину проблемы. Когда в ячейке макета выбран тип заполнения Параметр, система 1С воспринимает передаваемое значение как объект определенного типа (в нашем случае — Дата). В этом случае настройки «Формат» в свойствах ячейки или в «Условном оформлении» применяются корректно, так как система понимает, что она форматирует дату.

Однако, как только мы переключаем тип заполнения на Шаблон, механизм работы меняется. В шаблоне текст может выглядеть как "Накладная № [Номер] от [Дата]". Система сначала вычисляет строковые представления всех параметров внутри квадратных скобок, а затем «склеивает» их в одну общую строку. На этапе этой «склейки» 1С преобразует дату в строку по умолчанию, включая в нее время. Поскольку результатом работы шаблона является тип Строка, применение формата даты к ячейке уже не дает никакого эффекта — для системы это просто набор символов.

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

Многие разработчики не знают, что формат можно указать непосредственно внутри конструкции шаблона в макете. Это самый быстрый способ, не требующий изменения типа ячейки или написания программного кода. Если в вашей ячейке-шаблоне указан параметр [ДатаДокумента], вы можете дополнить его строкой формата через запятую.

Рассмотрим пример правильного синтаксиса внутри квадратных скобок:

[ДатаДокумента, "ДФ=dd.MM.yyyy"]

В данном случае ДФ (Дата Формат) жестко задает маску вывода. Разберем основные символы форматирования:

Проанализируем ситуацию: если мы напишем "ДФ=dd MMMM yyyy 'г.'", то дата «01.05.2023» превратится в красивую строку «01 мая 2023 г.». Этот метод работает внутри шаблона идеально, так как система применяет форматирование в момент преобразования параметра в строку, еще до того, как соберет финальный текст ячейки.

Способ 2. Изменение типа заполнения на «Параметр»

Если ячейка макета не содержит лишнего текста, а выводит только саму дату, лучшим решением будет отказаться от типа Шаблон в пользу типа Параметр. Посмотрим, как это сделать правильно:

  1. Выделите нужную ячейку в макете оформления СКД (удобно через конструктор произвольных документов и макетов 1С).
  2. В палитре свойств найдите поле Заполнение и установите значение Параметр.
  3. В поле Параметр укажите имя вашего поля (например, ДатаДокумента).
  4. В свойстве Формат (нажмите на кнопку с многоточием) выберите конструктор форматной строки.
  5. На закладке «Дата» выберите нужный локальный формат даты или задайте произвольный в поле «Форматная строка» (например, ДЛФ=D для длинного формата без времени или ДФ=dd.MM.yyyy).

Важный нюанс: обязательно проверьте свойство Тип значения у этой ячейки. Если там стоит «Авто», система может ошибиться. Рекомендуется явно указать Дата (или уточнить состав даты как «Дата»).

Способ 3. Настройка «Выражения представления» в наборе данных

Если вы хотите, чтобы дата всегда и везде в отчете (не только в макете, но и в группировках, авто-полях) выводилась без времени, можно воспользоваться настройками самого поля в СКД — для этого подойдёт инструментарий разработчика с консолью СКД и запросов. Разберем этот путь по шагам:

  1. Откройте схему компоновки данных и перейдите на закладку Наборы данных.
  2. Найдите поле, содержащее дату.
  3. Найдите колонку Выражение представления.
  4. Впишите туда следующую функцию:

Формат(ДатаДокумента, "ДФ=dd.MM.yyyy")

Теперь, когда СКД будет встречать это поле в любом текстовом контексте (в том числе в шаблоне макета), она будет использовать результат этого выражения. Это очень удобно, так как позволяет централизованно управлять отображением данных.

Способ 4. Форматирование на уровне запроса

Иногда бывает полезно подготовить данные еще на этапе выборки из базы данных. Хотя в 1С рекомендуется хранить даты как объекты Дата, для специфических печатных форм можно сразу получить строку — для этого есть универсальная выгрузка документов с настройкой полей. Выясним, как это выглядит в тексте запроса:


ВЫБРАТЬ
    ПРЕДСТАВЛЕНИЕ(Продажи.Период) КАК ПериодСтрока,
    Продажи.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи

Функция ПРЕДСТАВЛЕНИЕ в языке запросов преобразует дату в строку в соответствии с региональными настройками пользователя. Однако будьте осторожны: если у пользователя в Windows в настройках даты стоит вывод времени, то ПРЕДСТАВЛЕНИЕ тоже его выведет. Для гарантированного результата лучше использовать методы форматирования в СКД, описанные выше.

Способ 5. Программная установка формата в модуле

Если вы создаете внешний отчет или имеете доступ к модулю объекта, можно программно повлиять на формат вывода, не меняя сам макет. Рассмотрим пример кода в процедуре ПриКомпоновкеРезультата:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    // Находим нужное поле в оформлении
    ПолеДаты = Новый ПолеКомпоновкиДанных("ДатаДокумента");
    ЭлементОформления = Настройки.УсловноеОформление.Элементы.Добавить();
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Формат", "ДФ=dd.MM.yyyy");
    
    ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеОформления.Поле = ПолеДаты;
    
    // Применяем настройки обратно
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

КонецПроцедуры

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

Резюме и практические советы

Проанализировав все варианты, можно сделать следующие выводы:

  1. Если используется Шаблон — указывайте формат прямо внутри квадратных скобок: [Дата, "ДФ=..."].
  2. Если нужно просто вывести значение — используйте Параметр и свойство ячейки «Формат».
  3. Если нужно «победить» время во всем отчете — используйте Выражение представления в наборе данных СКД.
  4. Никогда не полагайтесь на визуальную ширину колонки (совет «урезать ширину, чтобы время не влезло»), так как при выгрузке отчета в Excel время все равно будет присутствовать (поможет инструмент выгрузки данных в Excel с постобработкой) в значении ячейки, что может привести к претензиям со стороны пользователей.

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

← На главную