Отчет СКД с картинками, стандартными пользовательскими настройками (УТ 10.3)

18.04.15

Разработка - СКД

Ничего особенного... Публикация для тех, кто впервые столкнулся с такой задачей. Мой опыт и консолидация информации из инета в тему "СКД с картинками".
При компоновке отчета поле "Картинка" обладает всеми свойствами любого другого поля в отчете, в том числе выступать как уровень группировки - как это показано в примере.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
СКД с картинками
.erf 8,40Kb ver:a1
31 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

В данном случае требовался отчет по розничным складам. Вся нужная информация выбиралась из базы следующим запросом в схеме компановке данных:

ВЫБРАТЬ
ТоварыВРозницеОстатки.Склад,
ТоварыВРозницеОстатки.Номенклатура,
ТоварыВРозницеОстатки.ХарактеристикаНоменклатуры,
ТоварыВРозницеОстатки.Качество,
ТоварыВРозницеОстатки.КоличествоОстаток,
ТоварыВРозницеОстатки.СуммаПродажнаяОстаток,
NULL КАК КоличествоРасход,
NULL КАК СуммаПродажнаяРасход
ИЗ
РегистрНакопления.ТоварыВРознице.Остатки({(&КонецПериода)}, ) КАК ТоварыВРозницеОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ТоварыВРозницеОбороты.Склад,
ТоварыВРозницеОбороты.Номенклатура,
ТоварыВРозницеОбороты.ХарактеристикаНоменклатуры,
ТоварыВРозницеОбороты.Качество,
NULL,
NULL,
ТоварыВРозницеОбороты.КоличествоРасход,
ТоварыВРозницеОбороты.СуммаПродажнаяРасход
ИЗ
РегистрНакопления.ТоварыВРознице.Обороты(, , Регистратор, ) КАК ТоварыВРозницеОбороты
ГДЕ
ТоварыВРозницеОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
ИЛИ ТоварыВРозницеОбороты.Регистратор ССЫЛКА Документ.ЧекККМ
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Представление
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
ПОЛЕОБЪЕКТА Объект
ПОЛЕВИДА Свойство
ПОЛЕЗНАЧЕНИЯ Значение }

Самого поля вывода изображения в запросе нет. Стоит обратить внимание на текст в запросе:

{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Представление
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
ПОЛЕОБЪЕКТА Объект
ПОЛЕВИДА Свойство
ПОЛЕЗНАЧЕНИЯ Значение }

который позволит выводит поля и использовать в условиях отбора отчета свойства и характеристики номенклатуры. Этот текст формируется автоматически конструктором запроса в схеме компановки данных при заполнении вкладки "Характеристики":

 Заполнение вкладки характеристики

Само поле вывода изображения формируем введением дополнительного вычисляемого поля:

Вычисляемое поле

Выражение представления ("Нет изображения " + Номенклатура.Код) в последующем выполнит свою функцию в процедуре программного вывода отчета.

