Имя: Пароль:
1C
1С v8
Экспорт изображений в Excel
0 Вельможа
 
09.04.19
17:11
Здравствуйте!
Ситуация. УТ 11.4 УФ. Выгружаю данные в Excel-файл внешней обработкой. Алгоритм действий такой:
  - Пользователь в форме обработки выбрал, что хочет отправить в Excel,
  - на сервере запросом получаю всю нужную информацию, включая картинки товаров, то есть, изображения номенклатуры. Картинки получаю в виде двоичных данных так: СтрокаТЗ.Фото = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Выборка.Номенклатура.ФайлКартинки); Все результаты запроса пихаю в таблицу значений,
  - таблицу значений с результатами запроса (некоторые поля номенклатуры, включая фото) возвращаю на клиент в виде массива структур с именем Товары,
  - на клиенте уже перебором всех элементов массива все сохраняю в файл Excel через COMОбъект("Excel.Application"), в том числе и изображения.
Вот тут подробнее. Изображение сначала из двоичного вида сохраняю в файл на диск Товары[Счетчик].Фото.Записать("C:\filename.jpg"); (Фото - ключ структуры, в котором лежат двоичные данные изображения)
Потом этот сохраненный файл пихаю в Excel Лист.Shapes.AddPicture("C:\filenamee.jpg", 0, 1, -1, -1, -1, -1).Select();
Там попутно навожу нормальный вид и все такое.
Ну и потом удаляю этот файл изображения с диска.
И вот на это немало времени уходит, на сохранение на диск, потом на удаление.
Можно ли как-то сразу пихать изображение в Excel, не прибегая к сохранению на диск в виде файла?
Может, не в виде бинарных данных вообще нужно получать файл, а в каком ином виде для этого?
Хотелось бы более оперативно получать результат, поэтому и пытаюсь добавлять изображения в Excel без сохранения их на диск.
1 dezss
 
09.04.19
17:16
А почему не используешь ТабличныйДокумент?
Его можно в xls, xlsx сохранять?
2 Вельможа
 
09.04.19
17:20
(1), вообще, потому что изначально есть обработка для обычных форм, которая работает именно так. А так как контора переходит на УТ11 с УТ10, то пока самый простой путь - это переписать все старые обработки под УФ.
Хотя вариант с  ТабличнымДокументом тоже можно рассмотреть. А в нем можно делать плюсики/минусики как в Excel для разворачивания/сворачивания? На манер того, как в конфигураторе можно процедуры и функции сворачивать?
3 sqr4
 
09.04.19
17:33
(2) НАчатьАвтогруппировкуСтрок
4 sqr4
 
09.04.19
17:33
Но можно много багов наловить в момент сохранения ТД в эксель.
5 Вафель
 
09.04.19
17:49
(2) делай у файло временное имя через ПолучитьИмяВременногоФайла.
1с сама потом все удалит
6 Вельможа
 
09.04.19
17:54
(5), удаление файла - не основная трата времени. Основное время тратится на сохранение файла изображения на диск.
7 sqr4
 
09.04.19
17:55
(6) можно пересмотреть вариант хранения файлов не в базе, а на диске
8 Вельможа
 
09.04.19
18:02
(7), как совсем альтернативный вариант. Ну, можно. Хотя, думаю, более целесообразней попробовать все переписать на работу с ТабличнымДокументом.
9 Вельможа
 
09.04.19
18:03
Сейчас проверил. Без сохранения картинок на диск (и стало быть без их экспорта в excel) в 2,5 раза быстрей все работает.