Отчет по товарам на складах с Изображениями номенклатуры (пример, как вывести картинку СКД)

20.04.12

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

Маленький пример, как вывести изображение номенклатуры в отчет СКД

Скачать файл

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

Наименование По подписке [?] Купить один файл
Отчет по товаром с изображением (небольшой пример)
.erf 20,08Kb
211
211 Скачать (1 SM) Купить за 1 850 руб.

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

Условия:

  1. В запросе всегда выводим поле Основное изображение из Номенклатуры,

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

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

                Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
                Рисунок.ВыводитьНаПечать = Истина;
 
                Рисунок.Расположить(Область.ТекущаяОбласть);
 
                ТабДок.ВставитьОбласть(Область.ТекущаяОбласть,ТабДок.Область("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0")));
 
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
КонецЕсли;
 
//************************

Думаю тут все понятно, из элементов формы обрабатываем только Даты, в параметры.

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


(Бывает глючит: тогда делаем поле тип не "Текст", а "Параметр" и задаем одинаковое имя для "Параметра" и "Параметра расшифровки". По умолчанию он напишет : Представление(ИмяПараметра)) стираем Представление и меняем тип поля на Текст и остается только один параметр Расшифровки.

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

Ну вот как то так.

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

Всем удачной работы.

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

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

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

10000 руб.

02.09.2020    159668    875    399    

862

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

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

15.05.2024    8726    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    7011    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3155    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

11.12.2023    10828    23    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    8049    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. fomix 33 24.10.11 12:52 Сейчас в теме
Большое спасибо за пример отчета. Все получилось! Пример рабочий 100%.
3. lm-alex 148 24.10.11 13:47 Сейчас в теме
15. master-adm 18.04.12 10:14 Сейчас в теме
(3) киньте ссылку отчета на мэйл master-adm@mail.ru, пробую ваш сценарий на 1c 8.2, ругани платформы нет, но и не выводит картинку
4. fomix 33 24.10.11 17:33 Сейчас в теме
Пытаюсь самостоятельно создать произвольный отчет из справочника Номенклатура (номенклатура+фото). Схема готова, но при создании поля в макете картинка параметра отличается от той, что в вашем отчете. Вместо прочерка стоит "лупа". Все перепробовал не получается! См. приложение.
При попытке поменять запрос в вашем отчете, запрашивает пароль на модуль. Он почему-то с паролем! А что там может такого быть... не пойму! Спасибо за ответ!
Прикрепленные файлы:
5. lm-alex 148 24.10.11 17:40 Сейчас в теме
Пароль?! Странно.. вообще там нет в модуле ничего, но пароль и вправду был, снял. могу кинуть на мыло файл...
На счет этой ошибки я описывал ситуацию...
Надо сначала сделать вывод ячейки Параметр и Задать имя параметра и параметра расшифровки например "ОсновноеИзображение", в выражении что у вас на картинке указываем Поле от куда будет заполняться параметр..
тк имена совпадают он будет одной строчкой... потом меняем вывод обратно на текст и получится как у меня... Не понимаю почему так надо делать, возможно какой то глюк платформы.
6. fomix 33 25.10.11 09:43 Сейчас в теме
Да уж! Шаманство помогло. Смог самостоятельно сделать простой отчет. Еще раз спасибо!
7. lm-alex 148 25.10.11 09:45 Сейчас в теме
Пожалуйста.
Не без этого,пришлось голову поломать, а так в принципе все просто.)
8. Nick5k 26.10.11 10:56 Сейчас в теме
Скачать пока рейтинга не хватает, если можно выслать на мейл nick5k@mail.ru
9. sai-2010 31.10.11 09:43 Сейчас в теме
Спасибо автору!
Отличная обработка!
Все посто и красиво.
Спасибо
10. AlexeyK1 14 12.12.11 11:08 Сейчас в теме
lm-alex пишет:
На счет этой ошибки я описывал ситуацию...
Надо сначала сделать вывод ячейки Параметр и Задать имя параметра и параметра расшифровки например "ОсновноеИзображение", в выражении что у вас на картинке указываем Поле от куда будет заполняться параметр..
тк имена совпадают он будет одной строчкой... потом меняем вывод обратно на текст и получится как у меня... Не понимаю почему так надо делать, возможно какой то глюк платформы.


понять бы в чем причина такого шаманства потому что на 8.2 так же приходится шаманить
11. пользователь 13.01.12 16:28
Сообщение было скрыто модератором.
...
12. lm-alex 148 13.01.12 16:44 Сейчас в теме
13. Evgeniy 106 25.02.12 13:42 Сейчас в теме
Думал только мне не повезло с извращенцами, которые хотят продажи видеть с картинками товаров, а нет.
Таких индивидуумов хватает:)

Автор спасибо за труд.
За 10 минут осилил отчет с картинками, на примере твоего шаблона.
14. lm-alex 148 27.02.12 16:10 Сейчас в теме
за 6 Лет на рынке с франчами и не такое повидаешь...)) Всегда пожалуйста. Пользуйтесь на здоровье.
39. Evgeniy_begin_progger 04.09.14 09:06 Сейчас в теме
(14) привет! у меня такая проблема:
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Что мы получаем в качестве элемента?
Это мне важно потому, что мне нужно достать из ХранилищаЗначений картинку, вот мой код:

СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.НачатьВывод();

Пока Истина Цикл

ЭлементРезультата = ПроцессорКомпоновки.Следующий();

Если ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;

ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
Если ЭлементРезультата.ЗначенияПараметров.Количество() = 0 Тогда
Продолжить;
КонецЕсли;

Для Каждого ЭлементПараметра Из ЭлементРезультата.ЗначенияПараметров Цикл
Если ТипЗнч(ЭлементПараметра.Значение) = Тип("ХранилищеЗначения") Тогда
Изображение = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Изображение.РазмерКартинки = РазмерКартинки.АвтоРазмер;
Индекс = ДокументРезультат.Рисунки.Индекс(Изображение);
ДокументРезультат.Рисунки[Индекс].Картинка = Новый Картинка(ЭлементПараметра.Значение.Получить(), Истина);
ОбластьИзображение = ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы, 2);
ОбластьИзображение.АвтоВысотаСтроки = Ложь;
ДокументРезультат.Рисунки[Индекс].Расположить(ОбластьИзображение);
ОбластьИзображение.ВысотаСтроки = ОбластьИзображение.Примечание.Высота - ОбластьИзображение.Примечание.Верх;
КонецЕсли;

КонецЦикла;

КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();

Но почему то тип значения ХранилищеЗначения он не определяет, и только 3 типа у ЭлементПараметра.Значение: Null, Число и идентификатор расшифровки компоновки значения.

Изображение - получаю в запросе, Номенклатура.ОсновноеИзображение
40. lm-alex 148 04.09.14 10:00 Сейчас в теме
(39) Evgeniy_progger_1C, Ну если ты решил идти таким путем, то тебе надо ловить картинтку не через расшифровку, а через параметр, и тип у реквизита СправочникСсылка.ХранилищеДополнительнойИнформации - а там уже хранилище. см вложение.
Прикрепленные файлы:
41. Evgeniy_begin_progger 04.09.14 11:43 Сейчас в теме
(40) выдает ошибку, если твой отчет запускаю:
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{ВнешнийОтчет.Товары.МодульОбъекта(33)}: Ошибка при установке значения атрибута контекста (Картинка)
Изображение.Картинка = ИзображениеТовара;
по причине:
Несоответствие типов

И он в строчке
ИзображениеТовара = ЭлементПараметра.Значение.Хранилище.Получить();
не получает изображение!
42. lm-alex 148 04.09.14 12:22 Сейчас в теме
(41) Evgeniy_progger_1C, Пользуйся отладчиком!, смотри какие принимают значения переменные, на какую позицию ругается, если там вообще картинка и тд. У меня все отработало.
43. mudrak 29.05.15 12:44 Сейчас в теме
(41)(41) Evgeniy_progger_1C, это ругается на отсутствующую картинку, надо проверку добавить. Например так, хоть и коряво:
Если ТипЗнч(ЭлементПараметра.Значение) = Тип("СправочникСсылка.ХранилищеДополнительнойИнформации") И ЗначениеЗаполнено(ЭлементПараметра.Значение.Хранилище) И ЭлементПараметра.Значение.ИмяФайла <> "" Тогда
16. bobaG 62 16.05.12 13:49 Сейчас в теме
17. Tommy82 65 16.05.12 13:52 Сейчас в теме
lm-alex, ЧЕЛОВЕЧИЩЕ!
СПАСИБО, ДРУГ, ЗА ЭТОТ КОММЕНТАРИЙ!
ТЫ ДАЖЕ НЕ ПРЕДСТАВЛЯЕШЬ КАК ТЫ ПОМОГ ЧЕЛОВЕЧЕСТВУ В ЛИЦЕ МЕНЯ! :)
Настроить макет просто: В макетах в СКД выбираем добавить макет поля, выбираем ячейку и добавляем только один параметр в расшифровку как называется у нас поле в запросе с изображением, на картинке видно. (Бывает глючит: тогда делаем поле тип не Текст а параметр и задаем одинаковое имя Параметра и Параметра расшифровки, по умолчанию он напишет : Представление(ИмяПараметра)) стираем Представление и меняем тип поля на Текст и остается только один параметр Расшифровки.

Я два дня не могу понять почему не получается!
сначала на своём примере - думал, сам туплю! потом накачал кучу отчётов с выводом картинки - убиваю макеты, сам делаю макет, опять не получается!
заметил, что иконки разные в "Параметры макета" "Имя параметра" - но не думал, что в них дело!
Причём один тестовый отчёт как-то получился, но сам дурак - не просёк в чём дело и где копать!

