gifts2017

"Картотека арбитражных дел". Запрос к картотеке из 1С (обычные формы)

Опубликовал Вадим Шворобей (shvo65) в раздел Обмен - Интеграция с WEB

Пример работы с сервисом "Картотека арбитражных дел" для проверки новых Контрагентов. Реализовано в виде внешней обработки.

Задача - облегчить руководству проверку "на благонадежность" новых Контрагентов.

Выбор сервиса:

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);

    // 2016-04-01T00:00:00 Вид даты "DateTo":"2016-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-запрос рабочий, опытный программист быстро адаптирует текст под собственные нужды. Если кому-то понадобится дополнительное "украшательство", то в конце процедуры есть пример частичного парсинга кода (нам не потребовалось).

Пользуйтесь на здоровье!

Удачи в разработке

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

Наименование Файл Версия Размер
Картотека арбитражных дел 5
.epf 9,22Kb
25.05.16
5
.epf 9,22Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.