Имя: Пароль:
1C
 
Изображение по COM
0 Andr
 
29.01.08
23:50
Прошу совета по данному вопросу - не работет код
   V8 = Новый COMObject("V81.ComConnector");

   Попытка
       Оле = V8.Connect("FILE=""" + ПутьКФайламМодуля + """;");
   Исключение
       Сообщить("Не удалось подключиться");
   КонецПопытки;

   Картинка = Ном.ОсновноеИзображение.Хранилище.Получить();
   НовыйОбъект = Оле.Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
   НовыйОбъект.ВидДанных =                 Оле.Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
   НовыйОбъект.Хранилище = Новый ХранилищеЗначения(Картинка);
       НовыйОбъект.Записать();

Другими словами вопрос заключается в следующем - как перенести по COM изображение и если невозможно, то подскажите код по выгрузке картинки в файл.
1 ТелепатБот
 
гуру
29.01.08
23:50
2 IronDemon
 
29.01.08
23:56
Функция СохранитьФайлНаДиске(Хранилище, ИмяФайла, ТолькоЧтение, СпособПерезаписи, ВопросОПерезаписи = Истина, ИмяСправочника = "ХранилищеДополнительнойИнформации") Экспорт

   Попытка

       ФайлНаДиске = Новый Файл(ИмяФайла);
       КаталогНаДиске = Новый Файл(ФайлНаДиске.Путь);

       Если Не КаталогНаДиске.Существует() Тогда
           СоздатьКаталог(ФайлНаДиске.Путь);
       КонецЕсли;

       Если ТипЗнч(Хранилище) <> Тип("ДвоичныеДанные") Тогда
           ДвоичныеДанные = Хранилище.Получить();
       Иначе
           ДвоичныеДанные = Хранилище;
       КонецЕсли;
       ДвоичныеДанные.Записать(ИмяФайла);

   Исключение

       Предупреждение(ОписаниеОшибки());
       Возврат Ложь;

   КонецПопытки;

   Возврат Истина;

КонецФункции // СохранитьФайлНаДиске()


Процедура КнопкаВыполнитьНажатие(Кнопка)
   Если Объект = Неопределено Тогда
       Возврат;
   КонецЕсли;
   // Вставить содержимое обработчика.
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ХранилищеДополнительнойИнформации.Ссылка
                  |ИЗ
                  |    Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
                  |ГДЕ
                  |    ХранилищеДополнительнойИнформации.Объект В ИЕРАРХИИ(&Объект)";
   Запрос.УстановитьПараметр("Объект", Объект);
   РезультатЗапроса = Запрос.Выполнить();
   
   мПутьВнешнегоХранилища = КаталогХранения;
   ИмяКаталога = ПолучитьИмяКаталога(глТекущийПользователь);
   мСписокОткрытыхФайлов = Новый СписокЗначений;
   
   
   ТолькоЧтение = Ложь;
   СпособПерезаписи = "";
   
   Сч=1;
   Выборка = РезультатЗапроса.Выбрать();
   Пока Выборка.Следующий() Цикл
       Ссылка=Выборка.Ссылка;
       Если ПустаяСтрока(Ссылка.ИмяФайла) Тогда
           Продолжить;
       КонецЕсли;
       СпрОбъект = Ссылка.ПолучитьОбъект();
       Если СпрОбъект.Хранилище.Получить() = Неопределено Тогда
           Сообщить("Пропускаем "+Ссылка);
           Продолжить;
       КонецЕсли;
       Сообщить("Сохраняем "+Ссылка);
       
       ИмяФайла = ПолучитьИмяФайла(ИмяКаталога, Ссылка.ИмяФайла);
       
       СохранитьФайлНаДиске(СпрОбъект.Хранилище, ИмяФайла, Ложь, СпособПерезаписи, Ложь);
   КонецЦикла;
   
   Сообщить("Закончил");
КонецПроцедуры
3 Hadgehogs
 
30.01.08
07:11
Двоичные=МояКартинка.ПолучитьДвоичныеДанные();
   ДвоичныеСтрокой=Base64Строка(Двоичные);
   ДвоичныеCOM=Ole.Base64Значение(ДвоичныеСтрокой);
   МояКартинкаCOM=Ole.NewObject("Картинка(ДвоичныеCOM)"); //Скорее всего так, не помню, как тут параметр в конструктор передавать
4 Andr
 
30.01.08
08:14
(3) МояКартинкаCOM=Ole.NewObject("Картинка(ДвоичныеCOM)");
вот с этой строчкой не хочет работать, с
МояКартинкаCOM=Ole.NewObject("Картинка(""ДвоичныеCOM"")");
тоже самое
5 Andr
 
30.01.08
08:16
Оле.NewObject("Картинка");
работает
6 San1
 
30.01.08
08:17
(5) Попробуй Оле.NewObject("Картинка", ДвоичныеCOM);
7 Andr
 
30.01.08
08:22
(6) Так ошибок не выдает, но при этом картинку тоже не переносит
8 Andr
 
30.01.08
08:23
Двоичные        = Картинка.ПолучитьДвоичныеДанные();
   ДвоичныеСтрокой    = Base64Строка(Двоичные);
   ДвоичныеCOM        = Оле.Base64Значение(ДвоичныеСтрокой);
   МояКартинкаCOM  = Оле.NewObject("Картинка",ДвоичныеCOM);
   НовыйОбъект.Хранилище = Новый ХранилищеЗначения(МояКартинкаCOM);
9 Hadgehogs
 
30.01.08
08:25
ППЦ
НовыйОбъект.Хранилище = Оле.NewObject("ХранилищеЗначения",МояКартинкаCOM);
10 Andr
 
30.01.08
08:27
Прошу прощения, и спасибо всем :)
11 Hadgehogs
 
30.01.08
08:29
Покатило?
12 Andr
 
30.01.08
08:31
(11) ДА!