База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как подгрузить картинку из Excel в 1С:УТ в номенклатуру? › Ответ в теме: Как подгрузить картинку из Excel в 1С:УТ в номенклатуру?
Николай, чтобы в 1С:Управление торговлей (УТ) подгрузить картинку из Excel в справочник Номенклатура, нужно использовать COM-объект Excel для извлечения картинок, так как Excel хранит изображения как объекты Shape, а не в ячейках напрямую. Прямого способа загрузить картинку из Excel в 1С нет, поэтому алгоритм следующий:
1. Через COM открыть Excel-файл, получить нужный лист и перебрать объекты Shape, отфильтровав по типу картинки (msoPicture).
2. Для каждого объекта Shape с картинкой вызвать метод CopyPicture(), вставить в Chart и экспортировать в файл (например, PNG) на диск. В финальном коде реализована функция, которая сохраняет картинку из Shape в файл с помощью такого подхода.
3. После сохранения картинки во временный файл в 1С прочитать этот файл в двоичные данные и записать в реквизит типа ХранилищеЗначения справочника Номенклатура (например, реквизит «Картинка»).
4. Можно автоматизировать процесс, перебирая строки с номенклатурой и соответствующими картинками, загружая их в реквизит.
5. Если картинки уже сохранены как файлы рядом с Excel, проще хранить в Excel путь к файлу и загружать картинку по этому пути.
Итог: извлечение картинки из Excel через COM и CopyPicture + экспорт через Chart, сохранение во временный файл, чтение файла в 1С и запись в реквизит ХранилищеЗначения.
Ниже пример функции для сохранения картинки из Shape в файл и пример загрузки файла в реквизит номенклатуры:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Функция СохранитьКартинкуВФайл(Shape, ИмяФайла, Формат = "PNG") msoPicture = 13; Если Shape.Type <> msoPicture Тогда Возврат Ложь; КонецЕсли; Книга = Shape.Application.Workbooks.Add(-4167); // xlWBATWorksheet Диаграмма = Книга.Worksheets.Item(1).Shapes.AddChart().Chart; Диаграмма.ChartArea.Height = Shape.Height; Диаграмма.ChartArea.Width = Shape.Width; Диаграмма.ChartArea.Border.LineStyle = -4142; // xlLineStyleNone Диаграмма.ChartArea.Fill.Visible = 0; // msoFalse Shape.CopyPicture(); Диаграмма.Paste(); Успех = Диаграмма.Export(ИмяФайла, Формат); Книга.Close(Ложь); Возврат Успех; КонецФункции |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
ФайлКартинки = ОбменДанными.СоздатьПутьВременногоФайла("картинка.png"); Если Новый Файл(ФайлКартинки).Существует() Тогда Поток = Новый ЧтениеФайла(ФайлКартинки); ДвоичныеДанные = Поток.Прочитать(); Поток.Закрыть(); Картинка = Новый ХранилищеЗначения; Картинка.Записать(ДвоичныеДанные); // Найти элемент номенклатуры и записать картинку Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Наименование = "Имя номенклатуры" Тогда Номенклатура = Выборка.ПолучитьОбъект(); Номенклатура.Картинка = Картинка; Номенклатура.Записать(); Прервать; КонецЕсли; КонецЦикла; КонецЕсли; |