Пример HTTP запроса к УТМ ЕГАИС на платформе 1С 7.7

Публикация № 435130 16.12.15

Учетные задачи - Оптовая торговля

ЕГАИС УТМ HTTP XML MSXML ServerXMLHTTP XMLHTTP DOMDocument

Запрос реализован на объекте ServerXMLHTTP из встроенной в Windows библиотеки MSXML,
результатом запроса является XML объект DOMDocument из той же библиотеки MSXML со встроенным интерфейсом его обработки

Предлагаю Вашему вниманию пример HTTP запроса к Универсальному транспортному модулю Единой государственной автоматизированной информационной системы на платформе 1С 7.7.

Поскольку встроенный язык 1С 7.7 не содержит инструменты для работы с HTTP и XML, запрос реализован на объекте ServerXMLHTTP из библиотеки MSXML.
Это решение обладает рядом преимуществ:

+ не используется внешняя утилита CURL, процесс отправки запроса полностью контролируется из кода 1С
+ не требуются внешние библиотеки типа v7plus.dll, объект встроен в операционую систему Windows
+ результатом запроса является XML объект DOMDocument из той же библиотеки MSXML со встроенным интерфейсом его обработки,
т.е. для распознавания XML ответа на запрос также не требуются внешние библиотеки и сторонние парсеры.

Документация на используемые объекты размещена на сайте "мелкомягкого":

https://msdn.microsoft.com/en-us/library/windows/desktop/ms760218%28v=vs.85%29.aspx

Для корректной работы примера необходима библиотека MSXML не ниже 4.0
Определить, какая версия библиотеки у вас установлена, можно по версиям объектов MSXML в ветке реестра HKEY_CLASSES_ROOT:

При необходимости обновить из того же источника

https://support.microsoft.com/ru-ru/kb/324460

В качестве примера рассматривается отправка запроса остатков организации:

    //определение версии MSXML
	MSXMLver = "6";
	Попытка
		Http = CreateObject("MSXML2.ServerXMLHTTP."+MSXMLver+".0");
	Исключение   
		Попытка
			MSXMLver = "4";
			Http = CreateObject("MSXML2.ServerXMLHTTP."+MSXMLver+".0");	
		Исключение   
			Сообщить(ОписаниеОшибки(),"!");
			Сообщить("Для работы модуля обмена необходима библиотека MSXML не ниже 4.0","!");
			Возврат;
		КонецПопытки;
	КонецПопытки;
    
	//адрес службы УТМ ЕГАИС
	ServiceIP = "localhost";	
	ServicePort = "8080";
	Service = "http://"+ServiceIP+":"+ServicePort;
    FSRAR_ID = "123456789"; //ваш идентификатор в ЕГАИС

    //текст XML запроса остатков
	XMLstr =	"<?xml version=""1.0"" encoding=""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:qp=""http://fsrar.ru/WEGAIS/QueryParameters"">				
				|<ns:Owner>
				|<ns:FSRAR_ID>"+FSRAR_ID+"</ns:FSRAR_ID>
				|</ns:Owner>
				|<ns:Document>
				|<ns:QueryRests>
				|</ns:QueryRests>
				|</ns:Document>
				|</ns:Documents>";

	Response = SendHTTPRequest("POST", "/opt/in/QueryRests", XMLstr);
    Если Response = 0 Тогда
	    Возврат;
	КонецЕсли;

	replyId = Response.documentElement.childNodes.item(0).text; //идентификатор для отслеживания ответа на запрос

В ответ на такой запрос от УТМ приходит XML квитанция о подписи запроса вида

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<A>
<url>992ecfcf-7f31-4372-80c0-7a8b91cc85dd</url>
<sign>597CC2C9CE9F2D56F447C2E2D2D6B3481CC0A13DE0A49EAA15CBEB32BEDAC5F7B0B35DBD08C7369A2826AC9935CBB212FE6FBCAF6FCC5DF6C0E9171818AB8EEE</sign>
<ver>2</ver>
</A>

В теге url квитанции содержится идентификатор, по которому далее отслеживается получение ответа на запрос от сервера ЕГАИС

Ну и, собственно, функция SendHTTPRequest для отправки запроса:

Функция SendHTTPRequest(Metod, Request, XMLstr="")
	
	Сообщить(Metod+" "+Service+Request,".");
	Если ПустаяСтрока(XMLstr) = 0 Тогда
	    Сообщить(XMLstr);              
		Boundary = "Boundary"+СтрЗаменить(ТекущееВремя(),":","");
		//формируем тело запроса
		Body = "--"+Boundary+РазделительСтрок
				+"Content-Disposition: form-data; name=""xml_file""; filename=""file.xml"""+РазделительСтрок
				+"Content-Type: text/xml; charset=utf-8"+РазделительСтрок+РазделительСтрок
				+XMLstr+РазделительСтрок
				+"--"+Boundary+"--";
	КонецЕсли;
	
	Попытка
		Http = CreateObject("MSXML2.ServerXMLHTTP."+MSXMLver+".0");	
	Исключение   
		Сообщить(ОписаниеОшибки(),"!");
		Возврат 0;
	КонецПопытки;

	Http.Open (Metod, Service+Request, -1); //асинхронный запрос 
	Http.SetRequestHeader("Host", ServiceIP);

	Попытка
		Если ПустаяСтрока(XMLstr) = 0 Тогда
			Http.SetRequestHeader("Content-Type","multipart/form-data; boundary="+Boundary);
			Http.SetRequestHeader("Content-Length", СтрДлина(Body));
			Http.Send(Body);
		Иначе
			Http.Send();
		КонецЕсли;
	Исключение   
		Сообщить(ОписаниеОшибки(),"!");
		Возврат 0;
	КонецПопытки;
	
	Состояние("Ожидание ответа на запрос...");
    ВремяОжидания = 0;
	Пока Http.ReadyState <> 4 Цикл
		Попытка
			Если Http.waitForResponse(1) = 0 Тогда //превышено время ожидания ответа =1s
				Если ВремяОжидания >= 60 Тогда //60s
					Состояние("");
					Сообщить("Превышен интервал ожидания запроса сервера "+ServiceIP,"!");
					Возврат 0; 
				КонецЕсли;
				ВремяОжидания = ВремяОжидания + 1; //1s
				Состояние("Ожидание ответа на запрос... "+Строка(ВремяОжидания)+"s");
			КонецЕсли;
		Исключение   
			Сообщить(ОписаниеОшибки(),"!");
			Возврат 0;
		КонецПопытки;	
	КонецЦикла;           
	Состояние("");
	
	Если Http.Status = 200 Тогда
		Сообщить("HTTP status: "+Http.Status+" "+Http.StatusText+", время ожидания "+?(ВремяОжидания=0,"<1",Строка(ВремяОжидания))+"s");	    
	Иначе
		Сообщить("HTTP status: "+Http.Status+" "+Http.StatusText+", ошибка!","!");
		Возврат 0;
	КонецЕсли;
                                     
	Response = Http.ResponseXML;
	
	Возврат Response;
	
КонецФункции	// SendHTTPRequest

Внешняя обработка, демонстрирующая обмен данными с УТМ ЕГАИС на платформе 1С 7.7 и основанная на приведенном примере:

//infostart.ru/public/435145/

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. СергейК 51 16.12.15 10:46 Сейчас в теме
Познавательно!
Но я решил для обмена все таки использовать старый проверенный curl.
т.к. все равно все хмл запросы/ответы пока сохраняю для анализов возможных сбоев.
p.s.
а не проверяли, мне кажется я как то тестировал напрямую считывание в XML по URL
выяснилось что влияют настройки IE в системе, в частности, например настройки прокси.
Почему то мне это не понравилось... :-)
2. Palmer1976 194 16.12.15 11:00 Сейчас в теме
(1) СергейК, вызывать внешнюю утилиту curl при отправке каждого запроса, вы серьезно?
- не кошерно ;) окошки в глазах будут мельтешить )))
я тоже сохраняю все результаты в файл соответствующей функцией, для данного примера это Http.Save(имя файла)
Оставьте свое сообщение

См. также

Торговый помощник 1С: 7.7

Розничная торговля Платформа 1С v7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Бесплатно (free)

Торговый помощник 1С: 7.7 - главный инструмент менеджера-консультанта торговой точки, на которой функции кассира и менеджера разделены.

28.06.2018    7543    filin2042    2    

4

Методика пошагового перехода из решения для платформы 7.7 "Торговля и склад" на решение для платформы 8 "Управление торговлей"

Оптовая торговля Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Управление торговлей 10 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Бесплатно (free)

Данная статья предваряет публикацию подсистемы для одностороннего ONLINE обмена документами и справочниками между базами данных для процесса поэтапного перехода из "семерки" в "восьмерку" для случаев распределенной совместной работы большого количества пользователей, не допускающих резких скачкообразных внедрений с рисками остановки процессов продаж, поставок, доставок или складских сборок.

31.10.2016    16570    vugluscr1991    29    

13

Важные изменения в 54-ФЗ: какой будет ККМ в 2017 году

Кассовые операции Розничная торговля ККМ Платформа 1С v7.7 Платформа 1С v8.3 Розничная и сетевая торговля (FMCG) Россия Бесплатно (free)

Уже начиная с апреля 2016 года нас ждут довольно серьезные изменения по передаче данных о продажах в налоговую. Не только ожесточится контроль над тем, сколько мы продаем, но и изменятся сами ККМ.

11.05.2016    95321    alis112358    80    

29

Оформление журнала полученных и выставленных счетов-фактур в «1С: Бухгалтерский учет 7.7»

Оптовая торговля Производство готовой продукции (работ, услуг) Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Россия Бухгалтерский учет Налоговый учет НДС Бесплатно (free)

