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

25.09.19

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

Решение популярных кейсов с картинками в отчетах на СКД.

Опять баян

Тема с добавлением картинок в отчеты на СКД появляется периодически на просторах сообщества и вне его. Самыми популярными задачами являются добавление логотипа компании в шапку отчета и отображение картинок товаров.

Почти всегда эти требования появляются для прайс-листов, но бывают и исключения.

Сегодня рассмотрим решения обоих кейсов, а также новые возможности платформы для вывода картинок.

Кейс №1: Логотип в шапке отчета

Начнем с простой задачи - вывод логотипа в шапку отчета на СКД.

Хочу логотип

И так, у нас есть простой внешний отчет "Прайс-лист", в котором для номенклатуры выводятся цены в разрезе их типов. Отчет создан для типовой конфигурации "Управление торговлей" версии 11. На следующем скриншоте представлен вывод для стандартных настроек отчета.

 
 Пример вывода стандартного отчета

Наша задача заключается в добавлении в шапку табличного документа отчета логотипа компании. Для этого нам необходимо программно сформировать отчет и вставить изображение логотипа. Теперь подробнее.

Подготовка

Для начала нам необходимо подготовить изображение для логотипа. Во внешний отчет добавим макет табличного документа "Логотип", в который вставим объект "Картинка" с необходимым изображением.

 
 Настройка макета для логотипа

Не забудьте создать область табличного документа для ячеек, где находится изображение логотипа. В текущем примере область названа "Логотип". Также нужно создать область "СвернутьЛоготип", которая будет использоваться для сворачивания/разворачивания логотипа в сформированном отчете.

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

 
 Вывод логотипа при компоновке результата

Алгоритм программного исполнения отчета не имеет ничего особенного, все стандартно. Перейдем непосредственно к решению поставленной задачи. Выводить логотип из дополнительного макета будем перед выполнением процессора вывода компоновки, но после очистки табличного документа. Итоговый программный код вывода логотипа в шапке отчета приведен на следующем листинге:

 
 Изменения для вывода логотипа

На этом процесс модификации отчета закончен. Посмотрим результат работы в режиме предприятия.

В режиме предприятия

Запустим созданный отчет в режиме предприятия. Мы увидим следующую картину:

Как мы видим, в шапке табличного документа появился логотип, изображение которого мы добавили в дополнительный макет отчета. Благодаря группировке строк имеется возможность свернуть логотип. 

Разумеется, предложенный способ не самый универсальный, так как при изменении логотипа компании будет необходимо изменять макет отчета в режиме конфигуратора. Более правильно было бы получить изображение из информационной базы, например из элемента справочника "Организации". К тому же в текущей реализации отчета пользователь не сможет отключить вывод логотипа, только свернуть его. Все эти недостатки решаются, но не в рамках данной статьи. Таким образом, мы получили отчет "Прайс-лист" с выводом логотипа компании.

Кейс №2: Вывод изображений номенклатуры

Теперь задача посложнее - нужно выводить изображения номенклатуры. Рассмотрим вариант решения по шагам.

Предисловие

Приходилось ли Вам решать задачу по выводу изображений в отчете, построенном на системе компоновки данных (СКД)? Если да, то наверняка возникали сложности с добавлением рисунка в результирующий табличный документ и стабильной работой отчета при изменении настроек вывода. В любом случае статья Вам будет полезна на будущее, потому что подобная задача может встретиться каждому разработчику. 

 
 Пример сформированного отчета с изображением

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

В чем проблема?

Проблема с выводом картинок в отчете на СКД заключается в том, что механизм не поддерживает данную возможность сам по себе. Не смотря на то, что в конструкторе системы компоновки мы можем создавать собственные макеты, использовать их для вывода изображений не получится. При добавлении в макет объекта "Рисунок", в дальнейшем это изменение игнорируется компоновщиком.

Например, добавим в поле макета рисунок, как показано на следующем изображении:

 
 Добавляем изображение в макет СКД

В теории, СКД должна вывести в данной ячейке добавленный рисунок, но этого не происходит:

 
 Нет изображения в отчете!

Как мы видим, создание собственного макета не является решением данной задачи. Использование собственного макета имеет весьма ограниченные возможности в сравнении с отчетами НЕ на СКД.

На просторах глобальной сети находил несколько вариантов решения по выводу изображений в подобных отчетах. В основном все они основывались на обработке табличного документа после вывода отчета, когда программным образом искалась колонка в табличном документе и обходилась в цикле для добавления в соответствующие ячейки рисунков. Однако после изменения настроек варианта отчета в пользовательском режиме подобные отчеты работали нестабильно. Представьте, что структура отчета вида "Список" была изменена на "Таблица". Тогда алгоритм сразу переставал работать, так как ориентироваться на колонку с изображениями уже было нельзя.

Рассмотрим универсальное решение данной задачи, работающее при любых настройках отчета и выполняемой достаточно оптимальным образом.

