Картинка в таблице СКД (управляемое приложение) на примере УТ11, простое решение "в лоб" или легкая модификация стандартного отчета Прайс-Лист

11.04.13

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

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

Файлы

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

Наименование Скачано Купить файл
ПрайсЛист000.erf
.erf 12,93Kb
287 2 500 руб. Купить

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

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

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

Итоговая задача: построить прайс-лист с изображениями номенклатур для УТ (т.е. в прайсе предполагается выводить изображения, которые показываются в карточке номенклатуры)

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

Будем дорабатывать стандартный отчет УТ 11.0.9.15 Прайс-лист, для удобства сохраним его в качестве внешнего.  

Порядок действий для вывода картинок в печатной форме СКД:

1. К запросу СКД добавляем поле со ссылкой на справочник НоменклатураПрисоединенныеФайлы, соответствущей элементу номенклатуры.

2. При выводе соответствующего элемента макета читаем информацию о картинке и выводим её в соответствующей ячейке:

   2.1. Получаем ячейку табличного документа, в которой предполагается вывести кртинку.

   2.2. Преобразуем бинарную информацию по ссылке, полученной в п.1. в картинку и выводим её в ячейке, полученной в п.2.1.

   2.3. Производим дополнительное оформление ячейки и картинки (меняем размер, цвет линии и тд.)

 

Итак по вышеописанному плану:

Добавим в запрос СКД новое поле Изображение:

ЦеныНоменклатурыСрезПоследних.Номенклатура.ФайлКартинки КАК Изображение

Поле в Запрос СКД

Видоизменим варианты настроек (добавим группировку по Изображению):

Изменение настроек СКД 

Добавим новый параметр ШиринаКолонкиИзображения, через который будем регулировать размер изображения:

Параметры СКД

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

СтандартнаяОбработка = Ложь;
ИмяКолонкиИзображения = "Изображение";
ДокументРезультат.Очистить();

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Получаем параметр отчета ШиринаКолонкиИзображения, и устанавливаем ширину колонки, в которой предполагаем выводить изображение
ШиринаКолонкиИзображения = ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "ШиринаКолонкиИзображения", 20); //В средних символах

ПолеИзображения = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Поля.Найти(ИмяКолонкиИзображения);
Если Не ПолеИзображения = Неопределено Тогда
     ОформлениеМинимальнойШириныКолонки = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Поля.Найти(ИмяКолонкиИзображения).Оформление.Элементы.Найти("МинимальнаяШирина");
     ОформлениеМинимальнойШириныКолонки.Использование = Истина;
     ОформлениеМинимальнойШириныКолонки.Значение = ШиринаКолонкиИзображения;
КонецЕсли;
 

//Выводим макет, здесь все почти стандартно.

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

Для удобства процедура вывода изображения выделена в отдельную, эта процедура просто получает данные для вывода рисунка, выводит его (используя функцию), настраивает его оформление.

Процедура ВывестиИзображениеЭлементаНоменклатуры(ТД, ЭлементСправочника, Область, ШиринаКолонкиИзображения)
     Если ЭлементСправочника.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
         СтуктураРег = РегистрыСведений.ПрисоединенныеФайлы.Получить(Новый Структура("ПрисоединенныйФайл", ЭлементСправочника));
         ДанныеКартинки = СтуктураРег.ХранимыйФайл.Получить();
     Иначе
         ДанныеКартинки = ?(ЗначениеЗаполнено(ЭлементСправочника.Том.ПолныйПутьWindows), ЭлементСправочника.Том.ПолныйПутьWindows, ЭлементСправочника.Том.ПолныйПутьLinux)
         + ЭлементСправочника.ПутьКФайлу;
     КонецЕсли;
     Рисунок = ВывестиИзображениеВОбластиТД(ДанныеКартинки, ТД, Область);
     Область.АвтоВысотаСтроки = Ложь;
     Область.ВысотаСтроки = ШиринаКолонкиИзображения * 1.31 / 0.3759;// Среднее значение пункта 1 пункт = 0.3759 мм (по Wiki)
     Область.Расшифровка = ЭлементСправочника;
     Рисунок.ЦветЛинии = Область.ЦветРамки;
КонецПроцедуры 

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

Функция ВывестиИзображениеВОбластиТД(ДанныеКартинки, ТД, Область)
     Изображение = ТД.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
     Изображение.РазмерКартинки = РазмерКартинки.АвтоРазмер;
     Индекс = ТД.Рисунки.Индекс(Изображение);
     ТД.Рисунки[Индекс].Картинка = Новый Картинка(ДанныеКартинки, Истина);
     ТД.Рисунки[Индекс].Расположить(Область);
     Возврат ТД.Рисунки[Индекс];
КонецФункции

Кроме того при компоновке используется процедура извлечения параметра из СКД:

Функция ВернутьЗначениеПараметраНастройкиСКД(КоллекцияЭлементовНастройки, ИмяНастройки, ЗначениеПоУмолчанию = Неопределено)

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

Готовый отчет доступен к скачиванию. 

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

ПрайсЛист

ЗЫ: Существует некоторое незначительное развитие данного отчета: Прайс лист с картинками для УТ11 (добавление логотипа и свободных текстовых полей)

 

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

См. также

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

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

16500 руб.

02.09.2020    250800    1390    421    

1145

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

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

29.01.2026    5828    305    shapa_pro    25    

67

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

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

29.10.2025    17357    ovetgana    112    

107

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

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

01.07.2025    10109    krasnoshchekovpavel    5    

68

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

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

10.04.2025    9391    Neti    0    

41

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

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

27.02.2025    16013    ovetgana    50    

93

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

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

24.12.2024    13659    Akcium    17    

46

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

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

20.08.2024    10263    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. @lexandr 142 08.04.13 12:02 Сейчас в теме
Пришлось немного эту функцию переделать, а то ошибки иногда выдает, а так очень помогло, вывел в прайс на ут 11.1.1.13 картинку.

Функция ВернутьЗначениеПараметраНастройкиСКД(КоллекцияЭлементовНастройки, ИмяНастройки, ЗначениеПоУмолчанию = Неопределено)

Настройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяНастройки);
Если Настройка = Неопределено Тогда Возврат ЗначениеПоУмолчанию; КонецЕсли;
НастрокаПоИД = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Настройка.ИдентификаторПользовательскойНастройки);
Если НастрокаПоИД = Неопределено Тогда
Возврат ЗначениеПоУмолчанию;
Конецесли;
Если Не ЗначениеЗаполнено(НастрокаПоИД.Значение) Тогда
Если Не ЗначениеПоУмолчанию = Неопределено Тогда
НастрокаПоИД.Значение = ЗначениеПоУмолчанию;
КонецЕсли;
КонецЕсли;
Возврат ?(НастрокаПоИД.Использование, НастрокаПоИД.Значение, ЗначениеПоУмолчанию);
КонецФункции
Nigelist; +1 Ответить
2. mxm2 1287 08.04.13 13:26 Сейчас в теме
(1) @lexandr, Странно, у меня вообще ошибок не возникало никогда, причем во всех трех версиях отчета, даже здесь http://infostart.ru/public/178422/, возможно проблема в том, что какое-либо поле исключено из пользовательских настроек.
30. Nigelist 09.03.19 03:53 Сейчас в теме
(1) Спасибо, помогло
3. tolyan_ekb 80 11.06.13 08:16 Сейчас в теме
Отличное решение без доп. макета. На основе публикации сделал похожее для картинок из внешних файлов. Огромное спасибо.
4. tolyan_ekb 80 11.06.13 09:35 Сейчас в теме
Почему-то у меня не получается изменить высоту строки с изображением. Пробовал и явно, и с помощью изменения в коде
Область.ВысотаСтроки = ШиринаКолонкиИзображения * 134.31 / 0.3759;
5. mxm2 1287 11.06.13 10:00 Сейчас в теме
(4) tolyan_ekb,

вот здесь: http://infostart.ru/public/178422/

