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

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

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

И вообще есть такая возможность через обработку ? Или надо использовать xdto пакеты и web сервисы ?!
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
29. uno-c 234 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 234 05.03.20 13:08 Сейчас в теме
(7)Вместо HTTPЗапрос-а раньше использовался просто строковый адрес ресурса. Т.е. было что-то вроде ХТТПСоединение.Получить("/forum9/topic237088/")
Intercititude; +1 Ответить
2. uno-c 234 05.03.20 12:58 Сейчас в теме
В старых версиях платформы с https по-другому работа делалась, может поэтому не выходит через HttpСоединение. Не помню до какой версии, но где-то раньше вместо Новый БезопасноеСоединениеSSL использовалось просто Истина.
5. Intercititude 05.03.20 13:00 Сейчас в теме
(2) Может у Вас есть ссылка ? Не нашёл для моей платформы никаких инструкции..
6. uno-c 234 05.03.20 13:04 Сейчас в теме
(5)Вот цитата из инструкции к 8.2.19.116 - здесь ЗащищенноеСоединение как раз булево, а не Новый ЗащищенноеСоединениеSSL
HTTPСоединение (HTTPConnection)
По указанному серверу
Синтаксис:

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

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

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

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

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

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

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

Тип: Булево.
Определяет используемый протокол - http или https.
Значение по умолчанию: Ложь
Показать
9. uno-c 234 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 234 05.03.20 14:11 Сейчас в теме
(12)Вам вообще с какого сайта информация нужна, какой URL из браузера? Обрабатывать - если это обычная HTML страница - то нужно или парсить сам текст html, или преобразовывать в DOM и там по узлам выбирать то, что нужно.
14. uno-c 234 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 234 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 234 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 234 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/


Показать
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день