Универсальное решение

Так какое же решение использовать, чтобы сохранить все возможности СКД по настройке отчета и скорость его работы была на оптимальном уровне? Такое решение есть, давайте рассмотрим его подробно.

Начнем с того, что нам придется изменить макет СКД в конструкторе, но не для добавления туда картинки, а для изменения вывода ячейки, в которой будет отображаться картинка. Пример такого отчета будет делать для типовой конфигурации "Управление торговлей" версии 11. В соответствии с текущими настройками конфигурации, файлы картинок, как и все прикрепленные файлы, хранятся в регистре сведений "ДвоичныеДанныеФайлов" в ресурсе "ХранимыйФайл" (тип "ХранилищеЗначений"), при этом связь элемента справочника "Номенклатура" и значения в регистре сведений осуществляется через справочник "НоменклатураПрисоединенныеФайлы", в элементах которого хранится информация о загруженных файлах. В самой номенклатуре в реквизите "ФайлКартинки" выбирается основное изображение из справочника "НоменклатураПрисоединенныеФайлы".

 
 Изменяем запрос набора данных для получения изображений

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

 
 Отчет еще не готов!

Из рисунка выше мы видим, что в отчете ссылка на присоединенный файл (элемент справочника "НоменклатураПрисоединенныеФайлы") отображается в виде представления (реквизит "Наименование"). Чтобы вмешаться в процесс формирования отчета и отобразить изображение в табличном документе, нам необходимо изменить алгоритм компоновки отчета.

Для начала в обработчике "ПриКомпоновкеРезультата" модуля объекта отчета отключим стандартную обработку и сформируем отчет полностью программным образом.

 
 Подготовим программное формирование отчета

Действия в программном коде подробно описаны в комментариях. Отмечу лишь важные моменты:

  1. В начале процедуры "ПриКомпоновкеРезультата" проводим инициализацию настроек.
  2. Далее по обычному алгоритму формируем отчет.
  3. Обязательно необходимо заполнить данные расшифровки, чтобы мы могли получать ссылки на данные, хранящиеся в ячейках табличного документа.

В результате выполнения отчета с внесенными изменениями, он выполнится точно таким же образом, как если бы мы никаких изменений не вносили. 

Теперь самый важный момент: после вывода отчета в табличный документ (метод "Выполнить" процессора вывода) нам необходимо обойти ВСЕ ячейки табличного документа, и если в ячейке содержится поле расшифровки значения с типом "СправочникСсылка.НоменклатураПрисоединенныеФайлы", необходимо добавить в эту ячейку объект "Рисунок" и заполнить его изображением, хранящемся в регистре сведений (схему хранения изображений для справочника "Номенклатура" смотри выше). На следующем скриншоте приведен программный код для выполнения описанных действий:

 
 Обходим ячейки отчета для добавления изображений

Код имеет подробные комментарии. В общих чертах алгоритм проверяет все ячейки табличного документа на значение расшифровки "СправочникСсылка.НоменклатураПрисоединенныеФайлы". Если ячейка имеет поле расшифровки с соответствующим типом данных, то выполняется функция "ПолучитьИзображение", в качестве параметра которому передается значение расшифровки:

 
 Получение двоичных данных изображения

Может возникнуть логичный вопрос: "Почему не получить двоичные данные для изображений в одном запросе?". Ответ прост. Если мы будем получать изображения из регистра двоичных данных файлов в одном запросе, то очень велика вероятность получить ошибку "Недостаточно памяти", если размер выбираемых изображений будет очень большим.

Конечно, выполнять запрос в цикле тоже не правильно. Есть наиболее оптимальный способ получения изображений в нашем случае, но чтобы не усложнять пример оставим этот, относительно простой, способ получения картинок.

На этом реализация отчета закончена, посмотрим на его работу в режиме предприятия.

Что имеем

Сформируем отчет в виде простого списка номенклатуры. Результат будет следующим:

Теперь изменим настройки отчета. Вместо списка отчет будет иметь структуру таблицы, где строки - это ссылка на номенклатуру, а колонки - изображения.

Выше было упомянуто, что большинство решений по выводу картинок в отчетах на системе компоновки данных не работают стабильно для сложных вариантов настроек отчета пользователем.

Предложный подход позволяет вывести картинки для любой, даже самой сложной, структуры отчета и настроек отдельных полей. Давайте посмотрим на результат формирования отчета для новой настройки:

 
 Финальный вариант после перемещения картинок в заголовки колонок таблицы

Таким образом, мы сделали отчет, в котором выводятся настройки практически для любой структуры вывода в настройках. Производительность отчета на приемлемом уровне: время выполнения отчета с картинками и без для 500 позиций номенклатуры изменилась незначительно (тест проводился на файловой базе). Подобный отчет будет работать в любом режиме запуска приложения (тонкий, толстый или веб-клиент). Разумеется, есть способы совершенствования предложенного способа вывода картинок в отчеты на СКД, но они выходят за рамки статьи. Думаю, что после экспериментов Вы все сделайте самостоятельно.

