|
ЕГАИС и БП 2.0 Ø (XLife 28.11.2015 15:32) | ☑ | ||
---|---|---|---|---|
0
Roman100l
28.11.15
✎
14:14
|
1.Запрос остатков
Запрос в УТМ FSRAR_ID=Константы.ЕГАИСФСРАРИД.Получить(); Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); // Идентификатор границы разделов POST запроса ИмяФайлаДляЗагрузки = КаталогВременныхФайлов() + "Ostatki.xml"; ИмяФайлаОтвета = КаталогВременныхФайлов() + "OstatkiOtvet.xml"; // Имя файла ответа на POST запрос ИмяФайлаОтправки = КаталогВременныхФайлов() + "Ostatki100.txt"; ОбъектXML = Новый ЗаписьXML(); ОбъектXML.ОткрытьФайл(ИмяФайлаДляЗагрузки); Сообщить(ИмяФайлаДляЗагрузки); ОбъектXML.ЗаписатьОбъявлениеXML(); ОбъектXML.ЗаписатьНачалоЭлемента("ns:Documents"); ОбъектXML.ЗаписатьАтрибут("Version", "1.0"); ОбъектXML.ЗаписатьСоответствиеПространстваИмен("qp", "http://fsrar.ru/WEGAIS/QueryParameters"); ОбъектXML.ЗаписатьСоответствиеПространстваИмен("ns", "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"); ОбъектXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ОбъектXML.ЗаписатьНачалоЭлемента("ns:Owner"); ОбъектXML.ЗаписатьНачалоЭлемента("ns:FSRAR_ID"); ОбъектXML.ЗаписатьТекст(FSRAR_ID); ОбъектXML.ЗаписатьКонецЭлемента();//ns:FSRAR_ID ОбъектXML.ЗаписатьКонецЭлемента();//ns:Owner ОбъектXML.ЗаписатьНачалоЭлемента("ns:Document"); ОбъектXML.ЗаписатьНачалоЭлемента("ns:QueryRests"); ОбъектXML.ЗаписатьКонецЭлемента(); //ns:QueryRests ОбъектXML.ЗаписатьКонецЭлемента();//ns:Document ОбъектXML.ЗаписатьКонецЭлемента();//ns:Documents ОбъектXML.ЗаписатьТекст(Символы.ПС); ОбъектXML.Закрыть(); МассивФайловДляОбъединения = Новый Массив; //Формируем начальный фрагмент файла POST-запроса ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt"); ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь); //Определяем раздел двоичных данных ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary); //Указываем имя файла для передачи ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""xml_file""; filename=""" + "QueryAPSingle.xml" + """"); //Указываем тип передаваемых данных. ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: text/xml; charset=utf-8"); ФайлОтправкиНачало.ЗаписатьСтроку(""); ФайлОтправкиНачало.Закрыть(); МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало); МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузки); //Формируем конечный фрагмент файла POST-запроса ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt"); ФайлОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.ANSI, Символы.ПС, Ложь); ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--"); ФайлОтправкиКонец.Закрыть(); МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец); // !!! 3 добавление в массив //Теперь сформированные фрагменты сообщения для сервера объединяем в один файл POST-запроса ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки); ЗаголовокHTTP = Новый Соответствие(); //Укажем формат данных Content-Type ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); //Укажем длину POST-запроса Content-Length ФайлОтправки = Новый Файл(ИмяФайлаОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки); СерверПриемник = "localhost"; //Без протокола http://. Естественно, следует указать свой адрес. Порт = "8080"; //Порт УТМ ИспользоватьПрокси = Ложь; НТТР=ЕГАИС.ПолучитьHTTP(НТТР); Попытка АдресСкрипта = "/opt/in/QueryRests"; //Адрес ресурса. ЗапросHTTP = Новый HTTPЗапрос(АдресСкрипта, ЗаголовокHTTP); ЗапросHTTP.УстановитьИмяФайлаТела(ИмяФайлаОтправки); //Устанавливает имя файла, из которого будет прочитано тело POST-запроса. ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP, ИмяФайлаОтвета); Исключение Сообщить("Неудачная попытка соединения с " + СерверПриемник + ": " + ОписаниеОшибки()); КонецПопытки; ЗапросHTTP = Неопределено; ЧтениеОтвета = Новый ЧтениеXML; ЧтениеОтвета.ОткрытьФайл(ОтветHTTP.ПолучитьИмяФайлаТела()); ИмяУзла = ""; Пока ЧтениеОтвета.Прочитать() Цикл Если ЧтениеОтвета.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = ЧтениеОтвета.Имя; КонецЕсли; Если ЧтениеОтвета.ТипУзла=ТипУзлаXML.Текст Тогда Если ИмяУзла = "url" Тогда urlЗначение=ЧтениеОтвета.Значение; Сообщить("ID "+urlЗначение); КонецЕсли; Если ИмяУзла = "sign" Тогда signЗначение=ЧтениеОтвета.Значение; КонецЕсли; КонецЕсли; КонецЦикла; ID=urlЗначение; ЗАПРОСЕГАИС=ID; Ответ из УТМ ТабДок=Новый ТабличныйДокумент; Макет=ПолучитьМакет("Макет"); ОбластьМакета=Макет.ПолучитьОбласть("Заголовок"); ТабДок.Вывести(ОбластьМакета); FSRAR_ID=Константы.ЕГАИСФСРАРИД.Получить(); НТТР=ЕГАИС.ПолучитьHTTP(НТТР); ИмяФайлаОтвета = КаталогВременныхФайлов() + "VXODOstst.xml"; НТТР.Получить("/opt/out",ИмяФайлаОтвета); ЧтениеОтвета = Новый ЧтениеXML; ЧтениеОтвета.ОткрытьФайл(ИмяФайлаОтвета); ТЗВходящие=новый ТаблицаЗначений; ТЗВходящие.Колонки.Добавить("Вид"); ТЗВходящие.Колонки.Добавить("Значение"); Пока ЧтениеОтвета.Прочитать() Цикл Если ЧтениеОтвета.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда иначеЕсли ЧтениеОтвета.ТипУзла=ТипУзлаXML.Текст тогда Если Сред(ЧтениеОтвета.Значение,1,41)="http://localhost:8080/opt/out/ReplyRests/" тогда Строка=ТЗВходящие.Добавить(); Строка.Вид="Остатки"; Строка.значение=ЧтениеОтвета.Значение; КонецЕсли; КонецЕсли; Конеццикла; ОбластьМакета=Макет.ПолучитьОбласть("Строка"); ИмяФайлаОтвета=КаталогВременныхФайлов() + "VxodOstat100.xml"; Для каждого ВыборкаДетальныеЗаписи из ТЗВходящие цикл ЧтениеОтвета = Новый ЧтениеXML; НТТР.Получить(СтрЗаменить(ВыборкаДетальныеЗаписи.значение,"http://localhost:8080/",""),ИмяФайлаОтвета); ЧтениеОтвета.ОткрытьФайл(ИмяФайлаОтвета); Пока ЧтениеОтвета.Прочитать() Цикл Если ЧтениеОтвета.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ЭлементНачалоНаименование=ЧтениеОтвета.Имя; КонецЕсли; Если ЧтениеОтвета.ТипУзла=ТипУзлаXML.Текст тогда Если ЭлементНачалоНаименование="rst:Quantity" тогда Количество=ЧтениеОтвета.Значение; иначеесли ЭлементНачалоНаименование="rst:InformARegId" тогда СправкаАА=ЧтениеОтвета.Значение; ИначеЕсли ЭлементНачалоНаименование="rst:InformBRegId" Тогда СправкаББ=ЧтениеОтвета.Значение; ИначеЕсли ЭлементНачалоНаименование="pref:AlcCode" Тогда КодАлкоголя=ЧтениеОтвета.Значение; ИначеЕсли ЭлементНачалоНаименование="oref:ClientRegId" Тогда ПроизводительКод=ЧтениеОтвета.Значение; КонецЕсли; КонецЕсли; Если ЧтениеОтвета.ТипУзла = ТипУзлаXML.КонецЭлемента и ЧтениеОтвета.Имя="rst:StockPosition" тогда СпрНаименование = Справочники.ЕГАИСНоменклатура.НайтиПоРеквизиту("КодВЕгаис",СокрЛП(КодАлкоголя)); Объем=СпрНаименование.ОбемАлколь; Производ=Справочники.Контрагенты.НайтиПоРеквизиту("ИДПроизводителяЕГАИС",СокрЛП(ПроизводительКод)); ОбластьМакета.Параметры.Номенклатура=СпрНаименование; ОбластьМакета.Параметры.Объем=Объем; ОбластьМакета.Параметры.Остаток=Количество; ОбластьМакета.Параметры.СправкаА=СправкаАА; ОбластьМакета.Параметры.СправкаБ=СправкаББ; ОбластьМакета.Параметры.Производитель=Производ; ТабДок.Вывести(ОбластьМакета); КонецЕсли; Конеццикла; Конеццикла; ТабДок.Показать("Остатки ЕГАИС",,); Функция ПолучитьHTTP(НТТР) Экспорт СерверПриемник = "localhost"; //Без протокола http://. Естественно, следует указать свой адрес. Порт = "8080"; //Порт УТМ ИспользоватьПрокси = Ложь; Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); // Идентификатор границы разделов POST запроса Если ИспользоватьПрокси Тогда Прокси = Новый ИнтернетПрокси; Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина; Прокси.Пароль = "ПарольПрокси"; // укажите своё значение Прокси.Пользователь = "ПользовательПрокси"; // укажите своё значение НТТР = Новый HTTPСоединение(СерверПриемник, Порт, , , Прокси); Иначе НТТР = Новый HTTPСоединение(СерверПриемник, Порт); КонецЕсли; Возврат НТТР КонецФункции |
|||
1
Roman100l
28.11.15
✎
14:14
|
Если кому надобно еще выложу.
|
|||
2
zippygrill
28.11.15
✎
15:30
|
(1) полезно
|
|||
3
XLife
28.11.15
✎
15:32
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |