Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 19:55

Картинка в СКД

Автор andryscha92, 28 ноя 2014, 12:18

0 Пользователей и 1 гость просматривают эту тему.

andryscha92

Здравствуйте! В рознице 1.0 имеется типовой отчет Прайс лист. Отчет на СКД выводится программным способом. Подскажите можно ли в отчет СКД вставить картинку для каждого товара?Кто сталкивался может?

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

andryscha92

Цитата: cska-fanat-kz от 28 ноя 2014, 12:21
Можно
хотелось бы на примере, или идею какую?

cska-fanat-kz

дописка на тему картинок - выделена "//+++"

Процедура ВывестиТиповойОтчет(ОтчетОбъект, Результат, ДанныеРасшифровки, ВыводВФормуОтчета = Истина, ВнешниеНаборыДанных = Неопределено, СвойМакетОформления = Неопределено) Экспорт

ОтчетОбъект.КомпоновщикНастроек.Восстановить();
Схема = ТиповыеОтчеты.ПолучитьСхемуКомпоновкиОбъекта(ОтчетОбъект);

//Сгенерируем макет компоновки данных при помощи компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

Попытка

//В качестве схемы компоновки будет выступать схема самого отчета
//В качестве настроек отчета - текущие настройки отчета
//Данные расшифровки будем помещать в ДанныеРасшифровки
Если ВыводВФормуОтчета Тогда
Если СвойМакетОформления<>Неопределено Тогда
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки, СвойМакетОформления);
Иначе
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
КонецЕсли;
ДополнитьМакетыМакетаКомпоновкиРасшифровкойРесурсов(МакетКомпоновки, ОтчетОбъект.КомпоновщикНастроек);
//Создадим и инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
Если ВнешниеНаборыДанных = Неопределено Тогда
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
Иначе
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
КонецЕсли;
Иначе

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

//Создадим и инициализируем процессор вывода результата
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

//Обозначим начало вывода
ПроцессорВывода.НачатьВывод();
Состояние(НСТР("ru='Если Вы хотите прервать вывод отчета, нажмите Ctrl+Break'"));

ТаблицаЗафиксирована = Не ВыводВФормуОтчета;

Результат.ФиксацияСверху = 0;
//Основной цикл вывода отчета
Пока Истина Цикл

ОбработкаПрерыванияПользователя();
//Получим следующий элемент результата компоновки
ЭлементРезультата = ПроцессорКомпоновки.Следующий();

Если ЭлементРезультата = Неопределено Тогда
//Следующий элемент не получен - заканчиваем цикл вывода
Прервать;

Иначе

// Зафиксируем шапку
Если Не ОтчетОбъект.РасширеннаяНастройка
   И Не ТаблицаЗафиксирована
  И ЭлементРезультата.ЗначенияПараметров.Количество() > 0
  И ТипЗнч(ОтчетОбъект.КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда
ТаблицаЗафиксирована = Истина;
Результат.ФиксацияСверху = Результат.ВысотаТаблицы;
КонецЕсли;

//+++
ЕстьРисунки = Новый Соответствие;

Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
    Для каждого Параметр Из ЭлементРезультата.ЗначенияПараметров Цикл

Если ТипЗнч(Параметр.Значение)=Тип("ХранилищеЗначения") Тогда

КартинкаТД = Результат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Попытка
КартинкаТД.Картинка = Параметр.Значение.Получить();//Новый Картинка(Параметр.Значение.Получить());
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КартинкаТД.РазмерКартинки = РазмерКартинки.Пропорционально;

ИмяКартинки = Сред(Параметр.Имя,2);
ЕстьРисунки.Вставить(ИмяКартинки,КартинкаТД);

Параметр.Значение = "[П"+ИмяКартинки+"]";
КонецЕсли;

КонецЦикла;
КонецЕсли;
//+++

//Элемент получен - выведем его при помощи процессора вывода
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

//+++
Для каждого Рисунок Из ЕстьРисунки Цикл

КолонокВсего = Результат.ШиринаТаблицы;

Для Колонка=1 По КолонокВсего Цикл

ОбластьВывода = Результат.Область("R"+Формат(Результат.ВысотаТаблицы,"ЧГ=0")+"C"+Формат(Колонка,"ЧГ=0"));
Если ОбластьВывода.Текст = "[П"+Рисунок.Ключ+"]" Тогда

Рисунок.Значение.Расположить(ОбластьВывода);
    ОбластьВывода.ВысотаСтроки = 40;
КонецЕсли;
                                                                                   
КонецЦикла;

КонецЦикла;
//+++

КонецЕсли;

КонецЦикла;

//Обозначем завершение вывода
ПроцессорВывода.ЗакончитьВывод();

Исключение
Вопрос("Отчет не сформирован!" + Символы.ПС + ПолучитьОписаниеРодительскойПричиныИнформацииОбОшибке(ИнформацияОбОшибке()), РежимДиалогаВопрос.ОК);
КонецПопытки;

КонецПроцедуры

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

andryscha92

Цитата: cska-fanat-kz от 28 ноя 2014, 12:55
дописка на тему картинок - выделена "//+++"

Процедура ВывестиТиповойОтчет(ОтчетОбъект, Результат, ДанныеРасшифровки, ВыводВФормуОтчета = Истина, ВнешниеНаборыДанных = Неопределено, СвойМакетОформления = Неопределено) Экспорт

ОтчетОбъект.КомпоновщикНастроек.Восстановить();
Схема = ТиповыеОтчеты.ПолучитьСхемуКомпоновкиОбъекта(ОтчетОбъект);

//Сгенерируем макет компоновки данных при помощи компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

Попытка

//В качестве схемы компоновки будет выступать схема самого отчета
//В качестве настроек отчета - текущие настройки отчета
//Данные расшифровки будем помещать в ДанныеРасшифровки
Если ВыводВФормуОтчета Тогда
Если СвойМакетОформления<>Неопределено Тогда
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки, СвойМакетОформления);
Иначе
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, ОтчетОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
КонецЕсли;
ДополнитьМакетыМакетаКомпоновкиРасшифровкойРесурсов(МакетКомпоновки, ОтчетОбъект.КомпоновщикНастроек);
//Создадим и инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
Если ВнешниеНаборыДанных = Неопределено Тогда
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
Иначе
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
КонецЕсли;
Иначе

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

//Создадим и инициализируем процессор вывода результата
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

//Обозначим начало вывода
ПроцессорВывода.НачатьВывод();
Состояние(НСТР("ru='Если Вы хотите прервать вывод отчета, нажмите Ctrl+Break'"));

ТаблицаЗафиксирована = Не ВыводВФормуОтчета;

Результат.ФиксацияСверху = 0;
//Основной цикл вывода отчета
Пока Истина Цикл

ОбработкаПрерыванияПользователя();
//Получим следующий элемент результата компоновки
ЭлементРезультата = ПроцессорКомпоновки.Следующий();

Если ЭлементРезультата = Неопределено Тогда
//Следующий элемент не получен - заканчиваем цикл вывода
Прервать;

Иначе

// Зафиксируем шапку
Если Не ОтчетОбъект.РасширеннаяНастройка
   И Не ТаблицаЗафиксирована
  И ЭлементРезультата.ЗначенияПараметров.Количество() > 0
  И ТипЗнч(ОтчетОбъект.КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда
ТаблицаЗафиксирована = Истина;
Результат.ФиксацияСверху = Результат.ВысотаТаблицы;
КонецЕсли;

//+++
ЕстьРисунки = Новый Соответствие;

Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
    Для каждого Параметр Из ЭлементРезультата.ЗначенияПараметров Цикл

Если ТипЗнч(Параметр.Значение)=Тип("ХранилищеЗначения") Тогда

КартинкаТД = Результат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Попытка
КартинкаТД.Картинка = Параметр.Значение.Получить();//Новый Картинка(Параметр.Значение.Получить());
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КартинкаТД.РазмерКартинки = РазмерКартинки.Пропорционально;

ИмяКартинки = Сред(Параметр.Имя,2);
ЕстьРисунки.Вставить(ИмяКартинки,КартинкаТД);

Параметр.Значение = "[П"+ИмяКартинки+"]";
КонецЕсли;

КонецЦикла;
КонецЕсли;
//+++

//Элемент получен - выведем его при помощи процессора вывода
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

//+++
Для каждого Рисунок Из ЕстьРисунки Цикл

КолонокВсего = Результат.ШиринаТаблицы;

Для Колонка=1 По КолонокВсего Цикл

ОбластьВывода = Результат.Область("R"+Формат(Результат.ВысотаТаблицы,"ЧГ=0")+"C"+Формат(Колонка,"ЧГ=0"));
Если ОбластьВывода.Текст = "[П"+Рисунок.Ключ+"]" Тогда

Рисунок.Значение.Расположить(ОбластьВывода);
    ОбластьВывода.ВысотаСтроки = 40;
КонецЕсли;
                                                                                   
КонецЦикла;

КонецЦикла;
//+++

КонецЕсли;

КонецЦикла;

//Обозначем завершение вывода
ПроцессорВывода.ЗакончитьВывод();

Исключение
Вопрос("Отчет не сформирован!" + Символы.ПС + ПолучитьОписаниеРодительскойПричиныИнформацииОбОшибке(ИнформацияОбОшибке()), РежимДиалогаВопрос.ОК);
КонецПопытки;

КонецПроцедуры


спасибо, буду разбираться и пробовать!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск