При разработке отчетов в 1С (например, в «1С:Комплексная автоматизация» или «1С:ERP») часто возникает задача динамически отображать в шапке отчета выбранную пользователем валюту. Например, для ресурса ДолгКлиентаВВалютеОтчета стандартный заголовок «Всего» требуется заменить на «Всего (USD)» или «Всего (руб.)» в зависимости от значения параметра Валюта.
Разберем типичные ошибки при попытке решить эту задачу через стандартный интерфейс и детально рассмотрим надежные способы реализации.
Проанализируем, почему стандартные попытки ввести параметр в текст не приводят к желаемому результату:
Всего &Валюта или ПараметрыДанных.Валюта, система СКД воспримет это как обычный строковый литерал и выведет в заголовок именно этот текст символ в символ.Рассмотрим наиболее простой и визуальный способ вывода динамического текста в заголовок без написания программного кода.
Разберем пошаговый алгоритм настройки:
ДолгКлиентаВВалютеОтчета) и выберем тип макета — «Заголовок».Шаблон.
Всего ([ПараметрыДанных.Валюта]).При формировании отчета СКД автоматически заменит выражение в квадратных скобках на строковое представление выбранной валюты.
Если макеты использовать нежелательно, можно решить задачу штатными механизмами условного оформления. Для этого настроим специальный параметр, который будет заранее формировать нужную строку.
Разберем процесс настройки по шагам:
ЗаголовокРесурса."Всего (" + Строка(&Валюта) + ")"Текст. Нажмем кнопку очистки или смены типа значения, переключим тип с обычного текста на «Параметр компоновки данных» и выберем наш параметр ЗаголовокРесурса.ДолгКлиентаВВалютеОтчета.Рассмотрим вариант, когда отчет формируется программно или требуется централизованно управлять заголовками перед компоновкой. Изменение выполняется в модуле отчета в событии ПриКомпоновкеРезультата.
Посмотрим на пример кода:
ЗначениеВалюты = "";
ПараметрВалюта = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Валюта"));
Если ПараметрВалюта <> Неопределено И ЗначениеЗаполнено(ПараметрВалюта.Значение) Тогда
ЗначениеВалюты = " (" + Строка(ПараметрВалюта.Значение) + ")";
КонецЕсли;
ПолеСхемы = СхемаКомпоновкиДанных.Поля.Найти("ДолгКлиентаВВалютеОтчета");
Если ПолеСхемы <> Неопределено Тогда
ПолеСхемы.Заголовок = "Всего" + ЗначениеВалюты;
КонецЕсли;
Такой подход позволяет динамически модифицировать заголовок поля в самой схеме компоновки непосредственно перед выводом результата пользователю.