Загрузка XML из СБИС
Через API СБИС получаю ссылку на документ вида https://disk.sbis.ru/disk/api/v1/длинная_длинная_строка .
В браузере при переходе по ссылке в итоге получаю XML-документ.
Если пытаюсь получить его программно, то в ответ прилетает то 302, то 307 код...
Куда копать?
Может, можно XML сразу через API СБИС получить, но в описалове не нашел ничего похожего.
В браузере при переходе по ссылке в итоге получаю XML-документ.
Если пытаюсь получить его программно, то в ответ прилетает то 302, то 307 код...
ИмяВходящегоФайла = "t:\1.xml";
СерверИсточник = "disk.sbis.ru";
Адрес = Новый HTTPЗапрос("/disk/api/v1/длинная_длинная_строка");
НТТР = Новый HTTPСоединение(СерверИсточник,443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
Ответ = НТТР.ОтправитьДляОбработки(Адрес, ИмяВходящегоФайла);
Куда копать?
Может, можно XML сразу через API СБИС получить, но в описалове не нашел ничего похожего.
По теме из базы знаний
- Загрузка документов поступления в 1С из XML формата 820 (Контур.Диадок) для УТ10, УТ11, Бух3, КА2, КА2.5, УПП1.3 и обработка выгрузки УПД в Контур Диадок и СБИС для 1С:Бухгалтерии 3
- Загрузка из XML файла ЭДО в документ поступления для конфигураций 1С: Розница 2.2/2.3, Управление торговлей 10.3/11.4
- Загрузка поступлений товаров и услуг из сервисов электронного документооборота (СБИС, Контурн) в 1С:Бухгалтерия Предприятия 2.0 в формате xml
- Выгрузка счета на оплату в формате xml для 1С:Бухгалтерии 7.7 и ПУБ 7.7
- Групповая выгрузка и загрузка файлов XML для ЭДО в каталог по приказу №820 ФНС (для УТ 10.3/11, КА2, ERP2, БП3, УНФ, УПП1.3, Розница2.3). Поддержка маркировки. Прослеживание товаров.
Найденные решения
Решение:
СерверИсточник = "online.sbis.ru";
ВременноеИмяВходящегоФайла = ПолучитьИмяВременногоФайла("xml");
Адрес = Новый HTTPЗапрос("/disk/api/v1/длинная_длинная_строка");
Адрес.Заголовки.Вставить("Content-Type","application/json-rpc;charset=utf-8");
Адрес.Заголовки.Вставить("User-Agent","1С");
Адрес.Заголовки.Вставить("X-SBISSessionID", Сессия);
НТТР = Новый HTTPСоединение(СерверИсточник,443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
Ответ = НТТР.Получить(Адрес, ВременноеИмяВходящегоФайла);
Если Ответ.КодСостояния = 200 Тогда
ЗаголовокКонтент = Ответ.Заголовки["content-disposition"];
ИмяФайлаСБИС = СтрРазделить(ЗаголовокКонтент,"'", Ложь)[1];
ПереместитьФайл(ВременноеИмяВходящегоФайла, "Путь_куда_положить_файл_XML");
КонецЕсли;
ПоказатьОстальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Решение:
СерверИсточник = "online.sbis.ru";
ВременноеИмяВходящегоФайла = ПолучитьИмяВременногоФайла("xml");
Адрес = Новый HTTPЗапрос("/disk/api/v1/длинная_длинная_строка");
Адрес.Заголовки.Вставить("Content-Type","application/json-rpc;charset=utf-8");
Адрес.Заголовки.Вставить("User-Agent","1С");
Адрес.Заголовки.Вставить("X-SBISSessionID", Сессия);
НТТР = Новый HTTPСоединение(СерверИсточник,443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());
Ответ = НТТР.Получить(Адрес, ВременноеИмяВходящегоФайла);
Если Ответ.КодСостояния = 200 Тогда
ЗаголовокКонтент = Ответ.Заголовки["content-disposition"];
ИмяФайлаСБИС = СтрРазделить(ЗаголовокКонтент,"'", Ложь)[1];
ПереместитьФайл(ВременноеИмяВходящегоФайла, "Путь_куда_положить_файл_XML");
КонецЕсли;
Показать
Спасибо, помогло! Делаю прогрузку кодов маркировки, все данные возвращаются по API в структуре ответа, а сами коды какого-то... засунуты во вложение в XML файл.
Если что вот код разбора самого xml, после получения, чтобы вытащить из него коды маркировки:
Если что вот код разбора самого xml, после получения, чтобы вытащить из него коды маркировки:
код разбора xml |
---|
ТЧСбисНом = Новый ТаблицаЗначений;
ТЧСбисНом.Колонки.Добавить("НаименованиеСбис"); ТЧСбисНом.Колонки.Добавить("КодСбис"); ТЧСбисНом.Колонки.Добавить("КодМаркировки"); Ответ.КодСостояния = 200 Тогда ЗаголовокКонтент = Ответ.Заголовки["content-disposition"]; ИмяФайлаСБИС = СтрРазделить(ЗаголовокКонтент,"'", Ложь)[1]; ЧтениеXMLФайл=Новый ЧтениеXML; ЧтениеXMLФайл.ОткрытьФайл(ВременноеИмяВходящегоФайла); НаименованиеСбис = ""; КодСбис = ""; КоличествоСбис = 0; Пока ЧтениеXMLФайл.Прочитать() Цикл Если ЧтениеXMLФайл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Поле = ЧтениеXMLФайл.Имя; Если Поле = "ТаблСчФакт" Тогда Индекс = 1; Пока Истина Цикл Попытка Фабрика=Новый ФабрикаXDTO; ОбXDTO=Фабрика.ПрочитатьXML(ЧтениеXMLФайл); Попытка НаименованиеСбис = ОбXDTO.СведТов.НаимТов; КоличествоСбис = Число(ОбXDTO.СведТов.КолТов); КодСбис = ОбXDTO.СведТов.ДопСведТов.КодТов; Пока Не КоличествоСбис = 0 Цикл НовСтр = ТЧСбисНом.Добавить(); НовСтр.НаименованиеСбис = НаименованиеСбис; НовСтр.КодСбис = КодСбис; НовСтр.КодМаркировки = ОбXDTO.СведТов.ДопСведТов.НомСредИдентТов.КИЗ[КоличествоСбис-1]; КоличествоСбис = КоличествоСбис -1; КонецЦикла; Исключение Для Каждого СтрДТ Из ОбXDTO.СведТов Цикл НаименованиеСбис = СтрДТ.НаимТов; КоличествоСбис = Число(СтрДТ.КолТов); КодСбис = СтрДТ.ДопСведТов.КодТов; Пока Не КоличествоСбис = 0 Цикл НовСтр = ТЧСбисНом.Добавить(); НовСтр.НаименованиеСбис = НаименованиеСбис; НовСтр.КодСбис = КодСбис; НовСтр.КодМаркировки = СтрДТ.ДопСведТов.НомСредИдентТов.КИЗ[КоличествоСбис-1]; КоличествоСбис = КоличествоСбис -1; КонецЦикла; КонецЦикла; КонецПопытки; Исключение Прервать; КонецПопытки; Индекс = Индекс + 1; КонецЦикла; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; ЧтениеXMLФайл.Закрыть(); |
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день