Имя: Пароль:
1C
 
oData и хранилище
0 Мистикан
 
26.06.20
14:21
Что то не получается дернуть двоичные данные из хранилища в справочнике через REST. База Бухгалтерия 3.0. И инфы на эту тему не могу найти (( Поделитесь плиз примером
1 Мистикан
 
26.06.20
14:28
Общий смысл дернуть с хранилища xml файл пакета УПД Диадока, получить марки блоков табака и сделать проверку при принятии ПТУ в УТ

    Соединение = Новый HTTPСоединение("10.8.5.236/buh_frk",,,,,, Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows));
    
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
    ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.ANSI);
    
    ЗаписьТекста.Записать("OLE" + ":" + "1921680110144");
    ЗаписьТекста.Закрыть();

    ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
    
    Строка = "Basic " + Base64Строка(ДвоичныеДанные);
    
    ЗаголовкиGet = Новый Соответствие;

    ЗаголовкиGet.Вставить("Accept", "application/json");
    ЗаголовкиGet.Вставить("Authorization", Строка);

ЗапросHTTP = Новый HTTPЗапрос("/odata/standard.odata/Catalog_Диадок_ЮрФизЛица?$filter=ИНН eq '" + Строка(Контрагент.ИНН) + "'&$format=application/json;odata=nometadata;", ЗаголовкиGet);
СтруктураКонтрагента = ВыполнитьЗапрос(Соединение, ЗапросHTTP);    
ИДКонтрагента = СтруктураКонтрагента.value[0].Ref_Key;

ЗапросHTTP = Новый HTTPЗапрос("/odata/standard.odata/Catalog_Диадок_Документы?$filter=КонтрагентДиадок_Key eq guid'" + Строка(ИДКонтрагента) + "' and НомерДокумента eq '" + Строка(НомерУПД) + "'&$format=application/json;odata=nometadata;", ЗаголовкиGet);
СтруктураДокумента =  ВыполнитьЗапрос(Соединение, ЗапросHTTP);    
ИДДок = СтруктураДокумента.value[0].Ref_Key;

ЗапросHTTP = Новый HTTPЗапрос("/odata/standard.odata/Catalog_Диадок_ХранениеДанных?$select=ХранилищеДанных_Key&$filter=Owner_Key eq guid'"+Строка(ИДДок)+"' and Description eq 'ХранилищеКонтента'&$format=application/json;odata=nometadata;", ЗаголовкиGet);

СтруктураХранениеДанных =  ВыполнитьЗапрос(Соединение, ЗапросHTTP);    
ИДФайла = СтруктураХранениеДанных.value[0].ХранилищеДанных_Key;

ЗапросHTTP = Новый HTTPЗапрос("/odata/standard.odata/Catalog_Диадок_Файлы?$filter=Ref_Key eq guid'"+Строка(ИДФайла)+"'&$format=application/json;odata=nometadata;", ЗаголовкиGet);
СтруктураДанных =  ВыполнитьЗапрос(Соединение, ЗапросHTTP);    
ДанныеУПД = СтруктураДокумента.value[0].Хранилище_Base64Data;
ДД = Base64Значение(ДанныеУПД);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДД.Записать(ИмяВременногоФайла);
Чтение = Новый ЧтениеТекста(ИмяВременногоФайла, КодировкаТекста.UTF8);
Decoded = Чтение.Прочитать();
//Текст = ДвоичныеДанные_В_Текст(ДД);
ЧтениеXML = Новый ЧтениеXML;
//ЧтениеXML.УстановитьСтроку(ДанныеУПД);
ЧтениеXML.УстановитьСтроку(Decoded);
ОбъектModel = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Но получаемые данные не те что нужны
2 timurhv
 
26.06.20
15:14
(1) Не знаю получится ли, но из хранилища нужно получить данные:
ДанныеУПД = СтруктураДокумента.value[0].Хранилище_Base64Data;
ДД = Base64Значение(ДанныеУПД .Получить());
3 timurhv
 
26.06.20
15:16
(2) и записывать во временный файл необязательно:
СтрокаСообщения = ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(ДанныеУПД.Получить()), "windows-1251");
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаСообщения);
4 Мистикан
 
29.06.20
16:12
Сорри... тупая ошибка
СтруктураДанных =  ВыполнитьЗапрос(Соединение, ЗапросHTTP);    
ДанныеУПД = СтруктураДокумента.value[0].Хранилище_Base64Data;
5 Мистикан
 
29.06.20
16:13
все работает =) для будующих поколений =)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.