HTTP POST запрос к УТМ системы ЕГАИС

16.09.15

Разработка - Запросы

В преддверии ввода системы ЕГАИС, разбирались с УТМ и HTTP POST запросами.

 

С 01.01.2016 через систему ЕГАИС (Единая государственная автоматизированная информационная система http://egais.ru)  - будут обязаны работать оптовики и розничные продавцы крепкого и слабого алкоголя.

В преддверии внедрения на своих учетных системах обмена с УТМ (ЕГАИС) разбирались, как работает.

Для обработки использовалась статья "Передача файлов и данных на веб-сервер средствами 1С:Предприятие 8.X методом POST".

 

 

XML запрос к справочнику организаций (из Технической документации УТМ 1.1)

Сформируем xml-файл запроса (client.xml) c запросом рекивизитов организации вида (структура запроса взята из описания УТМ модуля):

<?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>

Запрос реквизитов организации выполняется по ее ИНН и FSRAR_ID содержит идентификатор организации, отправляющей данный документ.

В ответ на этот запрос, УТМ подписывает файл запроса и возвращает реквизиты подписи в квитанции следующего вида:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<A>
   <url>d9ef780e-4d35-41b0-bb9c-f06e53ac23d3</url>
        <sign>895B92CAD115B57B02C7D12ADC488066D99B60549D57A737B0CAC18E5E3E1C72E6B8D414C763CB58A5E67DE7C8C2ECE908451C4AE6838479A42ABBA8179D0CE8
        </sign>
   <ver>2</ver>
</

В элементе url возвращается идентификатор запроса, его значение требуется запомнить для поиска впоследствии ответа на этот запрос.

 

При использовании CURL, команда будет вида: curl -F "xml_file=@client.xml" http://localhost:8080/opt/in/QueryPartner

 

УТМ отправляет запрос на сервер ЕГАИС. Сервер ЕГАИС формирует ответ на запрос, возвращает ответ в УТМ.

 

Далее сформируем запрос средствами 1С, без использования CURL:

 

1. Подготовка переменных: 

 

        Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); // Идентификатор границы разделов POST запроса
        ИмяФайлаДляЗагрузки = КаталогВременныхФайлов() + "select.xml";       
        ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.xml"; // Имя файла ответа на POST запрос
        ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt";

 

2. Формируем XML запрос :

 

    ОбъектXML  = Новый ЗаписьXML();
    ОбъектXML.ОткрытьФайл(ИмяФайлаДляЗагрузки);
    ОбъектXML.ЗаписатьОбъявлениеXML();
    ОбъектXML.ЗаписатьНачалоЭлемента("ns:Documents");
    ОбъектXML.ЗаписатьАтрибут("Version", "1.0");
    ОбъектXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    ОбъектXML.ЗаписатьСоответствиеПространстваИмен("ns", "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01");
    ОбъектXML.ЗаписатьСоответствиеПространстваИмен("oref", "http://fsrar.ru/WEGAIS/ClientRef");
    ОбъектXML.ЗаписатьСоответствиеПространстваИмен("qp", "http://fsrar.ru/WEGAIS/QueryParameters");
    ОбъектXML.ЗаписатьНачалоЭлемента("ns:Owner");
    ОбъектXML.ЗаписатьНачалоЭлемента("ns:FSRAR_ID");
    ОбъектXML.ЗаписатьТекст(FSRAR_ID);
    ОбъектXML.ЗаписатьКонецЭлемента();//ns:FSRAR_ID
    ОбъектXML.ЗаписатьКонецЭлемента();//ns:Owner
    ОбъектXML.ЗаписатьНачалоЭлемента("ns:Document");
    ОбъектXML.ЗаписатьНачалоЭлемента("ns:QueryClients");
    ОбъектXML.ЗаписатьНачалоЭлемента("qp:Parameters");
    ОбъектXML.ЗаписатьНачалоЭлемента("qp:Parameter");
    ОбъектXML.ЗаписатьНачалоЭлемента("qp:Name");
    ОбъектXML.ЗаписатьТекст("ИНН");
    ОбъектXML.ЗаписатьКонецЭлемента();//qp:Name
    ОбъектXML.ЗаписатьНачалоЭлемента("qp:Value");
    ОбъектXML.ЗаписатьТекст(ИННКонтрагента);
    ОбъектXML.ЗаписатьКонецЭлемента();//qp:Value
    ОбъектXML.ЗаписатьКонецЭлемента();//qp:Parameter
    ОбъектXML.ЗаписатьКонецЭлемента();//qp:Parameters
    ОбъектXML.ЗаписатьКонецЭлемента();//ns:QueryClients
    ОбъектXML.ЗаписатьКонецЭлемента();//ns:Document
    ОбъектXML.ЗаписатьКонецЭлемента();//ns:Documents
    ОбъектXML.ЗаписатьТекст(Символы.ПС);
    ОбъектXML.Закрыть();

 

 

