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

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

44000 руб.

28.08.2020    376608    2526    137    

1096

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

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

15500 руб.

02.09.2020    180576    1001    403    

954

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

Интеграция для работы 1С с ГИИС ДМДК. Государственная интегрированная информационная система в сфере контроля за оборотом драгоценных металлов, драгоценных камней и изделий из них на всех этапах этого оборота.

65000 руб.

12.04.2022    19204    162    34    

41

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

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

55200 руб.

16.08.2019    94224    259    89    

152

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

Автоматический обмен данными с системой ФГИС Меркурий из 1С через ВетИС API: загрузка данных по хозяйствующим субъектам, предприятиям; типов, групп, видов, наименований продукции, сопоставление данных и запись их в базу данных; создание на основании расходных документов транспортных партий, отправка на сервер, печать полученных ветеринарных свидетельств, запрос остатков складского журнала, проведение инвентаризаций, оформление производственных партий.

11500 руб.

08.12.2017    106179    291    110    

147

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

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

828 руб.

15.12.2015    172770    865    370    

407

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

Обработка для обмена платежными документами в формате xml для системы Федерального казначейства "Электронный бюджет" из конфигураций 1С. Поставляется для БП 3.0 Работа только с контрагентами. Сайт "Электронного Бюджета": https://www.budget.gov.ru/

19200 руб.

14.10.2020    64595    393    103    

325

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

Внешняя обработка для инвентаризации кодов маркировки в системе "Честный знак". Позволяет быстро определить и списать коды маркировки проданного, испорченного, утраченного (полный перечень причин списания указан ниже)  товара, которые всё ещё числятся за организацией. Привести в соответствие остатки маркированного товара программы 1С и системы "Честного знака".

6540 руб.

09.01.2024    6507    83    21    

84
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SergVD 17.09.15 13:26 Сейчас в теме
УТС возвращает код ошибки 500
4. desarz 64 19.09.15 18:23 Сейчас в теме
(1) SergVD, обновил статью, тело запроса составляется через объединение текстовых файлов, 100% работает )
Добавил разбор файл ответа.
2. flyer 233 18.09.15 08:16 Сейчас в теме
может в виде обработки выложите или конфы?
3. Corvax46 41 18.09.15 15:30 Сейчас в теме
СерверПриемник = "localhost"; //Без протокола http://. Если УТМ установлени на удаленном компьютере, указываем свой адрес.
Прикрепленные файлы:
HTTPPOSTЗапросКУТМСистемыЕГАИС.epf
5. Uncore 1284 20.09.15 04:32 Сейчас в теме
А на 8.2 не пробовали сделать через HTTPСоединение? Там HTTPЗапрос нет. Вроде все то же, но не выполняется запрос, чего-то видимо все-таки не хватает.
6. xa7ex 23.09.15 13:58 Сейчас в теме
(5) Uncore, Обновите платформу. Начиная с 8.2.18 HTTPЗапрос есть
7. Uncore 1284 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 64 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 64 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 64 02.10.15 09:43 Сейчас в теме
(13) Teodor_kr, то что вы пробовали, старая версия (она работала не везде).
В статье обновленный пример, если код из статьи перенесете в обработку, подставите свои значения FSRARID, все заработает.
15. demon_infernal 41 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 527 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 257 23.12.15 10:42 Сейчас в теме
(17) ifal, В конце XML обязательно должен быть перевод строки. По умолчанию - ЗаписьXML() не заканчивает файл XML переносом строки.
не забудьте... как в примере закончить :
    ОбъектXML.ЗаписатьТекст(Символы.ПС);
    ОбъектXML.Закрыть();
48. gzharkoj 527 24.12.15 22:09 Сейчас в теме
(47) dima_home, а где у меня ЗаписьXML используется?
18. desarz 64 07.10.15 15:18 Сейчас в теме
Обработка была тестированием УТМ с целью разобраться и посмотреть как работает УТМ и т.д.
Если собираетесь внедрять, то советую код и принцип работы с УТМ взять из последней редакции 1С 8 Розница 2.1.
Обмен построен на XDTO объектах, очень удобно и красиво )
19. gzharkoj 527 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 463 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. Геннадьевич 20 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 379 28.11.15 20:01 Сейчас в теме
(24) maljaev, можно передать в запросе AlcCode, и получить информацию только об этом конкретном товаре (в отличие от запроса по ИНН, в котором возвращаются все товары).
26. aziat71 03.12.15 01:56 Сейчас в теме
(25) krv2k, запрос AlcCode - применимо для проверки акцизной марки??? Интересует как раз получение информации (проверка акцизной марки) по штрих-коду PDF417 !!!
27. Uncore 1284 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 1284 04.12.15 04:34 Сейчас в теме
(31) maljaev, вместо ИНН производителя нужно передавать параметр КОД:
ТекстЗапроса.ЗаписатьНачалоЭлемента("qp:Name");
ТекстЗапроса.ЗаписатьТекст("КОД");
ТекстЗапроса.ЗаписатьКонецЭлемента(); //name
aziat71; gzharkoj; maljaev; +3 Ответить
33. Uncore 1284 04.12.15 09:44 Сейчас в теме
+(32) для запроса контрагента/производителя по регномеру, тоже поправить нужно в одном месте:
ТекстЗапроса.ЗаписатьНачалоЭлемента("qp:Name");
    Если ЭтоРегНомер Тогда
	ТекстЗапроса.ЗаписатьТекст("СИО");
    Иначе	
	ТекстЗапроса.ЗаписатьТекст("ИНН");
   КонецЕсли;	
ТекстЗапроса.ЗаписатьКонецЭлемента(); //name
41. Palmer1976 202 16.12.15 01:41 Сейчас в теме
28. gzharkoj 527 03.12.15 15:07 Сейчас в теме
Там по идее строка зашифрована, как же его оттуда вытащить?
29. Uncore 1284 03.12.15 16:50 Сейчас в теме
(28) ifal, расшифровать :) есть код для 1С на просторах инета, тут приводить не буду, т.к. используется в коммерческом решении.
30. gzharkoj 527 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 527 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 527 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 2197 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 64 07.07.16 17:04 Сейчас в теме
тип порта - число, попробуй Порт=8080;
53. desarz 64 07.07.16 17:08 Сейчас в теме
А так, универсальное решение... обнови платформу, обнови конфигурацию.
54. SerSinelnik 07.07.16 17:08 Сейчас в теме
Уже все перепробовал
Все последние релизы и платформа и конфигурация. Сейчас перепроверю, может еще что-то вышло
55. SerSinelnik 07.07.16 17:11 Сейчас в теме
уже голову сломал, что ему не нравится.
Бухгалтерия Предприятия 3,0 работает нормально
в некоторых Розницах - нормально.
У одного товарища эта ошибка выскакивает и хоть убейся
56. desarz 64 07.07.16 17:12 Сейчас в теме
57. SerSinelnik 07.07.16 17:14 Сейчас в теме
1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)
и на этой проверял и на следующей. сейчас уточню какая именно.
58. desarz 64 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 64 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 527 12.11.21 08:16 Сейчас в теме
(62) Что именно не работает?
Оставьте свое сообщение