При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда для поля типа Дата задается строка формата ДФ=dd.MM.yyyy, но в результате отчет все равно выводит дату с "лишними" нулями времени. Рассмотрим подробно, почему это происходит и какими способами можно гарантированно добиться вывода даты без времени.
Прежде всего, разберем ситуацию, описанную в теме. Автор устанавливал формат на закладке "Наборы данных" в колонке "Оформление". Однако СКД — это многоуровневый механизм, где настройки могут перекрывать друг друга. Проанализируем основные причины игнорирования формата:
МАКСИМУМ или МИНИМУМ в запросе или на закладке "Ресурсы", СКД начинает воспринимать это поле как числовой или составной ресурс, и оформление из набора данных часто перестает применяться.Как выяснилось в ходе обсуждения, это самый надежный метод, который "пробивает" любые другие настройки. Условное оформление применяется на финальном этапе формирования компоновки, поэтому оно обладает наивысшим приоритетом. Разберем по шагам, как это настроить:
ДФ=dd.MM.yyyy.ДатаРегистрацииПравНаОбъектНедвижимости).Этот метод гарантирует, что даже если поле является ресурсом, оно будет отображаться в нужном вам виде.
Если условное оформление по каким-то причинам не подходит, проанализируем другой мощный инструмент — Выражение представления. Это свойство поля на закладке "Наборы данных".
Вместо того чтобы надеяться на системный механизм форматирования, мы можем принудительно указать системе, как преобразовывать значение в строку. Пропишем в колонке "Выражение представления" следующий код:
Формат(ДатаРегистрацииПравНаОбъектНедвижимости, "ДФ=dd.MM.yyyy")
Это заставит СКД игнорировать тип данных Дата при выводе и сразу выводить готовую отформатированную строку. Рассмотрим нюанс: если вы планируете использовать это поле для дальнейших расчетов или сортировок, лучше использовать именно оформление, а не выражение представления, так как последнее меняет только визуальный текст.
Посмотрим на пример из запроса автора темы:
ВЫБРАТЬ
МАКСИМУМ(ВТ_ПервоначальнаяРегистрация.ПериодПервоначальнойРегистрации) КАК ПериодРегистрации,
МАКСИМУМ(ВТ_СнятиеСУчета.ДатаСнятияПравНаОбъектНедвижимости) КАК ДатаСнятияПравНаОбъектНедвижимости
ИЗ
ВТ_Регистрация КАК ВТ_Регистрация
Когда мы используем функцию МАКСИМУМ, поле автоматически становится кандидатом в ресурсы. Чтобы формат сработал без условного оформления, выполним следующие действия:
Разберем типичную ошибку. Автор пытался использовать функцию НачалоПериода(Поле, День) в тексте запроса. Выясним причину, почему это бесполезно для форматирования:
Функция НачалоПериода в языке запросов 1С лишь обнуляет время (устанавливает его в 00:00:00), но она не меняет тип данных. Поле остается типом Дата. В СКД по умолчанию для типа Дата предусмотрен вывод и даты, и времени. Если время равно нулю, система все равно выводит эти нули, если не задана маска отображения. Таким образом, обработка в запросе полезна для группировки, но бесполезна для визуального оформления.
Иногда программист все делает правильно, но не видит изменений. Проанализируем, как убедиться, что настройки применились:
Важный момент: при написании строки формата вручную (например, dd.MM.yyyy), убедитесь, что вы используете латинские буквы. В некоторых случаях случайная русская "у" вместо латинской "y" приводит к тому, что формат становится невалидным и система откатывается к стандартному выводу с временем.
Подводя итог, можно сказать: если вам нужно быстро и гарантированно убрать время в отчете СКД — используйте Условное оформление. Если же вы хотите задать логику представления на уровне метаданных отчета — используйте Выражение представления с функцией Формат().