Данные с сайта из 1с.

1. Intercititude 05.03.20 12:26 Сейчас в теме
Всем доброе время суток.
УТ 10.3.18.1. Платформа 8.2 (8.2.16.362).

Появилась надобность получить данные с сайта из обработки для формирования отчёта.
С помощью чего это лучше сделать,направьте в какую сторону копать.
Через HttpСоединение не выходит.

И вообще есть такая возможность через обработку ? Или надо использовать xdto пакеты и web сервисы ?!
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
29. uno-c 235 05.03.20 17:45 Сейчас в теме +0.18 $m
(26)Либо добивать SSL на 1С, по образу https://its.1c.ru/db/metod8dev#content:5938:hdoc
либо не морочиться и через WinHttp
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
либо перестать эту древнюю платформу использовать, новые отлично с HTTP справляются.
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. mushdaj 05.03.20 12:58 Сейчас в теме
Если там ssl 2 то нужно использовать WinHttpRequest, или платформу 8.3, а так в принципе возможно. Вот здесь можно что то подсмотреть https://infostart.ru/public/721872/
4. Intercititude 05.03.20 13:00 Сейчас в теме
(3) Как наверняка узнать ssl2 или api или ещё что ?
7. Intercititude 05.03.20 13:04 Сейчас в теме
(3) Посмотрел ссылку. Там использую новый HTTPЗапрос. В моей платформе такого нету даже.
8. uno-c 235 05.03.20 13:08 Сейчас в теме
(7)Вместо HTTPЗапрос-а раньше использовался просто строковый адрес ресурса. Т.е. было что-то вроде ХТТПСоединение.Получить("/forum9/topic237088/")
Intercititude; +1 Ответить
2. uno-c 235 05.03.20 12:58 Сейчас в теме
В старых версиях платформы с https по-другому работа делалась, может поэтому не выходит через HttpСоединение. Не помню до какой версии, но где-то раньше вместо Новый БезопасноеСоединениеSSL использовалось просто Истина.
5. Intercititude 05.03.20 13:00 Сейчас в теме
(2) Может у Вас есть ссылка ? Не нашёл для моей платформы никаких инструкции..
6. uno-c 235 05.03.20 13:04 Сейчас в теме
(5)Вот цитата из инструкции к 8.2.19.116 - здесь ЗащищенноеСоединение как раз булево, а не Новый ЗащищенноеСоединениеSSL
HTTPСоединение (HTTPConnection)
По указанному серверу
Синтаксис:

Новый HTTPСоединение(<Сервер>, <Порт>, <ИмяПользователя>, <Пароль>, <Прокси>, <ЗащищенноеСоединение>)
Параметры:

<Сервер> (обязательный)

Тип: Строка.
Сервер, с которым осуществляется соединение.
<Порт> (необязательный)

Тип: Число.
Порт сервера, с которым осуществляется соединение. Значение по умолчанию зависит от защищенности соединения.
Значение по умолчанию: Порт по умолчанию для используемого протокола
<ИмяПользователя> (необязательный)

Тип: Строка.
Имя пользователя на указанном сервере.
<Пароль> (необязательный)

Тип: Строка.
Пароль пользователя на указанном сервере.
<Прокси> (необязательный)

Тип: ИнтернетПрокси.
Прокси, используемый для соединения с сервером.
Значение по умолчанию: Системные установки прокси-сервера
<ЗащищенноеСоединение> (необязательный)

Тип: Булево.
Определяет используемый протокол - http или https.
Значение по умолчанию: Ложь
Показать
9. uno-c 235 05.03.20 13:10 Сейчас в теме
Вот цитата и СП, второй вариант - как раз по адресу (первый удаляю за ненадобностью)
HTTPСоединение (HTTPConnection)
Получить (Get)

Вариант синтаксиса: По адресу

Синтаксис:

Получить(<Источник>, <ИмяВыходногоФайла>, <Заголовки>)
Параметры:

<Источник> (обязательный)

Тип: Строка.
Адрес ресурса на сервере.
<ИмяВыходногоФайла> (обязательный)

Тип: Строка.
Имя файла, в который помещаются данные полученного ресурса.
<Заголовки> (необязательный)

Тип: Соответствие; Строка.
Позволяет добавлять к запросу на сервер заголовки в виде строки, содержащей текстовые пары "Заголовок" - "Значение", разделяемые комбинацией символов ВК + ПС, или в виде cоответствия "Заголовок" - "Значение заголовка".
Показать
10. Intercititude 05.03.20 13:30 Сейчас в теме
(9) HTTP_Connect = Новый HTTPСоединение(Сервер,,Логин,Пароль,Истина);

