gifts2017

Загрузка квитанций от Яндекс.Деньги в Управление торговлей 11.1 для создания документов "Поступление безналичных ДС"

Опубликовал Константин Юрин (kostyaomsk) в раздел Обработки - Обработка документов

Позволяет вручную (или по расписанию) проверять служебный e-mail и, если там есть письма c реестрами платежей (формат HTML и обычный текст) от "Yandex.Money Payment Center", загружать эти письма-квитанции в табличные части обработки и далее по нажатию на кнопку "Создать поступления безналичных ДС" создавать по каждой квитанции об оплате отдельный документ оплаты, заполненный на основании заказа клиента.
Есть встроенный отладчик для "off-line" имитации работы с электронной почтой, что очень важно для работы техподдержки.

Обработка выполнена для слегка измененного релиза УТ 11.1.9.51. Загрузка квитанций Яндекс.Деньги с помощью электронной почты универсальна (в части загрузки писем в табличную часть обработки работает и на БП 3.0, УНФ 1.х - везде для режима управляемых форм). Для создания в УТ 11.1 документов поступления денежных средств по сути важен только один реквизит для учета номера заказа на сайте - по нему идет привязка по оплате.

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


Формат входной квитанции в письме имеет вид:

2000258290430; 1973; 24880.00

Номер транзакции; Идентификатор клиента (Номер заказа на сайте); Сумма платежа;

Более подробно формат квитанций от Яндекс.Денег приведен ниже, а также включен в макет обработки для тестирования. Привожу строчки из квитанции (специально сделаны ошибки и дубли для тестирования):

 

29.06.2015, 09:50, "Yandex.Money Payment Center" <paymentcenter@yamoney.ru>:

РЕЕСТР ПЛАТЕЖЕЙ В ООО "Рога и копыта". № 727
Дата платежей: 28.06.2015
Номер транзакции; Идентификатор клиента; Сумма платежа; Валюта платежа; Сумма за вычетом комиссии; Время 
платежа; Номер кошелька плательщика; Краткое описание; Тип платежа;

 

2000258290777; 1871; 24880.00; RUB; 24009.20; 28.06.2015 17:06:19; 419991837201967; testfirma.ru; AC;


Учитывая то, что формат сообщений будет часто меняться и, кроме этого, на начальном этапе внедрения потребуется отладка необходимо в подобных случаях заранее подготовиться к отладке. С этой целью я ввел в обработку макет и опцию "off-line" отладки. Нужно просто скопировать в макет текст с квитанцией и включить опцию "Отладка", а в конце отладки провести "генеральную репетицию" приема с e-mail этой же инструкции. Результат в обоих случаях должен быть одинаковым.

Результат работы обработки следующий:

 

Ниже исходная тестовая информация по заказу клиента (номер заказа на сайте выведен в журнале документов) и конечные результаты работы (включая сообщения об ошибках загрузки - дублируются в журнал регистрации методом глобального контекста ЗаписьЖурналаРегистрации(), т.к. предполагается запуск регламентным заданием для анализа нештатных ситуаций):

Процедура СказатьПользователю(ТекстСообщ)
    // Если фоновый процесс предусмотреть только в техн. журнал
    СП = Новый СообщениеПользователю;
    СП.Текст = ТекстСообщ;
    СП.Сообщить();
    
    // Журнал регистрации
    УстановитьПривилегированныйРежим(Истина);
    ЗаписьЖурналаРегистрации("ошибка в обоработке ЗагрузкаКвитанцийОтЯндексДенег", 
    УровеньЖурналаРегистрации.Ошибка, , ""+ТекстСообщ, "вывод ошибки");
    УстановитьПривилегированныйРежим(Ложь);
    
КонецПроцедуры    

 

Тестовый заказ клиента в УТ 11.1:

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

Общий вид работы.


Результат работы.

 

Данная задача по интеграции оказалась интересной и сложной по следующим пунктам:

1. Прием писем и их первоначальная обработка встроенными средствами платформы 1С 8.3.6 без использования стороннего почтового клиента с помощью объекта "ИнтернетПочта".

Здесь тоже все не так просто, как кажется: начиная от зависания сеанса 1С во время чтения заголовков переполненного ящика и заканчивая настройкой профиля электронной почты для выяснения настроек портов и протоколов (SSL). В частности, для корректного доступа на pop.rambler.ru нужно включить опцию разрешения доступа сторонним почтовым клиентом, иначе будете получать непонятное сообщение в переводе с английского "некоректный логин или пароль". Также нужно учесть глючность методов ограничения и удаления писемПочта.ПолучитьЗаголовки(СтруктураОтбора):

 

СтрОтбора = Новый Структура;
//СтрОтбора.Вставить("ПослеДатыОтправления", Дата(2015, 07, 01) );
//СтрОтбора.Вставить("Прочитанные", Ложь);
//СтрОтбора.Вставить("Новые", Ложь);
Заголовки=Почта.ПолучитьЗаголовки(СтрОтбора);
Если Заголовки.Количество()=0 Тогда
Возврат 0; //Предупреждение("В почтовом ящике нет входящих сообщений!", ,"Нет сообщений");
КонецЕсли;
// Порядок чтения, пометка и удаление с сервера в ТЗ не оговорены! Логично пока не удалять с сервера, но помечать как прочитанные. Читать только непрочненные.
Сообщения = Почта.Выбрать(Ложь, Заголовки, Истина); // Не удалять с сервера, но помечать как прочитанные. 

2. Обработка полученного письма в формате HTML (иначе парсинг веб-страницы).

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

Здесь столкнулся с проблемой, что автоматически выделить текст "как есть" на сервере хотя бы с переносами строк очень непростая задача. На клиенте можно использовать Поле HTML-документа, но перерыв весь интернет нашел решение в DOM-технологии для получения из исходного HTML-документа сплошной строки текста без переноса (метод 1С 8.3 Новый ИнтернетПочта):

 

Для каждого ТекстСообщения Из Сообщение.Тексты Цикл
Если ТекстСообщения.ТипТекста=ТипТекстаПочтовогоСообщения.HTML Тогда
Попытка
//Проеобразуем HTML в сплошную строку
//штатными средствами 1С 8.3 без переносов:
Построитель = Новый ПостроительDOM;
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(ТекстСообщения.Текст, ТекстСообщения.Кодировка); // Utf-8 по умолчанию.
ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
ТекстВходящие = ТекстВходящие + ДокументHTML.Тело.ТекстовоеСодержимое+ВК_ПС; 
Исключение
ПодробныйАнализОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке() );
СказатьПользователю("Ошибка при чтении-записи информации из письма "+ПодробныйАнализОшибки);
Продолжить;
КонецПопытки;
ИначеЕсли ТекстСообщения.ТипТекста=ТипТекстаПочтовогоСообщения.ПростойТекст Тогда
ТекстВходящие = ТекстВходящие+ТекстСообщения.Текст;
Иначе
СказатьПользователю("Поддерживаются только письма в HTML или простом текстовом формате (не размеченные)"); 
Продолжить;
КонецЕсли; 
КонецЦикла; // Для каждого ТекстСообщения Из Сообщение.Тексты...

 

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

Как альтернатива можно попытаться удалить символы тегов из HTML вроде такого метода:

//Удаление html тегов из строки
//Код 1C v 8.х
 RegExp = Новый COMОбъект("VBScript.RegExp");
 RegExp.IgnoreCase = Ложь; //Игнорировать регистр 
 RegExp.Global = Истина; //Поиск всех вхождений шаблона 
 RegExp.MultiLine = Ложь; //Многострочный режим 
 
 RegExp.Pattern = "<[^>]*>"; //Ищем теги HTML 
 стр=RegExp.Replace(стр, ""); //Заменяем все теги на пустоту

Еще был вариант использовать COMОбъект("htmlfile"), но тут уже задача сильно усложнается в сторону знаний веб-дизайна.

 

HTML = Новый COMОбъект("htmlfile");
HTML.Open("text/html");
HTML.Write(ТекстПисьма);
HTMLDocument = HTML.documentElement.document;
Сообщить(HTMLDocument.Body.ChildNodes.length);
Сообщить(HTMLDocument.getElementsByTagName("Table").length);
И третий вариант:
// Вариант обработки HTML-документа средствами 1С 8
ХТМЛТекст = ТекстПисьма.ПолучитьТекст();
НовыйHTMLДокумент = Новый COMОбъект("HtmlFile");
НовыйHTMLДокумент.open("text/html");
НовыйHTMLДокумент.write(ХТМЛТекст);
НовыйHTMLДокумент.close();
ТегТела = НовыйHTMLДокумент.all.tags("BODY");
Для а = 0 По ТегТела.length - 1 Цикл
ТегТела.item(а).innerHTML = "
|<P><BR><BR><BR>
|<HR>
|</P>
|<P></P>" + ТегТела.item(а).innerHTML;
КонецЦикла;
ТекстСообщенияДляОтправки = "";
Для а = 0 По НовыйHTMLДокумент.all.length - 1 Цикл
Если НовыйHTMLДокумент.all.item(а).tagName = "HTML" Тогда
ТекстСообщенияДляОтправки = НовыйHTMLДокумент.all.item(а).innerHTML;
КонецЕсли; 
КонецЦикла;

Думаю так, что универсальный парсинг HTML-документа (в т.ч. и сторонними средствами) нужен тогда, когда структура документа заранее неизвестна и будет часто меняться. Здесь же структура относительно постоянно. Я привязался для разбивке строк к двум символам "двоеточие" в дате письма (13.11.2015 14:32:19), а также к 13-ти значному номеру транзакции в Яндекс.Деньги (и еще к 15-ти значному яндекс-кошельку). Метод чтения примитивный, но действенный:

Функция ЕстьТранзакцияВСтроке(СтрТекста, СтрТранзакция)
Пока Истина Цикл
 Поз = Найти(СтрТекста, ";");
Если Поз=0 Тогда
 Возврат Ложь;
КонецЕсли; 

ЯндексКошелек = ОставитьВСтрокеТолькоЦифры(Сред(СтрТекста, Поз-15, 15));

Если СтрДлина(ЯндексКошелек)=15 Тогда
 СтрТекста = Сред(СтрТекста, Поз+1);
 Продолжить;
КонецЕсли;

СтрТранзакция = ОставитьВСтрокеТолькоЦифры(Сред(СтрТекста, Поз-13, 13));

Если СтрДлина(СтрТранзакция)=13 Тогда
 Возврат Истина; // Это кошелек
КонецЕсли;

СтрТекста = Сред(СтрТекста, Поз+1);
КонецЦикла;

КонецФункции 

3. Создание документов поступления денежных средств на основании заказа клиента.

Здесь задача обычная (хотя вся задача относится к разряду интеграции). Пока не стал самовольничать и вносить в конфигурацию новый реквизит - флаг загрузки обработкой (который нужно скрыть от пользователя и заполнять только этой обработкой программно). Также сама УТ 11.1.9 делает контроль взииморасчетов по заказу и не дает переплатить. В текущей версии оставил как есть. Даже в такой реализации двойной загрузке по оплате от клиента (переплаты) не будет, хотя тут нужно уточнять дополнительно по условиям оплаты:

Процедура СоздатьДокументы() Экспорт
// Вопрос по ТЗ: Может создать в пользовательском режиме доп. реквизит (ЗагруженИзЯндексДенег и контроль этой обработкой?
// Иначе только стандартный контроль взаиморасчетов по расшифровкам платежа настройками УТ 11.1.9 как сейчас чтоб заказ не был оплачен дважды
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВхТЗ", Квитанции.Выгрузить(, "Загрузить, Загружен, НомерЗаказа") );
Запрос.Текст =
"ВЫБРАТЬ
| Вх.Загрузить,
| Вх.Загружен,
| Вх.НомерЗаказа КАК НомерЗаказа
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ВхТЗ КАК Вх
|
|ИНДЕКСИРОВАТЬ ПО
| НомерЗаказа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Заказ.Ссылка КАК Заказ,
| Заказ.Дата КАК ДатаЗаказа,
| ВТ.НомерЗаказа КАК НомерЗаказаССайта
|ИЗ
| Документ.ЗаказКлиента КАК Заказ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
| ПО Заказ.НомерЗаказаНаСайте = ВТ.НомерЗаказа
|ГДЕ
| Заказ.Проведен
| И ВТ.Загрузить
| И НЕ ВТ.Загружен
|
|УПОРЯДОЧИТЬ ПО
| ДатаЗаказа";

РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ДокЗаказ = Выборка.Заказ;
Док = Документы.ПоступлениеБезналичныхДенежныхСредств.СоздатьДокумент();
Попытка
Док.Заполнить(ДокЗаказ);
Если Док.РасшифровкаПлатежа[0].СуммаВзаиморасчетов = 0 Тогда
Продолжить; // Защита от двойной загрузки оплаты. Оплата по-условию только по одному заказу.
КонецЕсли; 
Док.Дата = ТекущаяДата();
Док.НомерВходящегоДокумента = Выборка.НомерЗаказаССайта; //!!! Тип строка в Поступление ДС, а тут - тип число!
Док.ДатаВходящегоДокумента = Док.Дата; // Уточнить. Может брать из квитанции по реестру как и номер входящего документа.
Док.Комментарий = "# Создан обработкой загрузки квитанций от Яндекс.Денег по заказу с сайта "+Выборка.НомерЗаказаССайта;
Док.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); // Уточнить про выписку банка.
Квитанции.Найти(Выборка.НомерЗаказаССайта, "НомерЗаказа").Загружен = Истина;
// Вопрос про контроль двойной оплаты (будет ли проводиться Поступление ДДС на основании заказа (расшифровка платежа) ?!?
Исключение
ПодробныйАнализОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке() );
СказатьПользователю("Ошибка при записи и проведении "+Док+" на основании "+ДокЗаказ+" Номер заказа с сайта <<"+
Выборка.НомерЗаказаССайта+">>"+ПодробныйАнализОшибки);
КонецПопытки;
КонецЦикла; 
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

4. Встроенный отладчик для техподдержки.

Естественно, ничего не заменит тестирования в реальной ситуации, но, возможно, будет так, что работа с почтовым ящиком будет затруднительна (вдруг будут опции удаления писем). Для этого введена опция отладки загрузки. Справка включена в обработку (F1 в помощь).

Если изменился формат или выскакивает ошибка то для отладки проделать следующее:

4.1 На время работ вывести на форму флаг "Отладка" реквизит булево внешней обработки.

4.2 Скопировать текст письма с проблемной квитанцией с почтового ящика как есть.

4.3 Поместить в текстовый макет внешней обработки и сохранить.

4.4 В режиме предприятия под отладчиком установить флаг "Отладка".

Данная обработка с заранее заложенными возможностями отладки "off-line" скопировать текст письма из внешней почтовой программы с реестром платежей в макет обработки как обычный текст письма (без тегов HTML). Результат заполнения табличной части в обоих случаях должен быть одинаковым, т.к. используются общие механизмы.

P.S. Надеюсь, данная методика работы с квитанциями Yandex.Money для планирования входящих платежей от клиентов будет полезна. Жду от Вас замечаний и предложений по данной тематике.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка загрузки квитанций от Яндекс.Деньги в УТ 11.1.9.51
.epf 23,78Kb
27.08.15
7
.epf 1.0.0 23,78Kb 7 Скачать
Квитанция Яндекс-Деньги как текст.txt
.txt 1,18Kb
27.08.15
2
.txt 1,18Kb 2 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Ферапонтов (Melifaro588) 13.07.15 14:14
Разве таковая цепочка верна? Если я правильно понял, то приходник формируется от клинта на продавца.
Яндекс деньги сначала получает средства от клиента, а потом перечисляет получателю.
Соответственно необходимо формировать перенос задолженности с клиента на яндекс деньги.
Nefertary; kostyaomsk; +2 Ответить 1
2. Константин Юрин (kostyaomsk) 13.07.15 14:22
(1) Melifaro588, насчет предметной области Вы верно заметили - это как будто "ПКО оформили" и взаиморасчеты сдвинулись в "нашу пользу", но: мы собираем КВИТАНЦИИ по почте, а не официальное подтверждение из банка. Фактически как работа с эквайрингом получается - банк с нами проводит сводный расчет в конце месяца за вычетом возвратов. Тут то мы получаем бумажки. Мало ли кто там чего прислал? Это всего лишь расчеты, а не взаиморасчеты. Планируемое поступление денег, а не фактическое. Документ в УТ 11.1 "поступление безналичных ДС" в редакции 11.1.9 нужно проводить после заполнения табличной части документа Выписка банка. Это уже в 10-й редакции УТ есть опция "проведено банком" (уже эти редакции на них памяти не хватает).
К тому же вы же анонс публикации взят один в один по ТЗ к задаче. Вопрос насколько корректна такая цепочка уже к непосредственному заказчику, которого я в глаза не видел :) Может вообще левые платежи хотят собирать?
3. Константин Юрин (kostyaomsk) 13.07.15 14:26
Дополнительно, формирование банковской выписки в любой программе дело серьезное. Это уже реальные списания со счета (или зачисления на счет). Там формат уже более "строгий", хоть и текстовый, т.к. регламентирован банком и все равно тот кому доверили работу с банком должен все контролировать и быть ответственным не полагаясь на автоматику.
4. Константин Юрин (kostyaomsk) 14.07.15 17:51
Просматривал аналогичные разработки. Например эта по использованию API-яндекс.деньги из 1С обладает более мощными возможностям, но нужен "монопольный" доступ к финансовой информации.
5. Анна Кузнецова (Nefertary) 18.09.15 09:00
Тоже работаем с Я.Деньги, но данные об оплате нам передает Битрикс (доработанный).
У нас используется штатная цепочка "Эквайринговая операция" - "Поступление безналичных ДС"
Эквайринговая операция - это как раз факт поступления денег от клиента в платежную систему.
В момент проведения долг клиента переносится на эквайрера(платежную систему)
При проведении поступления денег долг эквайрера закрывается.
6. Константин Юрин (kostyaomsk) 18.09.15 10:21
(5) Nefertary, а в том то и дело что по этой обработке НЕ СТАВИТСЯ флажок "Проведено выпиской банка" (я про смысл, а не как там точно в программе) в одних редакциях УТ 11.1 проведение банковской выпиской, в других просто флажок в платежном поручении и один документ.
Главное смысл: получение по почте квитанции о совершенной операции уже факт что деньги поступят, а у Вас получение сведений от битрикса из эквайринговой системы уже фактически равносильно ОФИЦИАЛЬНОЙ банковской выписки.
Проведение потом по банку после таких обработок еще никто не отменял!
7. Константин Юрин (kostyaomsk) 18.09.15 10:24
Тем более парсинг чего-то это фактически "заплатка", которая может не сработать и клиент будет недоволен. Тут задача была интересна с точки зрения методов парсинга HTML, чем создания документов цепочки оплаты.
8. Анна Кузнецова (Nefertary) 18.09.15 11:05
(6) kostyaomsk,
Эквайринговая операция не формирует движения ДС, а только двигает расчеты с клиентом. В этом смысле все корректно.
По платежке деньги придут потом именно от эквайрера, а не от физика.
kostyaomsk; +1 Ответить 2
9. Константин Юрин (kostyaomsk) 18.09.15 17:47
(8) Nefertary, в говове БП и проводки
10. Константин Юрин (kostyaomsk) 18.09.15 18:44
(8) Nefertary, каждую задачу нужно смотреть отдельно и на том релизе что будет внедряться (дорабатываться) для УТ 11.1.10 посмотрел по эквайрингу (из встроенной справки):
1. Эквайринговая операция

Документ предназначен для отражения операций оплаты клиентом за товары, работы, услуги с помощью платежных (пластиковых) карт международных платежных систем, и отражения операций возврата денежных средств на платежную карту.
Для оформления операций по оплате платежными картами необходимо предварительно ввести информацию об эквайринговом терминале, с помощью которого будут оформляться платежи по платежным картам.
Информация о проведенных банком платежах по платежным картам регистрируется в документе Отчет банка по операциям эквайринга.
В документе предусмотрена возможность печати чека для случая, когда эквайринговый терминал не имеет своего принтера чеков и чек должен распечатываться на фискальном регистраторе.
Использование операций эвайринга (оплата платежными картами) включается/отключается функциональной опцией Оплаты платежными картами в разделе Администрирование - Организации и денежные средства.

2. Отчет банка по эквайрингу:

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

Насчет бухгалтерских проводок эквайринговых операций:
Услуги банка по договору эквайринга НДС не облагаются.

Если перевод денежных средств осуществляется банком в день осуществления оплаты картами, то бухгалтерские проводки будут следующими:

Д 62 К 90.1 – выручка от безналичных продаж
Д90.3 К 68.2 – начислен НДС с продажи (для ЮЛ при ОСНО)
Д 51 К 62 – зачислены на расчетный счет денежные средства, оплаченные платежными картами.
Д 91.2 К 51 – удержана и принята на расходы комиссия банку по договору эквайринга.
Если перевод денежных средств банком происходит не в день осуществления оплаты картами, то необходимо использовать счет 57 «Переводы в пути»

Д57 К 62 – переданы в банк документы по оплате картами
Д51 К 57 – зачислены на расчетный счет денежные средства за товары, оплаченные платежными картами.
Если организация розничной торговли, то можно не использовать 62 счет, а выручку начислять используя счета 57 и 90.1.

Д57 К 90.1 – выручка от продаж
Д 90.3 К 68.2 – начислен НДС с продаж
Д51 К 57 – зачислены на расчетный счет деньги за товар, оплаченные платежными картами.
Д 91.2 К 57 – принята к расходам комиссия банка по договору эквайринга.

На рисунках видно что "реальное" поступление денег по документу операции (как в этот же день без 57 счета), а обычно банки "тянут время"
Реальный расход только по комиссии банка из отчета (который могут предоставить официальный с печатью по запросу).
Прикрепленные файлы:
11. Константин Юрин (kostyaomsk) 18.09.15 18:51
Если посмотреть внутренности то документ Поступление ДС более функционален (там почти половина всех регистров накопления и, главное, реквизит "проведеноБанком" при загрузке выписок.
Каждую задачу приходится смотреть отдельно по той цепочке в ТЗ, которую предоставили. Ее еще самому нужно смоделировать именно в УТ 11.1 из-за большого разброса релизов.
Прикрепленные файлы:
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа