Задача — облегчить руководству проверку «на благонадежность» новых Контрагентов.
Выбор сервиса:
1) возможность бесплатной работы (что, согласитесь, немаловажно)
2) оперативное поступление новой информации об арбитражных делах
3) быстрый ответ сервиса
ПРЕДУПРЕЖДЕНИЕ: На сайте сервиса размещена защита от роботов, поэтому количество запросов к базе данных ОГРАНИЧЕНО!!!
При превышении количества обращений блокируется IP-адрес, далее только письмо к Администратору сервиса.
Поэтому будет рассмотрен пример одиночного запроса. Сайт иногда может быть перегружен запросами, поэтому таймаут выставлен побольше.
Процедура КнопкаВыполнитьНажатие(Кнопка)
Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не выбран Контрагент!!!");
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Контрагент.ИНН) Тогда
ОбщегоНазначения.СообщитьОбОшибке("У Контрагента не заполнен ИНН !!!");
Возврат;
КонецЕсли;
Если НачПериода <> '00010101' Тогда
НачПериодаСтрокой = """" + ДатаВремяВФорматXMLИз1СМТ(НачПериода) + """";
Иначе
НачПериодаСтрокой = "null";
КонецЕсли;
Если КонПериода <> '00010101' Тогда
КонПериодаСтрокой = """" + ДатаВремяВФорматXMLИз1СМТ(КонПериода) + """";
Иначе
КонПериодаСтрокой = "null";
КонецЕсли;
ПостЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
MSScriptControl.Language = "javascript";
Стрим = Новый COMОбъект("ADODB.Stream");
MSScriptControl.AddObject("Стрим", Стрим);
MSScriptControl.AddObject("Соединение", ПостЗапрос);
Стрим.Mode = 3;
Стрим.Type = 1;
ПостЗапрос.SetTimeouts(50000, 50000, 50000, 50000);
ПостЗапрос.Open("POST", "http://kad.arbitr.ru/Kad/SearchInstances", 0);
ПостЗапрос.SetRequestHeader("Accept", "*/*");
ПостЗапрос.SetRequestHeader("Content-Type", "application/json");
СтрокаЗапроса = "{""Page"":1,""Count"":25,""Courts"":[],""DateFrom"":" + НачПериодаСтрокой + ",""DateTo"":" + КонПериодаСтрокой + ",""Sides"":[{""Name"":" + СокрЛП(Контрагент.ИНН) +
",""Type"":-1,""ExactMatch"":false}],""Judges"":[],""CaseNumbers"":[],""WithVKSInstances"":false}";
ResponseText = "";
Попытка
ПостЗапрос.Send(СтрокаЗапроса);
ПостЗапрос.WaitForResponse();
исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Стрим.Open();
Попытка
MSScriptControl.Eval("Стрим.Write(Соединение.responseBody)");
Исключение
Отказ = Истина;
Возврат;
КонецПопытки;
ИмяФайлаПолучения = ПолучитьИмяВременногоФайла();
Стрим.SaveToFile(ИмяФайлаПолучения, 2);
Стрим.Close();
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайлаПолучения, КодировкаТекста.UTF8);
ResponseText = Текст.ПолучитьТекст();
ДокументDOM = ПреобразоватьТекстВДом(ResponseText);
ЭлементыDOM = ДокументDOM.ПолучитьЭлементыПоИмени("input");
Для Каждого ЭлементDOM Из ЭлементыDOM Цикл
Если ЭлементDOM.Идентификатор = "documentsTotalCount" И ЭлементDOM.Значение = "0" Тогда
ResponseText = " Арбитражных дел нет";
КонецЕсли;
КонецЦикла;
EntranceText = СокрЛП(Контрагент) + " (ИНН: " + СокрЛП(Контрагент.ИНН) + ")<br>" + ResponseText;
ЭлементыФормы.ДокументHTML.УстановитьТекст(EntranceText);
// 2025-04-01T00:00:00 Вид даты "DateTo":"2025-04-26T23:59:59"
Если РазбиратьТекст Тогда
ЭлементыDOM = ДокументDOM.ПолучитьЭлементыПоИмени("div");
Для Каждого ЭлементDOM Из ЭлементыDOM Цикл
Если ЭлементDOM.ИмяКласса = "civil" Тогда
Сообщить("Дата дела = " + СокрЛП(ЭлементDOM.ТекстовоеСодержимое));
КонецЕсли;
Если ЭлементDOM.ИмяКласса = "judge" Тогда
Сообщить("Судья = " + СокрЛП(ЭлементDOM.ТекстовоеСодержимое));
КонецЕсли;
Если ЭлементDOM.ИмяКласса = "num_case" Тогда
Сообщить("Номер дела = " + СокрЛП(ЭлементDOM.ТекстовоеСодержимое));
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ПреобразоватьТекстВДом(ТекстОтвета) Экспорт
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.УстановитьСтроку(ТекстОтвета);
ПостроительDOM = Новый ПостроительDOM;
Возврат ПостроительDOM.Прочитать(ЧтениеHTML);
КонецФункции
Функция ДатаВремяВФорматXMLИз1СМТ(лДатаВремя = Неопределено, Тип = "ДатаВремя") Экспорт
ДатаВремя = ?(лДатаВремя = Неопределено, ТекущаяДата(), лДатаВремя);
НужнаяДата = Формат(ДатаВремя, "ДФ=""гггг-ММ-дд""");
НужноеВремя = Формат(ДатаВремя, "ДФ=""ЧЧ:мм:сс""");
Если Тип = "Дата" Тогда
НужноеЗначение = НужнаяДата;
ИначеЕсли Тип = "Время" Тогда
НужноеЗначение = НужноеВремя;
Иначе
Если ПустаяСтрока(НужнаяДата) или ПустаяСтрока(НужноеВремя) Тогда
Возврат "";
КонецЕсли;
НужноеЗначение = НужнаяДата + "T" + НужноеВремя;
КонецЕсли;
Возврат НужноеЗначение;
КонецФункции //ДатаВремяВФорматXMLИз1СМТ()
POST-запрос рабочий, опытный программист быстро адаптирует текст под собственные нужды. Если кому-то понадобится дополнительное «украшательство», то в конце процедуры есть пример частичного парсинга кода (нам не потребовалось).
Пользуйтесь на здоровье!
Удачи в разработке
Спасибо огромное за обработку.Очень пригодилась.
Ох не просто все с этим КАД. Мы при разработке своего решения на 1С с функцией интеграции с kad.arbitr намучались, они на КАД все время что-то меняют, но в итоге продукт рабочийhttp://you-right.ru/sudebno-pretenzionnaya-rabota