СКД. Отчеты с картинками

0. YPermitin 9153 22.09.19 08:43 Сейчас в теме
Решение популярных кейсов с картинками в отчетах на СКД.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. rpgshnik 2219 26.09.19 05:35 Сейчас в теме
Дельная статья и собрано в одном месте. Подача материала как всегда хорошая, лови ⭐
pivovr; Free1CforAll; VVi3ard; rovenko.n; jaroslav.h; wowik; user1227864; МимохожийОднако; VIA_1C; YPermitin; +10 Ответить
2. YPermitin 9153 26.09.19 06:22 Сейчас в теме
3. ZloyProger 8 26.09.19 08:54 Сейчас в теме
(0) Автор пеши есчо)) Как всегда отличная подача и материал интересный, лови заслуженный плюс.
VVi3ard; YPermitin; +2 Ответить
4. YPermitin 9153 26.09.19 08:56 Сейчас в теме
(3) хммм, и правда. Возможно забыл что-то, перепроверю сегодня :)

Спасибо )
5. ZloyProger 8 26.09.19 08:57 Сейчас в теме
(4) Да я отредактировал уже :-(, там же в процедуре получения изображения проверка и возврат пустой картинки если не тот тип) Поспешишь - людей насмешишь)
6. YPermitin 9153 26.09.19 08:59 Сейчас в теме
(5) очепятался по полной :)
34. work.sable 21 10.06.20 06:03 Сейчас в теме
(0)
https://forum.infostart.ru/forum9/topic242540/
Есть вот такая проблема при формировании отчета по кейсу №2. Есть идеи в чем дело?
7. glek 112 26.09.19 09:10 Сейчас в теме
Классная статья. Утаскиваю в закладки
8. makc2k 94 26.09.19 10:05 Сейчас в теме
Можно выводить картинки "при компоновке" анализируя значение элемента КД

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
		
	Компоновщик = новый КомпоновщикМакетаКомпоновкиДанных;
	Настройки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
	МакетКомпоновки = Компоновщик.Выполнить(СхемаКомпоновкиДанных,Настройки);
	
	ПроцессорКД = новый ПроцессорКомпоновкиДанных;
	ПроцессорКД.Инициализировать(МакетКомпоновки);
	
	ПроцессорВывода = новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	ПроцессорВывода.НачатьВывод();
	
	Пока Истина Цикл
		
		ЕлементРКД = ПроцессорКД.Следующий();
		
		Если ЕлементРКД = Неопределено Тогда
			Прервать;
		КонецЕсли;
		
		Рисунки = Новый Соответствие;
		
		// 1. Собираем рисунки
		
		Если ЕлементРКД.ЗначенияПараметров.Количество()>0 Тогда
			Для каждого Параметр Из ЕлементРКД.ЗначенияПараметров Цикл
				Если ТипЗнч(Параметр.Значение) = Тип("ХранилищеЗначения") Тогда
					КартинкаТД = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
					КартинкаТД.Картинка = новый Картинка(Параметр.Значение.Получить());
					КартинкаТД.РазмерКартинки = РазмерКартинки.Пропорционально;
					
					Рисунки.Вставить(Параметр.Имя,КартинкаТД);
					
					Параметр.Значение = Параметр.Имя;
					
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		ПроцессорВывода.ВывестиЭлемент(ЕлементРКД);
		
		// 2. Вывести рисунки в табличный документ
		
		Для каждого Рисунок Из Рисунки Цикл
			
			ШиринаСтроки = ДокументРезультат.ШиринаТаблицы;
			
			Для Колонка = 1 По  ШиринаСтроки Цикл
				ВысотаТаб = СтрЗаменить(ДокументРезультат.ВысотаТаблицы, Символы.НПП, "");
				ОбластьВывода = ДокументРезультат.Область("R" + ВысотаТаб + "C" + Колонка);
				Если ОбластьВывода.Текст = Рисунок.Ключ Тогда
					Прервать;
				КонецЕсли;
			КонецЦикла;
			
			Рисунок.Значение.Расположить(ОбластьВывода);
			ОбластьВывода.ВысотаСтроки = 100;
		КонецЦикла;
	КонецЦикла;
	
	ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
Показать
user811769; alevnev; acanta; YPermitin; A_Max; +5 Ответить
9. YPermitin 9153 26.09.19 11:58 Сейчас в теме
(8) супер вариант!

Если не будете против, то через пару дней этот вариант добавлю в конце публикации с упоминанием Вашего авторства.
user811769; +1 Ответить
17. makc2k 94 26.09.19 17:13 Сейчас в теме
(9) Конечно нет, тем более сам его унес из УЦ №1 )))
10. ids79 5624 26.09.19 12:10 Сейчас в теме
Спасибо за статью!
Хорошие новости! Платформа 1С начиная с версии 8.3.14 (причем режим совместимости тоже должен быть 8.3.14 и выше) позволяет штатными средствами выводить картинки в отчетах на СКД

Здорово, не знал. Ну наконец-то сделали )).
acanta; Yashazz; YPermitin; +3 Ответить
11. YPermitin 9153 26.09.19 12:15 Сейчас в теме
(10) я сам сначала в шоке был :)
12. Den75Ch 26.09.19 12:37 Сейчас в теме
13. AlX0id 26.09.19 14:02 Сейчас в теме
В запросе получить двоичные данные картинок в отдельном поле.

Это, конечно, хорошо.. Но как тогда быть вот с этим?
Если мы будем получать изображения из регистра двоичных данных файлов в одном запросе, то очень велика вероятность получить ошибку "Недостаточно памяти", если размер выбираемых изображений будет очень большим.
YPermitin; +1 Ответить
14. YPermitin 9153 26.09.19 14:21 Сейчас в теме
(13) подходить разумно:)

То есть:
1. Не хранить картинки для отчетов по 2.5 МБ
2. Ее формировать отчеты с выводом 1000 картинок. Все таки это больше какой-то точечный отчет.
3. Смириться и докупить железа :)
Федосеев; +1 Ответить
15. AlX0id 26.09.19 14:49 Сейчас в теме
(14)
Ну то есть 1сники чот сделали, но как это будет работать - хз )

По поводу смириться и докупить железа - еще не факт, возможно, просто расширить файл подкачки - ведь, если я правильно понимаю - если не хватает памяти реальной - она свопается на диск. Уж такого чтобы вообще "Не хватает памяти" - это либо 32битная система должна быть или же сильно маленький своп-файл..
YPermitin; +1 Ответить
16. YPermitin 9153 26.09.19 15:05 Сейчас в теме
(15) на маленьких отчетах у меня нареканий нет. На больших не смотрел.

По нехватке памяти там сложнее. А на клиент-сервере еще вопросы с размером сеансовых данных будут и др. Вообщем надо тестить :)
30. Федосеев 12.02.20 02:53 Сейчас в теме
(15) Картинки при выводе на экран отжирают оперативку, так что хоть 1с хоть не 1с, я файлы картинок с диска тяну оперативка уходит только в путь. Так что как вариант можно взять клиентскую машину и впихать в нее 256 гигов оперативы.
29. Федосеев 12.02.20 02:50 Сейчас в теме
(14) Да есть многие ХОЧУКИ, которые хотят более 1000 позиций. Этакий прайс с картинками для себя. По тому что ассортимент большой помнить трудно а по картинкам сразу понятно. Как правило его печатают и забирают с собой. Как вариант формировать прайс по частям. На 4 гиговой машине при формировании прайса более 300 строк 1ска падает по нехватки памяти. на 16 гиговой полет нормальный.
21. RocKeR_13 819 27.09.19 11:45 Сейчас в теме
(13) Еще на прошлых платформах, когда не добавили эту фишку, делал отчет по методу, описанном в сообщении (8). Так вот, отчет выводился, в котором было картинок на 6 Гб))) При этом временные файлы раздувались примерно до 18-20 Гб, но отчет формировался. На криво настроенной виртуалке время формирования приближалось к 5 часам))) Но тем не менее. Не думаю, что использование нового функционала платформы будет хуже)
YPermitin; +1 Ответить
22. YPermitin 9153 27.09.19 11:47 Сейчас в теме
23. RocKeR_13 819 27.09.19 11:52 Сейчас в теме
(22) ну да, сеть магазинов одежды и обуви) Там картинки просто "жирные". На файловом варианте 1С пробовал этот же отчет на базе другого клиента - 800 строк с картинками выводились примерно минут 7-10
24. nsirotkin@mail.ru 72 30.09.19 08:33 Сейчас в теме
(23) Табличный документ получается сильно легче, а на экране или печати разницы не видно

Функция ВывестиИзображениеВОбластиТД(ДанныеКартинки, ТД, Область)
     Изображение = ТД.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
     Изображение.РазмерКартинки = РазмерКартинки.Пропорционально;
     Индекс = ТД.Рисунки.Индекс(Изображение);
     //ТД.Рисунки[Индекс].Картинка = Новый Картинка(ДанныеКартинки, Истина);
	 ////////////////////////////////////////////////////////////­////////////////////
	 Картинка = Новый Картинка(ДанныеКартинки, Истина);
	 Размер = ДанныеКартинки.Размер();
	 МаксимальныйРазмер = 40000;
	 Если Размер > МаксимальныйРазмер Тогда
	    ОбрабатываемаяКартинка = Новый ОбрабатываемаяКартинка(Картинка);
		Попытка
			Если Картинка.ПлотностьПоВертикали() >= 150 Тогда
				ОбрабатываемаяКартинка.УстановитьПлотность(72, 72);
			КонецЕсли; 
		Исключение
			
		КонецПопытки;
	    //ОбрабатываемаяКартинка.Масштабировать(Макс(10,Окр(100*МаксимальныйРазмер/Размер)));
	    Ширина = Картинка.Ширина();
	    МаксимальнаяШирина = 320;
	    Если Ширина > МаксимальнаяШирина Тогда
	    	ОбрабатываемаяКартинка.УстановитьРазмер(МаксимальнаяШирина,Окр(Картинка.Высота()/Ширина*МаксимальнаяШирина));
	    КонецЕсли; 
	    Картинка = ОбрабатываемаяКартинка.ПолучитьКартинку();
	 КонецЕсли; 
	 ТД.Рисунки[Индекс].Картинка = Картинка;
	 ////////////////////////////////////////////////////////////­////////////////////
	  
     ТД.Рисунки[Индекс].Расположить(Область);
     Возврат ТД.Рисунки[Индекс]; 
КонецФункции
Показать
smwed; starik-2005; +2 Ответить
18. Yashazz 3331 26.09.19 17:21 Сейчас в теме
Кстати в новых релизах хвалятся, что ещё более будут продвигать вопрос картинок в СКД. В условном оформлении там и прочая, даже на Зазеркалье кажись было.
YPermitin; +1 Ответить
19. YPermitin 9153 26.09.19 18:29 Сейчас в теме
(18) про Зазеркалье не знал. Как-то упустил из виду.
20. pan_alex 27.09.19 11:15 Сейчас в теме
25. ByNiko1984 11.12.19 11:16 Сейчас в теме
(0) статьи отличная. Плюс поставить не могу, говорит 5 минут назад ставил. А я только авторизовался.

Пишите еще!
26. ByNiko1984 11.12.19 11:20 Сейчас в теме
(25) а нет, смог поставить. Магия....
27. Cyberhawk 120 11.01.20 14:36 Сейчас в теме
метод "Выполнить" процессора вывода
Вывести
28. user_2010 499 31.01.20 16:17 Сейчас в теме
можно ли вывести картинку в качестве фона и на нее вывести текст отчета?
Спасибо!
31. Antoska 13 18.03.20 13:28 Сейчас в теме
Лично мне понадобилось добавить в функцию ПолучитьИзображение() проверку на пустую ссылку:
Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") И Не ПрисоединенныйФайл.Пустая() Тогда

Спасибо за очень удобное решение.
32. starik-2005 2180 13.04.20 17:50 Сейчас в теме
(0)
Конечно, есть и некоторые ограничения. Например, картинку в шапку Вы так не выведите, но для решения большинства задач работает отлично.
Ну если постараться, то можно. Все дело в волшебных таблицах.
33. mikl79 109 16.05.20 08:37 Сейчас в теме
Спасибо большое автору воспользовался и сделал отчет по товарам с картинками.
Так же попробовал вариант из ответа 8, спасибо makc2k, тоже заработало с небольшими правками.
По времени оба варианта примерно одинаково отработали.

У нас картинки хранятся в каталогах (томах) на диске, поэтому платформенный вариант видимо не подходит.
35. work.sable 21 10.06.20 06:03 Сейчас в теме
(0)
https://forum.infostart.ru/forum9/topic242540/
Есть вот такая проблема при формировании отчета по кейсу №2. Есть идеи в чем дело?
Оставьте свое сообщение
Вопросы с вознаграждением