Как убрать время в дате в заголовке отбора СКД?

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

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

Почему стандартное условное оформление не работает для заголовка отбора

Проанализируем механизм вывода информации в компоновщике. Настройки оформления, заданные на вкладке «Настройки» → «Условное оформление», применяются процессором вывода только к результирующим таблицам — детальным записям и группировкам. Служебная область шапки отчета, формируемая при включенном параметре Выводить отбор, строится отдельно на основе настроек самого набора данных.

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

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

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

  1. Откроем схему компоновки данных и перейдем на вкладку «Наборы данных».
  2. Выберем нужный набор данных и найдем строку с целевым полем (например, ДатаИсполнения).
  3. В таблице полей найдем колонку «Оформление» (обратите внимание: это колонка внутри набора данных, а не отдельная вкладка настроек варианта).
  4. Нажмем кнопку выбора в этой ячейке, найдем свойство Формат и откроем конструктор строки формата.
  5. Установим локальный формат даты, например ДЛФ=D (длинный формат даты без времени), либо зададим явный формат ДФ=dd.MM.yyyy.

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

Способ 2. Установка параметров редактирования поля

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

  1. На вкладке «Наборы данных» в строке нужного поля найдем колонку «Параметры редактирования».
  2. В открывшемся окне найдем параметр «Формат редактирования».
  3. Укажем маску формата: ДФ=dd.MM.yyyy или выберем ДЛФ=D.

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

Способ 3. Формирование пользовательского заголовка в модуле отчета

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

  1. В схеме на вкладке «Настройки» → «Другие настройки» установим свойство «Выводить отбор» в значение «Не выводить».
  2. В модуле объекта отчета переопределим процедуру ПриКомпоновкеРезультата.
  3. Обойдем примененные отборы и запишем сформированный текст в параметр вывода Заголовок:

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

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

← На главную