Отправка HTTP запроса в УТМ ЕГАИС. Код функции + обработка.

08.06.16

Разработка - Инструментарий разработчика

Функция для отправки HTTP запроса в УТМ ЕГАИС. Используется HTTPСоединение либо curl.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Тестовая обработка
.epf 15,13Kb
36
36 Скачать (1 SM) Купить за 1 850 руб.
client.xml
.xml 0,57Kb
8
8 Скачать (1 SM) Купить за 1 850 руб.
Функция написана при решении задачи отказа от curl в пользу инструментов, встроенных в язык 1С.

Возможности:

  • Получение xml от УТМ ЕГАИС в виде файла на диске

  • Отправка xml в  УТМ ЕГАИС и получение ответного xml

  • Реализованы 2 метода отправки: curl и HTTPЗапрос. curl.exe должен лежать в директории C:\temp\

Пример использования:

Запрос реквизитов контрагента

  • Формируем файл (client.xml):
<?xml version="1.0" encodmg="UTF-8"?>
<ns:Documents Version="1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
    xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef"
    xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters">
<ns:Owner>
  <ns:FSRAR_ID>00040218</ns:FSRAR_ID>
</ns:Owner>
<ns:Document> (5.1)
<ns:QueryClients>
  <qp:Parameters>
   <qp:Parameter>
    <qp:Name>ИНН</qp:Name>
    <qp:Value>1681000049<</qp:Value>
   </qp:Parameter>
  </qp:Parameters>
  </ns:QueryClients>
</ns:Document>
</ns:Documents>
  • Запускаем обработку. Заполняем поля: 
    • URI: 10.10.10.10:8080/opt/in. вместо 10.10.10.10 указываем адрес компьютера с установленным УТМ

    • Путь к файлу ответа - путь к файлу, в котороый будет записан ответ УТМ. Файл может не существовать, но папка должна быть

    • Команда - GET

    • Метод отправки - выбрать любой

  • Проверяем очередь входящих (URI: 10.10.10.10:8080/opt/in)
  • Через некоторое время увидим ответ от УТМ:
  • <ns:Documents xmlns:rc="http://fsrar.ru/WEGAIS/ReplyClient" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef" xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01">
    <ns:Owner>
    <ns:FSRAR_ID>3463047</ns:FSRAR_ID>
    </ns:Owner>
    <ns:Document>
    <ns:ReplyClient>
    <rc:Clients>
    <rc:Client xmlns:rc="http://fsrar.ru/WEGAIS/ReplyClient" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef">
    <oref:ClientRegId>010000005339</oref:ClientRegId>
    <oref:INN>5256044729</oref:INN>
    <oref:KPP>526332001</oref:KPP>
    <oref:FullName>ООО ЦДА "Сомелье"</oref:FullName>
    <oref:ShortName>ООО "ЦДА "СОМЕЛЬЕ"</oref:ShortName>
    <oref:address>
    <oref:Country>643</oref:Country>
    <oref:RegionCode>52</oref:RegionCode>
    <oref:description>
    РОССИЯ,603127,НИЖЕГОРОДСКАЯ ОБЛ,,Нижний Новгород г,СОРМОВСКИЙ РАЙОН,Федосеенко ул,46А,ЛИТЕР К4, 1 ЭТАЖ,ПОМЕЩЕНИЕ №№ 19, 20, 21, 22
    </oref:description>
    </oref:address>
    <oref:State>Active</oref:State>
    </rc:Client>
    <rc:Client xmlns:rc="http://fsrar.ru/WEGAIS/ReplyClient" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef">
    <oref:ClientRegId>030000039632</oref:ClientRegId>
    <oref:INN>5256044729</oref:INN>
    <oref:KPP>525601001</oref:KPP>
    <oref:FullName>
    Общество с ограниченной ответственностью Центр дистрибуции алкоголя "Сомелье"
    </oref:FullName>
    <oref:ShortName>ООО ЦДА "Сомелье"</oref:ShortName>
    <oref:address>
    <oref:Country>643</oref:Country>
    <oref:RegionCode>52</oref:RegionCode>
    <oref:description>
    Россия, 603147,Нижегородская обл,Юлиуса Фучика ул,Нижний Новгород г,43 А,
    </oref:description>
    </oref:address>
    <oref:State>Active</oref:State>
    </rc:Client>
    </rc:Clients>
    </ns:ReplyClient>
    </ns:Document>
    </ns:Documents>

     

Спасибо desarz за публикацию HTTP POST запрос к УТМ системы ЕГАИС.