Upd 07.04.2013: Добавлена возможность подгонки строки прайса по высоте отображаемой картинки (устанавливается в параметрах), использует стандартную библиотеку wiaaut.dll, доступную, например в windows 7, и не будет работать, если сервер вертится на linux системе (файл ПрайсЛистХX)


родной адекватно работающей функции - не нашел.
6. mxm2 1287 11.06.13 10:12 Сейчас в теме
(4) tolyan_ekb, смотрите пятый комментарий.
8. tolyan_ekb 80 13.06.13 11:22 Сейчас в теме
(6) спасибо. Но я установил высоту напрямую в условном оформлении, после чего она изменилась. Возможно, программно чего-то не доуказал.
9. varovinm 25.10.13 13:35 Сейчас в теме
(6) Спасибо!
Не срабатывает инициализация ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки)
Дело в том, что у меня в СКД есть параметры в которых задано выражение, например, Справочники.Валюты.НайтиПоКоду("156"). Может быть подскажете как получить значение у этих параметров????
Прикрепленные файлы:
10. mxm2 1287 25.10.13 15:35 Сейчас в теме
(9) varovinm, попробуйте
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки, Истина);

вообще лучше либо задавать валюту в параметрах (неявно), либо получать её в запросе, например из констант.
7. mxm2 1287 11.06.13 13:12 Сейчас в теме
(4) tolyan_ekb, еще возможно в Вашем макете стоИт ограничение минимальной высоты строки или автовысота.
11. killexx 16.12.13 23:47 Сейчас в теме
Реально ли сделать такой прайс для 1С 8.1, "Управление торговлей для Украины", редакция 2.3 ?
Прикрепленные файлы:
12. mxm2 1287 17.12.13 08:05 Сейчас в теме
(11) killexx, Реально всё. Если Ваша конфигурация на управляемых формах то за образец можете использовать текущую разработку. Если же на обычных формах - то, например вот эту http://infostart.ru/public/151012/.
13. MarryJane 38 24.11.14 14:13 Сейчас в теме
Коллеги, а скажите может есть мысли при выведении отчета с картинками уж больно долго выводится. Может у кого нить есть мысли куда копать. (Я попробывал выводить в УПР интерфейсе и в простом, так вот в простом интерфейсе выводится быстрее на порядок). может начать смотреть размеры картинок.
14. ReSY 116 04.12.14 12:10 Сейчас в теме
Понравилась реализация, автору плюс! На примере публикации создал отчет. Большое спасибо.
15. Graf71 04.06.15 14:24 Сейчас в теме
Спасибо автору за публикацию. Очень помогло в собственной разработке.
16. sergiowood 08.06.15 01:06 Сейчас в теме
Попробовал сделать по данной схеме отчёт, выдаёт ошибку
"Поле изображение не может быть использовано в группировке номенклатура, упаковка, характеристика"
Подскажите пожалуйста в чём может быть проблемка?
Делал на УТ 11.1.4.14 , на основе типового отчёта "Прайс"
Если "изображение" как ресурс, то ошибку не выдаёт но и поле "изображение" не выводит вообще
17. пользователь 08.06.15 01:09
Сообщение было скрыто модератором.
...
18. Lev292 36 22.11.16 23:43 Сейчас в теме
В последних версиях УТ11 этот отчет уже не работает!!!
Ребята из 1С сами задействовали Процедуру ПриКомпоновкеРезультата и если там поставить СтандартнаяОбработка = Ложь. то отчет перестает работать
19. ssn5810 25.03.17 00:37 Сейчас в теме
Да отчет не работает
Метод объекта не обнаружен ПолучитьПараметр
Jack_off; Aquashop; +2 Ответить
20. Margo_X 05.04.17 14:26 Сейчас в теме
В версии УТ 11 _11.3.2.207 отчет не работает

Метод объекта не обнаружен ПолучитьПараметр
Jack_off; ewgeniy1000; Aquashop; +3 Ответить
21. Orchild 08.08.17 11:23 Сейчас в теме
Функция ПоучитьПараметр находится в общем модуле КомпоновкаДанныхКлиентСервер.
22. waol 322 10.10.17 10:29 Сейчас в теме
прекрасно - работает )
спасибо!
23. bad_wag 55 17.11.17 14:59 Сейчас в теме
На небольших объемах все это хорошо работает, но когда в отчете тысячи строк и в каждой картинка время ожидание неприемлемо велико. Есть у кого нибудь идеи как оптимизировать этот нюанс? Очень бы хотелось без изменения конфигурации
24. RocKeR_13 1469 30.05.18 11:42 Сейчас в теме
Хм, делал по аналогии и такая получается штука: в файловой базе 550 строк с картинками выводит за 3-4 минуты, перевожу базу на SQL - спустя полчасатак никаких результатов и не видно... Пока отладку не включал, вставил записи в ЖР: в процедуре "ПриКомпоновкеРезультата" строку "ПроцессорВывода.ЗакончитьВывод();" успешно проходит... Картинки пробовал и в базе размещать, и в каталогах
UPD: спустя 40 минут все-таки вывел
27. Els11 18 13.10.18 21:30 Сейчас в теме
(24) Самое узкое место в выводе отчета с картинками это передача его обратно с сервера на клиента, При передаче платформа сериализует табличный документ и передает таким образом в разы больше информации , чем нужно. А на клиенте съедаются в это время Гигабайты.дискового постранства. У меня при выводе отчета продаж за месяц отчет вообще падал с ошибкой формата потока. Нашел следующий выход:
Если отчет не в типовом решении, то в обработку на сервер не надо передавать табличный документ.
При окончании обработки на сервере созданный табличный документ помещается во временной хранилище. Адрес временного хранилища можно задать или в реквизите формы или передать с клиента. А на клиенте уже из временного хранилища создается табличный документ. Что-то типа следующего:
&НаКлиенте
Процедура Сформировать(Команда)
	Адрес = "";
	СформироватьОтчетНаСервере(Адрес, Период);
	
	ТабДок = ПолучитьИзВременногоХранилища(Адрес);
	ТабДок.Показать();
КонецПроцедуры

&НаСервере
Процедура СформироватьОтчетНаСервере(Адрес, Период);
	ТабДок = Новый ТабличныйДокумент;
	ОбъектОтчет = РеквизитФормыВЗначение("Отчет");
	ОбъектОтчет.СформироватьОтчет(ТабДок, Период);
	
	Адрес = ПоместитьВоВременноеХранилище(ТабДок,ЭтаФорма.УникальныйИдентификатор);
КонецПроцедуры
Показать

Если про типовое решение, то в отчете по себестоимости и выручке продаж сделал так:
1) скопировал и создал из типового отчета свой отчет ОтчетПродажиСИзображением
2) Скопировал общую форму отчета и поместил ее в новый отчет
3) Выбрал форму отчета - новую форму отчета
4) в новой форме отчета добавил реквизит АдресН Тип строка неограниченной длины
5) в форме отчета в процедуре ФоновоеЗаданиеЗагрузитьРезультат закомментировал стандартную передачу результата табличного документа и добавил строку по помещению табличного документа во временное хранилище
	//ОтчетТабличныйДокумент = РезультатФормирования.ТабличныйДокумент;
	АдресН = ПоместитьВоВременноеХранилище(РезультатФормирования.ТабличныйДокумент,ЭтаФорма.УникальныйИдентификатор);

6) в процедуре ПослеФормирванияНаКлиенте добавил строку в начале процедуры
	ОтчетТабличныйДокумент = ПолучитьИзВременногоХранилища(АдресН);

Отчет из полутора тысяч строк вводится за 3 минуты. Отчет за месяц, который ранее не выводился вообще, выводится менее 15 минут. Работает в фоне, при условии, что отчет в конфигурации, а не внешний. Все сделанные доработки тоже касаются варианта, что отчет встроенный. Если внешний, то возможно алгоритмы идут по другим веткам и потребуются доработки.
Serj1C; RocKeR_13; acanta; +3 Ответить
25. Els11 18 25.09.18 12:52 Сейчас в теме
Для текущих версий ЕРП и УТ11 в процедуре ВывестиИзображениеНоменклатуры вместо обращения к РС Присоединенные файлы необходимо прописать следующее (Сначала закомментированный код):
//Если ЭлементСправочника.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
// СтуктураРег = РегистрыСведений.ПрисоединенныеФайлы.Получить(Новый Структура("ПрисоединенныйФайл", ЭлементСправочника));
// ДанныеКартинки = СтуктураРег.ХранимыйФайл.Получить();
//Иначе
// ДанныеКартинки = ?(ЗначениеЗаполнено(ЭлементСправочника.Том.ПолныйПутьWindows), ЭлементСправочника.Том.ПолныйПутьWindows, ЭлементСправочника.Том.ПолныйПутьLinux)
// + ЭлементСправочника.ПутьКФайлу;
//КонецЕсли;

Вместо закомментированного, следующее

ДанныеКартинки = ПолучитьИзВременногоХранилища(РаботаСФайлами.ДанныеФайла(ЭлементСправочника).СсылкаНаДвоичныеДанныеФайла);

P.s. Если кто кинет ссылку на инструкцию как в комментариях красиво код оформлять, буду благодарен. (Чтобы красненькое красненьким было, синенькое сининьким).
ba2000; alexruzh67; +2 Ответить
26. RocKeR_13 1469 25.09.18 17:30 Сейчас в теме
(25)
Вот так))
Прикрепленные файлы:
28. user771753 24.10.18 21:12 Сейчас в теме
Айайай братюня затащил вообще молодец, все работает, даже без допиливания))) красавчик вообще, лукаснул тебе)))
29. Serj1C 484 21.02.19 12:15 Сейчас в теме
В 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
igee12; YPermitin; Spacer; +3 Ответить
31. notka 115 09.10.19 18:52 Сейчас в теме
Добрый день, может кто подскажет ((( Бьюсь с выводом картинок и вроде все норм, кроме того что картинка пустая. Картинки хранятся и в томах и в информационной базе. База УТ 11.3, платформа 8.3.10. Неделю уже всеми способами ковыряюсь, все равно пустые(
32. Clio24 06.02.20 15:15 Сейчас в теме
Увы и Ах! Все написанное выше уже не актуально для УТ 11.4.8.
33. dovolsky 01.10.21 08:36 Сейчас в теме
Для УТ 11.4 чуть поменял процедуры и все взлетело.
Процедура ВывестиИзображениеЭлементаНоменклатуры(ТД, ЭлементСправочника, Область, ШиринаКолонкиИзображения)
     Если ЭлементСправочника.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
         СтуктураРег = РегистрыСведений.ДвоичныеДанныеФайлов.Получить(Новый Структура("Файл", ЭлементСправочника));
         ДанныеКартинки = СтуктураРег.ДвоичныеДанныеФайла.Получить();
     Иначе
         ДанныеКартинки = ?(ЗначениеЗаполнено(ЭлементСправочника.Том.ПолныйПутьWindows), ЭлементСправочника.Том.ПолныйПутьWindows, ЭлементСправочника.Том.ПолныйПутьLinux)
         + ЭлементСправочника.ПутьКФайлу;
     КонецЕсли;
     Рисунок = ВывестиИзображениеВОбластиТД(ДанныеКартинки, ТД, Область);
     Область.АвтоВысотаСтроки = Ложь;
     Область.ВысотаСтроки = ШиринаКолонкиИзображения * 1.31 / 0.3759;// Среднее значение пункта 1 пункт = 0.3759 мм (по Wiki)
     Область.Расшифровка = ЭлементСправочника;
     Рисунок.ЦветЛинии = Область.ЦветРамки;
КонецПроцедуры 
Показать



Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	 
	 СтандартнаяОбработка = Ложь;
	 
	 ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Запрос;
	 ТекстЗапроса = СтрЗаменить(
	 ТекстЗапроса, 
	 "&ТекстЗапросаКоэффициентУпаковки", 
	 Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
	 "ЦеныНоменклатурыСрезПоследних.Упаковка", 
	 "ЦеныНоменклатурыСрезПоследних.Номенклатура"));
	 
	 ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"(&ПодстановкаТоварногоОграничения)","&ПодстановкаТоварногоОграничения");
	 Поля = "СвободныеОстаткиОстатки.Номенклатура,СвободныеОстаткиОстатки.Характеристика,СвободныеОстаткиОстатки.Склад";
	 ТекстЗапроса = РегистрыСведений.ТоварныеОграничения.ПодставитьСоединение(ТекстЗапроса, "ПодстановкаТоварногоОграничения", Поля);
	 
	 СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Запрос = ТекстЗапроса;
	 
	 
	 СегментыСервер.ВключитьОтборПоСегментуНоменклатурыВСКД(КомпоновщикНастроек);
	 
	 АссортиментСервер.ВключитьОтборПоАссортиментуВСКД(КомпоновщикНастроек);
	 
	 
	 ИмяКолонкиИзображения = "Изображение";
	 ДокументРезультат.Очистить();
	 
	 КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	 //Получаем параметр отчета ШиринаКолонкиИзображения, и устанавливаем ширину колонки, в которой предполагаем выводить изображение
	 ШиринаКолонкиИзображения = 20;//ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "ШиринаКолонкиИзображения", 20); //В средних символах
	 
	 ПолеИзображения = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Поля.Найти(ИмяКолонкиИзображения);
	 Если Не ПолеИзображения = Неопределено Тогда
		 ОформлениеМинимальнойШириныКолонки = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Поля.Найти(ИмяКолонкиИзображения).Оформление.Элементы.Найти("МинимальнаяШирина");
		 ОформлениеМинимальнойШириныКолонки.Использование = Истина;
		 ОформлениеМинимальнойШириныКолонки.Значение = ШиринаКолонкиИзображения;
	 КонецЕсли;
	 
	 
	 //Выводим макет, здесь все почти стандартно.
	 
	 Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
	 ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	 ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки,Истина);
	 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	 ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	 ПроцессорВывода.НачатьВывод();
	 Пока Истина Цикл
		 ЭлементРезультата = ПроцессорКомпоновки.Следующий();
		 Если ЭлементРезультата = Неопределено Тогда Прервать;КонецЕсли;
		 ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		 Если ЭлементРезультата.ЗначенияПараметров.Количество() = 0 Тогда Продолжить; КонецЕсли;
		 
		 Для Каждого ЭлементПараметра Из ЭлементРезультата.ЗначенияПараметров Цикл
			 Если ТипЗнч(ЭлементПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
				 Поля = ДанныеРасшифровки.Элементы[ЭлементПараметра.Значение].ПолучитьПоля();
				 Для Каждого Поле Из Поля Цикл
					 Если ТипЗнч(Поле.Значение) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") Тогда
						 Если Поле.Значение.Пустая() Тогда Продолжить; КонецЕсли;
						 //Поиск номера колонки, с нужным именем ИмяКолонкиИзображения, для таки вывода изображения
						 Для НомерКолонки = 1 По ДокументРезультат.ШиринаТаблицы Цикл
							 Расшифровка = ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы, НомерКолонки, ДокументРезультат.ВысотаТаблицы, НомерКолонки).Расшифровка;
							 Если Расшифровка = Неопределено Тогда Продолжить; КонецЕсли;
							 Поля = ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля();
							 Если Поля.Найти(ИмяКолонкиИзображения) = Неопределено Тогда Продолжить; КонецЕсли;
							 ОбластьИзображения = ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы, НомерКолонки);
							 ВывестиИзображениеЭлементаНоменклатуры(ДокументРезультат, Поле.Значение, ОбластьИзображения, ШиринаКолонкиИзображения);
						 КонецЦикла;
					 КонецЕсли;
				 КонецЦикла;
			 КонецЕсли;
		 КонецЦикла;
	 КонецЦикла;
	 ПроцессорВывода.ЗакончитьВывод();
 КонецПроцедуры
Показать
MAleksey1712; VagrantSAY; 1Cynep4eJIoBek; +3 Ответить
34. MAleksey1712 20.04.23 12:58 Сейчас в теме
(33)
Для УТ 11.4 чуть поменял процедуры и все взлетело.

Спасибо работает. УТ 11.4.8
Для отправки сообщения требуется регистрация/авторизация