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

0. desarz 62 11.09.15 17:42 Сейчас в теме
В преддверии ввода системы ЕГАИС, разбирались с УТМ и HTTP POST запросами.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SergVD 17.09.15 13:26 Сейчас в теме
УТС возвращает код ошибки 500
4. desarz 62 19.09.15 18:23 Сейчас в теме
(1) SergVD, обновил статью, тело запроса составляется через объединение текстовых файлов, 100% работает )
Добавил разбор файл ответа.
2. flyer 232 18.09.15 08:16 Сейчас в теме
может в виде обработки выложите или конфы?
3. Corvax46 40 18.09.15 15:30 Сейчас в теме
СерверПриемник = "localhost"; //Без протокола http://. Если УТМ установлени на удаленном компьютере, указываем свой адрес.
Прикрепленные файлы:
HTTPPOSTЗапросКУТМСистемыЕГАИС.epf
5. Uncore 1327 20.09.15 04:32 Сейчас в теме
А на 8.2 не пробовали сделать через HTTPСоединение? Там HTTPЗапрос нет. Вроде все то же, но не выполняется запрос, чего-то видимо все-таки не хватает.
6. 31ric 23.09.15 13:58 Сейчас в теме
(5) Uncore, Обновите платформу. Начиная с 8.2.18 HTTPЗапрос есть
7. Uncore 1327 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 62 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 62 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 62 02.10.15 09:43 Сейчас в теме
(13) Teodor_kr, то что вы пробовали, старая версия (она работала не везде).
В статье обновленный пример, если код из статьи перенесете в обработку, подставите свои значения FSRARID, все заработает.
15. demon_infernal 32 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 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 122 23.12.15 10:42 Сейчас в теме
(17) ifal, В конце XML обязательно должен быть перевод строки. По умолчанию - ЗаписьXML() не заканчивает файл XML переносом строки.
не забудьте... как в примере закончить :
    ОбъектXML.ЗаписатьТекст(Символы.ПС);
    ОбъектXML.Закрыть();
48. gzharkoj 24.12.15 22:09 Сейчас в теме
(47) dima_home, а где у меня ЗаписьXML используется?
18. desarz 62 07.10.15 15:18 Сейчас в теме
Обработка была тестированием УТМ с целью разобраться и посмотреть как работает УТМ и т.д.
Если собираетесь внедрять, то советую код и принцип работы с УТМ взять из последней редакции 1С 8 Розница 2.1.
Обмен построен на XDTO объектах, очень удобно и красиво )
19. gzharkoj 07.10.15 18:38 Сейчас в теме
(18) с оттуда и взял, и он не заработал! Пришлось немного поразбираться, почитав стандарт передачи данных в POST. Возможно все дело в настройках веб-сервера (Jetty), но факт - из коробки не работает.
20. bds22 16 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 16 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 449 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. Геннадьевич 15 13.11.15 07:23 Сейчас в теме
Из браузера такой запрос может прокатить? Например на PHP если написать? Никто не пробовал?
У меня в ответ на запрос выдаёт:

HTTP ERROR: 404
Problem accessing opt/in/QueryPartner. Reason:
Not Found
24. maljaev 794 26.11.15 11:06 Сейчас в теме
Скажите пожалуйста, а можно ли передать на сервер ЕГАИС коды товаров PDF417 и получить обратно информацию об этих товарах (карточки товаров)?
25. krv2k 370 28.11.15 20:01 Сейчас в теме
(24) maljaev, можно передать в запросе AlcCode, и получить информацию только об этом конкретном товаре (в отличие от запроса по ИНН, в котором возвращаются все товары).
26. aziat71 03.12.15 01:56 Сейчас в теме
(25) krv2k, запрос AlcCode - применимо для проверки акцизной марки??? Интересует как раз получение информации (проверка акцизной марки) по штрих-коду PDF417 !!!
27. Uncore 1327 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 794 04.12.15 00:31 Сейчас в теме
(25) krv2k, А где есть информация о том как сформировать запрос к серверу по AlcСode?
32. Uncore 1327 04.12.15 04:34 Сейчас в теме
(31) maljaev, вместо ИНН производителя нужно передавать параметр КОД:
ТекстЗапроса.ЗаписатьНачалоЭлемента("qp:Name");
ТекстЗапроса.ЗаписатьТекст("КОД");
ТекстЗапроса.ЗаписатьКонецЭлемента(); //name
aziat71; gzharkoj; maljaev; +3 Ответить
33. Uncore 1327 04.12.15 09:44 Сейчас в теме
+(32) для запроса контрагента/производителя по регномеру, тоже поправить нужно в одном месте:
ТекстЗапроса.ЗаписатьНачалоЭлемента("qp:Name");
    Если ЭтоРегНомер Тогда
	ТекстЗапроса.ЗаписатьТекст("СИО");
    Иначе	
	ТекстЗапроса.ЗаписатьТекст("ИНН");
   КонецЕсли;	
ТекстЗапроса.ЗаписатьКонецЭлемента(); //name
41. Palmer1976 160 16.12.15 01:41 Сейчас в теме
28. gzharkoj 03.12.15 15:07 Сейчас в теме
Там по идее строка зашифрована, как же его оттуда вытащить?
29. Uncore 1327 03.12.15 16:50 Сейчас в теме
(28) ifal, расшифровать :) есть код для 1С на просторах инета, тут приводить не буду, т.к. используется в коммерческом решении.
30. gzharkoj 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 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 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 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 1626 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 62 07.07.16 17:04 Сейчас в теме
тип порта - число, попробуй Порт=8080;
53. desarz 62 07.07.16 17:08 Сейчас в теме
А так, универсальное решение... обнови платформу, обнови конфигурацию.
54. SerSinelnik 07.07.16 17:08 Сейчас в теме
Уже все перепробовал
Все последние релизы и платформа и конфигурация. Сейчас перепроверю, может еще что-то вышло
55. SerSinelnik 07.07.16 17:11 Сейчас в теме
уже голову сломал, что ему не нравится.
Бухгалтерия Предприятия 3,0 работает нормально
в некоторых Розницах - нормально.
У одного товарища эта ошибка выскакивает и хоть убейся
56. desarz 62 07.07.16 17:12 Сейчас в теме
57. SerSinelnik 07.07.16 17:14 Сейчас в теме
1С:Предприятие 8.3 (8.3.8.1675) (Кстати БП на такой платформе норм отрабатывает)
и на этой проверял и на следующей. сейчас уточню какая именно.
58. desarz 62 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 62 07.07.16 17:28 Сейчас в теме
Возможно в Рознице изменили код соединения с УТМ и требуется новая платформа, в обновление Розницы, 1С пишет что нужна платформа "1С:Предприятие 8 не ниже 8.3.8.1784"...
Как то так, других мыслей нет.
61. SerSinelnik 07.07.16 17:31 Сейчас в теме
Оставьте свое сообщение
Вопросы с вознаграждением