Спасибо тебе, коллега! удачи и успехов!
Ваще мега помог!
не могу сдержать эмоций!

если кому-то потребуется - у меня глюкнуло на Вин7 Проф, 8.2.15.301, 11.0.7.21, файловый вариант

сейчас проверил - всё алле зер гут!
18. lm-alex 148 16.05.12 14:08 Сейчас в теме
Бывает)) 1С Волшебная программа..
Всегда рад стараться! Спасибо за комментарии)
19. pedroo 27.08.12 01:05 Сейчас в теме
20. pedroo 28.08.12 00:44 Сейчас в теме
21. пользователь 24.01.13 06:34
Сообщение было скрыто модератором.
...
22. kip989 24.01.13 08:48 Сейчас в теме
23. jarik1409 20.03.13 13:34 Сейчас в теме
Доброго времени суток!У меня такой вопрос: как добавить логотип фирмы в отчет!
Извините если не по теме!!!!
24. lm-alex 148 20.03.13 14:32 Сейчас в теме
При выводе уже данных сформированных СКД, ПолеТабличногоДокумента, что на форме, не обязательно должно быть пустым. Ну вот.. Если посмотреть по коду, где выводим отчет, там есть такие строки:
Результат = ЭлементыФормы.Результат;
Результат.Очистить();

Вот после этого можно вставить логотип в Результат.
Создайте макет, на нем создайте область, туда вставьте рисунок и его выводить в при формировании отчета.
Как то так:
Результат.Вывести(ПолучитьМакет("МакетЛоготип").ПолучитьОбласть("ОблЛоготип"));
jarik1409; +1 Ответить
25. jarik1409 20.03.13 15:24 Сейчас в теме
(24) Спасибо! А увас нету примерчика такого отчета?
26. lm-alex 148 20.03.13 15:33 Сейчас в теме
Сейчас на этом примере сделаю.
27. jarik1409 20.03.13 15:35 Сейчас в теме
28. lm-alex 148 20.03.13 15:54 Сейчас в теме
29. Agnat7 26.03.13 17:26 Сейчас в теме
Доброго времени суток! Скиньте пожалуйста свой пример (Отчет по товарам на складах с Изображениями номенклатуры) в личку.
Agnat@mail.ru(28)
30. pikos 31.05.13 13:24 Сейчас в теме
Если можно пришлите пожалуйста отчет с выводом картинки номенклатуры на pikos@nm.ru Заранее Вам благодарен!
31. Atom74 40 25.07.13 15:35 Сейчас в теме
Если можно пришлите пожалуйста отчет с выводом картинки номенклатуры на info@atom74.com Заранее Вам благодарен!
32. Heiton007 09.07.14 15:18 Сейчас в теме
Пришлите пожалуйста отчет с выводом картинки на Goth007@yandex.ru
33. Evgeniy_begin_progger 02.09.14 13:07 Сейчас в теме
Область = ТабДок.ПолучитьОбласть("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0"));
ТекОбласть = ТабДок.Область("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0"));
Расшифровка = ТекОбласть.Расшифровка;

Могли бы вы пояснить, откуда параметры области вы брали?
35. lm-alex 148 02.09.14 13:16 Сейчас в теме
34. Evgeniy_begin_progger 02.09.14 13:08 Сейчас в теме
и еще вопрос: каким образом связывается номенклатура с правильной картинкой?
36. lm-alex 148 02.09.14 13:20 Сейчас в теме
Evgeniy_progger_1C, Картинка хратится в реквизите Основное изображение, тип Хранилище значения. А область, я проверяю все ячейки табличного документа и уже заполяняю изображения. Это конечно не самый удачный метод, но на тот момент в голову ничего больше не пришло.
37. Evgeniy_begin_progger 02.09.14 13:41 Сейчас в теме
А сейчас есть что-нибудь новое?
Мне нужно в СКД макет добавить ячейку с картинками номенклатуры.
Так вот у меня вопрос: можно ли реализовать добавление путем изменения только процедуры кнопки сформировать?
38. lm-alex 148 02.09.14 14:07 Сейчас в теме
(37) Evgeniy_progger_1C, Можно не переписывать процедуру Кнопки сформировать. Все выше сказанное можно заполнять в Предопределенной процедуре ПриКомпоновкеРезультата() в модуле объекта Отчета. через ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент. Я сам не делал, не было необходимости, http://help1c.com/faq/view/1234.html - тут что то похожее, но как то сложновато, ено смысл уловить можно.
44. jobkostya1c_ERP 100 16.09.15 17:45 Сейчас в теме
Одно большое спасибо за мысль
В запросе всегда выводим поле Основное изображение из Номенклатуры
сам бы точно я не додумался :)
45. пользователь 23.08.17 10:46
Сообщение было скрыто модератором.
...
46. пользователь 19.11.19 19:12
Сообщение было скрыто модератором.
...
47. пользователь 20.11.19 08:53
Сообщение было скрыто модератором.
...
Оставьте свое сообщение