gifts2017

Вывод изображений в системе компоновки данных и отчётах

Опубликовал Игорь Скалубо (igorvs66) в раздел Программирование - Работа с интерфейсом

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

Если хранить графическую информацию в виде ссылок на файлы изображений, то её легко будет разместить в любом отчёте.

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

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

Для запуска конфигурации:

1)Разверните архив в папке "d:\ВыводИзображенийВСКД". Архив содержит конфигурацию и файлы с изображениями.

2)Если архив развёрнут в другой папке, то придётся заменить имена файлов изображений в справочнике "Номенклатура".

3)Сформируйте отчёт "Остатки на складах"

4)Нажмите кнопку "Заменить имена файлов изображениями" на форме отчета.

При создании собственных макета компоновки данных, для поля ИмяФайлаИзображения  требуется создать макет поля с высотой строки и шириной колонки соответствующими желаемому размеру картинки (смотрите скриншот "Макет для поля ФайлИзображения").

Кнопка на форме отчета вызывает процедуру ЗаменитьИменаФайловНаИзображения (РезультатТабДок), размещенную в  общем модуле. В качестве параметра передаётся поле табличного документа.

Удобно встроить эту кнопку в обработку "Консоль компоновки данных".


Процедура ДействияФормыРасставитьИзображения(Кнопка)
    ЗаменитьИменаФайловНаИзображения(ЭлементыФормы.Результат);
КонецПроцедуры


Процедура ЗаменитьИменаФайловНаИзображения(РезультатТабДок) Экспорт
    Для Y=1 по РезультатТабДок.ВысотаТаблицы Цикл

        Для X=1 по РезультатТабДок.ШиринаТаблицы Цикл
            Обл=РезультатТабДок.Область(Y,X);
            Если Найти(НРег(Обл.Текст),".jpg")<>0 Тогда
                Если ФайлСуществует(Обл.Текст) Тогда
                    Обл2=РезультатТабДок.Область(Y,X-1);
                    Рисунок=РезультатТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
                    Рисунок.Картинка=Новый Картинка(Обл.Текст, Ложь);
                    Рисунок.РазмерКартинки=РазмерКартинки.Пропорционально;
                    Рисунок.ЦветЛинии=ЦветаСтиля.ЦветРамки;
                    //Рисунок.ГраницаСверху=Ложь; Рисунок.ГраницаСнизу=Ложь;
                    //Рисунок.ГраницаСлева=Ложь;  Рисунок.ГраницаСправа=Ложь;
                    Рисунок.Верх = Обл.Примечание.Верх+2.5;
                    
                    //Высоту рисунка не всегда удается угадать:
                    //Если для рисунка не создана отдельная группировка,
                    //его высота в результате может оказаться больше желаемой,
                    //и он "наползёт" на нижние строки.
                    //
                    //Чтобы этого не происходило, желательно, чтоб для имени файла
                    //рисунка создавалась отдельная группировка.
                    //Также к наползанию может привести плохо подобранный макет поля
                    //(слишком большая высота поля)
                    Рисунок.Высота = Обл.ВысотаСтроки/5*1.5;
                    Рисунок.Ширина = Рисунок.Высота;
                    Если X>1 Тогда
                        Рисунок.Лево = Обл2.Примечание.Лево;
                    Иначе
                        Рисунок.Лево = Обл.Примечание.Лево-Обл.Примечание.Ширина;
                    КонецЕсли;
                    Обл.Текст="";
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;

КонецПроцедуры
Функция ФайлСуществует(ПутьКФайлу) Экспорт
    Файл = Новый Файл(ПутьКФайлу);
    Возврат Файл.Существует();
КонецФункции


 Эту процедуру несложно адаптировать для вывода картинок, хранящихся в поле двоичных данных.

 

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

Наименование Файл Версия Размер
Вывод изображений в СКД 37
.zip 568,21Kb
16.03.12
37
.zip 568,21Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.