Позволяет выводить все изображения имеющиеся у номенклатуры.
Текст модуля:
перем РисТекст;
перем Номенклатура;
перем НетФото;
перем НомерКартинки;
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ВысотаКартинкиПарамент = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных(«ВысотаКартинки»));
ВысотаКартинкиПарамент.Использование = ИСТИНА;
ВысотаКартинки = ВысотаКартинкиПарамент.Значение;
ШиринаКартинкиПарамент = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных(«ШиринаКартинки»));
ШиринаКартинкиПарамент.Использование = ИСТИНА;
ШиринаКартинки = ШиринаКартинкиПарамент.Значение;
ВыводитьКартинкуПараметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных(«ВыводитьКартинку»));
ВыводитьКартинку = ВыводитьКартинкуПараметр.Использование;
ВыводитьВсеКартинкиПараметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных(«ВыводитьВсеКартинки»));
ВыводитьВсеКартинки = ВыводитьВсеКартинкиПараметр.Использование;
ВсегоПолейОтчета = КомпоновщикНастроек.Настройки.Выбор.Элементы.Получить(ИСТИНА);
ИспПоля = КомпоновщикНастроек.Настройки.Выбор.Элементы.Количество();
КолонокВОтчете = ИспПоля;
ПолеПоКоторомуНеобходимоПолучитьЗначение = «Номенклатура»;
ПроцессорВывода.НачатьВывод();
Пока истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
Если ЭлементРезультата = Неопределено Тогда
прервать;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
ЗначениеВыводимыхДанных = Неопределено;
Для каждого ЗначениеПараметра из ЭлементРезультата.ЗначенияПараметров Цикл
Если ТипЗнч(ЗначениеПараметра.Значение) = Тип(«ИдентификаторРасшифровкиКомпоновкиДанных») Тогда
ПоляРасшифровки = ДанныеРасшифровки.Элементы[ЗначениеПараметра.Значение].ПолучитьПоля();
Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
Если ПолеРасшифровки.Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
ЗначениеВыводимыхДанных = ПолеРасшифровки.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ВыводитьКартинку тогда
Номенклатура = ЗначениеВыводимыхДанных.Ссылка;
ДокументРезультат.Область(2,3).ШиринаКолонки = ШиринаКартинки;
Если ЗначениеЗаполнено(ЗначениеВыводимыхДанных) И НЕ ЗначениеВыводимыхДанных.ЭтоГруппа Тогда
ТекущаяСтрока = Строка(ДокументРезультат.ВысотаТаблицы);
Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рис.Гиперссылка = Истина;
//Рис.ЦветФона = ЦветаСтиля.ЦветЛинииОтчета;
Рис.ЦветЛинии = ЦветаСтиля.ЦветЛинииОтчета;
//Рис.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
//Рис.ГраницаСверху = Ложь;
//Рис.ГраницаСлева = Ложь;
//Рис.ГраницаСправа = Ложь;
//Рис.ГраницаСнизу = Ложь;
//Рис.Верх = 10;
//Рис.Высота = ВысотаКартинки/2;
//Рис.Ширина = ВысотаКартинки/3;
//Рис.Лево = 10;
Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
Индекс = ДокументРезультат.Рисунки.Индекс(Рис);
Если ЗначениеВыводимыхДанных.ЭтоГруппа Тогда
Продолжить;
Иначе
Попытка
Рис.Расшифровка = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
НетФото = 2;
ДокументРезультат.Рисунки[Индекс].Картинка = ЗначениеВыводимыхДанных.ОсновноеИзображение.Хранилище.Получить();
Исключение Сообщить(«нет картинки у артикула » + Строка(ЗначениеВыводимыхДанных.Артикул));
ДокументРезультат.Рисунки[Индекс].Картинка = БиблиотекаКартинок.Важно;
НетФото = 1;
КонецПопытки;
КонецЕсли;
ОбластьДляКартинки = ДокументРезультат.НайтиТекст(«%Фото%»);
Если ОбластьДляКартинки <> Неопределено Тогда
КоличествоКолонок = ДокументРезультат.ШиринаТаблицы;
КолонкаКартинка = Сред(ОбластьДляКартинки.Имя, Найти(ОбластьДляКартинки.Имя, «C») + 1, СтрДлина(ОбластьДляКартинки.Имя) — Найти(ОбластьДляКартинки.Имя, «C»));
НомерКартинки = 0;
//Картинки
Если ВыводитьВсеКартинки тогда
ПоследняяКолонка = Строка(ЭлементРезультата.ЗначенияПараметров.Количество());
ОсновноеИзображение = ЗначениеВыводимыхДанных.ОсновноеИзображение;
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ХранилищеДополнительнойИнформации.Хранилище
|ИЗ
| Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
|ГДЕ
| ХранилищеДополнительнойИнформации.Объект.Ссылка = &Номенклатура
| И ХранилищеДополнительнойИнформации.ВидДанных = &ВидДанных
| И ХранилищеДополнительнойИнформации.Ссылка <> &ОсновноеИзображение»;
Запрос.УстановитьПараметр(«ВидДанных», ВидДанных);
Запрос.УстановитьПараметр(«Номенклатура», Номенклатура);
Запрос.УстановитьПараметр(«ОсновноеИзображение», ОсновноеИзображение);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
КоличествоКартинок = ВыборкаДетальныеЗаписи.Количество();
Сообщить(Строка(ЭлементРезультата.ЗначенияПараметров.Количество()/2)+ » — активных поля(ей) в отчете, у артикула — «+Номенклатура.Артикул+»-«+КоличествоКартинок+ «-картинок(а,и)»);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Попытка
Если ВыборкаДетальныеЗаписи.Хранилище <> Неопределено тогда
НомерКартинки = НомерКартинки+1;
ОбластьВсехКартинок = ДокументРезультат.Область(ТекущаяСтрока,ЭлементРезультата.ЗначенияПараметров.Количество()/2-1+НомерКартинки);
РисДоп = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисДоп.Гиперссылка = Истина;
РисДоп.Расшифровка = ВыборкаДетальныеЗаписи.Хранилище.Получить();
РисДоп.ЦветЛинии = ЦветаСтиля.ЦветЛинииОтчета;
РисДоп.РазмерКартинки = РазмерКартинки.Пропорционально;
ИндексДоп = ДокументРезультат.Рисунки.Индекс(РисДоп);
ДокументРезультат.Область(ТекущаяСтрока,ЭлементРезультата.ЗначенияПараметров.Количество()/2-1+НомерКартинки).ШиринаКолонки = ШиринаКартинки;
ДокументРезультат.Рисунки[ИндексДоп].Картинка = ВыборкаДетальныеЗаписи.Хранилище.Получить();
ДокументРезультат.Рисунки[ИндексДоп].Расположить(ОбластьВсехКартинок);
КонецЕсли;
Исключение
КонецПопытки;
КонецЦикла;
КонецЕсли;
// Картинки
Если НетФото = 2 тогда
//ДокументРезультат.Область(ТекущаяСтрока,КолонкаКартинка).ШиринаКолонки = ШиринаКартинки; // не работает
ДокументРезультат.Область(ТекущаяСтрока,КолонкаКартинка).ВысотаСтроки = ВысотаКартинки;
иначе
ДокументРезультат.Область(ТекущаяСтрока,КолонкаКартинка).ВысотаСтроки = 15;
КонецЕсли;
ДокументРезультат.Рисунки[Индекс].Расположить(ОбластьДляКартинки);
//ОбластьДляКартинки.Текст = РисТекст;
ОбластьДляКартинки.Текст = Номенклатура.Комментарий;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
Доброго время суток, потребовалось вывести все изображения номенклатуры, посмотрел публикациюhttp://infostart.ru/public/95442/ , поискал в интернете ничего подходящего (готового) не нашел и слепил из того что было. Сыровата, но у меня работает. Не смог программно установить ширину колонки для основного изображения, но для других работает (выведено в параметры).
Перейти к публикации
Код не очень аккуратный: есть неиспользуемые переменные и условия, в которые никогда не попадаем. Но идея в принципе понятна, вполне возможно придется воспользоваться наработкой.
Огромное спасибо на досуге нужно будет посмотреть =) хорошая штучка =)
Молодец автор, пригодилось +1