Как вывести дату и время формирования отчета в СКД 1С: подробное руководство

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

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

Однако простая попытка добавить параметр с выражением ТекущаяДата() часто оборачивается неудачей — параметр либо не выводится в шапке отчета вообще, либо выводится в неудобном для пользователя виде. В рамках этой статьи мы подробно разберем, почему так происходит, и рассмотрим несколько эффективных способов решения проблемы: от простых интерактивных настроек до программных методов в модуле объекта отчета.

Почему стандартный параметр с выражением ТекущаяДата() не выводится?

Выясним первопричину проблемы, с которой часто сталкиваются начинающие разработчики. В СКД у каждого параметра есть свойство «Ограничение доступности». Рассмотрим два сценария поведения системы в зависимости от этой настройки:

  1. Флаг «Ограничение доступности» установлен: мы делаем это для того, чтобы пользователь не мог вручную изменить системное время формирования отчета. Но как только этот флаг взведен, СКД начинает считать данный параметр чисто служебным и автоматически исключает его из стандартной области вывода параметров в заголовке отчета. В итоге дата просто скрывается от пользователя.
  2. Флаг «Ограничение доступности» снят: в этом случае параметр отображается на форме и в шапке отчета. Однако теперь пользователь получает возможность вручную редактировать эту дату. Это нарушает логику отчета, так как дата формирования должна быть строго системной и неизменяемой.

Для обхода этого ограничения мы можем использовать альтернативные, более гибкие подходы. Ниже мы детально разберем каждый из них.

Способ 1. Использование вычисляемого поля и группировки «Дополнительная информация»

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

Разберем этот процесс по шагам:

  1. Откроем схему компоновки данных и перейдем на вкладку «Вычисляемые поля».
  2. Добавим новую строку и заполним свойства поля:
    • Путь к данным: укажем понятное имя, например, ДатаВремяФормирования.
    • Выражение: напишем стандартную функцию платформы ТекущаяДата().
    • Заголовок: напишем текст, который увидит пользователь, например, Дата формирования.
  3. Перейдем на вкладку «Настройки» и выберем самый верхний элемент структуры настроек (обычно он называется «Отчет»).
  4. В окне структуры (правая верхняя часть) добавим новую группировку. Для этого нажмем правой кнопкой мыши на корневой элемент и выберем «Новая группировка». Поля группировки указывать не нужно — оставим поле пустым. Назовем ее, например, ШапкаДаты.
  5. Перетащим созданную пустую группировку на самый верх структуры, чтобы она шла первой по порядку, выше вашей основной таблицы или диаграммы.
  6. Выделим созданную группировку и перейдем к ее индивидуальным настройкам в нижней части экрана:
    • На вкладке «Выбранные поля» снимем флаг «Авто» и перетащим туда только наше вычисляемое поле ДатаВремяФормирования.
    • На вкладке «Другие настройки» найдем свойство «Вариант использования группировки» и установим для него значение Дополнительная информация.
    • Там же найдем параметр «Макет оформления» и установим значение Без оформления. Это позволит вывести дату простым текстом без лишних рамок и заливок табличной части.

При таком подходе при формировании отчета в самом верху будет выводиться аккуратная строчка с текущим временем, которая никак не сдвинет и не испортит структуру основных таблиц данных.

Способ 2. Динамическое изменение заголовка через модуль объекта (без формы отчета)

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

Проанализируем ситуацию и напишем обработчик в модуле объекта отчета. Для этого откроем модуль объекта и определим предопределенную процедуру ПриКомпоновкеРезультата:


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

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

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

Способ 3. Создание макета оформления (Шаблона) в СКД

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

Рассмотрим алгоритм реализации этого метода:

  1. Создадим пустую группировку на верхнем уровне настроек отчета, как мы делали в первом способе. В свойствах этой группировки на вкладке «Другие настройки» укажем имя макета, например, МакетШапкиДаты.
  2. Перейдем на вкладку «Макеты» конструктора схемы компоновки данных.
  3. Нажмем кнопку «Добавить макет группировки». В появившемся окне укажем имя нашей группировки: МакетШапкиДаты.
  4. В открывшемся поле табличного документа выделим ячейку и напишем в ней текст: Отчет сформирован: [ДатаФормирования]. Квадратные скобки указывают системе, что внутри находится динамический параметр.
  5. Выделим эту ячейку, откроем ее свойства (клавиша F4) и найдем свойство «Заполнение». Установим для него значение Шаблон.
  6. После этого в нижней части конструктора макетов появится таблица параметров макета. Для параметра ДатаФормирования в колонке «Выражение» напишем системную функцию ТекущаяДата().

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

Важный нюанс: Настройка формата даты и времени

По умолчанию функция ТекущаяДата() возвращает данные в полном формате с секундами (например: 18.11.2023 14:32:05). Часто секунды на бумаге или экране выглядят избыточно, поэтому дату необходимо форматировать.

В СКД для любого поля или параметра можно настроить оформление. Перейдем на вкладку «Параметры» (или откроем свойства вычисляемого поля) и найдем колонку «Оформление». Нажмем на кнопку выбора в этой ячейке и найдем свойство «Формат».

Посмотрим на примеры наиболее часто используемых форматных строк:

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

← На главную