Прайс лист с картинками для УТ11 (УФ, добавление логотипа и свободных текстовых полей)








Развитие отчета http://infostart.ru/public/177876/ добавлением текстовых полей и логотипа в заголовок формы СКД, без изменения основной конфигурации.

История: отчет создание, которого описано в Картинка в таблице СКД (управляемое приложение) на примере УТ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 Comments

  1. admrez

    Будет ли работать в 11.1.4.11 или в УТ 11.1.5.8 ? Мало стармани для эксперимента ((

    Reply ↓
  2. mxm2

    (1) admrez, не проверял, но Вы можете сами все сделать на основании стандартного прайса (ибо здесь все наглядно описано). Или можете скачать http://infostart.ru/public/178422 — тут есть версия на 100% работающая в УТ_11_1_4_11

    Reply ↓
  3. welik

    Нет процедуры ВывестиЛоготип() и фyнкции ВернутьКоличествоКолонки()

    Спасибо за труд, очень полезно.

    Reply ↓
  4. Magomed-mallaev

    Ребята у меня версия УТ11.1.9.70 —

    «Ошибку выдает Метод объекта не обнаружен (ПолучитьПараметр)»

    Reply ↓
  5. Magomed-mallaev

    Reply ↓
  6. PYCTAM

    А как добавить чтобы отображалась группа номенклатуры?

    Reply ↓
  7. meb

    Добрый день!Почему версия отчета 1.001? не получается загрузить отчет

    Reply ↓
  8. kopeikin

    Скачал обработку. У меня выдает ошибку (Метод объекта не обнаружен (ПолучитьПараметр)). Дайте знать что за ошибка и как с ней бороться.

    Reply ↓
  9. kopeikin

    У меня версия УТ 8.3.5.2237 для РБ.

    Reply ↓
  10. Nikovit

    Тоже не работает УТ 11.1.10.185

    Reply ↓
  11. MasteR87

    Кто нибудь решил проблему с ошибкой Метод объекта не обнаружен (ПолучитьПараметр)

    Релиз Управление торговлей, редакция 11.1 (11.1.10.199), Отпишитесь кто решил пожалуйста

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *