При разработке печатных форм и отчетов в 1С:Предприятие 8 программисты часто сталкиваются с тем, что стандартное поле типа Дата выводится вместе со временем (например, 23.07.2024 00:00:00), даже если время не несет смысловой нагрузки — для этого подойдёт настройка макетов и печатных форм без программирования. Рассмотрим подробнее все доступные способы решения этой задачи: от настройки свойств ячейки в макете до манипуляций в тексте запроса и программном коде.
Это самый правильный и гибкий способ, так как он сохраняет тип данных Дата, но визуально отображает только нужные части. Мы не меняем сами данные, а лишь управляем их представлением. Разберем по шагам, как это сделать:
Параметр. Если установлено значение Шаблон, стандартное форматирование через свойства может не сработать.дд.ММ.гггг).Проанализируем пример форматной строки: ДФ=dd.MM.yyyy. Здесь dd — это день, MM — месяц, а yyyy — год. Время в этом случае будет полностью игнорироваться при отрисовке ячейки.
Если мы выводим данные в макет программно или формируем строку для текстового документа, удобно использовать встроенную функцию Формат(). Посмотрим на пример кода, который часто применяется в модулях обработок:
// Пример форматирования даты перед передачей в параметр макета
ОбластьДетали.Параметры.ДатаНачала = Формат(Выборка.ДатаНачала, "ДФ=dd.MM.yyyy");
ТабДок.Вывести(ОбластьДетали);
Здесь мы преобразуем дату в строку еще до того, как она попадет в табличный документ. Это полезно, если в макете используется тип заполнения Шаблон, где в одной ячейке может быть текст вместе с датой, например: "Приказ от [ДатаДокумента]" — для таких случаев есть инструмент форматирования реквизитов при печати по шаблонам. В самом шаблоне внутри квадратных скобок также можно вызвать функцию:
[Формат(ДатаДокумента, "ДФ=dd.MM.yyyy")]
Иногда требуется получить уже готовую строку без времени непосредственно из базы данных. Это актуально при выгрузке данных во внешние системы (например, Word или текстовые файлы), где нет возможности настроить формат ячейки постфактум — в этом поможет универсальная выгрузка документов с настройкой структуры полей. Выясним, как реализовать это в тексте запроса:
ВЫБРАТЬ
ЛЕВ(СТРОКА(Командировки.ДатаНачала), 10) КАК ДатаСтрокой,
Командировки.Сотрудник
ИЗ
Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК Командировки
Рассмотрим ситуацию: функция СТРОКА() преобразует дату в стандартный формат системы, а функция ЛЕВ(..., 10) отсекает первые 10 символов (день, месяц, год и разделители). Для подготовки данных есть выгрузка данных через произвольные запросы с постобработкой. Важно помнить: после такой операции поле перестает быть датой и становится строкой, что делает невозможным его правильную сортировку или использование в арифметических операциях внутри отчета.
Многие начинающие разработчики пытаются использовать функцию НАЧАЛОПЕРИОДА(Дата, ДЕНЬ) в запросе, надеясь избавиться от времени. Проанализируем (поможет консоль запросов и кода для разработчика), почему это не всегда помогает для визуального вывода:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Командировки.ДатаНачала, ДЕНЬ) КАК ДатаБезВремени
ИЗ
Документ.КомандировкиОрганизаций КАК Командировки
Функция НАЧАЛОПЕРИОДА действительно "обнуляет" время, устанавливая его в 00:00:00. Однако тип данных остается Дата. Если в макете не настроен формат, система все равно выведет нули времени. Данный метод полезен для группировок, но не для оформления печатных форм.
При выводе дат без времени важно учитывать поведение системы при наличии пустой даты (01.01.0001). Если мы просто применим форматирование, в макете может отобразиться "01.01.0001". Разберем, как вывести пустую строку вместо такой даты с помощью конструкции ВЫБОР в запросе:
ВЫБРАТЬ
ВЫБОР
КОГДА Командировки.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ""
ИНАЧЕ ЛЕВ(СТРОКА(Командировки.ДатаНачала), 10)
КОНЕЦ КАК ДатаДляПечати
ИЗ
Документ.КомандировкиОрганизаций КАК Командировки
Если ваш отчет строится на СКД, то лучше всего настраивать формат не в запросе, а в настройках самого поля. Посмотрим на алгоритм:
ДФ=dd.MM.yyyy.Это позволит сохранить все преимущества типа Дата (правильная сортировка, возможность использования в диаграммах) и при этом обеспечить красивый вывод в отчет без лишних символов времени.