3. Формирование тела POST запроса через объеденение текстовых файлов:

 

	//Определяем массив для процедуры ОбъединитьФайлы
	МассивФайловДляОбъединения = Новый Массив;

	//Формируем начальный фрагмент файла 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-запроса
	ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);

 

4. Формируем заголовок POST запроса:

 

        ЗаголовокHTTP = Новый Соответствие();

        //Укажем формат данных Content-Type
        ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);

        //Укажем длину POST-запроса Content-Length
        ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
        РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
        ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

 

5.  Инициализируем HTTPСоединение,  При необходимости задаём параметры прокси.

 

        СерверПриемник = "localhost"; //Без протокола http://. Естественно, следует указать свой адрес.
        Порт = "8080"; //Порт УТМ
        ИспользоватьПрокси = Ложь;
	
        Если ИспользоватьПрокси Тогда
	        Прокси = Новый ИнтернетПрокси;
	        Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина;
	        Прокси.Пароль = "ПарольПрокси"; // укажите своё значение
	        Прокси.Пользователь = "ПользовательПрокси"; // укажите своё значение
	        НТТР = Новый HTTPСоединение(СерверПриемник, Порт, , , Прокси);
	    Иначе
                НТТР = Новый HTTPСоединение(СерверПриемник, Порт);
        КонецЕсли;

	
	Попытка
		АдресСкрипта = "/opt/in/QueryPartner"; //Адрес ресурса.
		
		//Формируем HTTP запрос
		ЗапросHTTP = Новый HTTPЗапрос(АдресСкрипта, ЗаголовокHTTP);
		ЗапросHTTP.УстановитьИмяФайлаТела(ИмяФайлаОтправки);  //Устанавливает имя файла, из которого будет прочитано тело POST-запроса.
		
		//Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
		ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP, ИмяФайлаОтвета);
	Исключение
		Сообщить("Неудачная попытка соединения с " + СерверПриемник + ": " + ОписаниеОшибки());
		Возврат;
	КонецПопытки;
	
	//Разрушаем объект HTTP-запроса для освобождения файла POST-запроса.
	//В противном случае при попытке удаления файла получим ошибку совместного доступа.
	ЗапросHTTP = Неопределено;

 

6. Читаем ответ на запрос, разбираем XML файл ответа.

 

	ЧтениеОтвета = Новый ЧтениеXML;
	ЧтениеОтвета.ОткрытьФайл(ОтветHTTP.ПолучитьИмяФайлаТела());
	
	ИдОтвета = "";
	ПодписьОтвета = "";
	ИмяУзла = "";
	
	Пока ЧтениеОтвета.Прочитать() Цикл
		Если ЧтениеОтвета.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
			ИмяУзла = ЧтениеОтвета.Имя;
		КонецЕсли;
		Если ЧтениеОтвета.ТипУзла=ТипУзлаXML.Текст Тогда
			Если ИмяУзла = "url" Тогда
				urlЗначение=ЧтениеОтвета.Значение;
				Сообщить("ID "+urlЗначение);
			КонецЕсли;
			Если ИмяУзла = "sign" Тогда
				signЗначение=ЧтениеОтвета.Значение;
				Сообщить("SIGN "+signЗначение);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

	//Разрушаем объект HTTP-ответ для освобождения файла ответа.
	ЧтениеОтвета = Неопределено;

 

7. Удаляем временные файлы.

 

	// Удаляем файлы POST-запроса и фрагменты сообщения. Больше они не нужны.
	УдалитьФайлы(ИмяФайлаОтвета); // "answer.xml"
	УдалитьФайлы(ИмяФайлаОтправки); // "post.txt"
	УдалитьФайлы(ИмяФайлаДляЗагрузки); // "select.xml"
	
	Для каждого ЭлементМассива Из МассивФайловДляОбъединения Цикл
		УдалитьФайлы(ЭлементМассива);
	КонецЦикла;

В итоге  мы получаем ключ url вида "d9ef780e-4d35-41b0-bb9c-f06e53ac23d3", и "sign" вида "895B92CAD115B57B02C7D12ADC488066D99B60549D57A737B0CAC18E5E3E1C72E6B8D414C763CB58A5E67DE7C8C2ECE908451C4AE6838479A42ABBA8179D0CE8", что с этим делать и что это значит? Наш запрос был принят УТМ и подписан, далее каждые 5 минут УТМ отправляет запросы на сервер ЕГАИС, сервер обрабатывает и присылает на ответы. Список ответов будет находится по адресу "http://localhost:8080/opt/out?refresh=true" в виде :

 

 

Строим HTTP запрос к ресурсу "/opt/out" получаем список ответов, в списке находим нужный ответ по url = relayId,

получаем ссылку "http://localhost:8080/opt/out/ReplyPartner/1" на файл ответа с сервера и по ссылке получаем XML файл ответа.

Ответ на запрос к справочнику организаций будет вида:

 

<?xml version="1.0" encoding="UTF-8"?>
<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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ns:Owner>
         <ns:FSRAR_ID>3463047</ns:FSRAR_ID>
    </ns:Owner>
   <ns:Document> (5.9)
       <ns:ReplyClient>
       <rc:Clients xmlns:rc="http://fsrar.ru/WEGAIS/ReplyClient" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef" xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
           <rc:Client>
               <oref:ClientRegId>00008907</oref:ClientRegId>
               <oref:INN>1681000049</oref:INN>
               <oref:KPP>303265456</oref:KPP>
               <oref:FuMName>ООО "Пример"</oref:FuMName> <oref:ShortName>П</oref:ShortName>
               <oref:address>
                   <oref:Country>643</oref:Country>
                   <oref:RegionCode>30</oref:RegionCode>
                   <oref:city>Астрахань г</o ref: city>
                   <oref:street>1 -й проезд</оге^^ее^ <oref:house>12</oref:house>
                   <oref:description>643,,AcTpaxaHCK8H обл,,Астрахань г,,1 -й проезд,12,,,</oref:description>
               </oref:address>
           </rc:Client>
       </rc:Clients>
       </ns:ReplyClient>
   </ns:Document>
</ns:Documents>

...

 

 

 

ЕГАИС http post запрос алкоголь обмен УТМ егаис утм

См. также

Раздельный учет по гособоронзаказу (ГОЗ) - Подсистема для 1С:Бухгалтерии 3.0 ПРОФ и КОРП

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

Управляйте учетной политикой раздельного ведения затрат по контракту ГОЗ с подсистемой для 1С:Бухгалтерия. Отчеты по контрактам и контроль операций для исполнения в срок по 275-ФЗ. Минимальные требования: Версия платформы 1С: Предприятие 8.3 – 8.3.23 Версия конфигурации 1С: Бухгалтерия – 3.0.149.28 или выше.

28.08.2020    181448    1545    vvmanannikov    131    

810

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122180    670    389    

714

Гособоронзаказ: учет и отчетность БП3.0 КОРП + ПРОФ + БИТ.ФИНАНС

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

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

30000 руб.

16.08.2019    87894    206    85    

125

ЕГАИС++. Опт, производство, импорт

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

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

8970 руб.

15.12.2015    165977    679    362    

386

SALE! 45%

Обмен 1С с Честным Знаком для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ

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

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

18000 9900 руб.

28.03.2023    9722    31    8    

34

Обмен с системой ЦРПТ (Универсальная конфигурация ХамелеонЦРПТ + маркировка табака, обуви, одежды, лекарств, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин)

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

Данная публикация создана для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Смело задавайте нам вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, мы накопили достаточно большую базу знаний по данным темам и готовы ответить на все Ваши вопросы.

104000 руб.

18.03.2019    110332    34    114    

178

SALE! 30%

Обмен с системами Казначейства: Электронный бюджет

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

Обработка для обмена платежными документами в формате xml для системы Федерального казначейства "Электронный бюджет" из конфигураций 1С. Поставляется в двух вариантах для БП 3.0 и КА 2.х/ERP 2.х

15000 10500 руб.

14.10.2020    58511    343    101    

273

Гособоронзаказ в 1С: УПП 1.3

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

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

90000 руб.

25.09.2020    28754    33    9    

36
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SergVD 17.09.15 13:26 Сейчас в теме
УТС возвращает код ошибки 500
4. desarz 63 19.09.15 18:23 Сейчас в теме
(1) SergVD, обновил статью, тело запроса составляется через объединение текстовых файлов, 100% работает )
Добавил разбор файл ответа.
2. flyer 231 18.09.15 08:16 Сейчас в теме
может в виде обработки выложите или конфы?
3. Corvax46 40 18.09.15 15:30 Сейчас в теме
СерверПриемник = "localhost"; //Без протокола http://. Если УТМ установлени на удаленном компьютере, указываем свой адрес.
Прикрепленные файлы:
HTTPPOSTЗапросКУТМСистемыЕГАИС.epf
5. Uncore 1272 20.09.15 04:32 Сейчас в теме
А на 8.2 не пробовали сделать через HTTPСоединение? Там HTTPЗапрос нет. Вроде все то же, но не выполняется запрос, чего-то видимо все-таки не хватает.
6. 31ric 23.09.15 13:58 Сейчас в теме
(5) Uncore, Обновите платформу. Начиная с 8.2.18 HTTPЗапрос есть
7. Uncore 1272 23.09.15 17:10 Сейчас в теме
(6) 31ric, мне как раз для 8.2 нужно было для старых версий без обновления платформы. Уже разобрался, заработало и без HTTPЗапрос.
8. Diman_Kr 28.09.15 07:04 Сейчас в теме
А для 7.7 есть что нибудь?
9. Teodor_kr 29.09.15 07:57 Сейчас в теме
-<head> <met a content="text/html; charset=ISO-8859-1" http-equiv="Content-Type"/>
<title>Error 500 Server Error</title>
</head>
-<body><h2>HTTP ERROR 500</h2>
-<p>Problem accessing /opt/in/QueryPartner. Reason: <pre> Server Error</pre></p>


at java.lang.Thread.run(Unknown Source)


Вот у меня тоже почему-то ошибка 500.
10. desarz 63 29.09.15 11:42 Сейчас в теме
(9) Teodor_kr,
1. Проверить запущена ли служба УТМ "Transport".
2. Работает и видится ли ключ JaCarta.
3. Проверить в браузере доступ к - http://localhost:8080/opt/out
4. Отключить брандмауэр и антивирус если УТМ находится не на локальной машине.
11. agorohov 29.09.15 16:30 Сейчас в теме
(10) А служба УТМ "Transport" не запустится, если JaCarta не работает
12. desarz 63 30.09.15 00:38 Сейчас в теме
(11) agorohov, Да, если ключ не вставлен, на нем нет сертификата, и т.д. УТМ не запускается.
13. Teodor_kr 01.10.15 13:03 Сейчас в теме
(10) Машина локальная. Доступ к http://localhost:8080/opt/out?refresh=true есть.Транспорт запущен (ключ JaCarta вставлен и читается)

Пробовал HTTPPOSTЗапросКУТМСистемыЕГАИС.epf из (3)
в ответ приходит вот такое, но ошибки не дает:
<A>
<error>null</error>
<ver>2</ver>
</A>
14. desarz 63 02.10.15 09:43 Сейчас в теме
(13) Teodor_kr, то что вы пробовали, старая версия (она работала не везде).
В статье обновленный пример, если код из статьи перенесете в обработку, подставите свои значения FSRARID, все заработает.
15. demon_infernal 40 05.10.15 20:59 Сейчас в теме
(14) у меня такой же ответ, как у (13)
пробовал и обработкой HTTPPOSTЗапросКУТМСистемыЕГАИС.epf, и копипастил код из статьи. в чем может быть дело?
16. mma928 06.10.15 14:02 Сейчас в теме
(15) demon_infernal, такая же проблема.. вчера загрузил справочник организаций, ттн, а сегодня "Error 500 Server Error", хотя ТТН все же загружаются.
17. gzharkoj 502 07.10.15 11:38 Сейчас в теме
Для тех у кого вылезает ошибка <A> <error>null</error> <ver>2</ver> </A>
Правильное формирование запроса (Тут главное последовательность перевода строки правильно расставить и Boundary):
        ТелоЗапроса = Новый ТекстовыйДокумент();
	ТелоЗапроса.ДобавитьСтроку(Символы.ПС);
	ТелоЗапроса.ДобавитьСтроку("--" + Boundary);
	ТелоЗапроса.ДобавитьСтроку("Content-Disposition: form-data; name=""xml_file""");
	ТелоЗапроса.ДобавитьСтроку("Content-Type: application/octet-stream");
	ТелоЗапроса.ДобавитьСтроку(Символы.ПС);
	ТелоЗапроса.ДобавитьСтроку(Текст);
	ТелоЗапроса.ДобавитьСтроку("--" + Boundary);
	ТелоЗапроса.ДобавитьСтроку("--" + Boundary+ "--");
	
	Текст = ТелоЗапроса.ПолучитьТекст();      

	Запрос = Новый HTTPЗапрос("/opt/in/QueryPartner");
	Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
	Запрос.УстановитьТелоИзСтроки(Текст, КодировкаТекста.UTF8);
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать


тут Текст - ваш сформированный xml - запрос, Boundary - тоже, что и в основной статье.
47. dima_home 238 23.12.15 10:42 Сейчас в теме
(17) ifal, В конце XML обязательно должен быть перевод строки. По умолчанию - ЗаписьXML() не заканчивает файл XML переносом строки.
не забудьте... как в примере закончить :
    ОбъектXML.ЗаписатьТекст(Символы.ПС);
    ОбъектXML.Закрыть();
48. gzharkoj 502 24.12.15 22:09 Сейчас в теме
(47) dima_home, а где у меня ЗаписьXML используется?
18. desarz 63 07.10.15 15:18 Сейчас в теме
Обработка была тестированием УТМ с целью разобраться и посмотреть как работает УТМ и т.д.
Если собираетесь внедрять, то советую код и принцип работы с УТМ взять из последней редакции 1С 8 Розница 2.1.
Обмен построен на XDTO объектах, очень удобно и красиво )
19. gzharkoj 502 07.10.15 18:38 Сейчас в теме
(18) с оттуда и взял, и он не заработал! Пришлось немного поразбираться, почитав стандарт передачи данных в POST. Возможно все дело в настройках веб-сервера (Jetty), но факт - из коробки не работает.
20. bds22 20 28.10.15 11:15 Сейчас в теме
xsd файлы не пробовали импортировать в 1С? у меня проблема в 1С возникает, когда тип не описан отдельно, а идет как "описание типов", указанное непосредственно у значения. в этом случае выходит сообщение вроде нельзя присвоить значение типу "" (пустая строка). после того как отдельно описываю этот тип и указываю его, 1С начинает воспринимать эти данные

я вообще сначала попробовал отправить через curl -F свой запрос и получил ответ
<A><error>??????????? ???? ?? ???????. ?????????? ????????? ? ?????? "ns:FSRAR_ID":0</error><ver>2</ver></A>
потом средствами 1С (спасибо за Ваш код), и получил те же самые знаки вопроса, что-то с кодировкой
21. bds22 20 28.10.15 12:45 Сейчас в теме
в общем причина у меня была в том, что с пустым namespace загрузка не происходит. если кто-то будет использовать фабрику XDTO (загружая файлы xsd), то рабочий код такой

ТипDocuments=ФабрикаXDTO_ЕГАИС.Тип("http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01", "Documents");
		ЗначениеDocuments=ФабрикаXDTO_ЕГАИС.Создать(ТипDocuments);
		
		ТипSenderInfo=ФабрикаXDTO_ЕГАИС.Тип("http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01", "SenderInfo");
		ЗначениеSenderInfo=ФабрикаXDTO_ЕГАИС.Создать(ТипSenderInfo);
		ЗначениеSenderInfo.FSRAR_ID=FSRAR_ID;
		
		ЗначениеDocuments.Owner=ЗначениеSenderInfo;
		
		ТипDocument=ТипDocuments.Свойства.Получить("Document").Тип;
		ЗначениеDocument=ФабрикаXDTO_ЕГАИС.Создать(ТипDocument);
		
		ТипQueryParameters=ФабрикаXDTO_ЕГАИС.Тип("http://fsrar.ru/WEGAIS/QueryParameters", "QueryParameters");
		ЗначениеQueryParameters=ФабрикаXDTO_ЕГАИС.Создать(ТипQueryParameters);
		
		ТипParameters=ТипQueryParameters.Свойства.Получить("Parameters").Тип;
		ТипParameter=ТипParameters.Свойства.Получить("Parameter").Тип;
		ЗначениеParameter=ФабрикаXDTO_ЕГАИС.Создать(ТипParameter);
		
		ЗначениеQueryParameters.Parameters=ФабрикаXDTO_ЕГАИС.Создать(ТипParameters);
		
		ЗначениеParameter.Name="ИНН";
		ЗначениеParameter.Value=INN;
		ЗначениеQueryParameters.Parameters.Parameter.Добавить(ЗначениеParameter);
		
		ЗначениеDocument.QueryClients=ЗначениеQueryParameters;
		
		ЗначениеDocuments.Document=ЗначениеDocument;
		
		//ФабрикаXDTO_ЕГАИС.ЗаписатьXML(ЗаписьXML, ЗначениеDocuments);
		
		ЗаписьXML.ЗаписатьНачалоЭлемента("ns:Documents");
    	ЗаписьXML.ЗаписатьАтрибут("Version", "1.0");		
		
		ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("ns", "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01");
		ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
    	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("ns", "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01");
    	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("oref", "http://fsrar.ru/WEGAIS/ClientRef");
    	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("qp", "http://fsrar.ru/WEGAIS/QueryParameters");		
		
		ФабрикаXDTO_ЕГАИС.ЗаписатьXML(ЗаписьXML, ЗначениеDocuments.Owner, "Owner");
		ФабрикаXDTO_ЕГАИС.ЗаписатьXML(ЗаписьXML, ЗначениеDocuments.Document);
		
		ЗаписьXML.ЗаписатьКонецЭлемента();
		
	ЗаписьXML.ЗаписатьТекст(Символы.ПС);	
	СтрокаОбъект = ЗаписьXML.Закрыть();
