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




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

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

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

Для тех, у кого нет пока возможности получать файлы с 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.Примечание.Лево;
                    Иначе
                        Рисунок.Лево = Обл.Примечание.Лево-Обл.Примечание.Ширина;
                    КонецЕсли;
                    Обл.Текст=»»;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;

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


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

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *