Как записать двоичные данные в поток?

1. bad_wag 52 26.11.18 17:31 Сейчас в теме
В чем суть вопроса, у табличного документа есть метод прочитать() и в качестве параметра можно передавать не только путь к файлу, но и поток. Решил разобраться в этом вопросе, но видимо чего-то я не понимаю.
Вот простенький код, который приводит к ошибке выполнения файловой операции. (в переменной путь к обычному файлу .mxl). Подскажите, как правильно записать данные в поток?
&НаКлиенте
Процедура Команда1(Команда)    
    
    ТабДок  = Новый ТабличныйДокумент;
    
    лДанные = Новый ДвоичныеДанные(Путь);
    
    Адрес  = ПоместитьВоВременноеХранилище(лДанные, УникальныйИдентификатор);
    
    ПрочитатьНаСервере(ТабДок, Адрес);
    
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПрочитатьНаСервере(ТабДок, Адрес)
    
    лДанные = ПолучитьИзВременногоХранилища(Адрес);
    
    лПоток  = Новый ПотокВПамяти;
    лЗапись = Новый ЗаписьДанных(лПоток);
    
    лЗапись.Записать(лДанные);
    лЗапись.Закрыть();    
    
    ТабДок.Прочитать(лПоток);
    
КонецПроцедуры

Показать
По теме из базы знаний
Найденные решения
5. spacecraft 26.11.18 20:28 Сейчас в теме
(1) поток нужно спозиционироваться на начало.
&НаСервереБезКонтекста
Процедура Команда8НаСервере(ТабДок, Адрес)
    лДанные = ПолучитьИзВременногоХранилища(Адрес);
    
    лПоток  = Новый ПотокВПамяти;
    лЗапись = Новый ЗаписьДанных(лПоток);
    
    лЗапись.Записать(лДанные);
    лЗапись.Закрыть();    
    лПоток.Перейти(0, ПозицияВПотоке.Начало);
    ТабДок.Прочитать(лПоток);  
    лПоток.Закрыть();

КонецПроцедуры
Показать
user635629_exter; Andreyyy; oyti; Euroset1; bad_wag; amaksimov; +6 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 26.11.18 18:15 Сейчас в теме
(1) код ПрочитатьНаСервере ?
3. bad_wag 52 26.11.18 18:38 Сейчас в теме
5. spacecraft 26.11.18 20:28 Сейчас в теме
(1) поток нужно спозиционироваться на начало.
&НаСервереБезКонтекста
Процедура Команда8НаСервере(ТабДок, Адрес)
    лДанные = ПолучитьИзВременногоХранилища(Адрес);
    
    лПоток  = Новый ПотокВПамяти;
    лЗапись = Новый ЗаписьДанных(лПоток);
    
    лЗапись.Записать(лДанные);
    лЗапись.Закрыть();    
    лПоток.Перейти(0, ПозицияВПотоке.Начало);
    ТабДок.Прочитать(лПоток);  
    лПоток.Закрыть();

КонецПроцедуры
Показать
user635629_exter; Andreyyy; oyti; Euroset1; bad_wag; amaksimov; +6 Ответить 1
6. bad_wag 52 27.11.18 14:04 Сейчас в теме
(5) Спасибо! Так сразу и не догадаешься, ошибка совсем не информативная
4. herfis 515 26.11.18 18:41 Сейчас в теме
На какой инструкции падает? На записи?
И что за "ТабДок" в серверной неконтекстной процедуре?
7. tvm 19.07.19 16:18 Сейчас в теме
Написал код:
    ДвоичныеДанныеОтвета = РезультатЗапроса.Ответ.ПолучитьТелоКакДвоичныеДанные();
    лПоток  = Новый ПотокВПамяти;
    лЗапись = Новый ЗаписьДанных(лПоток);
    
    лЗапись.Записать(ДвоичныеДанныеОтвета);
    лЗапись.Закрыть();    
    лПоток.Перейти(0, ПозицияВПотоке.Начало);
    РезультатОтчета.Прочитать(лПоток);
    лПоток.Закрыть();

Показать

РезультатОтчета- это реквизит на УФ. На строке
РезультатОтчета.Прочитать(лПоток);

выдает ошибку "Ошибка при выполнении файловой операции "
В чем может быть причина?
8. spacecraft 19.07.19 16:34 Сейчас в теме
(7) РезультатОтчета это ТабличныйДокумент?
При чтении табличного документа из потока допустимы следующие форматы: MXL, ODS.
Смотрите что содержится в ДвоичныеДанныеОтвета.
9. tvm 19.07.19 16:39 Сейчас в теме
(8) Да, табличныйдокумент
В одной базе http-сервис формирует табличный документ и возвращает двоичныеданные :
ДвоичныеДанныеФайла = ПотокФайла.ЗакрытьИПолучитьДвоичныеДанные();

Во второй базе пытаюсь эти двоичные данные прочитать
11. spacecraft 19.07.19 17:00 Сейчас в теме
(9) если заменить РезультатОтчета.Прочитать(лПоток); на
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(лПоток);

ошибка будет?
И приведите ошибку полностью.
12. tvm 22.07.19 09:08 Сейчас в теме
(11)
    лПоток  = Новый ПотокВПамяти;
    лЗапись = Новый ЗаписьДанных(лПоток);
    
    лЗапись.Записать(ДвоичныеДанныеОтвета);
    лЗапись.Закрыть();    
    лПоток.Перейти(0, ПозицияВПотоке.Начало);
    ТТ = Новый ТабличныйДокумент;
    ТТ.Прочитать(лПоток);

Показать


ошибка
{ВнешнийОтчет.ВнешнийОтчет1.Форма.ФормаОтчета.Форма(48)}: Ошибка при вызове метода контекста (Прочитать)
    ТТ.Прочитать(лПоток);
по причине:
Ошибка при выполнении файловой операции 

У процедуры стоит директира "&НаСервере"
13. spacecraft 22.07.19 09:14 Сейчас в теме
(12) сохраните полученные данные в файл и откройте его в 1С. Скорее всего это не mxl. Может не двоичные данные отправляете?
14. tvm 22.07.19 09:16 Сейчас в теме
(13)попробую. делал вроде также как в одном из уже существующих сервисов
15. tvm 22.07.19 09:23 Сейчас в теме
(13)
        ВремФайл = ПолучитьИмяВременногоФайла("mxl");
        ДвоичныеДанныеОтвета = РезультатЗапроса.Ответ.ПолучитьТелоКакДвоичныеДанные();
        ДвоичныеДанныеОтвета.Записать(ВремФайл);
        РезультатОтчета.Прочитать(ВремФайл);


РезультатОтчета.Прочитать(ВремФайл);
по причине:
Ошибка при выполнении файловой операции

сейчас код процедуры приведу которая отправляет ответ
10. tvm 19.07.19 16:40 Сейчас в теме
в postman-e показывает
MOXCEL
{"#","",1,1,"#","Язык по умолчанию","Язык по умолчанию",0},

в ДвоичныеДанныеОтвета- "5B 5D.....
16. tvm 22.07.19 09:30 Сейчас в теме
ПотокФайла = Новый ПотокВПамяти();
ТабличныйДокумент.вывод = ИспользованиеВывода.Разрешить;
ТабличныйДокумент.Записать(ПотокФайла);
ЧтениеПотока = Новый ЧтениеДанных(ПотокФайла);
ДвоичныеДанныеФайла = ПотокФайла.ЗакрытьИПолучитьДвоичныеДанные();
СтруктураОтвет.Вставить("ДвоичныеДанные",ДвоичныеДанныеФайла);

17. spacecraft 22.07.19 09:33 Сейчас в теме
(16) а дальше? Похоже тело ответа составное, а не только эти двоичные данные. А читаете целиком тело как ДД.
18. tvm 22.07.19 09:41 Сейчас в теме
похоже нашел. проверю отпишусь
19. tvm 22.07.19 10:07 Сейчас в теме
все норм было сразу. Один параметр в ответе проверял, а в исходной базе не заполнял его.
Спасибо за помощь
20. Pim 189 01.03.23 08:32 Сейчас в теме
(5) MXL открывается, а ODS нет.
Пишет: "по причине:
Ошибка при выполнении файловой операции"
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот