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

20.04.12

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

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

Скачать файлы

Наименование Файл Версия Размер
Отчет по товаром с изображением (небольшой пример)
.erf 20,08Kb
211
.erf 20,08Kb 211 Скачать

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

Условия:

  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! 20%

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

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

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

12000 9600 руб.

02.09.2020    101157    557    385    

599

1C:Предприятие для программистов: Запросы и отчеты. Онлайн-интенсив с 27 ноября по 27 декабря 2023г.

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

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения. Курс является вторым курсом траектории развития 1С-Разработчика, с углубленным изучением тем "Язык запросов" и "Отчеты", которые были рассмотрены в рамках “Базового курса для начинающих 1С-программистов”.

7500 руб.

04.10.2023    2493    48    0    

47

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    3857    10    kalyaka    4    

80

Разрыв страницы в СКД. Легко!

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

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

01.09.2023    3147    KVIKS    15    

76

Гибкие отборы через СКД на управляемых формах. Демо-обработка

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

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

2 стартмани

07.06.2023    4575    26    quazare    7    

46

Вывод элементов иерархии верхнего уровня на СКД

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

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    4187    echo77    6    

72

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

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

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

07.02.2023    5475    quazare    7    

38
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. anton.fly7 173 21.10.11 16:53 Сейчас в теме
2. fomix 33 24.10.11 12:52 Сейчас в теме
Большое спасибо за пример отчета. Все получилось! Пример рабочий 100%.
3. lm-alex 146 24.10.11 13:47 Сейчас в теме
Рад помочь.
master-adm; +1 Ответить
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 146 24.10.11 17:40 Сейчас в теме
Пароль?! Странно.. вообще там нет в модуле ничего, но пароль и вправду был, снял. могу кинуть на мыло файл...
На счет этой ошибки я описывал ситуацию...
Надо сначала сделать вывод ячейки Параметр и Задать имя параметра и параметра расшифровки например "ОсновноеИзображение", в выражении что у вас на картинке указываем Поле от куда будет заполняться параметр..
тк имена совпадают он будет одной строчкой... потом меняем вывод обратно на текст и получится как у меня... Не понимаю почему так надо делать, возможно какой то глюк платформы.
6. fomix 33 25.10.11 09:43 Сейчас в теме
Да уж! Шаманство помогло. Смог самостоятельно сделать простой отчет. Еще раз спасибо!
7. lm-alex 146 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 146 13.01.12 16:44 Сейчас в теме
Всегда пожалуйста...
13. Evgeniy 102 25.02.12 13:42 Сейчас в теме
Думал только мне не повезло с извращенцами, которые хотят продажи видеть с картинками товаров, а нет.
Таких индивидуумов хватает:)

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

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

И он в строчке
ИзображениеТовара = ЭлементПараметра.Значение.Хранилище.Получить();
не получает изображение!
42. lm-alex 146 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 63 16.05.12 13:52 Сейчас в теме
lm-alex, ЧЕЛОВЕЧИЩЕ!
СПАСИБО, ДРУГ, ЗА ЭТОТ КОММЕНТАРИЙ!
ТЫ ДАЖЕ НЕ ПРЕДСТАВЛЯЕШЬ КАК ТЫ ПОМОГ ЧЕЛОВЕЧЕСТВУ В ЛИЦЕ МЕНЯ! :)
Настроить макет просто: В макетах в СКД выбираем добавить макет поля, выбираем ячейку и добавляем только один параметр в расшифровку как называется у нас поле в запросе с изображением, на картинке видно. (Бывает глючит: тогда делаем поле тип не Текст а параметр и задаем одинаковое имя Параметра и Параметра расшифровки, по умолчанию он напишет : Представление(ИмяПараметра)) стираем Представление и меняем тип поля на Текст и остается только один параметр Расшифровки.

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

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

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

сейчас проверил - всё алле зер гут!
18. lm-alex 146 16.05.12 14:08 Сейчас в теме
Бывает)) 1С Волшебная программа..
Всегда рад стараться! Спасибо за комментарии)
19. pedroo 27.08.12 01:05 Сейчас в теме
Пожалуйста
pedroo@yandex.ru
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 146 20.03.13 14:32 Сейчас в теме
При выводе уже данных сформированных СКД, ПолеТабличногоДокумента, что на форме, не обязательно должно быть пустым. Ну вот.. Если посмотреть по коду, где выводим отчет, там есть такие строки:
Результат = ЭлементыФормы.Результат;
Результат.Очистить();

Вот после этого можно вставить логотип в Результат.
Создайте макет, на нем создайте область, туда вставьте рисунок и его выводить в при формировании отчета.
Как то так:
Результат.Вывести(ПолучитьМакет("МакетЛоготип").ПолучитьОбласть("ОблЛоготип"));
jarik1409; +1 Ответить
25. jarik1409 20.03.13 15:24 Сейчас в теме
(24) Спасибо! А увас нету примерчика такого отчета?
26. lm-alex 146 20.03.13 15:33 Сейчас в теме
Сейчас на этом примере сделаю.
27. jarik1409 20.03.13 15:35 Сейчас в теме
Спс большое!
28. lm-alex 146 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 36 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 146 02.09.14 13:16 Сейчас в теме
(33) Evgeniy_progger_1C,
34. Evgeniy_begin_progger 02.09.14 13:08 Сейчас в теме
и еще вопрос: каким образом связывается номенклатура с правильной картинкой?
36. lm-alex 146 02.09.14 13:20 Сейчас в теме
Evgeniy_progger_1C, Картинка хратится в реквизите Основное изображение, тип Хранилище значения. А область, я проверяю все ячейки табличного документа и уже заполяняю изображения. Это конечно не самый удачный метод, но на тот момент в голову ничего больше не пришло.
37. Evgeniy_begin_progger 02.09.14 13:41 Сейчас в теме
А сейчас есть что-нибудь новое?
Мне нужно в СКД макет добавить ячейку с картинками номенклатуры.
Так вот у меня вопрос: можно ли реализовать добавление путем изменения только процедуры кнопки сформировать?
38. lm-alex 146 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение