К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Расширение поля формы для поля HTML-документа (Form extension for a HTML document field)

Гость
0 - 30.11.2018 - 13:14
Здравствуйте! Давно я здесь не появлялся однако ... :)
Прошу помощь зала!
Есть две версии решения одной и той же задачи
1)
&НаСервере
Функция ПолучитьАртикул()
Возврат СокрЛП(ЭтотОбъект.СсылкаНаОбъект.Артикул);
КонецФункции

&НаКлиенте
Процедура Расш1_Команда1После(Команда)

url="http://jdparts.sovintel.ru/#T=parts&MKTPT="+ПолучитьАртикул();

htmlDoc=ПолучитьHtmlDoc(url);
Сообщить(htmlDoc);



КонецПроцедуры

&НаКлиенте
Функция ПолучитьHtmlDoc(url)
Перем tRows,K;
//Если НЕ ПривилегированныйРежим() Тогда
//УстановитьПривилегированныйРежим(Истина);
//КонецЕсли;
Попытка
appIE = Новый COMОбъект("InternetExplorer.Application");
appIE.Visible = Ложь; // не отображаем его (браузер) на экране

// загружаем страницу из интернета
appIE.Navigate(url);
i=0;
// ждем пока загрузится страница по url
Пока appIE.readyState < 4 цикл
КонецЦикла;
// получаем html-страницу как DOM (объектная модель документа)
htmlDoc=appIE.Document;
Для К=0 По 500000 Цикл
КонецЦикла;
tRows = htmlDoc.getElementsByTagName("tr");
Для К=0 По 500000 Цикл
КонецЦикла;
Для K=0 По tRows.length - 1 Цикл
row = tRows.item(K);
Если row.cells.item(0).innerText="Рекомендуемая Цена (без НДС):" Тогда
htmlDoc = row.cells.item(1).innerText;
КонецЕсли;
КонецЦикла;
Исключение
Сообщить("Ошибка создания документа html");
КонецПопытки;
appIE.Quit();
appIE="";
//Если ПривилегированныйРежим() Тогда
//УстановитьПривилегированныйРежим(Ложь);
//КонецЕсли;

Возврат htmlDoc;

КонецФункции

Этот код в принципе рабочий. Но чтобы обеспечить кроссплатформенность, решил не заморачиваться на COM и реализовать штатными средствами. Написал вот такое

&НаСервере
Функция ПолучитьАртикул()
Возврат СокрЛП(ЭтотОбъект.СсылкаНаОбъект.Артикул);
КонецФункции

&НаКлиенте
Процедура Расш1_Команда1После(Команда)

АдресСайта="http://jdparts.sovintel.ru/#T=parts&MKTPT="+ПолучитьАртикул();
Элементы.HTML.Заголовок = АдресСайта;
КонецПроцедуры


&НаКлиенте
Процедура Расш1_HTMLДокументСформированВместо(Элемент)
Документ = ЭтаФорма.Элементы.HTML.Документ;
Если Документ.URLUnencoded = "about:blank" Тогда
Возврат;
КонецЕсли;
СтрокиДокумента = Документ.getElementsByTagName("tr");
Для К=0 По СтрокиДокумента.length-1 Цикл
Строка = СтрокиДокумента.item(К);
Если Строка.cells.item(0).innerText="Рекомендуемая Цена (без НДС):" Тогда
Цена_Совинтел = Строка.cells.item(1).innerText;
Сообщить("Рекомендуемая Цена (без НДС):"+Цена_Совинтел);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

В общем, не взлетело! Вопрос почему? В документации на рсширение поля написано что реквизит Документ вернет ВнешнийОбъект. Так и получилось, в отладчике видно. Но метод getElementsByTagName("tr") возвращает пустую коллекцию. Что я делаю не так? :)



Гость
1 - 30.11.2018 - 13:16
Да, поле отображает содержимое страницы корректно


К списку вопросов






Copyright ©, Все права защищены