Отправка 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С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление холдингом Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Управляйте учетной политикой раздельного учета ГОЗ в 1С:Бухгалтерия 3.0 ПРОФ/КОРП и УХ 3.2. Отчеты по исполнению госконтрактов, расчетно-калькуляционные материалы и контроль операций для исполнения в срок. Готовое расширение подходит для всех бухгалтеров и руководителей производства, помогая вести правильный учет по гособоронзаказу в соответствии 275-ФЗ. Профессиональный консалтинг и регулярные обновления продукта.

28.08.2020    300222    2099    vvmanannikov    133    

985

SALE! 15%

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159443    872    399    

861

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

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

55200 руб.

16.08.2019    91931    234    87    

140

SALE! 15%

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

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

8400 7140 руб.

20.08.2024    7774    55    22    

66

SALE! 40%

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

Интеграция и синхронизация Честный Знак и 1C - полноценная обработка, которая манипулирует сотнями задач по ведению учета в системе мониторинга честный знак, особенности: такие как полная поддержка учета карточек в национальном каталоге (модерация, редактирование, подписание, получение информации), получение кодов маркировок в станции управления заказами "СУЗ Облако", удобная отправка и получение "УПД" через систему "ЭДОЛайт" из документов реализации или корректировки, так же существует механизм приема через ЭДОЛайт, отправка и получения таких документов как перемаркировка , списание, отгрузка и еще более 40 типов документов в ГИСМТ которые описаны ниже, моментальное сопоставление и внедрение в типовую конфигурацию которое обеспечивает ракетную мега скорость

18000 10800 руб.

28.03.2023    17626    110    21    

90

Бюджетный учет Обмен с ГосИС Бухгалтер Пользователь Бухгалтерский учет 1С:Управление производственным предприятием Государственные, бюджетные структуры Россия Бухгалтерский учет Платные (руб)

Для 1С: УПП 1.3 предлагаем Вашему вниманию подсистему "Раздельный учет результатов финансово-хозяйственной деятельности организаций, выполняющих государственный оборонный заказ (раздельный учет ГОЗ)". Ключевые возможности подсистемы: - Автоматическое заполнение регламентированного отчета «Исполнение контрактов ГОЗ»; - Расшифровка показателей отчета об исполнении контрактов ГОЗ с детализацией до документов; - Контроль хозяйственных операций на соответствие требованиям Постановления Правительства № 47; - Автоматизированный ввод начальных данных по контрактам, заключенным ранее даты начала использования подсистемы.

90000 руб.

25.09.2020    30670    42    10    

40

SALE! 20%

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

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 7176 руб.

15.12.2015    170793    955    364    

400

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

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

9360 руб.

17.05.2024    23438    68    45    

117
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DMLangepas 26.01.18 06:49 Сейчас в теме
На какой конф запускается эта обработка?
2. zekrus 150 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>
Оставьте свое сообщение