Когда попадает на эту строку, то 1с предприятие завершается с ошибкой.
11. Intercititude 05.03.20 13:38 Сейчас в теме
(10)Убрал Истина в конструкторе. Отработало.
12. Intercititude 05.03.20 14:07 Сейчас в теме
(9)обратиться к конкретной ссылке с помощью Get получилось. Но как дальше обрабатывать полученную информацию ?
13. uno-c 235 05.03.20 14:11 Сейчас в теме
(12)Вам вообще с какого сайта информация нужна, какой URL из браузера? Обрабатывать - если это обычная HTML страница - то нужно или парсить сам текст html, или преобразовывать в DOM и там по узлам выбирать то, что нужно.
14. uno-c 235 05.03.20 14:14 Сейчас в теме
(12)Если же это API, который выдает XML или JSON - то соответственно нужно делать обработку XML или JSON преобразовать в структуру/соответствие - и дальше выбирать данные, которые необходимы для дальнейшей работы.
15. Intercititude 05.03.20 14:24 Сейчас в теме
(14) Вообще пытаюсь считать данные с сайта https://edi.kontur.ru/.

	имяВыходногоФайла = ПолучитьимяВременногоФайла();
	
	HTTP_Connect.Получить("ссылкасервера",имяВыходногоФайла);
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(имяВыходногоФайла);
	
	Пока ЧтениеXML.Прочитать() Цикл
		// чтение ответа в виде XML файла
		
	КонецЦикла;
	
	ЧтениеXML.Закрыть();
	
	// удаляем файл после использования
	УдалитьФайлы(имяВыходногоФайла);   	
Показать


На строке ЧтениеXML.Прочитать выдаёт ошибку :
Ошибка разбора XML: - [6,8]
Фатальная ошибка:
Opening and ending tag mismatch: hr line 0 and body


Пытался почистить кэш,но дело явно не в этом.
33. mushdaj 06.03.20 08:19 Сейчас в теме
(15) а что не хотите взять родную обработку от контура? есть смысл изобретать велосипед?
35. Intercititude 06.03.20 08:47 Сейчас в теме
(33)в их обработке нету данных которые мне нужны,отсюда и велосипед
36. mushdaj 06.03.20 08:50 Сейчас в теме
(35) а что именно пытаетесь реализовать, просто много работал с контур edi может что похожее делал - подскажу чего...
37. Intercititude 06.03.20 09:24 Сейчас в теме
(36) Нужен отчёт. В котором будут видны исходные данные заказов партнёров. А именно Наименование номенклатуры,кол-во,штрихкод. Для сравнения с текущими заказами. Ибо количество запрошенное и подтверждённое может отличаться.

Если делали, отдам Вам все свои мани ;-)
16. Intercititude 05.03.20 15:00 Сейчас в теме
(14) При использовании GET получаю следующее в папке Temp:

<ht ml>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>


Данные хранятся здесь: h htps ://edi. kontur .ru/
17. antz 05.03.20 16:25 Сейчас в теме
(16) В ответе русским по белому 301 ошибка.
18. Intercititude 05.03.20 16:26 Сейчас в теме
(17) Да. Я в курсе. Но не пойму что не так. Ссылки сто раз перепроверил уже.
19. antz 05.03.20 16:27 Сейчас в теме
(18) А если залогиниться и в браузере перейти по ссылке - ответ нормальный выдает?
20. Intercititude 05.03.20 16:30 Сейчас в теме
(19) Ну к примеру Сервер у меня : yandex.ru
Хочу доступ к yandex.ru/money

делаю HTTP_Connect = Новый HTTPСоединение(yandex.ru,,Логин,Пароль,);

ИмяФайлаОтвета = ПолучитьимяВременногоФайла();

HTTP_Connect.Получить("/money",ИмяФайлаОтвета);

в имя файла попадает ошибка 301.

Вы говорите залогиниться и ввести yandex.ru/money ? Если так, то да открывает корректно.
21. antz 05.03.20 16:44 Сейчас в теме
(20) В запросе первый слэш попробуйте убрать.
22. Intercititude 05.03.20 16:46 Сейчас в теме
(21) Уже как только не пытался. Без изменении.
Я так полагаю, что дело в самом сервере. Не так просто подключиться к ним из 1с.
23. antz 05.03.20 16:51 Сейчас в теме
(22) Там get или post запрос нужен? HTTP_Connect.ОтправитьДляОбработки тоже не работает?
24. Intercititude 05.03.20 16:54 Сейчас в теме
(23) Ну мне явно Get нужен. Я же получаю оттуда данные. Post не пробывал.
25. uno-c 235 05.03.20 17:12 Сейчас в теме
(16)Это потому что он Вас на https переправляет. Если сделаете ХТТПОтвет = ХТТПСоединение.Получить("") - то в ХТТПОтвет.Заголовки увидите, что идет редирект на https://
26. Intercititude 05.03.20 17:20 Сейчас в теме
(25) И как мне быть,извиняюсь за глупый вопрос ?
27. antz 05.03.20 17:20 Сейчас в теме
28. Intercititude 05.03.20 17:44 Сейчас в теме
(27) Конкретно с помощью WinHttpRequest делать ?
30. uno-c 235 05.03.20 17:50 Сейчас в теме
(28)Вот из какого-то пыльного сундука )
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Предложения.Очистить();
	Путь = КаталогВременныхФайлов()+"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
КонецПроцедуры
Показать
Intercititude; +1 Ответить
29. uno-c 235 05.03.20 17:45 Сейчас в теме +0.18 $m
(26)Либо добивать SSL на 1С, по образу https://its.1c.ru/db/metod8dev#content:5938:hdoc
либо не морочиться и через WinHttp
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
либо перестать эту древнюю платформу использовать, новые отлично с HTTP справляются.
31. Intercititude 05.03.20 17:51 Сейчас в теме
(29) Да я уж понял, что на 8.3 это уже встроено. Но слишком нетиповая 8.2,чтобы так просто перейти на 8.3 к сожалению..

Ладно,спасибо Вам. Завтра буду пытаться через WinHttpRequest
32. mushdaj 06.03.20 08:17 Сейчас в теме
(31) а причем здесь типовая - не типовая нужно же просто платформу обновить а не конфу, конечно возможно какие то небольшие глюки словите, но в целом много уже УТ, УПП на 8.3 нормально работают
34. mushdaj 06.03.20 08:21 Сейчас в теме
(31) а... наверное потому что она на 8.2 вряд ли работает... тогда логично в принципе
38. mushdaj 06.03.20 09:36 Сейчас в теме
нет, такого не делал, эти данные сравнивали через саму платформу EDI.

Но если вы стандартным модулем от контур пользуетесь, то все данные у вас должны быть в самой 1С, туда ведь грузится в том числе и исходный ORDER сравниваете его просто с документом заказ и выводите отчет
39. Intercititude 06.03.20 09:42 Сейчас в теме
(38) Три дня анализировал,это не так. В итоге пообщавшись со специалистом из контура выяснилось, что данные только в веб-интерфейса хранятся и только там.
42. mushdaj 06.03.20 11:27 Сейчас в теме
(39) это очень странно, почти на 100% уверен что исходный ORDER также хранится в базе, как будет возможность посмотрю где конкретно - отпишусь
44. Intercititude 06.03.20 11:29 Сейчас в теме
(42) Там уже согласованные и подтверждённые хранятся только. Если вы найдете, все мои труды будут напрасны )
46. mushdaj 06.03.20 11:39 Сейчас в теме
(44) согласованные и подтвержденные загружаются в документ заказ покупателя. У вас есть обработка контур.edi? Можете ради интереса отключить интернет и попробовать открыть через их обработку любой исходный заказ, который уже был прогружен, он откроется. Ну и вообще весь алгоритм у них уже написан по получению ORDER, зачем вообще свое городить, возьмите у них все процедуры. Только я здесь говорю именно про модуль контур а не про коннектор
47. Intercititude 06.03.20 11:41 Сейчас в теме
(46) Ну выходит они меня обманули ?)
Вообще мне же нужны все исходные заказы за прошлый период. Вряд ли изначальные данные партнёров при создании заказа,хранятся в 1с.

И да. Есть обработка Kontur.Edi.
40. Intercititude 06.03.20 10:08 Сейчас в теме
(38) В итоге вот так:
	WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest
	
	
	WinHttp.Open("GET",Сервер,0);
	WinHttp.SetCredentials(Логин,Пароль,1);
	
	WinHttp.send();
	
	Если WinHttp.Status = 200 Тогда
		Сообщить ( WinHttp.ResponseText);
Показать


В ResponseText попадает здоровенный Html текст.
Мне с ним же и работать? Где можно подглядеть как тянуть данные из него и переходить по ссылкам программно?
41. Intercititude 06.03.20 10:26 Сейчас в теме
(40) Как оказалось это текст страницы "Вход в систему" Тоесть логин и пароль в SetCredentials не отрабатывают..
43. antz 06.03.20 11:27 Сейчас в теме
(41) Не факт. GetAllResponseHeaders() что возвращает?
45. Intercititude 06.03.20 11:33 Сейчас в теме
(43)
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Date: Fri, 06 Mar 2020 08:31:24 GMT
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Expires: 0
Set-Cookie: Sticky=3ab1dc55-0c94-49fd-b8f3-6e0cb5ed554e; domain=auth.kontur.ru; path=/; samesite=lax; httponly
Set-Cookie: AntiForgery=35456541-c725-474c-a105-6daab6473bab; path=/
Set-Cookie: ngtoken=LhHL+l5iClyJOV+VAwcOAg==; expires=Thu, 01-Dec-22 08:31:24 GMT; domain=.kontur.ru; path=/
X-Singular-Replica: http://sd2-singular11/
X-Kontur-Trace-Id: 33e9d52ecf2c488889dc9cedc9514053
Context-Globals: FwAAAHZvc3Rvay5yZXF1ZXN0LnByaW9yaXR5CAAAAE9yZGluYXJ5FgAAAHZv­c3Rvay50cmFjaW5nLmNvbnRleHRJAAAAMzNlOWQ1MmUtY2YyYy00ODg4LTg5­ZGMtOWNlZGM5NTE0MDUzO2NiMmJlZWZmLTM1YTItNGVkMy1hZGVkLWNhYWVk­YTI5NzU3MQ==
X-Kontur-Dont-Retry: True
Dont-Retry: True
X-Singular-Backend: http://bst-auth-hst1:15638/


Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот