Получить xml с сайта в 1с
Обмен данными с конфигурацией через веб-сервисы
Внимание! Данный функционал доступен в "Библиотеке стандартных подсистем", начиная с версии 2.3.1.62.
Для обмена данными через формат EnterpriseData у конфигураций, использующих "Библиотеку стандартных подсистем", есть два веб-сервиса:
- EnterpriseDataUpload – упрощенный вариант для загрузки данных в информационную базу из сторонних приложений. Не требует специальных настроек на стороне конфигурации (кроме развертывания собственно веб-сервиса); однонаправленный обмен данными – ТОЛЬКО импорт данных в информационную базу.
- EnterpriseDataExchange – для двустороннего обмена данными между конфигурацией и сторонним приложением. Для работы с ним необходима настройка обмена данными на стороне конфигурации.
Собственно задача обмена данными включает в себя две подзадачи:
- Составление корректного XML-файла в формате EnterpriseData,
- Вызов веб-методов в правильной последовательности.
Особенности работы методов веб-сервисов
Большинство методов обоих веб-сервисов имеют выходной параметр – строку ErrorMessage. В случае если внутри конфигурации произошла ошибка, связанная с бизнес-логикой – в эту строку будет записана информация об этой ошибке. Если ошибок в процессе работы метода не было – в строку ErrorMessage будет помещена пустая строка. Если же в процессе работы метода возникла системная ошибка (например, на стороне конфигурации не удалось разархивировать полученный архив) – веб-метод сгенерирует исключение (exception).
Большинство методов обоих веб-сервисов возвращают строки, но в текущей версии возвращаемые строки всегда пустые (кроме EnterpriseDataUpload.PutDataActionResult – он возвращает статус обработки данных на стороне конфигурации – “Active”, “Completed” либо “Failed”).
Что нужно для работы
На стороне конфигурации
На стороне конфигурации должны быть развернуты веб-сервисы EnterpriseDataUpload и EnterpriseDataExchange соответствующих версий (в данном случае была использована версия 1.0.1.1). При открытии этих двух URL-адресов в браузере (нужно подставить правильное для вашей инсталляции «1С:Предприятия» имя веб-сервера и публикации):
должны выводиться WSDL-описания сервисов:
- В Solution Explorer в контекстном меню узла References выбрать команду Add Service Reference.
- В нижнем левом углу появившегося диалога нажать кнопку Advanced.
- В нижнем левом углу появившегося диалога нажать кнопку Add Web Reference.
Использовалась среда разработки Eclipse 4.4.2. Для генерации кода по WSDL файлов веб-сервисов применялась утилита wsdl2java из фреймворка Apache CXF 2.7.16.
Простой обмен данными с конфигурациями с помощью формата EnterpriseData
Объект может содержать в себе ссылки на другие объекты (например, документ «Акт выполненных работ» может содержать в себе одну или несколько ссылок на номенклатуру). В этом случае, если мы импортируем данные в информационную базу, все объекты, на которые мы ссылаемся из «родительского» объекта, должны либо уже существовать в системе, либо их описание должно содержаться в том же XML файле.
Если нам необходимо удалить какой-то объект, в коллекцию Body надо добавить элемент типа «УдалениеОбъекта», и в этом элементе сослаться на удаляемый объект (см. описание типа «УдалениеОбъекта» в схеме EnterpriseData_X_Y_Z.xsd).
С помощью формата EnterpriseData нам доступны операции создания, обновления и удаления объектов. На данный момент для корректной загрузки данных в типовые решения все объекты должны содержать заполненный элемент «Ссылка» из элемента «Ключевые свойства» (GUID в форме строки). Это первичный ключ объекта. Конфигурации ведут себя следующим образом:
- Если в системе нет объекта с ключом из поля «Ссылка» - создается новый объект.
- Если в системе уже есть объект с ключом из поля «Ссылка» - существующий объект обновляется новыми данными, пришедшими в XML.
- Если пришел элемент типа «УдалениеОбъекта» - объект с соответствующим ключом удаляется из системы.
Веб-сервис EnterpriseDataUpload
EnterpriseDataUpload – интерфейс исключительно для импорта данных в формате EnterpriseData в конфигурацию из сторонних приложений. Условия задачи: у нас есть XML файл с данными в формате EnterpriseData, надо передать его в конфигурацию и убедиться в том, что на стороне конфигурации данные успешно получены.
Алгоритм работы следующий:
Итак, у нас есть архив с данными в формате EnterpriseData (один или несколько файлов). Не будем описывать, как в программе создать архив и разбить его на несколько файлов, чтобы сэкономить время – желающие смогут легко найти примеры подобного кода, используя поисковые сервера и соответствующие запросы.
Реализуем функцию, которая принимает такие входные параметры:
- URL Веб-сервиса,
- Имя пользователя для соединения с Веб-сервисом,
- Пароль.
Путь до архивированного файла с данными. Если архив умещается в одном файле – это имя файла с полным путем, включая расширение (например, “C:\Exchange\data.zip”). Если же архив разбит на несколько частей, то это будет имя любого из файлов без расширения и точки (например, “C:\Exchange\data”). Предполагается, что это последовательность файлов с расширениями “.001”, “.002” и т.д.
Реализация функции (в виде статического метода) в листинге ниже. Диагностическая информация выводится в консоль.
С помощью механизма XDTO можно описать систему типов и значений, с помощью которой можно легко выполнить сериализацию/десериализацию в XML/JSON.
XDTO можно сравнить со схемой XML. С помощью механизма XDTO можно создать XML-схему, а потом на основании этой схемы сформировать XML-документ.
XDTO может применяться в следующих случаях:
- Для описания типов параметров и возвращаемых значений Web-сервисов.
- Для описания структуры данных, используемой при обмене с внешними системами (в том числе с другими базами на платформе 1С).
- Для создания собственных типов и значений, используемых внутри конфигурации 1С.
Создание XDTO-пакета
В качестве примера рассмотрим следующую задачу: нужно настроить обмен документами между двумя различными конфигурациями на 1С. В обеих конфигурациях используются 2 типа документов: приходные и расходные накладные. Состав и наименование реквизитов в разных конфигурациях отличается.
Для обмена будет использоваться определенный формат следующего вида:
Есть корневой элемент Документ, который имеет 2 свойства: Тип и Состав. Состав включает в себя массив строк со свойствами: Номенклатура, Количество и Сумма.
Для описания данного формата будем использовать XDTO-пакет. XDTO-пакет можно сравнить со схемой XML, в нем мы укажем какие типы будут использоваться внутри пакета и каким образом они должны быть сериализованы в XML.
Добавим в пакет новый Тип объекта:
В свойствах укажем Имя Документ:
Это корневой узел нашего формата.
В свойствах укажем Имя Тип:
В данном свойстве будет строкой храниться тип выгружаемого документа. Поэтому нужно заполнить свойство Тип, чтобы при записи в XML платформа знала как нужно его сериализовать.
Чтобы заполнить тип сначала нужно нажать на зеленую галочку возле свойства:
Данный тип соответствует типу 1С Строка.
Добавим для объекта Документ еще одно свойство Состав, но тип пока заполнять не будем. Должно получиться так:
Теперь добавим новый тип объекта Состав. Он будет использоваться для сериализации табличной части документа. Добавим для него одно свойство Строка, тип пока не будем указывать:
Так как в табличной части может быть несколько строк, то для свойства Строка в свойстве Максимальное количество нужно указать -1 (предварительно нужно нажать на зеленую галку):
Это означает, что в данном свойстве может храниться неограниченное количество значений (аналогично массиву).
Теперь для свойства Документа Состав в качестве типа укажем только что созданный объект Состав. Чтобы его выбрать нужно развернуть пространство имен созданного нами XDTO-пакета:
И наконец для свойства Строка объекта Состав укажем тип Строка (только что созданный нами тип объекта):
На этом создание XDTO-пакета завершено. Для удобства переименуем его в Документ (нужно щелкнуть по пакету правой кнопкой, выбрать Свойства и изменить свойство Имя):
Сериализация XDTO в XML
Теперь напишем простую процедуру для сериализации приходного документа в XML через механизм XDTO.
Сначала рассмотрим некоторые понятия, которые будут использоваться в процессе сериализации:
Для тех, кто имеет дело с обменами данных и взаимодействием с интернет-приложениями, часто возникает необходимость открыть на просмотр в 1С XML с незнакомой структурой. Что делать?
пробовали заниматься автоматическим анализом структуры XML, создавали более или менее универсальные утилиты программного разбора, используя при этом разнообразные "нагруженные" объекты 1С типа ТаблицаЗначений, ДеревоЗначений, либо в худшем (для универсальности и переносимости) случае подключали внешние компоненты.
Но неужели нет простых средств, с минимальными затратами и желательно без программирования?
Конечно, можно поместить текст XML в Поле текстового документа. Но если XML получен из источника, который формировал его автоматически, то скорее всего текст будет неотформатирован и плохо читаем, например:
Заметим, что форматирование XML задача несложная. Ее стандартно решает объект ЗаписьXML (свойство Отступ либо объект ПараметрыЗаписиXML), примерно так:
В результате получаем читаемый документ:
Но так отобразить может только в поле текстового документа (причем без подсветки синтаксиса и без свертывания уровней).
Но при работе с интернет задача же часто стоит отображать XML именно в поле HTML-документа. Как?
Если в ПолеHTMLДокумента поместить некий произвольный XML, то 1С ничего не отобразит.
Не поможет и попытка предварительного чтения XML объектами 1С, к примеру:
Однако известно, что в отличие от ПолеHTMLДокумента из 1С, интернет-броузеры умеют отображать текст произвольых XML-документов. Примерно так:
Дополнительного программирования в 1С не требуется! Требуется только получитьподходящий default.xsl файл. Причем, естественно, варианты таких файлов могут отличаться. Предлагаю использовать следующий, полученный из предыдущих версий IE, исходник xsl-преобразования:
Так же можно попробовать поискать аналогичные default-схемы xsl-преобразований в Сhrome ( chrome://global/content/xml/XMLPrettyPrint.xsl ) и других броузерах
Желающие могут скачать пример обработки просмотра и форматирования произвольных XML-файлов (управляемые и обычные формы).
Ноо повторяю, что вся автоматизация отображения произволного XML сводится к двум строчкам текста 1С
и использованию подходящей XSL-схемы, которую можно найти как в интернете, так и у себя на локальном компьютере.
Читайте также: