Как загрузить изображения в 1С:Управление торговлей 11 напрямую по ссылке из Excel

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При переносе данных из внешних систем или файлов Excel часто возникает задача наполнения карточек номенклатуры изображениями. Современные прайс-листы поставщиков редко содержат сами картинки внутри файла; чаще всего там указана прямая ссылка на веб-ресурс. Разберем подробно, как автоматизировать процесс загрузки этих изображений в 1С:Управление торговлей 11 (УТ 11), не скачивая их вручную на локальный компьютер.

Анализ задачи и подготовительные этапы

Прежде всего проанализируем структуру хранения данных. В типовом решении 1С:Управление торговлей 11 изображения товаров хранятся не в самом справочнике Номенклатура, а в подчиненном справочнике НоменклатураПрисоединенныеФайлы. Это позволяет прикреплять к одному товару несколько файлов (фотографии, сертификаты, инструкции).

Рассмотрим ситуацию, когда у нас есть файл Excel, где в одной колонке указан артикул или код товара, а в другой — ссылка вида https://static.techspot.com/images/products/...jpg. Наша цель — программно пройти по строкам файла, скачать данные по ссылке и создать соответствующие записи в системе.

Способ 1. Визуальное отображение без сохранения в базу (HTML-поле)

Иногда требуется лишь видеть картинку в карточке, не раздувая объем информационной базы. В этом случае мы можем воспользоваться советом из обсуждения и внедрить на форму ПолеHTMLДокумента. Проанализируем, как это работает:

  1. Добавляем на форму элемента справочника Номенклатура строковый реквизит, в котором будет храниться ссылка на внешнее изображение.
  2. Размещаем на форме элемент типа ПолеHTMLДокумента.
  3. При открытии карточки или смене ссылки программно формируем простейший HTML-код.

Рассмотрим пример кода для вывода картинки:


ТекстHTML = "<html><body><img src='" + СсылкаНаКартинку + "' style='width:100%; height:auto;' /></body></html>";
Элементы.ПолеКартинкиHTML.УстановитьТекст(ТекстHTML);

Важный нюанс: этот метод работает только при наличии интернета. Если сайт-источник удалит файл или заблокирует доступ, изображение в 1С пропадет. Для надежной работы учетной системы рекомендуется физическая загрузка файла.

Способ 2. Программная загрузка и сохранение в базу данных

Выясним, как реализовать полноценную загрузку. Для этого нам понадобится объект HTTPСоединение. Основная сложность заключается в том, что большинство современных ресурсов работают по защищенному протоколу HTTPS. Следовательно, нам необходимо инициализировать защищенное соединение.

Рассмотрим по шагам процесс получения данных с сервера:

Шаг 1. Настройка соединения

Для работы с защищенными ресурсами используем объект ЗащищенноеСоединениеOpenSSL. Это позволит избежать ошибок при обращении к https ссылкам.


Защита = Новый ЗащищенноеСоединениеOpenSSL();
Сервер = "static.techspot.com"; // Извлекаем домен из ссылки
Соединение = Новый HTTPСоединение(Сервер, 443, , , , 30, Защита);

Шаг 2. Выполнение запроса

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


ПутьКФайлу = "/images/products/2018/loudspeakers/org/2019-02-13-product-9.jpg";
Запрос = Новый HTTPЗапрос(ПутьКФайлу);
Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда
    ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();
Иначе
    Сообщить("Ошибка загрузки: " + Ответ.КодСостояния);
КонецЕсли;

Здесь метод ПолучитьТелоКакДвоичныеДанные() является ключевым. Он позволяет получить содержимое картинки прямо в оперативную память в виде объекта ДвоичныеДанные, минуя стадию сохранения промежуточного файла на жесткий диск пользователем.

Шаг 3. Запись в справочник присоединенных файлов

Теперь, когда у нас есть ДвоичныеДанные, их необходимо поместить в систему хранения файлов УТ 11. В этой конфигурации используется подсистема БСП (Библиотека стандартных подсистем), поэтому создание файла лучше выполнять через встроенные механизмы, чтобы корректно заполнились все служебные реквизиты.

Проанализируем пример логики создания файла:


// Подготовка параметров для создания файла
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("Автор", Пользователи.ТекущийПользователь());
ПараметрыФайла.Вставить("ВладелецФайла", СсылкаНаНоменклатуру);
ПараметрыФайла.Вставить("ИмяБезРасширения", "Изображение_" + СсылкаНаНоменклатуру.Артикул);
ПараметрыФайла.Вставить("Расширение", "jpg");

// Вызов программного интерфейса БСП для создания записи
НовыйФайлСсылка = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки));

// Установка картинки как основной для номенклатуры
ОбъектНоменклатура = СсылкаНаНоменклатуру.ПолучитьОбъект();
ОбъектНоменклатура.ФайлКартинки = НовыйФайлСсылка;
ОбъектНоменклатура.Записать();

Тонкости и подводные камни

При массовой загрузке из Excel мы можем столкнуться с рядом технических ограничений. Рассмотрим подробнее, как их обойти:

Таким образом, мы выяснили, что загрузка картинок по ссылкам — это полностью решаемая задача. Используя объект HTTPСоединение и возможности БСП по работе с присоединенными файлами, можно автоматизировать наполнение каталога 1С:Управление торговлей 11 качественным контентом прямо из файлов поставщиков.

← На главную