Показать
22. Fuego 462 28.10.15 18:02 Сейчас в теме
Я не мучился со средствами 1С. Сделал на более интуитивных инструментах.
Function PostXMLFile(URL, XML)
	
	Boundary = String(New UUID());
	
	XMLHTTPRequest = CreateXMLHTTPRequest();

	XMLHTTPRequest.open("POST", URL, False);

	XMLHTTPRequest.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + Boundary);
	
	FormData = 
	"--" + Boundary + CrLf()
	+ "Content-Disposition: form-data; name=""xml_file""; filename=""file.xml""" + CrLf()
	+ "Content-Type: text/xml; charset=utf-8" + CrLf()
	+ "Content-Transfer-Encoding: binary" + CrLf()
	+ CrLf()
	+ XML + CrLf()
	+ "--" + Boundary + "--" + CrLf();
	
	XMLHTTPRequest.send(FormData);

	If XMLHTTPRequest.status = 200 Then
		
		XMLDocument = XMLHTTPRequest.responseXML;
		If IsBlankString(XMLDocument.xml) Then
			XMLDocument.load(XMLHTTPRequest.responseStream);
		EndIf;
		XMLDocument.setProperty("SelectionLanguage", "XPath");
					
		Return XMLDocument.selectSingleNode(".//url").text;
		
	Else

		HandleError(XMLHTTPRequest, URL);

	EndIf;

	
	Return "";
	
EndFunction

Function CrLf()
	Return Chars.CR + Chars.LF;
EndFunction

Function CreateXMLHTTPRequest()
	Return New COMObject("Msxml2.XMLHTTP.6.0");
EndFunction

Procedure SendQueryForOrgData()
	XML =
	"<?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:oref=""http://fsrar.ru/WEGAIS/ClientRef""
	|xmlns:qp=""http://fsrar.ru/WEGAIS/QueryParameters""
	|>
	|<ns:Owner>
	|<ns:FSRAR_ID>543751347</ns:FSRAR_ID>
	|</ns:Owner>
	|<ns:Document>
	|<ns:QueryClients>
	|<qp:Parameters>
	|<qp:Parameter>
	|<qp:Name>ИНН</qp:Name>
	|<qp:Value>652348658</qp:Value>
	|</qp:Parameter>
	|</qp:Parameters>
	|</ns:QueryClients>
	|</ns:Document>
	|</ns:Documents>
	|";
	URL = "http://my_egais_srv:8080/opt/in/QueryPartner";
	
	ReplyID= PostXMLFile(URL, XML);
	// Do something
EndProcedure

Показать
23. Геннадьевич 18 13.11.15 07:23 Сейчас в теме
Из браузера такой запрос может прокатить? Например на PHP если написать? Никто не пробовал?
У меня в ответ на запрос выдаёт:

HTTP ERROR: 404
Problem accessing opt/in/QueryPartner. Reason:
Not Found
24. maljaev 789 26.11.15 11:06 Сейчас в теме
Скажите пожалуйста, а можно ли передать на сервер ЕГАИС коды товаров PDF417 и получить обратно информацию об этих товарах (карточки товаров)?
25. krv2k 375 28.11.15 20:01 Сейчас в теме
(24) maljaev, можно передать в запросе AlcCode, и получить информацию только об этом конкретном товаре (в отличие от запроса по ИНН, в котором возвращаются все товары).
26. aziat71 03.12.15 01:56 Сейчас в теме
(25) krv2k, запрос AlcCode - применимо для проверки акцизной марки??? Интересует как раз получение информации (проверка акцизной марки) по штрих-коду PDF417 !!!
27. Uncore 1272 03.12.15 03:44 Сейчас в теме
(26) aziat71, в штрихкоде есть алккод, его можно оттуда вытащить
35. beard1 10.12.15 22:17 Сейчас в теме
(27) Uncore, AlcCode достали, проверили, результат положительный, но разве этот факт === подлинная акцизная марка?
38. aziat71 11.12.15 14:45 Сейчас в теме
(35) beard1, нет, думаю не равен, проверить подлинность все равно прийдется в личном кабинете ФСРАР либо через терминал сбора данных с поддержкой CheckMark, либо при помощи детектора Госзнак. В данном случае цель получения AlcoCode - правильная/точная постановка на учет при проведении инвентаризации.
31. maljaev 789 04.12.15 00:31 Сейчас в теме
(25) krv2k, А где есть информация о том как сформировать запрос к серверу по AlcСode?
32. Uncore 1272 04.12.15 04:34 Сейчас в теме
(31) maljaev, вместо ИНН производителя нужно передавать параметр КОД:
ТекстЗапроса.ЗаписатьНачалоЭлемента("qp:Name");
ТекстЗапроса.ЗаписатьТекст("КОД");
ТекстЗапроса.ЗаписатьКонецЭлемента(); //name
aziat71; gzharkoj; maljaev; +3 Ответить
33. Uncore 1272 04.12.15 09:44 Сейчас в теме
+(32) для запроса контрагента/производителя по регномеру, тоже поправить нужно в одном месте:
ТекстЗапроса.ЗаписатьНачалоЭлемента("qp:Name");
    Если ЭтоРегНомер Тогда
	ТекстЗапроса.ЗаписатьТекст("СИО");
    Иначе	
	ТекстЗапроса.ЗаписатьТекст("ИНН");
   КонецЕсли;	
ТекстЗапроса.ЗаписатьКонецЭлемента(); //name
41. Palmer1976 198 16.12.15 01:41 Сейчас в теме
28. gzharkoj 502 03.12.15 15:07 Сейчас в теме
Там по идее строка зашифрована, как же его оттуда вытащить?
29. Uncore 1272 03.12.15 16:50 Сейчас в теме
(28) ifal, расшифровать :) есть код для 1С на просторах инета, тут приводить не буду, т.к. используется в коммерческом решении.
30. gzharkoj 502 03.12.15 18:28 Сейчас в теме
(29) Uncore, Спасибо, помогли (навели на мысли), в общем-то код мне не нужен, а вот информация была бы кстати. В общем-то мне нужен только алкокод из марки, так как используя только марки быстрей и точней можно подготовки акты постановки на баланс. Собственно вот:"...для получения AlcСode из QR-кода надо символы с 8 по 19 (12 символов) перевести из тридцатишестеричной
системы счисления в десятичную систему счисления, добавить впереди недостающие ведущие нули,
и получим 19 -ти разрядное число, состоящее только из цифр". Получившаяся функция:
Функция ПолучитьАлкоКод(Марка)
	
	СтрокаАнализа = Сред(НРег(Марка), 8, 12);
	Длина = СтрДлина(СтрокаАнализа);
	Сообщить(СтрокаАнализа);
	
        // Переводим 36-ричное число в 10-ое
	Результат = 0;
	Для ин = 1 По СтрДлина(СтрокаАнализа) Цикл
		
		СимволСтроки = Сред(СтрокаАнализа,ин,1);
		
		ч = 0;
		Если КодСимвола(СимволСтроки)>=97 И КодСимвола(СимволСтроки)<=122 Тогда
			ч = КодСимвола(СимволСтроки) - 87; 
		Иначе
			ч = Число(СимволСтроки);
		КонецЕсли;
		
		Результат = Результат + Pow(36, (Длина - ин))*ч; 
		
	КонецЦикла;
	
	// Длина алкокода = 19 символов дополняем нулями спереди
	Результат = Формат(Результат, "ЧГ=");
	Для ин = 1 По 19 - СтрДлина(Результат) Цикл
		Результат = "0" + Результат;
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции
Показать
JetBrain; makus; aziat71; maljaev; Uncore; +5 Ответить
34. aziat71 06.12.15 22:27 Сейчас в теме
(30) ifal, И всетаки, чтобы получить AlcCode, какой код нужно сканировать, тот что поменьше на марке (формата DATA-MATRIX) или тот что побольше (формата PDF417) ???
36. gzharkoj 502 10.12.15 22:43 Сейчас в теме
(34) aziat71, Я думаю вы уже разобрались, но на всякий - PDF417
39. aziat71 11.12.15 16:57 Сейчас в теме
(36) ifal, да, огромное спасибо - то что нужно!!!
40. makus 15.12.15 16:09 Сейчас в теме
(30) ifal, огромное спасибо!

Не подскажете, Ваша функция для распознавания кода PDF417, если её адаптировать, будет работать в 1С 7.7?
Дело в том, что я ровным счётом ничего не понимаю в кодировках, но насколько я понял, функция КодСимв() в 7.7 может дать совсем не тот результат, что КодСимвола() в 8-ке. Я прав? И если это так, есть способ обойти проблему?
44. gzharkoj 502 16.12.15 22:02 Сейчас в теме
(40) makus, вообще надо проверять, по идее должна работать, только конечно надо адаптировать, например, в 7-ке нет оператора возведения в степень - надо функцию писать и т.д.
45. makus 17.12.15 12:15 Сейчас в теме
(44) ifal, спасибо!

В действительности, с возведением в степень, как раз, проблем нет, потому что в сети есть готовые функции, которые можно вставить в глобальный модуль и есть 1C++, где реализована функция возведения в степень, аналогичная восьмёрочной. Я больше беспокоюсь о соответствии кодов символов, которые будет возвращать 7-ка кодам, возвращаемым 8-кой, т.к. 7-ка не понимает юникод.

Как бы там ни было, я обнаружил буквально вчера функцию для 7.7, которая делает то же самое. Я её уже адаптировал, она работает.

Большое спасибо Вам за начальную информацию о содержании кода в PDF417 и за саму идею.
46. JetBrain 78 21.12.15 16:07 Сейчас в теме
(30) ifal, Если в платформе нет функций КодСимвола() и Pow(), вот нашел еще такой пример:
Функция ПолучитьАлкоКод(Значение) Экспорт
   	 Значение = Сред(Значение,8,12);
	 Нотация=36;
     Результат=0;
     Длина=СтрДлина(Значение);
     Для Х=1 По Длина Цикл
          М=1;
          Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла;
          Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М;
     КонецЦикла;
     Возврат Строка(Результат);
КонецФункции

Показать
wowik; gzharkoj; +2 Ответить
37. beard1 11.12.15 09:23 Сейчас в теме
доброго времени суток,

а можно ли и как

    запросить всю продукцию
    запросить всех производителей
    запросить FSRAR_ID из УТМ

в документации по УТМ вроде не нашел параметров
43. makus 16.12.15 11:17 Сейчас в теме
Вот тут, вроде, в сообщении №84, для 7-ки хороший человек написал обработку, чтобы AlcCode из QR-кода доставать: http://infostart.ru/public/405305/#comm
49. aximo 2027 03.01.16 21:57 Сейчас в теме
а можно дополнить статью, что в итоге должно "нарисоваться" после выполнения п.3 ? спасибо
50. Shadow308 39 08.03.16 03:00 Сейчас в теме
А можно запрос на удаление документов???
51. art010 07.07.16 13:37 Сейчас в теме
С чем может быть связана ошибка, вылетающая при попытке отправить запрос в УТМ:

Ошибка при вызове конструктора (HTTPСоединение)
НТТР = Новый HTTPСоединение(СерверПриемник, Порт);
по причине:
Несоответствие типов (параметр номер '2')

Ошибка вылетает на 1с8 Розница 2.2.4.12
Платформа 8.3
СерверПриемник = "localhost" (и IP подставлял, и локально, и по сети)
Порт="8080"
52. desarz 63 07.07.16 17:04 Сейчас в теме
тип порта - число, попробуй Порт=8080;
53. desarz 63 07.07.16 17:08 Сейчас в теме
А так, универсальное решение... обнови платформу, обнови конфигурацию.
54. SerSinelnik 07.07.16 17:08 Сейчас в теме
Уже все перепробовал
Все последние релизы и платформа и конфигурация. Сейчас перепроверю, может еще что-то вышло
55. SerSinelnik 07.07.16 17:11 Сейчас в теме
уже голову сломал, что ему не нравится.
Бухгалтерия Предприятия 3,0 работает нормально
в некоторых Розницах - нормально.
У одного товарища эта ошибка выскакивает и хоть убейся
56. desarz 63 07.07.16 17:12 Сейчас в теме
57. SerSinelnik 07.07.16 17:14 Сейчас в теме
1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)
и на этой проверял и на следующей. сейчас уточню какая именно.
58. desarz 63 07.07.16 17:19 Сейчас в теме
1С:Предприятие 8 не ниже 8.3.8.1784 нужна, думаю в этом дело.
59. SerSinelnik 07.07.16 17:23 Сейчас в теме
а как же это
1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)
У этого товарища 1С:Предприятие 8.3 (8.3.8.1784)
60. desarz 63 07.07.16 17:28 Сейчас в теме
Возможно в Рознице изменили код соединения с УТМ и требуется новая платформа, в обновление Розницы, 1С пишет что нужна платформа "1С:Предприятие 8 не ниже 8.3.8.1784"...
Как то так, других мыслей нет.
61. SerSinelnik 07.07.16 17:31 Сейчас в теме
62. lordvampirikus 12.11.21 00:11 Сейчас в теме
Не подходит для УТМ 4,2,0
63. gzharkoj 502 12.11.21 08:16 Сейчас в теме
(62) Что именно не работает?
Оставьте свое сообщение