Каталог решений - Добавление картинок в строки табличного документа по внешним ссылкам

Добавление картинок в строки табличного документа по внешним ссылкам

Добавление картинок в строки табличного документа по внешним ссылкам

В наличии

Иногда (часто) клиенты нас удивляют: «А выведите в прайс лист картинки товаров, только они у нас не в базе, а по внешней ссылке хранятся, это же просто!», «А скачайте с сайта все изображения, это же не долго!» И, знаете, они правы…

Категория:

Описание

…и, знаете, они правы: это и просто, и недолго, если делать с помощью одной смекалки и деатомизаторов седьмой серии. 

Но, опишу метод подробнее. Прикрепляем к нашей форме макет HTML документа. Прописываем метод, на вход которого подаем массив http-ссылок на картинки: {id1: ref1, id2: ref2, …}

Картинки могут быть где угодно: хоть на сайте infostart. Этот метод добавит все картинки в body с id-ами из нашего списка.

Прописываем другой метод, который получает двоичные данные этих картинок в base64 в таком же объекте: {id1: data1, id2: data2, …}. Расшифровываем и кидаем уже в 1С эти двоичные данные в хранилища или сразу создаем объект Картинка на их основании:

ДанныеКартинки = Base64Значение(ДанныеКартинки);
Область.Рисунки.ОбластьКартинки.Картинка = Новый Картинка(ДанныеКартинки); 

Радуемся радости клиента!

В прикрепленной обработке все это сделал. Введите в текстовое поле список ссылок на картинки через запятую. Нажмите «Получить». Сформируется табличный документ, в строках которого будут наши картинки. Хотите – в прайс-лист, хотите – в прикрепленные файлы к товарам. Ну а если применить данный метод к сайту знакомств…

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

1. Загружаем мою обработку к себе в конфигурацию, называем, например, СкачиваниеКартинок

2. В форме, где хотим формировать что-то с картинками по внешним ссылкам, создаем реквизит формы ДанныеКартинок. Тип — ТаблицаЗначений. Колонки: Инд — Число, Данные — Строка, СсылкаНаКартинку — Строка.

3. В модуле этой формы размещаем следующий код (не забываем подключить к форме обработчик оповещений)

&НаКлиенте
Перем ФормаЗагрузки;

&НаКлиенте
Процедура ФормированиеКартинокКлиент(МассивURL) 
    ФормаЗагрузки = ПолучитьФорму("Обработка.СкачиваниеКартинок.Форма");
    ФормаЗагрузки.ЗагрузитьДанные(МассивURL);
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьКартинкиВТаблицу(СтрокаJSON)
    Жека = Новый ЧтениеJSON;
    Жека.УстановитьСтроку(СтрокаJSON);
    МасСтрок = ПрочитатьJSON(Жека);
    
    ДанныеКартинок.Очистить(); 
    
    Для К = 0 По МасСтрок.ВГраница() Цикл
        Нов = ДанныеКартинок.Добавить();
        Для Каждого КлЗн Из МасСтрок[К] Цикл
            Нов[КлЗн.Ключ] = КлЗн.Значение;
        КонецЦикла;    
    КонецЦикла;
    
    Жека = Неопределено;
КонецПроцедуры    

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "КартинкиЗагружены" Тогда 
        СтрокаJSON = ФормаЗагрузки.ПолучитьJSON();
        ЗагрузитьКартинкиВТаблицу(СтрокаJSON);
        ФормаЗагрузки.Закрыть();
        ФормаЗагрузки = Неопределено;
        //ФормированиеПрайсЛиста(); // здесь можно вызывать построение табличного документа
    КонецЕсли;    
КонецПроцедуры

&НаСервере
Функция ПолучитьКартинкуПоИндексу(Инд)
    Оть = Новый Структура;
    Оть.Вставить("Инд", Инд);
    Строки = ДанныеКартинок.НайтиСтроки(Оть); 
    Если Строки.Количество() > 0 Тогда
        ДанныеКартинки = Строки[0].Данные;
        Возврат Base64Значение(ДанныеКартинки);
    КонецЕсли;
    
    Возврат Неопределено;
КонецФункции    

&НаСервере
Функция ПолучитьКартинкуПоСсылке(СсылкаНаКартинку)
    Оть = Новый Структура;
    Оть.Вставить("СсылкаНаКартинку", СсылкаНаКартинку);
    Строки = ДанныеКартинок.НайтиСтроки(Оть); 
    Если Строки.Количество() > 0 Тогда
        ДанныеКартинки = Строки[0].Данные;
        Возврат Base64Значение(ДанныеКартинки);
    КонецЕсли;
    
    Возврат Неопределено;
КонецФункции

4. Начинаем (например, после нажатия кнопки "Сформировать") с того, что готовим массив ссылок на картинки и запускаем процедуру ФормированиеКартинокКлиент(НашМассив)

5. Если нужно продолжить что-то делать после загрузки картинок, например, сформировать табличный документ, создаем процедуру для этого и подставляем ее вызов соответственно комментарию в ОбработкаОповещения.

6. При формировании своего табличного документа или чего-то там еще, когда надо получить картинку используем функцию: ПолучитьКартинкуПоСсылке(СсылкаНаКартинку) или ПолучитьКартинкуПоИндексу(Инд). Эти функции возвратат двоичные данные картинки или Неопределено.

7. Создаем картинку на основании двоичных данных и записываем, куда хотим.

            ДанныеКартинки = ПолучитьКартинкуПоСсылке(СсылкаНаКартинку);
            Если НЕ ДанныеКартинки = Неопределено Тогда
                Картинка = Новый Картинка(ДанныеКартинки);
            КонецЕсли;    

Работает на любой конфе с управляемыми формами.

Пользуйтесь!

has been added to your cart:
Оформление заказа