// Функция выполняет HTTP запрос curl`ом либо 1С HTTPЗапросом
// Параметры:
//  URI                - Строка - адрес для отправки запроса вида 
//                 				  [http://]<ip>[:<port>][/<url>],
//                 				  пример: 10.10.10.1:8080/opt/in/ActWriteOff 
//
//  Команда            - Строка - "GET" | "POST" | "DELETE" - 
//                 				  метод http запроса  
//
//  ПутьКФайлуОтправки - Строка – путь к отправляемому файлу,
//								  пример: c:\temp\query.xml
//
//  ПутьКФайлуОтвета   - Строка - путь к файлу, в который будет записан ответ
//								  пример: c:\temp\reply.xml
//
//  Таймаут            - Число  - максимальное время выполнения операции в секундах
//
//	ТолькоCurl		   - Булево - флаг принудительного использования curl.exe
//
// Возвращаемое значение:
//  Булево - Истина: запрос успешно выполнен, 
//           Ложь: запрос не выполнен
//
Функция ВыполнитьHTTPЗапрос(val URI, Команда = "POST",	ПутьКФайлуОтвета, ПутьКФайлуОтправки = "", Таймаут = 120, ТолькоCurl = Ложь) Экспорт

	// Разбор URI
	Попытка
		RegExp = Новый COMОбъект("VBScript.RegExp");
		RegExp.MultiLine = Ложь;
		RegExp.Global = Ложь; 
		RegExp.IgnoreCase = Истина;
		
		ШаблонIP   = "(\d+\.\d+\.\d+\.\d+)";
		ШаблонПорт = "\d+\.\d+\.\d+\.\d+:(\d+)";
		ШаблонURI  = "\d+(\/.*)";
		
		RegExp.Pattern = ШаблонIP; Рез=RegExp.Execute(URI);
		Если Рез.Count = 1 Тогда
			IP = Рез.item(0).value;
		Иначе
			ВызватьИсключение "Ошибка разбора URI. Не удалось определить IP. URI: " + URI;
		КонецЕсли;
		
		RegExp.Pattern = ШаблонПорт; Рез=RegExp.Execute(URI);
		Если Рез.Count = 1 Тогда
			Порт = Рез.item(0).SubMatches.Item(0);
		Иначе
			Порт = "8080";
		КонецЕсли;
		
		RegExp.Pattern = ШаблонURI; Рез=RegExp.Execute(URI);
		Если Рез.Count = 1 Тогда
			АдресСкрипта = Рез.item(0).SubMatches.Item(0);
		Иначе
			АдресСкрипта = "";
			ВызватьИсключение "Ошибка разбора URI. Не удалось определить АдресСкрипта. URI: " + URI;
		КонецЕсли;
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат Ложь;
	КонецПопытки;
	
	Если ТолькоCurl Тогда 
		
		СтрокаКоманды = "cmd /c c:\temp\curl.exe --max-time " + Таймаут;

		Если Команда = "GET" Тогда
			СтрокаКоманды = СтрокаКоманды + " -X GET %1 > %2";
			СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаКоманды, uri, ПутьКФайлуОтвета);
		ИначеЕсли Команда = "POST" Тогда                            
			СтрокаКоманды = СтрокаКоманды + " -F ""xml_file=@%1"" %2 > %3";
			СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаКоманды, ПутьКФайлуОтправки, uri, ПутьКФайлуОтвета);
		ИначеЕсли Команда = "DELETE" Тогда
			Возврат Ложь; // TODO
		КонецЕсли; 
		
		Попытка
			ЗапуститьПриложение(СтрокаКоманды, "C:\temp\", Истина);
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат Ложь;
		КонецПопытки;
		
		Возврат Истина;
		
	Иначе
		
		Если Команда = "GET" Тогда			
			Попытка
				НТТР = Новый HTTPСоединение(IP, Число(Порт),,,,Таймаут);
				Ответ = НТТР.Получить(Новый HTTPЗапрос(АдресСкрипта),ПутьКФайлуОтвета);
				Если Ответ.КодСостояния = 200 Тогда
					Возврат Истина;
				Иначе
					Сообщить("Код ответа сервера: " + Ответ.КодСостояния);
					Возврат Ложь;
				КонецЕсли;
			Исключение
				Сообщить(ОписаниеОшибки());
				Возврат Ложь;
			КонецПопытки;
		КонецЕсли; 
		
		Попытка
			Boundary = СтрЗаменить(Новый УникальныйИдентификатор,"-","");
			ИмяФайлаДляЗагрузки = ПутьКФайлуОтправки;//КаталогВременныхФайлов() + Boundary + "select.xml";       
			ИмяФайлаОтвета = КаталогВременныхФайлов() + Boundary + "answer.xml"; // Имя файла ответа на POST запрос
			ИмяФайлаОтправки = КаталогВременныхФайлов() + Boundary + "post.txt";
			
			//Определяем массив для процедуры ОбъединитьФайлы
			МассивФайловДляОбъединения = Новый Массив;
			
			//Формируем начальный фрагмент файла POST-запроса
			ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
			ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь);
			
			//Определяем раздел двоичных данных
			ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary);
			//Указываем имя файла для передачи
			ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""xml_file""; filename=""" + "select.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", РазмерФайлаОтправки);
			КонецЕсли;
			
			СерверПриемник = IP;
			НТТР = Новый HTTPСоединение(СерверПриемник, Число(Порт),,,,Таймаут);
			
			Попытка
				//Формируем HTTP запрос
				ЗапросHTTP = Новый HTTPЗапрос(АдресСкрипта, ЗаголовокHTTP);
				
				//Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
				ЗапросHTTP.УстановитьИмяФайлаТела(ИмяФайлаОтправки);  //Устанавливает имя файла, из которого будет прочитано тело POST-запроса.
				
				//Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
				ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP, ИмяФайлаОтвета);			
			Исключение
				ЗапросHTTP = Неопределено;
				Сообщить("Неудачная попытка соединения с " + СерверПриемник + ": " + ОписаниеОшибки());
				Возврат Ложь;
			КонецПопытки;
			
			//Разрушаем объект HTTP-запроса для освобождения файла POST-запроса.
			//В противном случае при попытке удаления файла получим ошибку совместного доступа.
			ЗапросHTTP = Неопределено;
			
			Возврат Истина;
		Исключение      
			ЗапросHTTP = Неопределено;
			Сообщить(ОписаниеОшибки(),СтатусСообщения.Внимание);
			Возврат Ложь;
		КонецПопытки;
	КонецЕсли;
	
КонецФункции

Пример xml файла для отправки (client.xml):

<?xml version="1.0" encodmg="UTF-8"?>
<ns:Documents Version="1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
    xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef"
    xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters">
 <ns:Owner>
  <ns:FSRAR_ID>00040218</ns:FSRAR_ID>
 </ns:Owner>
 <ns:Document> (5.1)
 <ns:QueryClients>
  <qp:Parameters>
   <qp:Parameter>
    <qp:Name>ИНН</qp:Name>
    <qp:Value>1681000049<</qp:Value>
   </qp:Parameter>
  </qp:Parameters>
  </ns:QueryClients>
 </ns:Document>
</ns:Documents>

ЕГАИС curl HTTPСоединение

См. также

Обмен с ГосИС Бюджетный учет Регламентированный учет и отчетность Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление холдингом Химическая промышленность Государственные, бюджетные структуры Электротехника и микроэлектроника Машиностроение и приборостроение Металлургическая промышленность Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Раздельный учет ГОЗ в 1С: автоматизация отчетности по госзаказам. Отчеты по исполнению госконтрактов, расчетно-калькуляционные материалы и контроль операций для исполнения в срок. Простая настройка и соответствие законодательству. Профессиональный консалтинг и регулярные обновления продукта.

44000 руб.

28.08.2020    342067    2302    135    

1043

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    170224    940    403    

907

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    13215    100    46    

104

Бюджетный учет Обмен с ГосИС Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Государственные, бюджетные структуры Россия Бухгалтерский учет Платные (руб)

Доработка конфигурации 1С:Бухгалтерия предприятия, редакция 3.0. реализована в виде расширения. Предназначена для ведения раздельного учета и автоматизации заполнения отчетности исполнения контрактов ГОЗ в конфигурациях 1С БП КОРП, ПРОФ, Базовая, БИТ.ФИНАНС.

55200 руб.

16.08.2019    92830    242    87    

142

Оптовая торговля Розничная торговля Обмен с ГосИС Бухгалтер Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Автоматизация учета ЕГАИС в 1С для оптовой торговли, производства и импорта. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

828 руб.

15.12.2015    171654    839    368    

404

ККМ Кассовые операции Розничная торговля Обмен с ГосИС Программист Бухгалтер Пользователь Бухгалтерский учет Оперативный учет Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение конфигурации для УТ 11.5, КА 2.5 ,ERP 2.5 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

5000 руб.

27.08.2018    124606    1077    602    

890

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26820    90    48    

134
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DMLangepas 26.01.18 06:49 Сейчас в теме
На какой конф запускается эта обработка?
2. zekrus 151 22.01.19 08:19 Сейчас в теме
Доброе утро!
Тема весьма актуальная.
С уважением
3. ArCtic 3 29.06.20 14:00 Сейчас в теме
как правильно отправить xml?
Скрытый текст

и получить ответ?
отправляю этот файл через УТМ - возвращает ответ "Проверка пройдена", а через обработку либо
<A><error>Некорректный тип документа: null</error><ver>2</ver></A>
, либо
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<A>
  <ver>1</ver>
</A>
Оставьте свое сообщение