Всем доброе время суток.
УТ 10.3.18.1. Платформа 8.2 (8.2.16.362).
Появилась надобность получить данные с сайта из обработки для формирования отчёта.
С помощью чего это лучше сделать,направьте в какую сторону копать.
Через HttpСоединение не выходит.
И вообще есть такая возможность через обработку ? Или надо использовать xdto пакеты и web сервисы ?!
(26)Либо добивать SSL на 1С, по образу https://its.1c.ru/db/metod8dev#content:5938:hdoc либо не морочиться и через WinHttp
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
либо перестать эту древнюю платформу использовать, новые отлично с HTTP справляются.
Если там ssl 2 то нужно использовать WinHttpRequest, или платформу 8.3, а так в принципе возможно. Вот здесь можно что то подсмотреть https://infostart.ru/public/721872/
В старых версиях платформы с https по-другому работа делалась, может поэтому не выходит через HttpСоединение. Не помню до какой версии, но где-то раньше вместо Новый БезопасноеСоединениеSSL использовалось просто Истина.
(5)Вот цитата из инструкции к 8.2.19.116 - здесь ЗащищенноеСоединение как раз булево, а не Новый ЗащищенноеСоединениеSSL
HTTPСоединение (HTTPConnection)
По указанному серверу
Синтаксис:
Новый HTTPСоединение(<Сервер>, <Порт>, <ИмяПользователя>, <Пароль>, <Прокси>, <ЗащищенноеСоединение>)
Параметры:
<Сервер> (обязательный)
Тип: Строка.
Сервер, с которым осуществляется соединение.
<Порт> (необязательный)
Тип: Число.
Порт сервера, с которым осуществляется соединение. Значение по умолчанию зависит от защищенности соединения.
Значение по умолчанию: Порт по умолчанию для используемого протокола
<ИмяПользователя> (необязательный)
Тип: Строка.
Имя пользователя на указанном сервере.
<Пароль> (необязательный)
Тип: Строка.
Пароль пользователя на указанном сервере.
<Прокси> (необязательный)
Тип: ИнтернетПрокси.
Прокси, используемый для соединения с сервером.
Значение по умолчанию: Системные установки прокси-сервера
<ЗащищенноеСоединение> (необязательный)
Тип: Булево.
Определяет используемый протокол - http или https.
Значение по умолчанию: Ложь
Тип: Строка.
Адрес ресурса на сервере.
<ИмяВыходногоФайла> (обязательный)
Тип: Строка.
Имя файла, в который помещаются данные полученного ресурса.
<Заголовки> (необязательный)
Тип: Соответствие; Строка.
Позволяет добавлять к запросу на сервер заголовки в виде строки, содержащей текстовые пары "Заголовок" - "Значение", разделяемые комбинацией символов ВК + ПС, или в виде cоответствия "Заголовок" - "Значение заголовка".
(12)Вам вообще с какого сайта информация нужна, какой URL из браузера? Обрабатывать - если это обычная HTML страница - то нужно или парсить сам текст html, или преобразовывать в DOM и там по узлам выбирать то, что нужно.
(12)Если же это API, который выдает XML или JSON - то соответственно нужно делать обработку XML или JSON преобразовать в структуру/соответствие - и дальше выбирать данные, которые необходимы для дальнейшей работы.
имяВыходногоФайла = ПолучитьимяВременногоФайла();
HTTP_Connect.Получить("ссылкасервера",имяВыходногоФайла);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(имяВыходногоФайла);
Пока ЧтениеXML.Прочитать() Цикл
// чтение ответа в виде XML файла
КонецЦикла;
ЧтениеXML.Закрыть();
// удаляем файл после использования
УдалитьФайлы(имяВыходногоФайла);
Показать
На строке ЧтениеXML.Прочитать выдаёт ошибку :
Ошибка разбора XML: - [6,8]
Фатальная ошибка:
Opening and ending tag mismatch: hr line 0 and body
(36) Нужен отчёт. В котором будут видны исходные данные заказов партнёров. А именно Наименование номенклатуры,кол-во,штрихкод. Для сравнения с текущими заказами. Ибо количество запрошенное и подтверждённое может отличаться.
(16)Это потому что он Вас на https переправляет. Если сделаете ХТТПОтвет = ХТТПСоединение.Получить("") - то в ХТТПОтвет.Заголовки увидите, что идет редирект на https://
Процедура КнопкаВыполнитьНажатие(Кнопка)
Предложения.Очистить();
Путь = КаталогВременныхФайлов()+"details.html";
URL = "http://www.findchips.com/lite/MAX232ACPE";
//URL = "http://www.findchips.com/lite/0805CS-681XGE";
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
//WinHttp.SetProxy(2, "lmsc:8118");
WinHttp.Open("GET", "https://www.findchips.com/lite/MAX232ACPE", Ложь);
WinHttp.Send();
ФайлОтвета = Новый ЗаписьТекста(Путь, КодировкаТекста.UTF8);
ФайлОтвета.Записать(WinHttp.ResponseText);
ФайлОтвета.Закрыть();
//НастройкаСохранения = Новый Соответствие;
//НастройкаСохранения.Вставить("МестоХранения", "Клиент");
//НастройкаСохранения.Вставить("Путь", Путь);
//ФайлПолучен = ПолучениеФайловИзИнтернетаКлиентСервер.ПодготовитьПолучениеФайла(URL,,,,,,,НастройкаСохранения);
//Ошибка при получении файла с сервера www.findchips.com:
//Ошибка работы с Интернет: SSL connect error
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл(Путь, "UTF-8");
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
ЭлементыDOM = ДокументHTML.ПолучитьЭлементыПоИмени("div");
МассивДистрибюторовЭлементыDOM = новый массив;
Для Каждого ЭлементDOM Из ЭлементыDOM Цикл
Если ЭлементDOM.ИмяКласса = "distributor-results" Тогда
МассивДистрибюторовЭлементыDOM.Добавить(ЭлементDOM)
КонецЕсли;
КонецЦикла;
Для каждого ЭлементDOMдистра из МассивДистрибюторовЭлементыDOM цикл //элемент БлокHTML
СтруктураДляСтрокиТЧ = Новый Структура;
ЭлементыDOMдистра_a = ЭлементDOMдистра.ПолучитьЭлементыПоИмени("a"); //список элементов DOM из элементов типа ЭлементЯкорьHTML
СтруктураДляСтрокиТЧ.Вставить("distributor_id", ЭлементыDOMдистра_a[1].Имя);
ДляПоставщика = ЭлементыDOMдистра_a[0].Атрибуты[2].ТекстовоеСодержимое;
//ckEvent('top','FClite_SRP_europe_ru', null, null, '121526716', null); recordUserClick('Anchors', 'Chip One Exchange', 'TOP'); return true;
ПозНачалоПоставщика = Найти(ДляПоставщика, "'Anchors', '")+12;
ДлинаПоставщика = Найти(ДляПоставщика, "', 'TOP')")-ПозНачалоПоставщика;
СтруктураДляСтрокиТЧ.Вставить("Поставщик",сред(ДляПоставщика, ПозНачалоПоставщика, ДлинаПоставщика));
//так не дает ЭлементыDOMдистра_tbody = ЭлементDOMдистра.ПолучитьЭлементыПоИмени("tbody")[0]; //список элементов DOM из одного элемента "tbody" типа ЭлементHTML, беру первый единственный
ЭлементыDOMдистра_tbody = ЭлементDOMдистра.ПолучитьЭлементыПоИмени("tbody");
ЭлементHTML_tbody = ЭлементыDOMдистра_tbody[0];
ЭлементыDOMдистра_tr = ЭлементHTML_tbody.ПолучитьЭлементыПоИмени("tr"); //список элементов DOM типа ЭлементСтрокаТаблицыHTML
Для каждого ЭлементСтрокаТаблицыHTML из ЭлементыDOMдистра_tr Цикл
// ЭлементСтрокаТаблицыHTML.Ячейки; //КоллекцияЭлементовHTML 6 штук типа ЭлементЯчейкаТаблицыHTML
Для каждого ЭлементЯчейкаТаблицыHTML из ЭлементСтрокаТаблицыHTML.Ячейки цикл
ДобавитьСтрокиВТЧ(ЭлементЯчейкаТаблицыHTML, СтруктураДляСтрокиТЧ)
КонецЦикла;
КонецЦикла;
КонецЦикла;
//ckEvent('top','FClite_SRP_europe_ru', null, null, '1577', null); recordUserClick('Anchors', 'Mouser', 'TOP');
//return true; на сайте - Mouser Electronics, можно взять из другого места
// // Mouser Electronics
// <span class="other-disti-details">ECIA (NEDA) Member • Authorized Distributor</span>
//
// https://www.findchips.com/lite/MAX232ACPE
КонецПроцедуры
(26)Либо добивать SSL на 1С, по образу https://its.1c.ru/db/metod8dev#content:5938:hdoc либо не морочиться и через WinHttp
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
либо перестать эту древнюю платформу использовать, новые отлично с HTTP справляются.
(31) а причем здесь типовая - не типовая нужно же просто платформу обновить а не конфу, конечно возможно какие то небольшие глюки словите, но в целом много уже УТ, УПП на 8.3 нормально работают
нет, такого не делал, эти данные сравнивали через саму платформу EDI.
Но если вы стандартным модулем от контур пользуетесь, то все данные у вас должны быть в самой 1С, туда ведь грузится в том числе и исходный ORDER сравниваете его просто с документом заказ и выводите отчет
(38) Три дня анализировал,это не так. В итоге пообщавшись со специалистом из контура выяснилось, что данные только в веб-интерфейса хранятся и только там.
(44) согласованные и подтвержденные загружаются в документ заказ покупателя. У вас есть обработка контур.edi? Можете ради интереса отключить интернет и попробовать открыть через их обработку любой исходный заказ, который уже был прогружен, он откроется. Ну и вообще весь алгоритм у них уже написан по получению ORDER, зачем вообще свое городить, возьмите у них все процедуры. Только я здесь говорю именно про модуль контур а не про коннектор
(46) Ну выходит они меня обманули ?)
Вообще мне же нужны все исходные заказы за прошлый период. Вряд ли изначальные данные партнёров при создании заказа,хранятся в 1с.
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest
WinHttp.Open("GET",Сервер,0);
WinHttp.SetCredentials(Логин,Пароль,1);
WinHttp.send();
Если WinHttp.Status = 200 Тогда
Сообщить ( WinHttp.ResponseText);
Показать
В ResponseText попадает здоровенный Html текст.
Мне с ним же и работать? Где можно подглядеть как тянуть данные из него и переходить по ссылкам программно?