Имя: Пароль:
1C
1С v8
ЕГАИС и БП 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