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

Публикация № 1125765

Разработка - Практика программирования

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

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

Опять баян

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

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

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

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

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

Хочу логотип

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

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

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

Подготовка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Предисловие

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что имеем

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Специальные предложения

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

Спасибо )
5. ZloyProger 8 26.09.19 08:57 Сейчас в теме
(4) Да я отредактировал уже :-(, там же в процедуре получения изображения проверка и возврат пустой картинки если не тот тип) Поспешишь - людей насмешишь)
6. YPermitin 9795 26.09.19 08:59 Сейчас в теме
(5) очепятался по полной :)
34. work.sable 24 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 9795 26.09.19 11:58 Сейчас в теме
(8) супер вариант!

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

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

Это, конечно, хорошо.. Но как тогда быть вот с этим?
Если мы будем получать изображения из регистра двоичных данных файлов в одном запросе, то очень велика вероятность получить ошибку "Недостаточно памяти", если размер выбираемых изображений будет очень большим.
YPermitin; +1 Ответить
14. YPermitin 9795 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 9795 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 836 27.09.19 11:45 Сейчас в теме
(13) Еще на прошлых платформах, когда не добавили эту фишку, делал отчет по методу, описанном в сообщении (8). Так вот, отчет выводился, в котором было картинок на 6 Гб))) При этом временные файлы раздувались примерно до 18-20 Гб, но отчет формировался. На криво настроенной виртуалке время формирования приближалось к 5 часам))) Но тем не менее. Не думаю, что использование нового функционала платформы будет хуже)
YPermitin; +1 Ответить
22. YPermitin 9795 27.09.19 11:47 Сейчас в теме
23. RocKeR_13 836 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 3472 26.09.19 17:21 Сейчас в теме
Кстати в новых релизах хвалятся, что ещё более будут продвигать вопрос картинок в СКД. В условном оформлении там и прочая, даже на Зазеркалье кажись было.
YPermitin; +1 Ответить
19. YPermitin 9795 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 123 11.01.20 14:36 Сейчас в теме
метод "Выполнить" процессора вывода
Вывести
28. user_2010 524 31.01.20 16:17 Сейчас в теме
можно ли вывести картинку в качестве фона и на нее вывести текст отчета?
Спасибо!
31. Antoska 13 18.03.20 13:28 Сейчас в теме
Лично мне понадобилось добавить в функцию ПолучитьИзображение() проверку на пустую ссылку:
Если ТипЗнч(ПрисоединенныйФайл) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") И Не ПрисоединенныйФайл.Пустая() Тогда

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

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


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


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

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

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

Если я не прав - дайте пожалуйста пример.
40. Hatson 415 20.10.20 17:57 Сейчас в теме
(39) У меня речь НЕ идет про вычисляемое поле.
Речь идет про обработчик ПриКомпоновкеРезультата()
Оставьте свое сообщение

См. также

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    37572    unichkin    74    

Вычислить РАЗНОСТЬДАТ в рабочих днях

Практика программирования БСП (Библиотека стандартных подсистем) v8::Запросы v8::СКД ERP2 БП3.0 УТ11 ЗУП3.x Бесплатно (free)

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

20.10.2020    615    antonivan    4    

Вывод дерева в табличный документ СКД

Практика программирования Универсальные функции v8 v8::СКД Бесплатно (free)

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    2630    Yashazz    6    

Роль "Остатки" поля набора данных СКД в отчете и в расшифровке

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

24.05.2020    3139    kasper076    16    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    30589    tormozit    100    

Макет оформления в отчете с несколькими СКД

Практика программирования v8::СКД Россия Бесплатно (free)

Как заставить работать макет оформления в отчёте с несколькими СКД.

14.05.2020    2469    vendim    1    

СКД. Использование Менеджера временных таблиц в системе компоновки

Практика программирования v8 v8::Запросы v8::СКД 1cv8.cf Бесплатно (free)

С выпуском платформы 8.3.17 фирма 1С анонсировала возможность передачи в механизм системы компоновки данных менеджера временных таблиц. Платформа вышла из беты, самое время разобраться с новым механизмом, тем более в комментариях я встретил непонимание принципов работы этого нововведения. Постараюсь кратко.

29.04.2020    6117    the1    28    

Ограничения полей, или как обмануть СКД?

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Каждое из ограничений полей можно обойти. Рассмотрим варианты обхода и способы обезопасить свой отчет.

15.04.2020    7357    SeiOkami    38    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    78222    tormozit    131    

Работа с запросами в 1С СКД. Отладка СКД

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

В предыдущем разделе мы изучали с вами особенности работы с запросами в СКД. Для изучения (отладки) работы различных схем компоновки данных я использовал консоль компоновки данных.

15.04.2020    3464    ProfessionStore    3    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

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

13.04.2020    5665    ProfessionStore    4    

СКД: Прозрачная обработка результата

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

В статье дан ответ на вопрос о том, как "прозрачно" обработать результат компоновки (да хотя бы картинки вставить после того, как отчет сформирован).

13.04.2020    3978    starik-2005    16    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    48697    tormozit    41    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 2

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

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

12.04.2020    4534    ProfessionStore    11    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 1

Практика программирования v8::Запросы v8::СКД 1cv8.cf Россия Бесплатно (free)

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

11.04.2020    5786    ProfessionStore    8    

Работа с запросами в 1С СКД. Язык выражений СКД и подмена запросов

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

Хотя эта статья называется «Работа с запросами в 1С СКД», нельзя не упомянуть про язык выражений СКД. Да – у системы компоновки данных есть свой язык! Это не язык платформы 1С, это не язык запросов. Это еще один язык, который используется 1С в СКД для обработки полученного набора (ов) данных.

11.04.2020    5992    ProfessionStore    24    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    45045    tormozit    74    

Работа с запросами в 1С СКД. Примеры использования расширения языка запросов СКД

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

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

10.04.2020    6006    ProfessionStore    4    

Запросы 1С СКД. Возможности и ограничения

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

В этом цикле статей мы рассмотрим особенности работы системы компоновки данных с запросами в 1С.

10.04.2020    7298    ProfessionStore    14    

Вложенные СКД

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

Возможности, нюансы, заметки.

26.03.2020    5905    Yashazz    19    

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

Практика программирования Разработка v8 Бесплатно (free)

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

25.04.2019    16130    m-rv    2    

СКД - одна из проблем связи Наборов данных

Практика программирования v8::СКД 1cv8.cf Россия Бесплатно (free)

Официальная информация: 1. В схеме компоновки данных нет указания типа связи. Все связи считаются ЛЕВЫМИ внешними соединениями. 2. Если для вложенного набора данных указано условие фильтра, тогда связь вложенного набора данных с родительским набором данных считается ВНУТРЕННЕЙ. Или как получить все результаты основного набора при отборе в зависимом.

03.03.2020    5138    BelikovSA    9    

Получение значений всех полей в иерархии структуры отчета

Практика программирования Математика и алгоритмы v8::СКД Россия Бесплатно (free)

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

28.02.2020    2178    real_MaxA    1    

Для чего нужен флаг "Автозаполнение" в СКД и каких проблем без него можно избежать

Практика программирования v8 v8::СКД Бесплатно (free)

Речь пойдет о флаге «Автозаполнение» в наборе данных Запрос Системы компоновки данных (СКД). Сразу хочу отметить, что флаг «Автозаполнение» доступен только в наборе данных - Запрос.

26.02.2020    6585    Neti    41    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    20389    m-rv    17    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    28090    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

15.01.2020    24760    John_d    22    

СКД. Шаг 3. Используем макеты для оформления отчета

Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

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

13.01.2020    15457    aximo    14    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    30892    m-rv    21    

Активный 2019 год на Инфостарт

О сообществе О жизни Бесплатно (free)

О прошедшем 2019 годе в 100 и 500 словах.

26.12.2019    5976    YPermitin    24    

[СКД] Вывод картинки в результат любого отчета на СКД

Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

Если у вас в справочнике Номенклатура (или другом справочнике) заполнена картинка, то ее можно легко вывести для наглядности отчета.

09.12.2019    9161    John_d    16    

СКД. Лайфхак №2. Собираем отчет еще удобнее

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

20.11.2019    10149    aximo    17    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    28356    itriot11    34    

Некоторые редко используемые возможности СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

11.11.2019    11555    kser87    40    

Лайфхак работы с СКД. Собираем отчет.

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

В этой статье я опишу небольшой "лайфхак" по сборке отчетов в СКД. Думаю, этот подход будет интересен тем, кто хочет быстро оформить отчет.

25.10.2019    21085    aximo    37    

Немного про СКД. Характеристики и проверка пустого отчета

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

Пример использования характеристик в СКД и программная работа с ними. А также описание проверки результата отчета на заполненность.

10.10.2019    11942    YPermitin    7    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76701    Serginio    108    

Полезняшки по СКД и построителям. Просто код

Практика программирования Универсальные функции v8 v8::СКД Бесплатно (free)

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    10064    Yashazz    45    

Две схемы СКД в одном отчете с пользовательскими параметрами

Практика программирования v8::СКД Россия Бесплатно (free)

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

10.10.2019    9491    evgeni-red    8    

Три способа создания одного отчета на СКД

Практика программирования v8 v8::СКД ERP2 УТ11 КА2 Бесплатно (free)

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

08.10.2019    14398    ids79    26    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    35205    ids79    40    

СКД не только для отчетов

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

18.09.2019    19468    YPermitin    36    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    50568    ids79    54    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    85573    ids79    49    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    29386    grumagargler    28    

Форма отчета СКД

Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Описание объекта ОбщиеФормы – ФормаОтчета.

01.08.2019    11610    vasilev2015    5    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    24617    json    14    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

26.07.2019    61806    ids79    11    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

Практика программирования v8 Бесплатно (free)

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

04.09.2017    53081    m-rv    61    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

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

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    36391    ids79    27    

Пользовательские настройки системы компоновки данных

Практика программирования Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

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

09.07.2019    27242    ids79    2    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    19795    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    48200    ids79    17