Имя: Пароль:
1C
1С v8
Сохранение картинки в XML
0 StKnight217
 
11.12.15
09:20
Всем привет! Описание проблемы:

С помощью процедуры НачатьПомещениеФайла, указываю путь до картинки.
Передаваемое оповещение вызывает функцию ОбработкаВыбораФайла:

Процедура ОбработкаВыбораФайла(Результат,Адрес,ВыбранноеИмяФайла,Дополнительные параметры)
   Объект.Логотип = Адрес;
   ЛоготипДвоичныеДанные = Новый ДвоичныеДанные(ВыбранноеИмяФайла);
   ЛоготипПуть = ЛоготипДвоичныеДанные;   //Реквизит ЛоготипПуть тип = Произвольный
КонецПроцедуры

Записываю данные в XML:

Файл = Новый ЗаписьXML;
Файл.ЗаписатьНачалоЭлемента("Логотип");
Файл.ЗаписатьАтрибут("Лого",XMLСтрока(ЛоготипПуть));


Читаю XML

ЧтениеXML = Новый ЧтениеXML;
Пока ЧтениеXML.Прочитать() Цикл
   ЛоготипДвоичныеДанные = Base64Значение(ЧтениеXML.Значение);
   ЛоготипХранилище =ПоместитьВоВременноеХранилище(ЛоготипДвоичныеДанные);
   Объект.Логотип = ЛоготипХранилище;
КонецЦикла;

Суть проблемы:

При преобразовании в двоичные данные в процедура ОбработкаВыбораФайла, получаю набор двоичных данных. Если сразу поместить их во временное хранилище и отправить в реквизит отображение картинки, то картинка будет отображаться.

При записи в XML двоичные данные конвертируются в Base64Строка и записываются в файл как надо.

Однако, при чтении из XML видим, что в
ЛоготипДвоичныеДанные = Base64Значение(ЧтениеXML.Значение);
возвращается не такой же двоичный код как при записи, а в разы укороченный.

Теперь вопросы: Почему это происходит и как это исправить?
1 cw014
 
11.12.15
09:21
> возвращается не такой же двоичный код как при записи, а в разы укороченный.
А какой он двоичный код возвращает? Что значит "укороченный"?
2 Лефмихалыч
 
11.12.15
09:22
зачем ты при чтении помещаешь во временное хранилище?
3 StKnight217
 
11.12.15
09:24
(1) Возвращает только первые несколько строк двоичного кода, который был записан
4 Лефмихалыч
 
11.12.15
09:25
ТИпЗнч(Объект.Логотип) - что возвращает?
5 StKnight217
 
11.12.15
09:28
(4) Строку
6 Лефмихалыч
 
11.12.15
09:29
(5) а длина той строки какая?
7 StKnight217
 
11.12.15
09:30
(6) Неограниченная
8 los_hooliganos
 
11.12.15
09:33
ЧтениеXML.Значение - там то что нужно, неукороченное?
9 StKnight217
 
11.12.15
09:34
(8) Да
10 Лефмихалыч
 
11.12.15
09:35
(7) почему сразу двоичные данные в соответствующий реквизит объекта не запихать? ЗАчем временное хранилище?
11 StKnight217
 
11.12.15
09:39
(10) При непосредственной передачи в реквизит картинка не отображается, только путем присваивания ссылки на временное хранилище
После присваивания "обрубка" двоичного кода, в реквизите отражается квадрат со вписанным крестиком
12 StKnight217
 
11.12.15
09:41
(11) Обрубка, помещенного во временное хранилище
13 StKnight217
 
11.12.15
09:57
(10) На сайте http://foxtools.ru/Base64 Декодировал записанную в XML ссылку. Возвращает файл с расширением .dat
Если открыть его через Средство просмотра изображений Windows, открывает мою зашифрованную картинку
14 StKnight217
 
11.12.15
13:17
(0) Решил проблему. Записывался в XML массив строк, а считывались двоичные данные. Между строками образовывались пробелы. Из-за этого считывалась и десериализовывалась только первая строка. Убрал пробелы между строками и все заработало.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.