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

13.01.16

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

Запрос реализован на объекте 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/

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

См. также

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Пользователь Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

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

28500 руб.

21.04.2017    95482    126    40    

214

Оптовая торговля Розничная торговля ККМ ЭДО и ОФД Обмен с ГосИС Системный администратор Программист Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

Подключение фискального регистратора к 1С 7.7 в режиме онлайн-кассы (в соответствии с 54-ФЗ). Поддержка крайних версий драйверов ККТ: ДТО 10 и ДТО 8 для Атол, 4.15, 5.16 для Штрих-М. Поддержка протоколов ФФД 1.0, 1.05, 1.1 и 1.2, развитые настройки для применения частичных оплат и авансов в оптовой и розничной торговле. Поддержка чеков коррекции всех версий. Поддержка розничной продажи маркированной продукции (ЕГАИС, табак, обувь, лекарства, шины, одежда, белье, парфюмерия, молочная продукция, вода и пр.). Вывод электронного чека (на е-майл, телефон) по требованию покупателя, поддерживаются комбинированные типы оплаты, режим эмуляции печати чека на ФР. Полный цикл работы из 1С 7.7 с маркировкой Честный ЗНАК (ГИСМТ, ЦРПТ) из 1С 7.7. ЭДО (табак, обувь, шины, одежда, молочная продукция, вода и прочие группы товаров) для розницы и опта (приемка и оптовая отгрузка маркированной продукции). Поддерживается как объемно-сортовой учет (ОСУ) так и поштучный (поэкземплярный) учет.

2000 руб.

28.03.2017    475736    4387    3478    

2446

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Программист Бухгалтер Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 1С:Упрощенное налогообложение 7.7 Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)

Полностью автоматизированный обмен между конфигурациями 1С 7.7 и ФГИС Меркурий через Ветис.API для всех видов деятельности (Опт, Розница, Производство). Для организации обмена с ФГИС Меркурий требуется минимальная доработка конфигураций (поддерживается "из коробки" 1С: "Торговля и склад ред. 9.2", 1С: "Комплексная ред. 4.5", 1С: "Бухгалтерия 7.7", 1С: "УСН 7.7", 1С Предприниматель, другие конфигурации по заказу, включая нетиповые и самописные). Модуль разработан таким образом, чтобы минимизировать затраты по внедрению в произвольную конфигурацию на базе 1С 7.7. Вы можете БЕСПЛАТНО скачать демо-версию без ограничения по функционалу и опробовать решение в полном объеме перед покупкой. В данном программном продукте реализованы все технические требования Россельхознадзора по обмену в формате 2.0 и 2.1. Решение прошло опытную эксплуатацию и тестирование на крупных объектах всех видов деятельности: Производство, Опт, Розница.

10000 руб.

21.11.2018    53818    156    105    

70

Розничная торговля Логистика, склад и ТМЦ Пользователь Оперативный учет 7.7 Оперативный учет 1С:Управление торговлей 10 1С:Торговля и склад 7.7 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Обработка служит помощником для распределения товарных запасов между различными складами. В качестве необходимой информации для анализа, руководитель в отчете может наблюдать: 1. Остатки по выбранным складам 2. Продажи с каждого из складов за выбранный период 3. Возможна группировка по свойствам номенклатуры (для УТ10.3)

5900 руб.

08.07.2011    51954    59    1    

33

Обмен с ГосИС Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Управление торговлей 10 Россия Абонемент ($m)

Уже с 01.04.2024 вводится так называемый "разрешительный" режим продажи маркированной продукции в розницу. Это значит, что перед продажей нужно запрашивать у сервиса ЦРПТ разрешение на реализацию каждой марки. Здесь кратко опишу, как это делается, и приложу примеры для 1С 8 и 7.7.

1 стартмани

15.03.2024    7393    80    kirlog    85    

25

Внешние источники данных Программист Платформа 1С v7.7 Конфигурации 1cv7 Украина Абонемент ($m)

Рабочий механизм чтения/записи строк в формате JSON для 1С 7.7. Тестировалось на релизах 7.70.25 и 27.

1 стартмани

16.12.2019    22737    62    Volvo32    33    

25

Анализ учета Оптовая торговля Бухгалтер Бухгалтерский учет 7.7 1С:Комплексная 7.7 Россия Бухгалтерский учет НДС Абонемент ($m)

Отчет написан для Комплексной конфигурации 4.2. Отчет позволяет выполнить сверку кредитовых оборотов счета 76.АВ (НДС с авансов полученных) с книгой покупок, проверить правильность выписки счетов фактур на зачет аванса по счетам БУ в разрезе разных ставок НДС 18% и 20% в комплексной конфигурации 1С:Предприятия 7.7. Позволяет найти и исправить ошибки в процессе перехода на 20% НДС. Помогает с закрытием квартала 18% и 20% НДС. Отчет обновлен для анализа данных 2 квартала 2019 года и всех следующих кварталов (стал более универсальным).

1 стартмани

27.03.2019    24313    13    ksnik    5    

2

Оптовая торговля Обмен с ГосИС Программист Бухгалтер Платформа 1С v7.7 Конфигурации 1cv7 Сельское хозяйство и рыболовство Оптовая торговля, дистрибуция, логистика Пищевая промышленность Бухгалтерский учет Платные (руб)

В обработке реализован полный цикл работы с ГИС Меркурий из 1С на платфоме 7.70.027 (поддерживается конфигурация "Торговля и Склад") через Ветис.API: реализованы процедуры обмена с подсистемами заявок и справочников Ветис.API в формате 2.0.

5040 руб.

03.07.2018    37476    79    27    

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