Иногда появляется необходимость отобразить какую-либо веб-страницу прямо на форме. Я рассмотрю эту возможность платформы 1С на примере вывода на форму страницы с поисковой системой yandex, причем с результатами поиска по слову, введённому в поле формы.
Т.е. вот этой страницы:
Рисунок 1
Для начала создадим внешнюю обработку, добавим реквизит «Адрес « с типом «Строка», неограниченной длины.
Рисунок 2
Создадим форму обработки. Реквизит «Адрес» перенесем на форму дважды. Один из элементов формы реквизита переименуем в «Страница», изменим Вид элемента на «Поле HTML документа».
Форма примет вид:
Рисунок 3
Запустим обработку в режиме «Предприятие» и введем адрес произвольного интернет ресурса. И получим результат:
Рисунок 4
Как же сделать так, чтобы в поле «Страница» выводилась страница Яндекса, но уже с результатами поиска по какому-нибудь слову?
Добавим реквизит формы: «КлючевоеСлово», перенесем на форму.
Если приглядеться к адресу, который появляется в адресной строке Яндекса после осуществления поиска по ключевому слову «1С» (а будет он таким: «http://yandex.ru/yandsearch?text=1%D1%81»), то можно увидеть, что введенное слово шифруется и передается в post-переменной text. Отсюда делаем вывод, что осталось лишь разобраться в том, как получить шифрованное значение запроса.
Если немного покопаться, то можно узнать, что для кодирования переменных в URL’ах можно использовать java-script функцию «encodeURIComponent». Можно, конечно, перебором подобрать код для каждого символа алфавита и самому написать кодировщик, а можно использовать возможности компоненты wscript, которую можно подключить из 1С.
Итак, что нам нужно:
А) Подключить wscript
Б) На основании ключевого слова собрать скрипт, который будет получать значение, возвращенное функцией «encodeURIComponent» при передаче в неё в качестве параметра нашего слова, а затем полученный результат будет записывать в текстовый файл с определенным заранее каталогом
В) Из 1С получать текстовый файл, созданный при помощи wscript и читать его.
Если говорить на встроенном языке, то звучит это так:
&НаКлиенте Процедура КлючевоеСловоПриИзменении(Элемент) Объект.Адрес = "http://yandex.ru/yandsearch?text=" + КонвертироватьКлючевоеСлово(); КонецПроцедуры &НаКлиенте Функция КонвертироватьКлючевоеСлово() ИмяФайлаВрем = ПолучитьИмяВременногоФайла("js"); КаталогСохранения = СтрЗаменить(КаталогВременныхФайлов(), "\", "/"); КаталогСохранения = СтрЗаменить(КаталогСохранения, "C:/", "C://"); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.УстановитьТекст ("value = encodeURIComponent(""" + КлючевоеСлово + """); |FSO = WScript.CreateObject(""Scripting.FileSystemObject""); |f = FSO.CreateTextFile(""" + КаталогСохранения + "test.txt" + """, true); |f.WriteLine(value); |f.Close();"); ТекстовыйДокумент.Записать(ИмяФайлаВрем,КодировкаТекста.ANSI); WshShell = Новый COMОбъект("WScript.Shell"); WshShell.Run("wscript.exe """+ИмяФайлаВрем+"""",0,-1); УдалитьФайлы(ИмяФайлаВрем); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(КаталогВременныхФайлов() + "test.txt"); Строка = ТекстовыйДокумент.ПолучитьТекст(); Возврат СокрЛП(Строка); КонецФункции
В итоге получим:
Рисунок 5