Получить xml с сайта в 1с
В этой статье будет рассмотрена запись и чтение в(из) XML объектов базы данных 1С 8 (справочники, документы и т.д.) с помощью таких объектов как ЗаписьXML и ЧтениеXML.
Точнее хочется показать насколько элементарно это делается. В документации можно встретить информацию о том, что эти объекты предназначены для последовательного чтения и записи XML. И у тех кто никогда с этим не сталкивался может возникнуть впечатление, что для того чтобы записать или прочитать элемент справочника или документ, необходимо построчно обходить файл XML и по отдельности считывать каждый реквизит. Но к счастью все гораздо проще.
Рассмотрим это на примере справочника «Валюты», т.к. он встречается практически в любой конфигурации. Для начала запишем элемент справочника в файл XML. Делается это буквально парой строк:
В результате получим xml файл примерно такого содержания:
А теперь прочитаем файл и запишем прочитанный объект в справочник:
Как видно все элементарно просто.
А теперь зададимся вопросом, а нельзя ли проделать эти же вещи не используя файл. Ведь по сути файл xml имеет текстовое содержимое и было бы логично, если бы это содержимое можно было записать в переменную строкового типа. Например, в ситуации, когда идет обмен между базами через COM соединение или веб-сервис, гораздо удобней передать строку в параметре, чем прописывать в каждой из баз путь к файлу, тем более, что со временем место хранения файла может переехать.
И это тоже можно сделать с легкостью при помощи метода УстановитьСтроку(). И тогда строчка кода ЗаписьХМЛ.Закрыть() вместо того чтобы записать файл вернет нам строку содержащую xml. Для начала создадим процедуру которая будет записывать элемент справочника из строки, которая будет передаваться ей в параметре:
А теперь сохраним элемент справочника в строку xml и используя только что созданную процедуру перезапишем его:
В заключение хочется сказать, что все вышесказанное применимо не только к справочникам, но и к другим объектам базы данных, которые могут сериализоваться (преобразовываться к формату xml). В том числе и для набора записей регистра сведений.
Тестовая обработка
Код для записи и чтения строки XML остался практически таким же, как приведен выше. Внешне она выглядит следующим образом:
Можно выбрать любой элемент справочника и по кнопке «Записать элемент справочника в XML» сформировать для него строку XML, которая отобразиться в текстовом поле. Далее можно прямо в текстовом поле отредактировать какой-нибудь реквизит и нажатием кнопки «Прочитать элемент справочника из XML» загрузить изменения обратно в элемент справочника.
Целью статьи является рассказать о том, как организовать передачу через web-сервис XML -данных в формате универсального обмена данными в информационную базу на платформе 1С:Предприятие 8.1 и старше. А также как получить из базы xml- данные. Cтатья может быть полезна для знакомства с web -сервисами. Если уже знакомы с ними, то, думаю, можете почерпнуть для себя новые полезные приемы.
Универсальный обмен данными XML, он же "1С:Конвертация данных" – это технология обмена данными между различными конфигурациями на платформе 1С.
С помощью этой технологии организованы все "типовые" обмены (УТ Бухгалтерия, УТ Розница, ЗУП Бухгалтерия и т.д.). А также можно организовать свои собственные сценарии обмена с нуля между любыми конфигурациями на платформах 1С (начиная с 7.7). Обучение технологии «1С:Конвертации данных» не является целью данной статьи. Подразумевается, что вы с ней знакомы или познакомитесь из других источников, их предостаточно. Могу порекомендовать материалы на диске ИТС. Или, может быть, вам вообще не нужно с ней знакомиться, а просто автоматизировать саму передачу данных.
Попутно попробую рассказать немного теории. Чтобы «подружить» с web -сервисами тех, кто мало с ними знаком.
Технология «Конвертации данных» предлагает два способа передачи данных: через файлы – в одной базе выгрузили, в другой загрузили, либо через COM -соединение. Оба способа имеют свои недостатки. Для меня, я бы сказал, фатальные. А если серьезно, просто таят в себе существенные неудобства. Расписывать недостатки и убеждать не буду – это отдельная тема. Коротко перечислю достоинства web- сервисов, важные для меня:
- Возможность организовать онлайн-обмен;
- Возможность организовать удаленный онлайн-обмен, т.е. через Интернет;
- База-приемник и база-источник могут работать на разных релизах и даже версиях платформы ( COM -соединение в таких ситуациях использовать проблематично, почти невозможно);
- Очень быстрая установка соединения и очень быстрая передача данных. Правда, «холодный» запуск по времени сравним с COM -соединением.
- Удобно для разработчика, возможность использовать одну и ту же технологию трансфера данных как для обменов 1С 1 C , так и для обменов 1С Другие системы.
Вообще, я «фанат» web -сервисов. Мог бы ещё много рассказать об их отладке, обмене с «чужеродными» средами, в том числе такими проблемными, как PHP (в виду вольного обращения данной платформы со стандартами SOA ). Но это темы для отдельных статей.
Инфраструктура
Вопросы установка и настройка web -сервера, публикации web -сервисов не рассматриваются в данной статье. Подразумевается, что это вы делать умеете или готовы разобраться, или у вас просто есть готовая инфраструктура. Могу порекомендовать документацию к 1С:Предприятию и «погуглить» в Интернете (именно «и», а не «или»).
Реализация. Серверная сторона.
Сервер – это для нас информационная база, которая принимает и отдает данные. Всё делаем на платформе 1С:Предприятие 8.2 (прикладное решение не важно).
Web- сервис
Добавляем web -сервис. Назовем «ОбменДаннымиXML». Свойства следующие:
URI пространства имен в данном случае совершенно не важен, можно указать любую строку. Их принято строить на базе URL , которые использует ваша организация, чтобы гарантировать глобальную уникальность имен типов, описанных в ваших пакетах, на всякий случай. Но мы описывать свои типы (это делается при помощи пакетов XDTO в соответствующей ветке дерева конфигурации) не будем, так как нам достаточно встроенных типов 1 C :Предприятия.
Имя файла публикации может быть любым, но с соблюдением требований к URL . Кириллицу лучше не использовать. Расширение «1 cws » тоже лучше не менять (не пробовал, если честно).
Операции
Добавляем операции web -сервиса. Наш web -сервис должен уметь как принимать данные, записывая в свою ИБ, так и отдавать их (выгружать в XML ). Поэтому добавляем две операции, "ПринятьДанные" и "ОтдатьДанные".
Операция ПринятьДанные
Понятно, что ValueStorage – это ХранилищеЗначения
Функция ПринятьДанные ( Данные , ТекстОшибки )
"ОтдатьДанные" возвращает xml-данные, выгруженные по переданным правилам обмена. Также в виде ХранилищаЗначения.
Это тоже обертка над Универсальным обменом, только уже более функциональная. Обратите внимание , что Массив и Структура – это уже не простые типы, они попадают в метод в виде XDTO -объектов, и их нужно явно преобразовывать в/из типы 1С:Предприятия. Преобразовывать в/из XDTO нужно и на клиентской стороне.
ПравилаВыгрузки - это массив имен правил выгрузки, по которым следует произвести выборку данных.
ЗначенияПараметров – это структура со значениями параметров конвертации.
Обработка УниверсальныйОбменДаннымиXML
Если в вашем прикладном решении такая обработка отсутствует, то её нужно добавить из комплекта поставки конфигурации «Конвертация данных» (файл V8Exchan82.epf ).
Доступ к web -сервису. Роли и пользователи.
Для обращения к веб-сервисам необходимо подготовить роль и пользователя. Самый простой путь – это добавить отдельную роль, назовем ВебСервисы, этой роли не даем никаких прав, кроме прав на операции веб-сервиса, а сами методы выполняем в привилегированном режиме.
Добавляем пользователя
Назначаем ему только нашу роль ВебСервисы и больше никаких других. Этого достаточно.
На серверной стороне настройка закончена.
Клиент (обращение к web-сервису)
Тут просто приведу примеры обращения к веб-сервисам. Откуда берутся правила обмена , правила выгрузки, значения параметров и т.п. – это уже вопрос вашей прикладной задачи и её реализации.
Передача данных в базу-приемник
Пример передачи xml-данных в базу-приемник, на стороне которой работает вышеописанный web-сервис:
Всем привет.Есть такая задача - Распарсить сайт с помощью средств 1С. Посоветовали парсить через xml. но уровень не высок,поэтому пока темный лес. в инете нашел кучу примеров,но:
1.Парсит только какую либо страницу..
2.Написан на обычном приложении(нужно на управляемом)
Помогите кто чем может,на днях перерыл книгу ""руководство разработчика"(толстая такая,2 части)..но ничего не нашел. где искать?, куда рыть?
Заранее спасибо
Парсер сайта через 1с
Всем привет! Делаю парсер сайтов под 1с 8.2 Загружаю страницу с кнопку на ПолеHTMLДокумента1 .
Как лучше реализовать парсер HTML/XML, CSS, JavaScript?
Пишу свою интегрированную среду разработки для HTML, CSS и JavaScript. Считаю необходимым.
Запись XML-дерева сразу в xml-файл (парсер JAXP)
Народ!Программеры!Помогите человеку,плиз! Парсерю я xml-файл,через DOM-модель,использую JAXP.После.
Возможность вызова функции через XML-RPC из HTML/JavaScript
Здравсвуйте, Вопрос: Возможен ли вызов функции через XML-RPC из HTML/JavaScript. Подробнее.
Live4Sky, я бы вам не рекомендовал разбираться с парсингом сайтов, сначала разберитесь с обычными и управляемыми формами, если для вас проблема перевести форму из одного вида в другой.
Не по теме:
Live4Sky, я бы вам не рекомендовал разбираться с парсингом сайтов, сначала разберитесь с обычными и управляемыми формами, если для вас проблема перевести форму из одного вида в другой.
хм. лучше бы посоветовали как html в xml запихнуть..и с формами у меня не особо проблемы..просто это задание,кто то его дал и сказал написать вот именно так..одно дело для себя,другое "курсовая работа"
Да любой в принципе..суть проекта такова:берется веб - страница,с помощью средств 1С загоняется в xml дальше идет парсинг xml. как только встретил ссылку на другую страницу,переходит по ней,процедура повторяется..(html->xml->parse xml) собственно вот как парить xml,я нашел и вроде как разобрался. а вот как из html xml получить пока не могу понять((
Эммм..но ведь лучше парсить сразу xml..удобнее просто страницу сразу получить в xml формате и от нее плясать или что то я недогоняю(?
- ознакомтесь с задачей и используемой технологией внимателнее. И уже после этого - полюбите ЧтениеHTML
wwall, вот так появляются проекты (Журнал оператора ЕРП и т.д.)
Добавлено через 22 секунды
Live4Sky, думаешь все сайты имеют одинаковую структуру?
Не по теме:
wwall, вот так появляются проекты (Журнал оператора ЕРП и т.д.)
Добавлено через 22 секунды
Live4Sky, думаешь все сайты имеют одинаковую структуру?
думаю,что кое что я упустил в задании. и вот что:парситья будет не любой сайт,сайты с объявлениями типа (avito),и я думаю,что у таких сайтов структура более или менее одинаковая..
Добавлено через 2 минуты
Насчет проблем - с чтением html - на твоем уровне работать работать проще, чем с хмл.
А что касается задачи в целом - открой для нимфосрать. там подобного гуано лежит - многие тонны.
при отладке ошибка.
Предположим что у тебя ломаная версия 1С в которой нет в комлекте синтаксис помощника.
Официальное описание метода от православного СП такое -
ЧтениеHTML (HTMLReader)
ОткрытьФайл (OpenFile)
Синтаксис:
Тип: Строка.
Имя файла, содержащего текст HTML.
(необязательный)
Открывает HTML-файл для чтения данным объектом. Если перед вызовом данного метода уже производилось чтение HTML из другого файла или строки, то чтение прекращается и объект инициализируется для чтения из указанного файла.
Тонкий клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл("c:/docs/data.xml");
Добавлено через 1 минуту
а то что я.ру пропарсить не можешь. может тебе на кошках потренироваться?
Гарантируем стабильный обмен без ошибок между программами 1С. Гарантии фиксируем в договоре.
Одним из самых популярных форматов данных, используемых практически в любой компании, является XML (расширяемый язык разметки). Разработчики 1С создали специальный объект XDTO для удобства своих клиентов и простого взаимодействия с файлами XML, поэтому программисту 1С важно работать с этими объектами платформы, так как обмен данными через XML встречается постоянно.
Преимущества механизма XDTO
Этот функционал создавался как удобный инструмент обмена данными между конфигурациями и другими приложениями. Также этот механизм используют для работы с web-сервисами и для обработки произвольных данных. Большое преимущество XDTO перед другими способами – в нем есть возможность обращаться к файлу XML, как к объекту 1С. То есть все реквизиты можно будет получить, описывая структуру через точку, не задумываясь о скобках, тегах и атрибутах.
Взаимодействие с файлами XML происходит по заранее установленным правилам, описанным в объекте структуры конфигурации – XDTO – пакеты в 1С 8.3. Суть этих элементов структуры в том, что они представляют собой схемы, по которым будут распознаваться данные из XML-файлов. В типовых конфигурациях уже присутствуют подобные объекты, но при работе с конкретными файлами понадобятся другие схемы.
Существует два способа добавить XDTO-пакет в конфигурацию:
-
Собственноручно создать. Этот вариант подойдет при самостоятельной работе с XML определенного формата. Зная, какие данные будут подаваться на вход для импорта с использованием XDTO, можно заранее создать в конфигурации нужный объект. Этот вариант хорош, если обмен данными налажен и никаких изменений не планируется;
Рис.1 XDTO пакеты
Чтобы загрузить данные из присланной нам схемы, необходимо в режиме конфигуратор открыть раздел «Общие» и «XDTO-пакеты». Через контекстное меню выбрать пункт «Импорт XML-схемы…», выбрать файл и подтвердить пространство имен, взятое из файла. После этого необходимо обновить конфигурацию, и предварительные настройки сделаны.
Но на самом деле в последнем случае нам необязательно создавать XDTO-пакеты в конфигурации 1С 8.3. Существует возможность только использовать XSD-схему, присланную нам из отдельного файла, не внося изменения в структуру базы 1С. Для этого нужно воспользоваться кодом, объясняющим платформе 1С, какой тип объекта с какими параметрами будет загружаться.
Это происходит следующими командами:
Экспорт и импорт файла
После того как мы разобрались с принципами использования пакетов XDTO, нужно посмотреть на механику работы с файлами XML. Лучше всего это будет видно на простом примере, чтобы понять основы. Добавим новый элемент в раздел XDTO-пакетов и настроим его следующим образом:
- Заполняем URI-пространство имен в свойствах XDTO пакета. Среди разработчиков 1С принято заполнять этот реквизит адресом страницы, заполненной описанием тех данных, с которыми происходит работа. Это помогает в работе, но не всегда возможно. В иных случаях заполняют произвольным текстом;
- Задаем тип объекта и его свойства, используя контекстное меню. Задаем имя этих параметров и для свойств определяем тип, выбирая его из предложенных платформой.
Рис.2 Параметры пакета
Следующим этапом будет написание процедуры для создания файла XML по описанной выше схеме. Код достаточно прост, поскольку создан XDTO-пакет, а у элемента всего 2 свойства – «Наименование» и «Артикул». Обращаться к конкретной схеме позволяет объект платформы «ФабрикаXDTO». Сама процедура состоит из:
- Определение схемы будущей XML;
- Заполнение свойств номенклатуры;
- Создание нового XML файла.
Чтение XML-файлов с помощью конкретной фабрики XDTO по уже созданному в конфигурации пакету ничуть не сложнее. Алгоритм похож по структуре и отличается только операциями взаимодействия с XML-файлами. В данном случае нам нужно воспользоваться объектом платформы «ЧтениеXML» и прочитать содержимое в переменную. На выходе у нее будет тип «ОбъектXDTO», и вы сможете обращаться ко всем ее свойствам через точку.
Теперь попробуем прочитать файл, схемы которого нет в нашей конфигурации. Для этого экспортируем XDTO-пакет в файл формата xsd и удалим схему из конфигурации. После этого нам придется объяснить платформе, откуда ей брать схему читаемой XML-кодом, продемонстрированным ранее. Однако в простейших случаях 1С самостоятельно может распознать все свойства.
Рис.3 Экспорт XDTO-пакета
Лучше все-таки не рассчитывать на понятливость платформы 1С, а использовать точную схему XML. Многие специалисты используют сторонний софт для их создания, но для этого необходим достаточно большой опыт и уровень подготовки. Работа с пакетами XDTO требует внимания и соблюдения точного соответствия файлов заданной схеме, чтобы минимизировать возможные ошибки.
Исправление ошибок
Одной из достаточно распространенных ошибок, связанных с работой с XDTO-пакетами, является «Ошибка преобразования данных XDTO». Ее суть заключается в том, что платформа не может разобрать данный ей XML-файл по заданной схеме. При получении подобной ошибки при импорте данных, необходимо проверить формат файлов – возможно, присутствуют незакрытые теги.
Зачастую проблема с ошибками преобразования данных возникает и по другим причинам:
- Ошибки в обновлении платформы или конфигурации;
- Обмен между базами разных версий;
- Недочеты в алгоритме приема данных;
- Проблемы с временной памятью конкретного компьютера.
Рис.4 Ошибка преобразования данных
Рис.5 Ошибка проверки данных
Более сложная для анализа проблема, если при обмене информацией 1С выдает ошибку о несоответствии типов XDTO. В этом случае придется проверять все данные, находить ошибки и их причины. В некоторых случаях ошибки могут быть в коде, иногда – в данных информационной базы. Чтобы это понять, необходимо иметь доступ к базам причастным к обмену и четко понимать всю суть происходящего экспорта и импорта.
Рис.6 Несоответствие типов XDTO
На первый взгляд работа с XDTO достаточно сложна, поэтому на первое время рекомендуется добавлять XDTO-пакеты в 1С для большего порядка и учета. Конечно, все нюансы изучить сразу невозможно, но в процессе работы вы будете продолжать учиться. Но с уверенной теоретической базой намного удобнее начинать разбираться в этом вопросе.
Предположим, что нам надо записать xml файл с описанием нескольких сайтов. Для этих сайтов нам надо записать оценку сайта и его краткое содержание. И соответственно потом нам надо будет этот файл прочитать.
Напомню, что xml файл может состоять из элементов и атрибутов. Соответственно элемент может содержать какой-то текст, атрибуту также можно присвоить строковое значение. Также напоминаю, что у xml файла может быть только один корневой элемент в который вложены все остальные.
ЗаписьXML
Итак начнем шаг за шагом создавать наш файл. Для начала создадим объект ЗаписьXML, создадим заголовок xml файла, и запишем файл.
В результате выполнения этого кода получаем xml файл следующего содержания:
Собственно кроме объявления xml здесь ничего и нет.
Теперь добавим корневой элемент внутрь которого потом сложим все остальные элементы. Назовем этот элемент Сайты
Теперь в промежутке между процедурами ЗаписатьНачалоЭлемента(«Сайты») и ЗаписатьКонецЭлемента() допишем формирование остальных элементов и атрибутов.
Здесь стоит отметить, что атрибуты должны записываться после начала записи элемента и перед записью текста элемента.
И как можно заметить атрибут можно записать двумя способами. Вот итоговый вариант сформированного xml файла:
С записью разобрались. Теперь будем читать, созданный нами файл.
ЧтениеXML
С помощью объекта ЧтениеXML выполняется последовательное чтение узлов xml файла. Каждый прочитанный узел приходиться анализировать, т.к. не все узлы нам нужны (в частности корневой элемент). Также необходимо анализировать тип узла. Это может быть НачалоЭлемента, КонецЭлемента, Атрибут и т.д. Плюс еще атрибутов в отличие от нашего примера может быть несколько. В общем чтение xml процесс немного более запутанный чем его запись. Итак вернемся к нашему примеру. Не буду разбирать его построчно. Привожу сразу весь код целиком:
Читайте также: