На одном проекте - клиент попросил отображать в программе данные, которые выдаю специализированные сайта в формате RSS - Что делать !?
Писать парсер rss для 1С
Первым делом, взглянув на ссылки, подумал что - обычный XML, сейчас его разложу и быстренько загружу в базу, но:
Выяснилось что сайты имеют разные форматы ввода RSS и главное они не валидные(
таким образом, написав небольшой код, который получает ссылку, далее XMLФайл.Прочитать() на одном сайте проходил на ура (этот пример я описывал в статье: Чтение данных с сайта в формате XML и загрузка в 1С), а вот второй сайт, и третий тоже, при попытке прочитать() выдавали:
{ОбщийМодуль.РегЗадания.Модуль(79)}: Ошибка при вызове метода контекста (Прочитать)
Пока XMLФайл.Прочитать() Цикл
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка:
Extra content at the end of the document
SystemId url rss
решил попробовать на rss других известных сайтов - 80% из проверяемых выдавали ошибку
Пришлось написать прямой построчный парсер RSS:
Структура конфигурации
ИсточникиRSS - URL на RSS, ДанныеRSS - сюда записываются загруженные данные новостей
Код получился таким(в принципе код универсальный, но возможно что-то придется подпилить):
Недавно, мой постоянный клиент решил проводить маркетинговые исследования по изменению цен на товары у конкурентов... и эти данные захотел использовать в 1С в связке с его прайс-листом + куча отчетов с графиками и процентным отклонением от цен основного конкурента
В результате этого, была написана обработка собирающая данные со страниц разных сайтов. Из целей конфиденциальности - сайты раскрывать не буду...
Вид обработки загрузки данных с сайта в 1С
Ниже код загрузки данных со страницы сайта, смысл такой :
в функция передается адрес страницы сайта
полученный текст страницы обрабатывается, удаляются теги
из полученного текста формируется ТЗ с данными
По названию ищется поставщик из вспомогательного справочника Справочники.Pr_Поставщики.НайтиПоНаименованию(, если нет - создается
на выходе ТЗ с данными
В коде используется вспомогательная функция ПолучитьМассивИзСтрокиСРазделителем
Конечно, перед тем как мы начали это делать - прошерстили интернет и нашли несколько решений , вот они:
В этой статье я постараюсь описать процесс парсинга сайтов средствами 1С с примером.
Это статья не является инструкцией к применению, а лишь демонстрирует возможности 1С.
Что мы имеем? 1. Сайт в интернете, на котором располагается список товаров. В моем случае – это интернет магазин салона «Связной»
2. Понимание основ сайтостроения… хотя бы знание HTML тегов
3. Умение кодить в 1С 8
Для начала парсинга стоит определиться с тем что мы хотим спарсить и какая у нас будет иерархия. В моем случае это категория сотовых телефонов. Верхний уровень иерархии будет производители. Почему именно так? Потомы что я так захотел. Вы же вправе использовать любую иерархию.
Далее нам будут интересны такие поля как: Наименование, Цена, Картинка и Описание... ну и пожалую захватим операционную систему, чтобы пример получился более наглядным.
1. Создаем внешнюю обработку. Те, кто не знают как это сделать - дальше могут не читать
2. Создаем форму обработки с командной панелью снизу и сверху (они могут быть полезными)
3. Размещаем на ней Панель и обзываем первую страницу "СамСайт"
4. Кладем на страницу "СамСайт" ПолеHTMLДокумента и обзываем его к примеру "Сайт"
5. Переименовываем кнопку "Выполнить", которая находится на нижней панели в "Загрузить сайт"
6. Описываем процедуру нажатия на эту кнопку так:
7. Проверяем работу нашей обработки. У меня появился сайт связного. А у Вас?
Дальше сложнее. Все еще хочешь парсить сайты? Тогда читай:
Сам парсинг сайта заключается в обходе всех элементов загруженной страницы, выдергивания необходимой информации и запихивания их в табличную часть. Для этого:
1. Создадим табличную часть "Производители" с реквизитами "Отметка" (Булево), "Наименование" (Строка 100) и "Ссылка" (Строка 300).
2. Добавляем еще одну страницу на панели и обзываем ее "Производители"
3. Размещаем на этой странице одноименную табличную часть
4. Добавляем на нижней панели кнопку "Заполнить производителей" с кодом:
Здесь напрашиваются небольшие пояснения:
tagName - имя HTML тега в HTML документе
nextSubling - следующий элемент HTML документа от текущего
children - список дочерних элементов
firstChild - первый дочерний элемент от текущего
5. Проверям. При проверке важно, находиться на странице "СамСайт", чтобы заполнять производителей
Производители заполнены. Теперь к самим телефонам
1. Создаем табличную часть "Товары" с реквизитами "Производитель" (Строка 100), "Наименование" (Строка 100), "Цена" (Число 10,2), "Картинка" (Строка 300), "Описание" (Строка Неограниченная), "ОС" (строка 100), "Ссылка" (Строка,300)
2. Добавляем еще одну страницу на панели и обзываем ее "Товары"
3. Размещаем на этой странице одноименную табличную часть
4. Добавляем на нижней панели кнопку "Заполнить товары" с кодом:
5. Создаем форму обработки "ФормаТоваров"
6. Кладем на "ФормаТоваров" ПолеHTMLДокумента и называем его "Сайт"
7. На событие ДкументСформирован у ПоляHTMLДокумента пишем код:
8. Создаем переменную в модуле формы
перем ТекущийПроизводитель Экспорт;
9. Создаем процедуру ГрузимТовары():
10. Проверям. Все работает.
Дело осталось за "операционной системой" и еще надо загрузить картинки. Давайте по порядку. Чтобы получить "ОС" нам надо открыть этот товар и считать "ОС" оттуда. Для этого делаем следующее:
1. Добавляем на нижней панели кнопку "Доп Инфо" с кодом:
2. Создаем форму обработки "ФормаДопИнфо"
3. Кладем на "ФормаДопИнфо" ПолеHTMLДокумента и называем его "Сайт"
4. На событие ДкументСформирован у ПоляHTMLДокумента пишем код:
5. Создаем переменную в модуле формы
перем ТекущийТовар Экспорт;
6. Создаем процедуру ГрузимДопИнфо():
7. Проверяем и переходим к последнему пункту
Заметили как похожи две последние инструкции? То-то же. Стремился к универсальности. Ну и наконец последний этап - Сохраним все изображения к примеру на диск "С" в папку "связной". Поехали
1. Добавляем на нижней панели кнопку "Сохранить Картинки" с кодом:
2. Добавляем функцию СохранитьКартинкуСайта:
На этом наша эпопея с парсингом закончена. Это всего лишь пример того, как это можно сделать. Приложив сюда немного своего кода - можно сделать парсер для любого сайта. Скачивать файлы может только зарегистрированный пользователь! Имея парсер 1С - я могу спарсить все, кроме этого парсера. Имя два парсера 1С - я могу спарсить все
Автор: opx
Код для получения новостей с сайта buh.ru, используется RSS-канал http://www.buh.ru/rss/rss-2.0.jsp
Данный код для 7.7, при использовании в 8-ой версии нужно заменить СоздатьОбъект( на Новый COMОбъект(, остальное вроде так же.
Технологический Журнал (далее ТЖ) позволяет протоколировать все события 1С:Предприятия (или часть, используя фильтр).
ТЖ настраивается с помощью файла logcfg.xml в папку программы C:\Program Files\1cv81\bin\conf, пример структуры файла (включить запись событий DBMSSQL):
1. Для успешного создания логов, нужно создать каталоги для логов (например C:\Program Files\1cv81\bin\logs) и дапмов (например C:\Program Files\1cv81\bin\dumps),
где в случае аварийного завершения ТЖ создаст дамп памяти и копию экрана для передачи разработчикам.
Важно иметь в виду, что в каталог ТЖ при некоторых его настройках могут выводится данные очень большого объема. Поэтому, либо на диске С: должно быть достаточно места, либо каталог ТЖ необходимо изменить.
Для работы ТЖ необходимо, чтобы пользователи, от имени которых запускаются приложения 1С:Предприятия (как клиентские, так и серверные), имели полные права на каталог ТЖ (C:\Program FiIes\1cv81\bin\logs), и право на чтение выше лежащего каталога (C:\Program Files\lcv81).
Примечание. Если все равно не пишется ТЖ, то дать права всем на эту папку (временно, чтобы убедиться что дела в правах).
В каталоге технологического журнала не должно быть посторонних файлов. Каталог, в котором имеются посторонние файлы не позволит создавать журнал (логи).
Место хранения dumps и logs не хранить вместе, потому что через указанный интервал (по умолчанию 1 час) содержимое польностью перетирается и вы потеряете дампы
2. ТЖ лучше настраивать (с помощью фильтров - тэгов logcfg.xml) только на исследуемые события, остальное не собирать, иначе словите "отсутствие места на диске" и тормоза в быстродействии сервера.
Легче выполнять настройку фильтров с помощью обработки с ИТС НастройкаТехнологическогоЖурнала.epf, но при этом помнить, что новые фичи последних релизов в обратке могут отстутствавать (каждая новая версия добавляет новые возможности, в обработки они не отражены). В этом случаи корректировать файл logcfg.xml руками.
Структура конфигурационного файла
Корневым элементом конфигурационного файла является элемент < config>, который определяет настройки ТЖ. он может содержать несколько элементов < log> и один < dump>
< log> определяет каталог ТЖ:
history = количество часов, через которое инфа будет удалятся из ТЖ.
location = Каталог в котором сохраняются логи
Элемент < dump> определяет каталог в который будут записываться дампы аварийного завершения
< event> - этим элементом определяется условие, при выполнении которого событие будет записано в ТЖ. Условия записываются элементами:
eq = равно
ne = не равно
gt = больше
ge = больше или равно
lt = меньше
le = меньше или равно
like = соответсвие маске
property - атрибут задает название события
value - атрибут задает значение события, ниже пример в котором в ТЖ будут регистрироваться события относящиеся к группе с именем "dbmssql"
Доступны следующие имена групп, с выходом новых версий платформы возможны добавления новых групп:
PROC - события, относящиеся к процессу целиком и влияющие на дальнейшую работоспособность процесса(старт, завершение, аварийное завершение и т.д.);
SCOM - события создания или удаления серверного контекста, обычно связанного с информационной базой;
ЕХСР - исключительные ситуации приложений системы Предприятие 8.1, которые штатно не обрабатываются и могут послужить причиной аварийного завершения серверного процесса или подсоединенного к нему клиентского процесса;
EXCPCNTX - события, которые начались, но не закончились в момент возникновения нештатной ситуации;
SDBL - события, связанные с исполнением запросов к модели базы данных системы 1С:Предприятие 8.1;
QERR - события, связанные с обнаружением ошибок компиляции запроса или ограничения на уровне записей и полей базы данных.
PERR - события, связанные с обнаружением ошибок работы с настройками пользователя;
CONN - установка или разрыв клиентского соединения с сервером;
ADMIN - управляющие воздействия администратора кластера серверов;
DBV8DBErg - исполнение операторов SQL файловой СУБД;
DBMSSQL - исполнение операторов SQL СУБД Microsoft SQL Server;
DBPOSTGRS - исполнение операторов SQL СУБД PostgreSQL;
DB2 - исполнение операторов SQL СУБД DB2,
CALL - удаленный вызов.
TLOCK - управление транзакционными блокировками в управляемом режиме.
Следует заметить, что на клиентском компьютере могут возникать только те события, которые отсносятся к группам PROC, ЕХСР, SDBL Также на клиентском компьютере могут возникать события из группы DBVBDBEng, если используется файловый вариант работы системы 1С:Предприятие 8.1.
Также следует заметить, что события из групп PROC, SCOW, ЕХСP, CONN и ADMIN возникают относительно и содержат малое количестово информации, в то время как регистрация событий из групп SDBL, DBVPCBE v и DBMSSQL может привозить к значительному росту ТЖ.
3. Чтобы логи перестали собираться достаточно переименовать файл, перезапускать сервер не надо, настройки пересчитываются каждую минуту "на лету"
7. Понятно, что собрать логи мало, их еще нужно обработать для решения конкретной задачи.
Файлы ТЖ могут быть просмотрены с помощью любого текстового редактора, но через блокнот ТЖ сложно читаем, так как:
- Требует хорошего понимания архитектуры работы системы
- Тексты запросов регистрируются на внутреннем языке 1С:Предприятия и на языке DBMS
Файлы технологического журнала хранятся в подкаталогах. Имя каждого подкаталога технологического журнала одного процесса будет иметь вид: < ИмяПроцесса>_< ИдентификаторПроцесса>, например: rphost_4076. Имя файла журнала задается шаблоном ГГММДДЧЧ.log. Например, в журнале 07051819.log имя файла образовано от 2007 мая 18, 19 часов)
Журнал для анализа можно выгрузить в эксель, используя разделителем запятую например
1С:ЦУП использует для своих аналитических показалей логи технологического журнала. При использовании ЦУП другие данные собираться не должны, удалите logcfg.xml вручную, ЦУП сам создаст файл с нужными настройками.
Других парсеров логов от 1С нет, есть ObrabotkaTehnologiceskogoGurnala.epf
8. Возможные ошибки и доп. информация:
- ищем логи в каталоге на сервере хотя для 64 разрядного сервера другой каталог программы
- отследить не завершившийся запрос; событие технологического журнала DBMSSQL выводится только в момент окончания выполнения запроса. Если запрос долго не может выполниться, то его выполнение можно прервать, после чего будут выведены в технологический журнал связанные с ним события.