1с прочитать html файл
Итак нам надо загрузить html-страницы с сайта. В качестве исходных данных имеем текстовый файл с ссылками на страницы, необходимо загрузить эти страницы в элементы справочника 1с конфигурации. Во время загрузки надо предусмотреть сохранение картинок в конфигурации 1с, а не опираться на их доступность на сайте-источнике.
Пользователю в форме списка справочника доступна кнопка загрузки страниц. По данной кнопке происходит передача текстового файла с ссылками на сервер и отдается управление в общий модуль ОбменССайтомСервер. Каждая строка текстового файла воспринимается как ссылка. Чтение текстового файла можно посмотреть в функции ЗагрузитьОбъектыИзСсылокФайла().
Хочу остановиться подробнее на самом алгоритме загрузки html-страницы. Саму загрузку по ссылке производит функция ЗагрузитьССайта, которая возвращает форматированный документ. Для того чтобы сформировать форматированный документ используется метод УстановитьHTML. Для вызова этого метода нам необходимо наличие текстовой строки, которая содержит HTML и структуру вложений. В структуре вложений ключ структуры это название картинки, а в значении хранится сама картинка.
Код получения форматированного документа:
Конфигурацию, демонстрирующую решение данной задачи можно скачать
html_to_1C.cf (17,0 KiB, 6 233 скачиваний)
Если будут предложения по оптимизации кода обхода html-кода пишите в комментарии.
UPD: Добавлено приведение строки в нижний регистр. При загрузке страницы используется кеш картинок, параметр КешКартинок имеет тип соответствие и дополняется во время разбора ссылки в случае необходимости. Спасибо Александру за дельные советы в комментариях.
1. Забыли учесть то, что теги могут быть написаны как в нижнем регистре, так и в ВЕРХНЕМ (проверки для поиска тэга img и атрибута src).
Александр, спасибо большое за указание на неточности. По первому пункту надо добавить использование ВРег() в условиях.
Кеширование картинок во время скачивания сделать в соответствии так же реально, так как сервер файл отрабатывает за один вызов и не надо будет думать про сохранение переменной на сервере между вызовами клиента.
Спасибо.
Обновил пост. Спасибо.
На своих данных с такой ситуацией не сталкивался. Интересный момент. Спасибо за дополнение
Прошу отнестись с понимаем, раньше писал неплохо, но 3 года вне игры. последнее что видел 8.2.
А в 8.3 я даже полеHTMLдокумента не пойму куда вставить.
Искал по разным форумам, но для 8.3 примеров что-то совсем мало.
В двух словах задача, на HTML странице выкладывают регулярно обновляемые несколько строк текста.
Мне бы их считать и Записать в таблицу значений, я даже считать не могу html.
Вопрос как подключится по вебадресу и считать.
Отпишусь как что-то получится.
А как теперь поле формы называется куда это можно визуально вывести?
Как на форму вставить поле в которое можно ввести html страницу?
В 8.2 это было полеHTMLдокумента. кажется.
Что-то я совсем туплю.
Кладем на страницу "СамСайт" ПолеHTMLДокумента и обзываем его к примеру "Сайт".
Вот как это в 8.3 реализуется?
Ужас, стыдно, но честно не понимаю.
Вот такое написал.
Но в поле Сайт ничего не появляется. Что может быть не так?
7. Проверяем работу нашей обработки. У меня появился сайт связного. А у Вас?
А у меня вот ничего не появляется..
Код теперь вот так вот выглядит. СайтДокументаСформирован() не запускается.
Вот этот синтаксис же не совсем точен? В модуле формы нельзя с таким синтаксисом обратится к "ЭлементыФормы"?
(14) ты реально из Манилы?
в (13) работающий код
Я горе фринлансер, когда-то перешел с 1С на свои проекты по вебмастерингу.
Это нечто. Я первый в жизни себя таким ослом ощущаю.
Сделал все до запятой как в (13).
Обход элементов не начинается.
1С в локале стоит, файловая БД.
Ну что еще может быть не так. Реквизиты те же.
Отладчик выдает вот тут выдает нули
и прощелкай мышью чтобы связать код с обработчиками
Ассоциированы.
ПриОткрытииии срабатывает по отладчкиу да и остальное тоже.
Все таки, как выглядит оператор перехода на сайт.
я скопировал 13-е дословно.
прошел отладчиком все процедуры.
сайт не открывается обход не начинается.
на обходе сразу уходит в конец цикла, визуально сайта тоже нет.
какие ошибки выдаются сейчас?
Ошибок нет, но обхода боди.алл тоже нет, там пусто.
но ошибка не выскакивает.
это вот что отладчик пишет.
(24) у элемента формы "Сайт" в свойствах что написано?
путь к данным?
Вид элемента?
Сайт = "----" явно не указала на это.
Реквизит1 Строка неогр длины
Переименовал, ничего не изменилось.
Я правильно понимаю, что Сайт, это реквизит формы, а не самой внешней обработки?
Ты гений. Спасибо.
(37) Скачай для примера конфигурацию "Управляемое приложение" там есть обработка "Путеводитель"вообще ничего открыть не могу.
пусто.
чувствую не по зубьям задачка, но надо бы как то сделать.
(40) Ты можешь показать страницу, с которой тебе надо выдернуть данные, и сказать, какие именно данные нужно выдернуть?
+(41) Конкретно - это массив из двух элементов, каждый элемент - структура.
(40) выше была ссылка.
(39) разработчик утверждал что тут должен быть ХМЛ вообще-то ). он с 8.3.6? Я что такое Json только слышал )
эта страница результат сводного очень объемного парсинга с 10ка сайтов, на которых вживую идет спортивная статистика.
стоит задача собирать эту инфу и потом анализировать.
Так как я когда-то неплохо знал УПП и писал море отчетов, то взялся это делать.
Но много конечно сложностей.
Вечером когда футбола будет больше там будет до 40 50 строк одновременно.
(44) зачем в 1С это пихать? Напиши на JS. Или еще хуже с ним чем с 1С ?
44, да с ним еще хуже, питон знаю только кроме 1С и тоже слабо.
Я брался задачу по формам отчетов делать.
Запись этой инфы в регистры рассматривал как подзадачу не очееь серьезную и н4 слишком объемную.
Ошибся сильно.
Интересно насколько эта ерунда будет лагать, чтение и запись обновлений раз в 30 секунд.
(54) А зачем ему отображать JSON?
(61) Да помню такой трюк, только на форуме встречал и поломку.Все работает!
какой релиз 8.3.6 постабильней?
199 пишут не очень.
Но задача растет, так как программист который до этого парсил, родил (на ладно ладно, родила) и ей не до того, то надо теперь запарсить вот это.
У нас там живет DIV
onload="loadScript()
Полагаю, твой div находится в документе, размещенном внутри фрейма, поэтому ты его перебором и не находишь.
А. Дублер
Б. По второй ссылке инфы больше.
Распарсить не обязательно средствами 1С, можно чем угодно и писать например в текстовый файл. Ну вы поняли.
Админам. Извините, если предложение мое тут неуместно. Но честно очень надо.
Работа с веб-страницами средствами 1С
Иногда появляется необходимость отобразить какую-либо веб-страницу прямо на форме. Я рассмотрю эту возможность платформы 1С на примере вывода на форму страницы с поисковой системой yandex, причем с результатами поиска по слову, введённому в поле формы.
Т.е. вот этой страницы:
Для начала создадим внешнюю обработку, добавим реквизит «Адрес « с типом «Строка», неограниченной длины.
Форма примет вид:
Запустим обработку в режиме «Предприятие» и введем адрес произвольного интернет ресурса. И получим результат:
Добавим реквизит формы: «КлючевоеСлово», перенесем на форму.
Если немного покопаться, то можно узнать, что для кодирования переменных в URL’ах можно использовать java-script функцию «encodeURIComponent». Можно, конечно, перебором подобрать код для каждого символа алфавита и самому написать кодировщик, а можно использовать возможности компоненты wscript, которую можно подключить из 1С.
Итак, что нам нужно:
А) Подключить wscript
Б) На основании ключевого слова собрать скрипт, который будет получать значение, возвращенное функцией «encodeURIComponent» при передаче в неё в качестве параметра нашего слова, а затем полученный результат будет записывать в текстовый файл с определенным заранее каталогом
В) Из 1С получать текстовый файл, созданный при помощи wscript и читать его.
Читайте также: