История: отчет создание, которого описано в Картинка в таблице СКД (управляемое приложение) на примере УТ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 (логотип, картинки товаров, свободные текстовые поля в заголовке, отбор по остаткам), правда без подробного описания процесса изменения… но там изменений минимум.
Будет ли работать в 11.1.4.11 или в УТ 11.1.5.8 ? Мало стармани для эксперимента ((
(1) admrez, не проверял, но Вы можете сами все сделать на основании стандартного прайса (ибо здесь все наглядно описано). Или можете скачатьhttp://infostart.ru/public/178422 — тут есть версия на 100% работающая в УТ_11_1_4_11
Нет процедуры ВывестиЛоготип() и фyнкции ВернутьКоличествоКолонки()
Спасибо за труд, очень полезно.
Ребята у меня версия УТ11.1.9.70 —
«Ошибку выдает Метод объекта не обнаружен (ПолучитьПараметр)»
А как добавить чтобы отображалась группа номенклатуры?
Добрый день!Почему версия отчета 1.001? не получается загрузить отчет
Скачал обработку. У меня выдает ошибку (Метод объекта не обнаружен (ПолучитьПараметр)). Дайте знать что за ошибка и как с ней бороться.
У меня версия УТ 8.3.5.2237 для РБ.
Тоже не работает УТ 11.1.10.185
Кто нибудь решил проблему с ошибкой Метод объекта не обнаружен (ПолучитьПараметр)
Релиз Управление торговлей, редакция 11.1 (11.1.10.199), Отпишитесь кто решил пожалуйста