Платформенный путь

Хорошие новости! Платформа 1С начиная с версии 8.3.14 (причем режим совместимости тоже должен быть 8.3.14 и выше) позволяет штатными средствами выводить картинки в отчетах на СКД. Вот официальная информация. Использовать новый функционал проще простого! Нужно сделать следующие шаги:

  1. Убедиться, что у вас режим совместимости 8.3.14 и выше, иначе функционал не будет доступен.
  2. В запросе получить двоичные данные картинок в отдельном поле.
  3. Добавить это поле в выбранные поля.
  4. Добавить условное оформление для этого поля, указав отображение картинки, положение и размер. Последние две настройки по необходимости.
 
 Инструкция с картинками

Конечно, есть и некоторые ограничения. Например, картинку в шапку Вы так не выведите, но для решения большинства задач работает отлично.

Спасибо за внимание

Благодарю за интерес к статье! Это не первая, и, я надеюсь, не последняя статья про вывод изображений в отчетах на СКД на Инфостарте. Ждем появления информации об опыте наших коллег. В будущем подходы к решению подобных задач могут измениться. Будем следить за событиями.

А пока всем удачи, здоровья, успехов! Подписывайтесь на канал, оставляйте комментарии. :)

Другие ссылки

INFOSTART TOOLKIT

Самый продвинутый набор инструментов для управляемых форм 1С 8.3: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Подписки на события и др.


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

СКД изображения картинки вывод прайс УТ УТ11

См. также

СКД Программист Система компоновки данных 1C:Бухгалтерия Бесплатно (free)

В СКД по умолчанию названия полей группировок выводятся один под одним, что значительно увеличивает шапку и поедает область самого отчета. А если еще быстрые настройки выведены, то желаемой информации пользователь с маленьким разрешением экрана может и не увидеть. Да, можно разместить поля группировок отдельно, но в этом случае отчет разрастется вширь. Предлагаю разместить заголовки полей группировок в одну строку.

08.10.2013    21196    VasilevaHelen    19    

89

Оптовая торговля СКД Программист Система компоновки данных 1С:Управление торговлей 11 Управленческий учет Абонемент ($m)

Не очень часто, но все же, иногда приходится сталкиваться с необходимостью создания отчета, который очень сложно скомпоновать на "чистом" СКД, в этом случае альтернативой может являться следующая последовательность действий для получения итогового отчета: 1. при помощи одной схемы компоновки данных получить необходимую выборку данных; 2. запрограммировать (на языке 1С) некое преобразование этих данных; 3. при помощи другой схемы компоновки данных - произвести вывод необходимой информации в табличный документ. Как оказалось эта процедура не слишком сложная, хотя и немного запутанная.

1 стартмани

12.08.2013    69720    mxm2    21    

72

СКД Программист Система компоновки данных 1C:Бухгалтерия Бесплатно (free)

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

24.07.2013    57362    Tavalik    32    

76

СКД Программист 1С v8.3 Абонемент ($m)

Недавно мне встретилось тестовое задание проекта "Доминикана", а также выложенные решения, которые показались мне слишком тривиальными, поэтому было решено сделать тестовое задание, используя минимум возможностей языка запросов и максимум возможностей СКД. О том как это было и пойдет речь в данной публицации. В публикации опишем лишь основные моменты, которые будут нам полезны в будущем, сами настройки подробно рассматривать не будем, для этого есть специлизированные курсы :).

1 стартмани

12.06.2013    48939    InformSES    39    

105

СКД Программист Система компоновки данных 1C:Бухгалтерия Бесплатно (free)

Описание настройки СКД для вывода в отчете среднего значения ресурса расчитаного на основе итогов других столбцов.

05.06.2013    124272    tamaks    17    

50

СКД Программист Система компоновки данных 1C:Бухгалтерия Абонемент ($m)

Речь пойдет о назначение расширения языка запросов для описания отборов в СКД и о том как я вижу его применение. Статья для тех кто знаком с СКД. Для новичков рекомендую предварительно ознакомиться с этим: - видео-уроки по СКД (легко ищется в интернете)

1 стартмани

26.05.2013    62766    echo77    14    

48

СКД Программист Оперативный учет Система компоновки данных 1С:Управление нашей фирмой 1.6 Абонемент ($m)

Сверуть и развернуть группировки можно через контекстное меню, горячими клавишами, можно разместить соответствующие кнопки на форме отчета как описал mxm2, но мы пойдем другим, более информативным путем.

1 стартмани

08.05.2013    27453    Pralva    16    

44

СКД Программист Система компоновки данных 1C:Бухгалтерия Абонемент ($m)

Сверуть и развернуть группировки можно через контекстное меню, горячими клавишами, а можно разместить соответствующие кнопки на форме отчета. Как оказалось, для этого не нужно ни строчки кода.

1 стартмани

10.04.2013    63213    mxm2    11    

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

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

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

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

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

Это, конечно, хорошо.. Но как тогда быть вот с этим?
Если мы будем получать изображения из регистра двоичных данных файлов в одном запросе, то очень велика вероятность получить ошибку "Недостаточно памяти", если размер выбираемых изображений будет очень большим.
корум; YPermitin; +2 Ответить
14. пользователь 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. пользователь 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 1454 27.09.19 11:45 Сейчас в теме
(13) Еще на прошлых платформах, когда не добавили эту фишку, делал отчет по методу, описанном в сообщении (8). Так вот, отчет выводился, в котором было картинок на 6 Гб))) При этом временные файлы раздувались примерно до 18-20 Гб, но отчет формировался. На криво настроенной виртуалке время формирования приближалось к 5 часам))) Но тем не менее. Не думаю, что использование нового функционала платформы будет хуже)
YPermitin; +1 Ответить
22. пользователь 27.09.19 11:47
(21) однако.

Прайс на 6 ГБ? :)
23. RocKeR_13 1454 27.09.19 11:52 Сейчас в теме
(22) ну да, сеть магазинов одежды и обуви) Там картинки просто "жирные". На файловом варианте 1С пробовал этот же отчет на базе другого клиента - 800 строк с картинками выводились примерно минут 7-10
24. nsirotkin@mail.ru 76 30.09.19 08:33 Сейчас в теме
(23) Табличный документ получается сильно легче, а на экране или печати разницы не видно

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

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

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

У нас картинки хранятся в каталогах (томах) на диске, поэтому платформенный вариант видимо не подходит.
35. work.sable 26 10.06.20 06:03 Сейчас в теме
(0)
https://forum.infostart.ru/forum9/topic242540/
Есть вот такая проблема при формировании отчета по кейсу №2. Есть идеи в чем дело?
36. user1346935 18.08.20 10:19 Сейчас в теме
Как сказать "спасибо"? Могу одну маню подарить.
YPermitin; +1 Ответить
37. пользователь 18.08.20 10:21
(36) уже сказали, этого достаточно :)
38. Hatson 539 30.09.20 16:17 Сейчас в теме
Вместо функции ПолучитьИзображение() можно использовать готовую функцию общего модуля.
Двоичные данные могут храниться не в базе, а в томах.


		КартинкаНоменклатуры = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл);
		
		Если ТипЗнч(КартинкаНоменклатуры) = Тип("Картинка") Тогда
			Возврат КартинкаНоменклатуры;
		ИначеЕсли ТипЗнч(КартинкаНоменклатуры) = Тип("ДвоичныеДанные") Тогда
			Возврат Новый Картинка(КартинкаНоменклатуры);
		Иначе
			Возврат КартинкаПоумолчанию;
		КонецЕсли;


Показать
39. echo77 1929 16.10.20 18:47 Сейчас в теме
(38) Я написал в СКД в вычисляемом поле
ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл)

где ПрисоединенныйФайл - ссылка на элемент справочника Присоединенные файлы, в итоге отчет мне вывел текстовое содержимое двоичных данных - что не есть картинка.

Здесь важно понимать, что для вывода картинки поле должно содержать ХранилищеЗначения, которое содержит Картинку.

Если я не прав - дайте пожалуйста пример.
40. Hatson 539 20.10.20 17:57 Сейчас в теме
(39) У меня речь НЕ идет про вычисляемое поле.
Речь идет про обработчик ПриКомпоновкеРезультата()
41. edesyatov 32 08.03.21 12:10 Сейчас в теме
42. titanium2008 47 15.05.21 15:04 Сейчас в теме
подскажите, при платформенном добавлении - не дает выбрать поле с типом хранилище значений в группировке. Пишет ошибку что в группировке нельзя.
45. Snegur 08.06.21 16:45 Сейчас в теме
(42) один из способов в папку отдельно добавить
43. ivprovotorov 61 18.05.21 04:15 Сейчас в теме
Спасибо за статью! Уже использовал в работе ;-)
44. Yashazz 4878 26.05.21 17:31 Сейчас в теме
...а вообще есть ещё один способ, который работал всегда и который, возможно, самый быстрый - курочить табличные фрагменты, взятые из макетов макета компоновки, уже после обработки его процессора.
46. Snegur 08.06.21 16:46 Сейчас в теме
Подскажите кто-нибудь замерял, что работает быстрее платформой или ручное выведение картинки ?
47. ids79 8718 17.06.21 11:11 Сейчас в теме
На счет вывода картинок средствами СКД, у меня работает вывод по ссылке или "АВТО" в настройках условного оформления. Вывод по значению, как написано в статье ничего не выводит. В качестве источника так же, хранилище значения.
48. Ambakollajder 23.06.21 10:34 Сейчас в теме
(47) У меня на платформе 8.3.19.1150 вообще никак не хочет значение типа "ХранилищеЗначения" преобразовывать в картинку, ни с АВТО, ни по значению, ни по ссылке. При этом по навигационной ссылке работает
Прикрепленные файлы:
49. ids79 8718 23.06.21 10:52 Сейчас в теме
(48)Попробуйте не в формате поля, а в условном оформлении сделать.
50. Ambakollajder 23.06.21 11:58 Сейчас в теме
Все оказалось прозаичнее, я не оттуда хранилище значения для картинки взял.
51. sg12 17 05.07.21 17:18 Сейчас в теме
Пользовался статьей (метод платформы), до тех пор пока не попался на базу где картинки хранятся в томах. Из номенклатуры вытягиваю реквизит "Файл картинка", потом в вычисляемых полях использую функцию свою функцию которая помещает двоичные данные (РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки)) в хранилище значений, и не чего не выводит, убился уже.
LomayaZakat; Laretyn; EMelihoff; +3 Ответить
59. Laretyn 02.02.22 20:09 Сейчас в теме
(51) Тоже самое пытаюсь сделать) Побороли задачу?
67. Xershi 1546 14.03.25 16:50 Сейчас в теме
(59) есть только идея сделать реквизит хранилище значения, запихнуть туда миникартинку и тогда в любом отчете донастройку делать. Иначе сначала нужно либо при компоновке допил сделать, либо через вычислить в колонке "Выражение" на вкладке СКД "Вычисляемые поля".
68. Xershi 1546 14.03.25 17:23 Сейчас в теме
(59) в общем для теста сделал расширение куда добавил реквизит "КН_КартинкаДляОтчетов" тип ХранилищеЗначения.
РаботаСФайлами.ДвоичныеДанныеФайла эта функция хранилище вытягивает в двоичные данные.
Написал обработку, которая просто заполнит из основного изображения реквизит. Но по хорошему вам нужно его допустим сконвертировать до 50 пикселей, чтобы значительно уменьшить объем базы.
НоменклатурОбъект = Номенклатура.ПолучитьОбъект();
	
	НоменклатурОбъект.КН_КартинкаДляОтчетов = Новый ХранилищеЗначения(РаботаСФайлами.ДвоичныеДанныеФайла(НоменклатурОбъект.ФайлКартинки));
	
	НоменклатурОбъект.Записать();

И вывел в отчет.
Прикрепленные файлы:
VyacheslavShilov; +1 Ответить
66. Xershi 1546 14.03.25 16:45 Сейчас в теме
(51) это ты допил делал?
Я хотел через пользовательское поле:
РаботаСФайлами.ДвоичныеДанныеФайла([Номенклатура.Файл картинки])

Но формула конечно не срабатывает.
52. EMelihoff 23.07.21 09:03 Сейчас в теме
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	ПроцессорВывода.НачатьВывод();
	ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	Пока ЭлементРезультата <> Неопределено Цикл
		Для Каждого ЭлементПараметра ИЗ ЭлементРезультата.ЗначенияПараметров Цикл  
			Если ТипЗнч(ЭлементПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
				ПоляРасшифровки	 = ДанныеРасшифровки.Элементы[ЭлементПараметра.Значение].ПолучитьПоля();
				Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
					Если ТипЗнч(ПолеРасшифровки.Значение) = Тип("ХранилищеЗначения") и ПолеРасшифровки.Поле = "ХранимыйФайл"  Тогда
						 ЗначениеКартинки = ПолеРасшифровки.Значение.Получить();
						 Если ЗначениеКартинки = Неопределено Тогда
							 Продолжить;
						 КонецЕсли;	 
						 //алгоритм вывода картинки
						Рисунок =  ДокументРезультат.рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
						Рисунок.Картинка = Новый Картинка(ЗначениеКартинки,Истина);
						//3 это номер колонки, Высота таблицы - строка вывода
						ОбластьИзображение = ДокументРезультат.область(ДокументРезультат.ВысотаТаблицы,3); //3 это номер колонки вы
						Рисунок.Расположить(ОбластьИзображение);
						
					КонецЕсли;	
				КонецЦикла;	
			КонецЕсли;	
		КонецЦикла;	
		ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);	
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	КонецЦикла;	
	ПроцессорВывода.ЗакончитьВывод();
Показать
53. EMelihoff 23.07.21 09:52 Сейчас в теме
(52)//цифрой выводить жёстко номер колонки не универсально
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	Для НомерСтроки = 1 По ДокументРезультат.ВысотаТаблицы Цикл
		
		Для НомерКолонки = 1 По ДокументРезультат.ШиринаТаблицы Цикл

			ТекущаяОбласть = ДокументРезультат.Область(НомерСтроки,НомерКолонки);
			Расшифровка =  ТекущаяОбласть.расшифровка;
			Если ТипЗнч(Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
				ПоляРасшифровки	 = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
				Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
					Если ТипЗнч(ПолеРасшифровки.Значение) = Тип("ХранилищеЗначения") и ПолеРасшифровки.Поле = "ХранимыйФайл"  Тогда
						ЗначениеКартинки = ПолеРасшифровки.Значение.Получить();
						Если ЗначениеКартинки = Неопределено Тогда
							Продолжить;
						КонецЕсли;	 
						
						//алгоритм вывода картинки
						Рисунок =  ДокументРезультат.рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
						Рисунок.Картинка = Новый Картинка(ЗначениеКартинки,Истина);
						//цифрой выводить жёстко номер колонки не универсально
						ОбластьИзображение = ДокументРезультат.область(НомерСтроки,НомерКолонки); 
						Рисунок.Расположить(ОбластьИзображение);
						
						//наведениеКрасоты
						ОбластьИзображение.ВысотаСтроки = 100;
						Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
						Рисунок.ЦветЛинии = Новый Цвет(190,202,134);
					КонецЕсли;		
				КонецЦикла;
			КонецЕсли;	
		КонецЦикла;
		
	КонецЦикла;
Показать
54. EMelihoff 23.07.21 10:01 Сейчас в теме
(53) из минусов второго варианта, полный перебор таб. документа и повторная обработка вывода данных.
55. UserPro 4 04.08.21 16:05 Сейчас в теме
Платформенный метод вывод картинок в СКД работает если Детальная расшифровка, а в группировке почему то не работает. Например 1-я группировка Номенклатура для которой нужно получить Картинку и 2-я Характеристика для которой Картинка не нужна.
56. DarkDaemon 15.08.21 18:08 Сейчас в теме
Помогите с выводом картинок в стандартном Прайс-листе УТ 11.4. Жирным выделил строки в запросе, которые я добавил. В списке полей появилось поле Картинка, условное оформление сделал. Но в прайсе колонка Картинка не отображается. Думаю, что проблема в запросе. Добавил в список значений

ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК Картинка,

и соединение

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом
ПО Цены.Номенклатура = СпрНом.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО СпрНом.ФайлКартинки = ДвоичныеДанныеФайлов.Файл
:

Вот полный код запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	Сегменты.Номенклатура КАК Номенклатура,
	Сегменты.Характеристика КАК Характеристика,
	ИСТИНА КАК ИспользуетсяОтборПоСегментуНоменклатуры
ПОМЕСТИТЬ ОтборПоСегментуНоменклатуры
ИЗ
	РегистрСведений.НоменклатураСегмента КАК Сегменты
{ГДЕ
	Сегменты.Сегмент.* КАК СегментНоменклатуры,
	Сегменты.Номенклатура.* КАК Номенклатура,
	Сегменты.Характеристика.* КАК Характеристика}

ИНДЕКСИРОВАТЬ ПО
	Номенклатура,
	Характеристика,
	ИспользуетсяОтборПоСегментуНоменклатуры
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	Ассортимент.Номенклатура КАК Номенклатура,
	Ассортимент.ОбъектПланирования КАК ОбъектПланирования,
	ИСТИНА КАК ИспользуетсяОтборПоАссортименту
ПОМЕСТИТЬ ОтборПоАссортименту
ИЗ
	РегистрСведений.Ассортимент.СрезПоследних(&Период) КАК Ассортимент
{ГДЕ
	Ассортимент.Номенклатура.* КАК Номенклатура,
	Ассортимент.ОбъектПланирования.* КАК ОбъектПланирования,
	Ассортимент.КоллекцияНоменклатуры.* КАК КоллекцияНоменклатуры,
	Ассортимент.РазрешеныПродажи КАК РазрешеныПродажи}
ИНДЕКСИРОВАТЬ ПО
	Номенклатура,
	ОбъектПланирования,
	ИспользуетсяОтборПоАссортименту
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	СвободныеОстаткиОстатки.Номенклатура,
	СвободныеОстаткиОстатки.Характеристика,
	СвободныеОстаткиОстатки.Склад,
	СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
	СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток КАК ВРезервеОстаток,
	ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеПодЗаказОстаток, 0) КАК Остаток,
	ТоварныеОграничения.СтраховоеКоличествоЗапаса КАК СтраховоеКоличествоЗапаса,
	ТоварныеОграничения.МинимальноеКоличествоЗапаса КАК МинимальноеКоличествоЗапаса,
	ТоварныеОграничения.МаксимальноеКоличествоЗапаса КАК МаксимальноеКоличествоЗапаса,
	ТоварныеОграничения.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ СвободныеОстатки
ИЗ
	РегистрНакопления.СвободныеОстатки.Остатки(&Период, ) КАК СвободныеОстаткиОстатки
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТоварныеОграничения КАК ТоварныеОграничения
		ПО &ПодстановкаТоварногоОграничения
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
	ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
	ВЫБОР
		КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
			ТОГДА ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения
		ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Упаковка
	КОНЕЦ КАК Упаковка,
	ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
	ЦеныНоменклатурыСрезПоследних.Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
	ВЫБОР
		КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
			ТОГДА СвободныеОстатки.Остаток
		ИНАЧЕ СвободныеОстатки.Остаток / &ТекстЗапросаКоэффициентУпаковки
	КОНЕЦ КАК Остаток,
	ВЫБОР
		КОГДА СвободныеОстатки.Остаток <= 0 ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.НетВНаличии) ИНАЧЕ
			ВЫБОР КОГДА СвободныеОстатки.Остаток <= (СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.УточняйтеНаличие) ИНАЧЕ
				ВЫБОР 
					КОГДА СвободныеОстатки.Остаток < (СвободныеОстатки.СтраховоеКоличествоЗапаса + СвободныеОстатки.МинимальноеКоличествоЗапаса) ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Мало) ИНАЧЕ
						ВЫБОР 
							КОГДА СвободныеОстатки.Остаток < СвободныеОстатки.МаксимальноеКоличествоЗапаса ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Достаточно) ИНАЧЕ
								ВЫБОР КОГДА СвободныеОстатки.Остаток >= СвободныеОстатки.МаксимальноеКоличествоЗапаса 
									ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Много) ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.Неизвестно)
							КОНЕЦ
						КОНЕЦ
				КОНЕЦ
		КОНЕЦ
	КОНЕЦ КАК ОстатокТекстом,
	СвободныеОстатки.Склад КАК Склад,
	СвободныеОстатки.МетодОбеспеченияПотребностей КАК МетодОбеспеченияПотребностей