По многочисленным просьбам представляю описание порядка отражения операций по перевыставлению счетов-фактур от своего имени для формирования Журнале полученных и выставленных счетов-фактур (постановление Правительства от 26 декабря 2011 г. № 1137)

04.07.2015    24599    Sergey1CSpb    0    

3

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Выгрузка 6 раздела РСВ-1 в СПУ ОРБ из ЗИК 7.7

Внешние источники данных Зарплата Платформа 1С v7.7 Россия Бухгалтерский учет ФОМС, ЕФС Бесплатно (free)

Выгрузка индивидуальных сведений (раздел 6) РСВ-1 в СПУ ОРБ из ЗИК 7.7 начиная с обновления 346

16.07.2014    27752    gubar    3    

1

Как избежать авансовых счет-фактур в рамках одного дня

Инструкции пользователю Оптовая торговля Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Налоговый учет НДС Бесплатно (free)

Способ устранения появления авансовых счетов фактур при получении выручки ранее проведения документа реализации в рамках одного дня.

30.11.2012    9350    bananoed    3    

9

ADODB Строка подключения

Внешние источники данных Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Я очень люблю SQL, иногда слишком сильно и поэтому бываю предвзятым. Создать запрос к базе данных из 1С через ADODB не просто, а очень просто. Но есть одно обстоятельство, которое мне всегда мешало жить - это ConnectionString. Конечно, есть сайт http://www.connectionstrings.com/, но...

25.01.2011    58731    awk    13    

87

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Указание номера платежно-расчетного документа в счет-фактуре выданном

Оптовая торговля Универсальные функции Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Налоговый учет Бесплатно (free)

Типовая ТиС 7.7 Руководство к исправлению типовой печатной формы для указания номера(ов) платежно-расчетного(ых) документа(ов) в выданном счет-фактуре.

17.09.2009    13376    CheBurator    1    

0

Связка ККМ (Феликс-РК) АТОЛ драйвера и 1С 7.7 - глюки взаимодействия

ККМ Розничная торговля Платформа 1С v7.7 1С:Торговля и склад 7.7 Россия Бесплатно (free)

Честно сказать, не посмотрел, что там в стандартной обработке печати фискального чека из 1С (говорят, не всё там круто), но то, что было оттуда вынесено (не мной) в нашу самописную конфу - работало глючно. Когда дошли руки - переписал.

10.02.2009    26758    Fisherru    6    

6

Обрезание (свертка) ТиС

Розничная торговля Свертка базы Платформа 1С v7.7 1С:Торговля и склад 7.7 Россия Управленческий учет Бесплатно (free)

В данной статье я опишу универсальную технологию обрезания (сверки) БД.

24.12.2008    11374    kasperok    20    

1

Оптимизация регистров оперативного учета на работающей базе . v77

Розничная торговля Механизмы платформы 1С Оперативный учет 7.7 Конфигурации 1cv7 Россия Управленческий учет Бесплатно (free)

Скорее всего, как всегда, баян. Столкнулся с крайне неудачно спроектированной торговлей. Вышел из положения малой кровью за счет переноса некоторых измерений регистров в реквизиты.

19.12.2008    10643    dav405    12    

10

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

[ОБУЧАЛОВКА] Ликбез по сканерам ШК

Разработка внешних компонент Розничная торговля Платформа 1С v7.7 Конфигурации 1cv7 Россия Управленческий учет Бесплатно (free)

Краткое описание основных принципов работы/настройки сканеров ШК в программе 1С (по мотивам ветки T1C)

22.09.2007    37350    CheBurator    20    

24

[ОБУЧАЛОВКА] Про сети (Ашан, Метро) и их заморочки...

Розничная торговля Оперативный учет 7.7 1С:Торговля и склад 7.7 Россия Управленческий учет Бесплатно (free)

Демонстрируется подход к относительно безболезненному исправлению конфигурации ТиС для реализации сетевых заморочек (код сети в печатной форме ТОРГ12)

21.06.2007    21626    CheBurator    47    

18

Резервирование по заявкам в ТиС

Оборотно-сальдовая ведомость, Анализ счета Розничная торговля Универсальные функции Платформа 1С v7.7 1С:Торговля и склад 7.7 Россия Управленческий учет Бесплатно (free)

В типовой ТиС 9.2 резервирование по заявкам покупателя производится или из текущего остатка на складе и из предстоящих поставок. Все хорошо, но резервирование из предстоящих поставок происходит по документом ЗаказПоставщику, т.е. если есть ЗаявкаПокупателя на ТМЦ, то резерв под нее при оформлении документа ПоступлениеТМЦ будет произведен только в том случае, если предварительно будет оформлен документ ЗаказПоставщику, а иначе - не прокатывает. Пробуем РЕШИТЬ по просьбам трудящихся.

02.08.2006    15121    mdzen    15    

14