Для программного вывода отчета с выводом изображений существует всего одна процедура в модуле отчета:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь; // Отключаем стандартную обработку 
	
	//Настройки = КомпоновщикНастроек.ПолучитьНастройки(); Эта строка работает если не надо лезть и изменять настройки, 
	//но мы не ищем легких путей если надо о чем-то рассказать по подробнее.. Если надо поменять пользовательские настройки
	// ручками - делаем приблизительно так:
	Настройки = КомпоновщикНастроек.Настройки; // Получаем настройки отчета 
	
	// Изменяем отборы по пользовательским настройкам
	ТаблицаОтборов = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
	Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл		
		НайденнаяПользовательскаяНастройка = 
			ТаблицаОтборов.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);		
		Если НайденнаяПользовательскаяНастройка <> Неопределено Тогда
			ЭлементОтбора.ВидСравнения = НайденнаяПользовательскаяНастройка.ВидСравнения;
			ЭлементОтбора.Использование = НайденнаяПользовательскаяНастройка.Использование;
			ЭлементОтбора.ПравоеЗначение = НайденнаяПользовательскаяНастройка.ПравоеЗначение;
		КонецЕсли;		
	КонецЦикла;
		
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;      		
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    	
	
	// Создаем макет компоновки данных
	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	МакетКомпоновки = 
		КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	
	// Инициализируем процессор компоновки
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
	
	ДокументРезультат.Очистить();
	
	// Выводим результат отчета в табличный документ "ДокументРезультат"
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);		
	
	//ПроцессорВывода.Вывести(ПроцессорКомпоновки);  на этом можно было бы закончить вывод отчета в стандартном виде... 
	//но нам нужны картинки.
	
	
	ПолеПоКоторомуНеобходимоПолучитьЗначение = "Картинка";
    	ПроцессорВывода.НачатьВывод();
     	Пока истина Цикл
     		ЭлементРезультата = ПроцессорКомпоновки.Следующий();
      		Если ЭлементРезультата = Неопределено Тогда
      			прервать;
      		КонецЕсли;	
      		ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
			Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
       			ЗначениеВыводимыхДанных = Неопределено;
				Для каждого ЗначениеПараметра из ЭлементРезультата.ЗначенияПараметров Цикл
       				Если ТипЗнч(ЗначениеПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
        					ПоляРасшифровки = ДанныеРасшифровки.Элементы[ЗначениеПараметра.Значение].ПолучитьПоля();
         					Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
         						Если ПолеРасшифровки.Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
         							ЗначениеВыводимыхДанных = ПолеРасшифровки.Значение;
         							Прервать;
         						КонецЕсли;	
         					КонецЦикла;	
         				КонецЕсли;	
         			КонецЦикла;	
         			Если ЗначениеЗаполнено(ЗначениеВыводимыхДанных) Тогда
						мОбъект = ЗначениеВыводимыхДанных.ПолучитьОбъект();
						мТекущееОсновноеИзображение = мОбъект.Хранилище.Получить();
						Если НЕ (мТекущееОсновноеИзображение = Неопределено) Тогда
							Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
							Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
							Индекс = ДокументРезультат.Рисунки.Индекс(Рис);
							ДокументРезультат.Рисунки[Индекс].Картинка = мТекущееОсновноеИзображение;
							ВысотаТабДок = ДокументРезультат.ВысотаТаблицы;
							ОбластьДляКартинки = ДокументРезультат.НайтиТекст("Нет изображения " + мОбъект.Объект.Код);
							Если ОбластьДляКартинки <> Неопределено Тогда
								ОбластьДляКартинки.ВысотаСтроки = 90;
								ДокументРезультат.Рисунки[Индекс].Расположить(ОбластьДляКартинки);
								ОбластьДляКартинки.Текст = "";
							КонецЕсли;
						КонецЕсли;
         			КонецЕсли;	
         		КонецЕсли;	
			
			КонецЦикла;
			ПроцессорВывода.ЗакончитьВывод();
				
КонецПроцедуры

Логика работы процедуры в комментариях кода. 

Буду рад любой критике и научениям )

Вступайте в нашу телеграмм-группу Инфостарт

СКД изображения

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    250223    1389    421    

1141

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5728    304    shapa_pro    25    

67

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    17142    ovetgana    112    

107

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9897    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    9221    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15958    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13586    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    10162    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Шапокляк 24.03.16 19:10 Сейчас в теме
Огромное спасибо! Наконец-то у меня СКД с картинками!
По разработке есть одно дополнение.
У вас на картинке вкладки Характеристика описано присоединение свойств. Наверняка вы столкнулись с неудобством отбора, когда в отбор лезут все имеющиеся свойства, а не только свойства номенклатуры. Я вышла из положения использованием Запроса, а не таблицы:
Все то же самое, только Источник видов Запрос с таким текстом
ВЫБРАТЬ
			СвойстваОбъектов.Ссылка,
			СвойстваОбъектов.Наименование,
			СвойстваОбъектов.НазначениеСвойства,
			СвойстваОбъектов.ТипЗначения
		ИЗ
			ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
		ГДЕ
			СвойстваОбъектов.ПометкаУдаления = ЛОЖЬ
			И СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура)
Показать
vtatarskih; +1 Ответить
2. vtatarskih 11 25.03.16 03:41 Сейчас в теме
(1) Шапокляк, спасибо за дополнение )
3. grandr 28.11.18 16:06 Сейчас в теме
в ут 10.3 1с 8.3 отчет выводит пустую таблицу при любых отборах. В чем может быть дело?
4. Serj1C 484 21.02.19 12:12 Сейчас в теме
8.3.14 из коробки появилось:

Для системы компоновки данных реализована возможность отображения картинок, расположенных в информационной базе. В отчете могут отображаться картинки, заданные в качестве навигационной ссылки на картинку и собственно картинкой, размещенной в реквизите типа ХранилищеЗначения.
Для объектов ОформлениеКомпоновкиДанных и ОформлениеЯчейкиТаблицыОбластиКомпоновкиДанных реализованы свойства ВыводитьКартинку, РазмерКартинки, ПоложениеТекстаОтносительноКартинки, ГоризонтальноеПоложениеКартинки, ВертикальноеПоложениеКартиинки.

В режиме совместимости с версией 8.3.13 поведение по умолчанию не изменилось.

Источник: https://dl04.1c.ru/content/Platform/8_3_14_1565/1cv8upd_8_3_14_1565.htm#a06301e2-a9ff-11e8-a3f7-0050569f678a
5. tank41 29.07.21 15:13 Сейчас в теме
Спасибо, все получилось)
6. user1776496 04.09.24 15:27 Сейчас в теме
А как для УТ 11.5- есть такая обработка ?
Для отправки сообщения требуется регистрация/авторизация