ПОМЕСТИТЬ Цены
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены В (&ВидыЦен) {((Номенклатура, Характеристика) В
				(ВЫБРАТЬ
					ОтборПоСегментуНоменклатуры.Номенклатура,
					ОтборПоСегментуНоменклатуры.Характеристика
				ИЗ
					ОтборПоСегментуНоменклатуры
				ГДЕ
					ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
				((Номенклатура) В
				(ВЫБРАТЬ
					ОтборПоАссортименту.Номенклатура
				ИЗ
					ОтборПоАссортименту
				ГДЕ
					ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
					}) КАК ЦеныНоменклатурыСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ СвободныеОстатки КАК СвободныеОстатки
		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = СвободныеОстатки.Номенклатура
			И ЦеныНоменклатурыСрезПоследних.Характеристика = СвободныеОстатки.Характеристика
			
		{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, {ВидЦены КАК ВидЦеныДиапазон((Номенклатура, Характеристика) В
				(ВЫБРАТЬ
					ОтборПоСегментуНоменклатуры.Номенклатура,
					ОтборПоСегментуНоменклатуры.Характеристика
				ИЗ
					ОтборПоСегментуНоменклатуры
				ГДЕ
					ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры)),
				((Номенклатура) В
				(ВЫБРАТЬ
					ОтборПоАссортименту.Номенклатура
				ИЗ
					ОтборПоАссортименту
				ГДЕ
					ОтборПоАссортименту.ИспользуетсяОтборПоАссортименту = &ИспользуетсяОтборПоАссортименту))
					}) КАК ЦеныНоменклатурыОтбор
		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыОтбор.Номенклатура
			И ЦеныНоменклатурыСрезПоследних.Характеристика = ЦеныНоменклатурыОтбор.Характеристика
			}
		
ГДЕ
	ЦеныНоменклатурыСрезПоследних.Цена > 0
{ГДЕ
	ЦеныНоменклатурыОтбор.Цена КАК ЦенаОт,
	ЦеныНоменклатурыОтбор.Цена КАК ЦенаДо
}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Цены.Номенклатура,
	Цены.Характеристика,
	Цены.ВидЦены,
	Цены.Цена,
	Цены.Упаковка,
	Цены.Валюта,
	Цены.ЦеноваяГруппа,
	Цены.Склад,
        ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК Картинка,
	ВЫБОР КОГДА Цены.Остаток <0 
		ТОГДА 0 
		ИНАЧЕ Цены.Остаток
	КОНЕЦ КАК Остаток,
	ВЫБОР КОГДА (Цены.МетодОбеспеченияПотребностей = ЗНАЧЕНИЕ (Перечисление.МетодыОбеспеченияПотребностей.ЗаказПодЗаказ))
			ИЛИ (Цены.МетодОбеспеченияПотребностей ЕСТЬ NULL И Цены.Остаток > 0)
		ТОГДА ЗНАЧЕНИЕ(Перечисление.ДоступностьТовараДляКлиента.ПодЗаказ)
		ИНАЧЕ Цены.ОстатокТекстом
	КОНЕЦ КАК ОстатокТекстом
{ВЫБРАТЬ
	Номенклатура.*,
	Характеристика.*,
	ВидЦены.*,
	Цена,
	Упаковка.*,
	Валюта.*,
	ЦеноваяГруппа.*,
	Склад.*}
ИЗ
	Цены КАК Цены
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом
	ПО Цены.Номенклатура = СпрНом.Ссылка
	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
	ПО СпрНом.ФайлКартинки = ДвоичныеДанныеФайлов.Файл
{ГДЕ
	Цены.Номенклатура.*,
	Цены.Характеристика.*,
	Цены.ВидЦены.*,
	Цены.Цена,
	Цены.Упаковка.*,
	Цены.Валюта.*,
	Цены.Склад.*}
}
Показать
57. DarkDaemon 15.08.21 23:36 Сейчас в теме
Поменял
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНом
ПО Цены.Номенклатура = СпрНом.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО СпрНом.ФайлКартинки = ДвоичныеДанныеФайлов.Файл

на
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
ПО Цены.Номенклатура.ФайлКартинки = ДвоичныеДанныеФайлов.Файл

результат не изменился
58. &rew 52 13.10.21 11:33 Сейчас в теме
Решил попробовать данный метод. Вывести шапку из другого макета. Но при взаимодействии в вычисляемым полем, в котором вызывается функция общего модуля, СКД шлет "лесом" с синтаксической ошибкой. Как только убираем нашу шапку. Вычисляемое поле работает штатно.
Да, конфа старая, режим совместимости 8.3.8
60. ALLES 66 31.03.22 19:38 Сейчас в теме
Кто то пробовал сохранять результат отчета в эксель через Сохранить как - в экселе картинки в ячейках нормально располагаются или нет
61. SergDobrodelov 726 07.06.23 00:06 Сейчас в теме
Если нужно переопределить расшифровку поля Картинка, то вариант с условным оформлением не подойдет, т.к. нужно использовать макет поля. Вместо условного оформления определяем макет, как на картинке:
Прикрепленные файлы:
kabantus; +1 Ответить
64. kabantus 31.08.24 22:14 Сейчас в теме
(61) Огромное спасибо!
Без этой настройки вместе с картинкой выводилась надпись "ХранилищеЗначения".
62. frkbvfnjh 815 28.06.23 08:07 Сейчас в теме
Отличная статья, выручила меня! Спасибо огромное!
63. ArtVadan 16.08.23 09:08 Сейчас в теме
Подскажите пожалуйста, может задавался кто вопросом как вывести картинку отдельной колонкой в таблице? Я просто уже и так и эдак пытался, чет в тупик зашел.
65. METAL 304 27.02.25 15:55 Сейчас в теме
А пробовали "платформенный способ" (с 8.3.14, последний в статье) , когда группировка не "детальные записи", а всё же есть группировка, в идеале "таблица" ? Работает у кого-нибудь?

Проблема в том, что просто через выбранные поля не выводится. Надо делать фото ресурсом. Но какая агрегатная функция? В группировки добавить фото нельзя, оно и логично.... В итоге для таблицы возникает ряд вопросов... Что-то неправильно делаю, или для таблицы это не работает?

Плюс в условном оформлении для "Картинка" есть вариант "выводить по ссылке" - что это значит?
69. d4rkmesa 27.05.25 16:24 Сейчас в теме
Спасибо за статью, в итоге не стал пользоваться платформенным методом, а вариацией использования расшифровки. Для отчета воспользовался СКД с макетами на соотв. вкладке, реквизит ФайлКартинка из номенклатуры указал в расшифровке в ячейке, тогда в расшифровке будет не коллекция, а ссылка на элемент справочника *ПрисоединенныеФайлы. В итоге далее все сводится к обходу табличного документа и получению картинки через:
ИсходнаяКартинка = Новый Картинка(РаботаСФайлами.ДвоичныеДанныеФайла(ОбластьКартинка.Расшифровка), Истина);
70. config 205 12.08.25 14:19 Сейчас в теме
Привет! На версии БСП 3.1.11.202 (когда Регистр ДвоичныеДанныеФайлов переименован в УдалитьДвоичныеДанныеФайлов) получилось вот так:

ВЫБРАТЬ
	ХранилищеФайлов.ХранилищеДвоичныхДанных.ДвоичныеДанные КАК ДвоичныеДанныеФайла,
	НоменклатураПрисоединенныеФайлы.ВладелецФайла КАК ВладелецФайла
ИЗ
	Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ХранилищеФайлов КАК ХранилищеФайлов
		ПО НоменклатураПрисоединенныеФайлы.Ссылка = ХранилищеФайлов.Файл
ГДЕ
	НоменклатураПрисоединенныеФайлы.ВладелецФайла = &ОтборПоНоменклатуре
Показать


И + в условном оформлении Выводить картинку = Выводить по значению, Оформляемые поля - ДвоичныеДанныеФайла
Для отправки сообщения требуется регистрация/авторизация