При разработке отчетов на базе Системы компоновки данных (СКД) в 1С программисты часто сталкиваются со следующей задачей: необходимо вывести на печать или экран точную дату и время, когда отчет был сформирован. Это критически важно для пользователей, которые анализируют данные и должны четко понимать актуальность представленной информации. Для этой задачи можно использовать инструмент для автоматического вывода штампа времени и пользователя в отчет СКД.
Однако простая попытка добавить параметр с выражением ТекущаяДата() часто оборачивается неудачей — параметр либо не выводится в шапке отчета вообще, либо выводится в неудобном для пользователя виде. В рамках этой статьи мы подробно разберем, почему так происходит, и рассмотрим несколько эффективных способов решения проблемы: от простых интерактивных настроек до программных методов в модуле объекта отчета.
Выясним первопричину проблемы, с которой часто сталкиваются начинающие разработчики. В СКД у каждого параметра есть свойство «Ограничение доступности». Рассмотрим два сценария поведения системы в зависимости от этой настройки:
Для обхода этого ограничения мы можем использовать альтернативные, более гибкие подходы. Ниже мы детально разберем каждый из них.
Этот способ хорош тем, что он не требует написания программного кода и изменения глобальных макетов оформления таблиц. Мы создадим специальное вычисляемое поле и выведем его в отдельной независимой области в самом верху отчета.
Разберем этот процесс по шагам:
ДатаВремяФормирования.ТекущаяДата().Дата формирования.ШапкаДаты.ДатаВремяФормирования.Дополнительная информация.Без оформления. Это позволит вывести дату простым текстом без лишних рамок и заливок табличной части.При таком подходе при формировании отчета в самом верху будет выводиться аккуратная строчка с текущим временем, которая никак не сдвинет и не испортит структуру основных таблиц данных.
Если у вашего отчета нет индивидуальной формы (используется стандартная общая форма), лучшим и наиболее профессиональным решением будет перехват события компоновки в модуле объекта отчета. Этот способ гарантирует, что дата будет рассчитываться в момент обращения к серверу и автоматически подставится во все варианты отчетов без необходимости ручной перенастройки каждого варианта.
Проанализируем ситуацию и напишем обработчик в модуле объекта отчета. Для этого откроем модуль объекта и определим предопределенную процедуру ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Нам потребуется принудительно включить вывод стандартного заголовка в настройках
КомпоновщикНастроек.Настройки.ПараметрыВывода.УстановитьЗначениеПараметра(
"ВыводитьЗаголовок",
ТипВыводаТекстаКомпоновкиДанных.Выводить
);
// Находим системный параметр вывода "Заголовок"
ПараметрЗаголовок = КомпоновщикНастроек.Настройки.ПараметрыВывода.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Заголовок")
);
Если ПараметрЗаголовок <> Неопределено Тогда
// Форматируем текущую системную дату для красивого отображения
СтрокаДаты = Формат(ТекущаяДата(), "ДЛФ=DDT");
// Задаем новый динамический текст заголовка
ПараметрЗаголовок.Значение = "Отчет по продажам компании" + Символы.ПС + "Сформирован: " + СтрокаДаты;
ПараметрЗаголовок.Использование = Истина;
КонецЕсли;
КонецПроцедуры
Преимущество этого метода неоспоримо: вам не нужно трогать интерактивные настройки вариантов отчетов в пользовательском режиме. Код отработает автоматически, добавив к стандартному заголовку перенос строки и актуальное время запуска.
Если требуется строгое визуальное форматирование (например, дата должна выводиться определенным шрифтом, цветом или быть прижата к правому краю страницы), на помощь приходит механизм шаблонов макетов СКД.
Рассмотрим алгоритм реализации этого метода:
МакетШапкиДаты.МакетШапкиДаты.Отчет сформирован: [ДатаФормирования]. Квадратные скобки указывают системе, что внутри находится динамический параметр.Шаблон.ДатаФормирования в колонке «Выражение» напишем системную функцию ТекущаяДата().Этот способ дает разработчику стопроцентный контроль над дизайном вывода системной информации без привлечения программирования.
По умолчанию функция ТекущаяДата() возвращает данные в полном формате с секундами (например: 18.11.2023 14:32:05). Часто секунды на бумаге или экране выглядят избыточно, поэтому дату необходимо форматировать.
В СКД для любого поля или параметра можно настроить оформление. Перейдем на вкладку «Параметры» (или откроем свойства вычисляемого поля) и найдем колонку «Оформление». Нажмем на кнопку выбора в этой ячейке и найдем свойство «Формат».
Посмотрим на примеры наиболее часто используемых форматных строк:
ДФ=dd.MM.yyyy — выведет только дату (например: 18.11.2023).ДФ='dd.MM.yyyy HH:mm' — выведет дату и время без секунд (например: 18.11.2023 14:32). Обратите внимание на использование одинарных кавычек для разделения даты и времени пробелом.ДЛФ=DDT — длинный формат даты и времени (например: 18 ноября 2023 г. 14:32:05).Применение правильного форматирования делает ваши отчеты аккуратными, понятными и удобными для конечных пользователей бизнес-приложений 1С.