История: отчет создание, которого описано в Картинка в таблице СКД (управляемое приложение) на примере УТ11, простое решение "в лоб" или легкая модификация стандартного отчета Прайс-Лист понравился заказчику, но чуть позже захотелось большего, а именно: хотелось добавить некоторое количество сворачиваемых группировкой текстовых полей и логотип в заголовке отчета (причем логотип хотелось добавлять по пути файла с диска), чтобы прямо в таком виде можно было отправлять покупателю.
Как говорится "нет ничего невозможного" (с). Приступим:
Сначала модифицируем Основную схему компоновки данных исходного отчета, добавим нужные нам параметры:

Укажем их в качестве пользовательских настроек:

Добавим строковый реквизит отчета АдресЛоготипа для передачи через него адреса хранилища во временном хранилище:

Добавим управляемую ФормуОтчета,
Реквизит АдресЛоготипа не размещаем на форме:

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

Для элемента формы КомпоновщикНастроекПользовательскиеНастройки зададим действие ПриАктивизацииЯчейки:

и наполним процедуру (которая включит отображение кнопки выбора для настройки "Путь к логотипу"):
&НаКлиенте
Процедура КомпоновщикНастроекПользовательскиеНастройкиПриАктивизацииЯчейки(Элемент)
    Если Не Элемент.ТекущиеДанные = Неопределено Тогда
        Элементы.КомпоновщикНастроекПользовательскиеНастройкиЗначение.КнопкаВыбора = ?(Элемент.ТекущиеДанные.Настройка = "Путь к логотипу", Истина, Неопределено);
    КонецЕсли; 
КонецПроцедуры
Для элемента формы КомпоновщикНастроекПользовательскиеНастройкиЗначение зададим действие НачалоВыбора:

и наполним процедуру (которая для настройки "Путь к логотипу", умеет вызывать диалог выбора файла и при успешном выборе загружает его во временное хранилище заполняя ревкизит отчета АдресЛоготипа):
&НаКлиенте 
Процедура КомпоновщикНастроекПользовательскиеНастройкиЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Если Элемент.Родитель.Родитель.ТекущиеДанные.Настройка = "Путь к логотипу" Тогда   
        Настройка = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПутьКЛоготипу").ИдентификаторПользовательскойНастройки);   
        Режим = РежимДиалогаВыбораФайла.Открытие;   
        ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);   
        ДиалогОткрытияФайла.ПолноеИмяФайла = Настройка.Значение;   
        Текст = "ru = ""Логотип""; en = ""Logo""";   
        Фильтр = НСтр(Текст)+"(*.*)|*.*";
        ДиалогОткрытияФайла.Фильтр = Фильтр;   
        ДиалогОткрытияФайла.МножественныйВыбор = Ложь;   
        ДиалогОткрытияФайла.Заголовок = "Выберите файл логотипа";    
        Если ДиалогОткрытияФайла.Выбрать() Тогда    
            Настройка.Значение = ДиалогОткрытияФайла.ПолноеИмяФайла;    
            Настройка.Использование = Истина;    
            Элементы.КомпоновщикНастроекПользовательскиеНастройки.ТекущийЭлемент = Элементы.КомпоновщикНастроекПользовательскиеНастройкиНастройка;     
            ОбновитьОтображениеДанных();    
            Элементы.КомпоновщикНастроекПользовательскиеНастройки.ТекущийЭлемент = Элементы.КомпоновщикНастроекПользовательскиеНастройкиЗначение;
            Отчет.АдресЛоготипа = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла), Отчет.АдресЛоготипа);
       КонецЕсли;           
       СтандартнаяОбработка = Ложь;  
    КонецЕсли;  
КонецПроцедуры
Теперь наша форма принимает новые параметры, а при выборе файла логотипа даже сохраняет его во внутреннее хранилище, для дальнейшего использования при компоновке отчета.
Дорабатываем процедуру модуля объекта ПриКомпоновкеРезультата, после строки ДокументРезультат.Очистить(); добавим вызов:
ВывестиСамопальныйЗаголовок(ДокументРезультат, КомпоновщикНастроек);
И пишем новую процедуру: ВывестиСамопальныйЗаголовок (процедура читает параметры компоновки и выводит их предварительно сгруппировав, она же выводит логотип):
Процедура ВывестиСамопальныйЗаголовок(ДокументРезультат, КомпоновщикНастроек)
    ДокументРезультат.НачатьАвтогруппировкуСтрок();    
    КоличествоКолонок = ВернутьКоличествоКолонки(КомпоновщикНастроек.Настройки.Выбор.Элементы);  
    СекцияЗаголовка = ДокументРезультат.ПолучитьОбласть(1, , 1);
    ДокументРезультат.Вывести(СекцияЗаголовка, 1, "ГруппаЗаголовка", Истина);
    Область = ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы, 1);  
    Область.ВысотаСтроки = 5; 
    ТекстЗаголовка = ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "Заголовок");  
    Если ЗначениеЗаполнено(ТекстЗаголовка) Тогда   
        Область = СекцияЗаголовка.Область("R1C1");   
        Область.Шрифт = Новый Шрифт(Область.Шрифт, , 13, Истина);   
        Область.Текст = ТекстЗаголовка;   
        ДокументРезультат.Вывести(СекцияЗаголовка, 2, "ЭлементЗаголовка", Истина);  
    КонецЕсли;    
    Компания = ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "Компания");  
    Если ЗначениеЗаполнено(Компания) Тогда   
        Область = СекцияЗаголовка.Область("R1C1");   
        Область.Шрифт = Новый Шрифт(Область.Шрифт, , 10, Истина);   
        Область.Текст = Компания;   
        ДокументРезультат.Вывести(СекцияЗаголовка, 2, "ЭлементЗаголовка", Истина);  
    КонецЕсли;    
    Адрес = ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "Адрес");  
    Если ЗначениеЗаполнено(Адрес) Тогда   
        Область = СекцияЗаголовка.Область("R1C1");   
        Область.Шрифт = Новый Шрифт(Область.Шрифт, , 9);   
        Область.Текст = Адрес;   
        ДокументРезультат.Вывести(СекцияЗаголовка, 2, "ЭлементЗаголовка", Истина);  
    КонецЕсли;    
    Телефон = ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "Телефон");   
    Если ЗначениеЗаполнено(Телефон) Тогда   
        Область = СекцияЗаголовка.Область("R1C1");   
        Область.Шрифт = Новый Шрифт(Область.Шрифт, , 9);   
        Область.Текст = Телефон;   
        ДокументРезультат.Вывести(СекцияЗаголовка, 2, "ЭлементЗаголовка", Истина);  
    КонецЕсли;     
    НомерКолонкиЛоготипа = ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "НомерКолонкиЛоготипа", 4);
    Если ЗначениеЗаполнено(АдресЛоготипа) Тогда   
        Область = ДокументРезультат.Область(1, НомерКолонкиЛоготипа, ДокументРезультат.ВысотаТаблицы - 1, НомерКолонкиЛоготипа + 5);   
        ВывестиЛоготип(ДокументРезультат, АдресЛоготипа, Область);  
    КонецЕсли;    
    ДокументРезультат.ЗакончитьАвтогруппировкуСтрок();  
КонецПроцедуры
Отметим, что в модуле формы также присутствует процедура ПриОткрытии, которая при наличии строки в настройке ПутьКЛоготипу, поместит соответствующую информацию во временное хранилище, это необходимо учитывать и при автоматическом формировании отчета. Также отметим что если отчет запускается на разных компьютерах под одним и темже пользователем, то при задании абсолютного пути (с указанием диска конкретного компьютера), возможны ошибки чтения логотипа, т.к. в этом случае реальный путь к логотипу может отличатся от сохраненного на другом компьютере.
В результате сформированный отчет может принять такой вид:

Готовый отчет доступен к скачиванию.
ЗЫ: При передаче больших логотипов может наблюдаться замедление вывода отчета.
PS: Существует еще одна модификация данного отчета Прайс лист с картинками для УТ11 (логотип, картинки товаров, свободные текстовые поля в заголовке, отбор по остаткам), правда без подробного описания процесса изменения... но там изменений минимум.
Вступайте в нашу телеграмм-группу Инфостарт
 
                                 
                                 
                                 
                                 
                                 
                                 
                                 
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                    