Прайс лист с картинками для УТ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 не будет опубликован. Обязательные поля помечены *