Как убрать время из даты в отчете СКД, если стандартный формат не работает

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

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

Причина проблемы: иерархия настроек СКД

Прежде всего, разберем ситуацию, описанную в теме. Автор устанавливал формат на закладке "Наборы данных" в колонке "Оформление". Однако СКД — это многоуровневый механизм, где настройки могут перекрывать друг друга. Проанализируем основные причины игнорирования формата:

  1. Приоритет настроек: Формат, заданный в наборе данных (в самой схеме), имеет самый низкий приоритет. Его могут перекрывать настройки в "Выбранных полях", настройки ресурсов или "Условное оформление".
  2. Поля-ресурсы: Если вы используете агрегатные функции, такие как МАКСИМУМ или МИНИМУМ в запросе или на закладке "Ресурсы", СКД начинает воспринимать это поле как числовой или составной ресурс, и оформление из набора данных часто перестает применяться.
  3. Пользовательские настройки: Если отчет уже открывался пользователем, система могла сохранить настройки (кэш) в его профиле. Даже если вы изменили схему в конфигураторе, старые настройки отображения могут подтягиваться из информационной базы.

Решение 1: Использование условного оформления

Как выяснилось в ходе обсуждения, это самый надежный метод, который "пробивает" любые другие настройки. Условное оформление применяется на финальном этапе формирования компоновки, поэтому оно обладает наивысшим приоритетом. Разберем по шагам, как это настроить:

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

Этот метод гарантирует, что даже если поле является ресурсом, оно будет отображаться в нужном вам виде.

Решение 2: Настройка выражения представления

Если условное оформление по каким-то причинам не подходит, проанализируем другой мощный инструмент — Выражение представления. Это свойство поля на закладке "Наборы данных".

Вместо того чтобы надеяться на системный механизм форматирования, мы можем принудительно указать системе, как преобразовывать значение в строку. Пропишем в колонке "Выражение представления" следующий код:

Формат(ДатаРегистрацииПравНаОбъектНедвижимости, "ДФ=dd.MM.yyyy")

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

Решение 3: Особенности работы с ресурсами

Посмотрим на пример из запроса автора темы:


ВЫБРАТЬ
    МАКСИМУМ(ВТ_ПервоначальнаяРегистрация.ПериодПервоначальнойРегистрации) КАК ПериодРегистрации,
    МАКСИМУМ(ВТ_СнятиеСУчета.ДатаСнятияПравНаОбъектНедвижимости) КАК ДатаСнятияПравНаОбъектНедвижимости
ИЗ
    ВТ_Регистрация КАК ВТ_Регистрация

Когда мы используем функцию МАКСИМУМ, поле автоматически становится кандидатом в ресурсы. Чтобы формат сработал без условного оформления, выполним следующие действия:

  1. Перейдем на закладку Ресурсы.
  2. Если наше поле добавлено в список ресурсов, обратим внимание на колонку Рассчитывать по....
  3. Формат для ресурсов нужно устанавливать не в наборе данных, а непосредственно в настройках самого отчета (закладка "Настройки" -> "Выбранные поля" -> правая кнопка мыши на поле -> "Установить параметры выбранного поля").

Решение 4: Почему не помогает НачалоПериода в запросе?

Разберем типичную ошибку. Автор пытался использовать функцию НачалоПериода(Поле, День) в тексте запроса. Выясним причину, почему это бесполезно для форматирования:

Функция НачалоПериода в языке запросов 1С лишь обнуляет время (устанавливает его в 00:00:00), но она не меняет тип данных. Поле остается типом Дата. В СКД по умолчанию для типа Дата предусмотрен вывод и даты, и времени. Если время равно нулю, система все равно выводит эти нули, если не задана маска отображения. Таким образом, обработка в запросе полезна для группировки, но бесполезна для визуального оформления.

Как проверить результат и сбросить кэш

Иногда программист все делает правильно, но не видит изменений. Проанализируем, как убедиться, что настройки применились:

  1. В режиме "1С:Предприятие" откройте ваш отчет.
  2. Нажмите кнопку Еще и выберите пункт Установить стандартные настройки.
  3. Это действие сбросит все пользовательские изменения оформления, которые могли быть сохранены ранее и которые перекрывали вашу новую схему.

Важный момент: при написании строки формата вручную (например, dd.MM.yyyy), убедитесь, что вы используете латинские буквы. В некоторых случаях случайная русская "у" вместо латинской "y" приводит к тому, что формат становится невалидным и система откатывается к стандартному выводу с временем.

Подводя итог, можно сказать: если вам нужно быстро и гарантированно убрать время в отчете СКД — используйте Условное оформление. Если же вы хотите задать логику представления на уровне метаданных отчета — используйте Выражение представления с функцией Формат().

← На главную