8.х Вывод картинок через построитель отчета

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем andyid, 30 ноя 2010.

  1. TopicStarter Overlay
    andyid
    Offline

    andyid Новичок в 1С

    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Симпатии:
    1
    Баллы:
    4
    Всем доброго времени суток. Возникла необходимость в 1С Управление торговлей в отчете "Ведомость товаров на складах" выводить картинки из номенклатуры, скажем в первый столбец. Необходимые данные в номенклатурной карточки уже имеются, а вот как вывести ума не приложу, потому что отчет формируется с помощью построителя, макет формируется автоматически... Кто чем может, помогите:)))
  2. TopicStarter Overlay
    andyid
    Offline

    andyid Новичок в 1С

    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Симпатии:
    1
    Баллы:
    4
    Спасибо за помощь, я сам разобрался! Пришлось обмануть систему)))
  3. BVB_berserk
    Offline

    BVB_berserk Опытный в 1С

    Регистрация:
    30 янв 2009
    Сообщения:
    162
    Симпатии:
    0
    Баллы:
    26
    Ну так поделись решением-то :)

    Я городил огород - рисовал сам макет и писал обработчик вывода.
  4. TopicStarter Overlay
    andyid
    Offline

    andyid Новичок в 1С

    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Симпатии:
    1
    Баллы:
    4
    Я поначалу так же хотел делать, т.к. построитель отчета работает следующим образом:

    вся суть вывода сводится к выполнению нескольких строчек:

    Код:
    //...
    //генерируется автоматический макет
    ПостроительОтчета.Макет = Неопределено;
    
    //...
    
    //выполняется сам запрос, с учетом всех настроек
    ПостроительОтчета.Выполнить(); 	
    
    //...
    
    //выводится результат в заранее сгенерированный автоматически макет
    ПостроительОтчета.Вывести(ТабличныйДокумент); 
    //...
    
    Отсюда напрашивается решение: внести изменения в сгенерированный автоматически макет, т.е. добавить область с картинками и вместо
    Код:
    ПостроительОтчета.Вывести(ТабличныйДокумент);
    
    писать обработчик по выводу каждой строчки результата, что очень сложно, т.к. группировок может быть очень много и представление самих колонок данных так же может быть различным. Но главная цель, чтобы сохранился весь функционал построителя отчета, без любых ограничений.

    Еще стоит отметить, что бы в поле табличного документа вывести картинку, которая находится в реквизите "ХранилищеЗначения" необходимо использовать конструкцию, например:

    Код:
    Номенклатура.ОсновноеИзображение.Хранилище.Получить();
    
    Решение такое:)

    База: Управление торговлей редакция 10.3
    Отчет: ВедомостьПартииТоваровНаСкладах

    В справочнике номенклатура есть реквизит "Основное изображение", которое является элементом справочника "ХранилищеДополнительнойИнформации", в котором хранится разного рода информация в том числе и картинки. Для картинок данные будут такими:

    Код:
    ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
    
    и в реквизите "Хранилище" хранится само изображение.

    Далее, не трогаем построитель отчета совсем, пусть выводит всю информацию как выводит... Идея сводится к тому, что бы уже готовое табличное поле менять!!! Единственное в настройках построителя перед формированием делаем, что бы выводился реквизит "Основное изображение" в отдельной колонке и перед группировками (закладка: дополнительные поля) В эту колонку как раз и будем выводить картинки, причем выводить картинки, будем только для группировки "Номенклатура".

    Далее, пишем обработчик по табличному документу, находим колонку "Основное изображение" и если группировка номенклатура, то выводим картинку. К картинке обращаемся через расшифровку (она является структурой, которая содержит ссылку на номенклатуру). Еще меняем размеры ячейки, для того, что бы картинка была читаемой и все... и налаждаемся отчетом с фотографиями!!!

    код обработчика:

    Код:
    ОбластьКолонкиИзображения = ТабличныйДокумент.НайтиТекст("Основное изображение",,ТабличныйДокумент.Области.Найти("ШапкаТаблицы"),,Истина,,Ложь);
    Если ОбластьКолонкиИзображения <> Неопределено Тогда
    СтолбецИзображения	= Число(Прав(ОбластьКолонкиИзображения.Имя,СтрДлина(ОбластьКолонкиИзображения.Имя)-Найти(ОбластьКолонкиИзображения.Имя,"C")));
    СтрокаИзображения	= Число(Сред(ОбластьКолонкиИзображения.Имя,2,Найти(ОбластьКолонкиИзображения.Имя,"C")-2))+2;		
    
    ТекНоменклатура = Неопределено;
    
    Для ном = СтрокаИзображения По ТабличныйДокумент.ВысотаТаблицы <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл			</span>
    ТекОбласть	= ТабличныйДокумент.Область("R"+Строка(ном)+"C"+Строка(СтолбецИзображения));
    Расшифровка	= ТекОбласть.Расшифровка;
    
    Если ТипЗнч(Расшифровка)=Тип("Структура") Тогда
    Номенклатура = Неопределено;
    
    Если Расшифровка.Свойство("Номенклатура", Номенклатура) <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда				</span>
    
    Если ТекНоменклатура <> Номенклатура Тогда
    ТекНоменклатура = Номенклатура;
    ФлагВывестиКартинку = Истина;
    Иначе
    ФлагВывестиКартинку = Ложь;	
    КонецЕсли;			
    
    Если ФлагВывестиКартинку Тогда
    
    ТекОбласть.Текст	= "";
    ТекОбласть.ВысотаСтроки		= 150;
    ТекОбласть.ШиринаКолонки	= 30;
    
    Если Номенклатура.ОсновноеИзображение.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение Тогда
    Картинка		= Номенклатура.ОсновноеИзображение.Хранилище.Получить();						
    Рисунок			= ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    ИндексРисунка	= ТабличныйДокумент.Рисунки.Индекс(Рисунок);
    
    //Рисунок.Верх = 30;
    //Рисунок.Лево = 10;
    //Рисунок.Высота = 10;
    //Рисунок.Ширина = 10;
    
    Если Картинка <> Неопределено Тогда
    
    СтруктураКартинки = Новый Структура;
    СтруктураКартинки.Вставить("Номенклатура",Номенклатура);
    СтруктураКартинки.Вставить("ОсновноеИзображение",Номенклатура.ОсновноеИзображение);
    СтруктураКартинки.Вставить("ЭтоКартинка",Истина);
    
    ТабличныйДокумент.Рисунки[ИндексРисунка].Картинка = Картинка; //Рисунок.Картинка = Картинка;							
    Рисунок.РазмерКартинки = РазмерКартинки.Авторазмер;
    ТабличныйДокумент.Рисунки[ИндексРисунка].ГиперСсылка = Истина;
    ТабличныйДокумент.Рисунки[ИндексРисунка].Расшифровка = СтруктураКартинки;
    КонецЕсли;				
    
    ТабличныйДокумент.Рисунки[ИндексРисунка].Расположить(ТекОбласть);
    
    КонецЕсли;	
    
    КонецЕсли;						
    
    КонецЕсли;	
    
    КонецЕсли;			
    
    КонецЦикла;
    
    КонецЕсли;
    
    Alex_fess нравится это.
  5. Alex_fess
    Offline

    Alex_fess Опытный в 1С

    Регистрация:
    23 мар 2011
    Сообщения:
    256
    Симпатии:
    7
    Баллы:
    29
    Спасибо. Очень помогло!
    Последнее редактирование: 5 авг 2014

Поделиться этой страницей