Куперс

Бухучет и анализ

Пакет xdto 1С

В этой статье опишу свой, пока небольшой, опыт организации обмена данными через универсальный формат EnterpriseData.

В моём случае обмен настраивается между конфигурациями «Управление торговлей 11.2» (далее УТ) и «Бухгалтерия предприятия 3.0.43» (далее БП). Обмен односторонний, из УТ в БП. До обновления «Управление торговлей 11.1» на версию «11.2» обмен данными был настроен с помощью конфигурации «Конвертация данных 2.0». Однако после перехода на «11.2» в «Управление торговлей» появились ошибки при работе пользователей. Процедура обновления правил обмена была проведена, но результата это не дало. Отладчик показывал, что проблема в обмене данными. Было решено удалить настройку обмена данными в обеих конфигурациях и настроить заново.

И «Управление торговлей», и «Бухгалтерия предприятия» у нас работают в клиент-серверном варианте. Настройку синхронизации я начал с УТ. Выполнил её таким образом, чтобы данные выгружались из УТ в файл. То есть синхронизация через сетевой каталог. В БП настроил обмен таким образом, чтобы из БП никакие данные не выгружались.

Далее запустил синхронизацию на стороне УТ. Выгрузка данных не произошла. В журнале регистрации появились ошибки:

Для анализа ошибки нажал на пиктограмму «Состав отправляемых данных» и в списке зарегистрированных к отправке договоров контрагентов нашёл договор, по которому появилась ошибка. Открыл договор, запомнил банковский счёт контрагента, указанный в договоре. Затем перешёл к зарегистрированным к отправке банковским счетам. Оказалось, что нужного счёта нет в списке зарегистрированных. Я перепровёл проблемный банковский счёт и договор. После этого зарегистрировал вручную нужный банковский счёт.

Повторил попытку синхронизировать данные из УТ. На этот раз данные успешно выгрузились. В сетевой папке сформировался XML файл, содержащий данные для переноса из УТ в БП.

Следующий этап — загрузить данные из файла в Бухгалтерию предприятия. В конфигурации «Бухгалтерия предприятия» я нажал кнопку «Синхронизировать», открылась форма обработки с сообщением «Выполняется анализ данных». Чуть позже сообщение сменилось на «Выполняется выгрузка данных». При этом индикатор и счётчик показывали, что из БП выгружается более 80-ти тысяч объектов. Это меня смутило, ведь я указывал в настройках, что из БП ничего не должно выгружаться. Обработка выполнялась довольно долго и завершилась ошибкой:

Событие: Обмен данными
{ОбщийМодуль.ДлительныеОперации.Модуль(371)}: Аварийно завершился рабочий процесс фонового задания
ВызватьИсключение(ТекстОшибки);

Чтобы локализовать ошибку, попробовал изменять настройки синхронизации и вараанты работы базы БП. В итоге, когда я перевёл базу в файловый вариант, система отработала адекватно: открылась форма сопоставления двух баз. После сопоставления объектов начальная синхронизация прошла успешно. Затем я снова перевёл базу в клиент-серверный вариант.

При дальнейшей «обкатке» синхронизации, потребовалось внести кое-какие изменения в правила конвертации объектов. Настало время воспользоваться конфигурацией «Конвертация данных 3.0». Во встроенной справке конфигурации описан порядок работы. Также помогли статьи на сайте ИТС.

В итоге я загрузил в «Конвертация данных 3.0» следующие данные:

  • Тексты общего модуля «МенеджерОбменаДаннымиЧерезУниверсальныйФормат» из двух баз
  • Схема обеих баз
  • Описание формата EnterpriseData (из одной любой базы)
  • Правила конвертации

После загрузки открыл в «Конвертация данных 3.0» правила конвертации данных, объектов, свойств. Внёс необходимые мне правки. Затем воспользовался кнопкой «Выгрузить модуль менеджера обмена». Текст модуля скопировался в буфер обмена. Осталось только вставить его в конфигурацию.

Поэксперементировав с настройкой правил в «Конвертация данных 3.0», я для себя заключил, что в случае, когда вносимые правки незначительны, проще настраивать правила непосредственно в конфигурациях УТ и БП, в общем модуле «МенеджерОбменаДаннымиЧерезУниверсальныйФормат». Если же правки серъёзные, такие как, например, добавление нового объекта в обмен, тогда стоит воспользоваться конфигурацией «Конвертация данных 3.0».

Задачу по добавлению документа «Заказ поставщику» в план обмена я выполнял с помощью «Конвертация данных 3.0». В стандартном варианте УТ — БП этого документа в плане обмена нет.

Будем помнить, что правила регистрации объектов для выгрузки попрежнему настраиваются в конфигурации «Конвертация данных 2.0».

Вот такие первые впечатления о синхронизации данных через универсальный формат EnterpriseData.

XDTO – механизм 1С, который нужен при создании и использовании веб-сервисов в 1С.

Пакеты XDTO 1С позволяют описать структуру требуемого файла XML для преобразования данных в XML и из XML.

Кому интересно – разберем вопрос подробнее.

Что такое XML

XML – это способ в обычном текстовом файле описать сложную структуру данных. В XML указываются не только сами данные, но и поля, в которых они хранятся.

Пример файла XML:

<root>
<list name=”sky” id=”12”>
<el>Perfect blue sky</el>
</list>
</root>

Названия, которые были использованы в этом файле – root, name, list, el – могут быть совершенно произвольными.

Основные правила формирования XML файла сразу видны из его структуры:

  • Элементы могут быть вложены
  • Начало элемента , конец – то же имя с добавлением символа «/»
  • Внутри элемента могут быть
    o Вложенные элементы
    o Текст
  • У элемента могут быть свойства (атрибуты), у них указывается имя и значение.

В XML нельзя использовать любые символы, так как некоторые из них зарезервированы собственно для XML, например «».

XML очень удобно использовать при обмене со сторонними программами и он используется в механизме обмена данными 1С.

Пространство имен

XML файл часто начинается с заголовка, в котором описывается версия XML, кодировка и прочее. Заголовок в XML необязателен и его часто не используют.

В заголовке также может быть определено – пространство имен.

Файлы XML передаются через интернет, воспринимаются многими программами.

Воспринимаются – значит в их коде зашито – если встретишь в XML файле определенное имя элемента – воспринимай его вот так-то и делай вот это.

Поэтому если мы будем использовать имя элемента Apple, то достаточно большой шанс, что какая-либо другая программа может «подумать», что это известный ей Apple, но мы то имели ввиду что-то свое.

Для того, чтобы такого не происходило и чтобы явно указывать что наш Apple отличается от всех остальных, в файле может быть задано наименование пространства имен – префикс, который используется перед названием элементов.

Далее используется в XML вот так:
вместо <apple color=»green»>
надо будет писать <store:apple color=»green»>

Зачем нужен URL?

Для тех, кто уже подумал дальше – конечно же пространство имен, придуманное нами тоже может быть не уникально – кто-то другой тоже может его использовать.

Поэтому указывается некий уникальный идентификатор, определяющий заодно и автора пространства имен.

Естественно подразумевается, что указавший пространство имен исключительно честный человек и указал свой сайт и не использует с одним сайтом несколько разных пространств имен.

Кстати, обычно указывают не только URL сайта, но URL конкретной папки на сайте, чтобы если что, можно было создать другое пространство имен в другой папочке на сайте для его использования в другой ситуации.

DOM

Объект – это определенная структура данных, самодостаточная, содержащая все свои данные.

Так как в XML описаны структурированные данные, то есть в виде структуры, имеющие свои свойства и т.п., то на них можно смотреть как на объекты.

В приведенном примере это может быть объект LIST со свойством и вложенным элементом.

DOM – это способ рассмотрения файла XML не как текст в определенном формате, а как набор объектов со свойствами, полями и так далее.

Описание файла XML

Если мы используем файл определенной структуры постоянно для обмена между двумя программами, мы вероятно хотели бы:

  • Чтобы были использованы определенные названия
  • Чтобы были те элементы, которые мы ожидаем (которые «должны быть для использования в нашем обмене»)
  • Чтобы в атрибутах были указаны те типы, которые мы ожидаем (строка, число и т.п.).

Для описания структуры XML существуют следующие стандарты форматов файлов (которые также хранятся в обычном текстовом файле):

  • Расширение DTD – Document Type Definition
  • Расширение XSD – XML Shema.

Оба формата описывают каков должен быть документ. Процедура проверки соответствия XML описанному в таком файле стандарту называют верификация.

XDTO

XDTO 1С – это объект 1С, который позволяет в конфигурацию добавить описание XML файла. Вернее описывается не файл, а конкретные структуры XML.

Чтобы указать типы, возможные к использованию – используется список, библиотека типов – которую называют фабрика XDTO 1С.

В этой фабрике указаны как простые типы (строка, число, дата), которые принято использовать в других языках, программах и т.п., но и типы 1С, которые используется в 1С и в конкретной конфигурации.

Фабрика XDTO 1С сама состоит из нескольких пакетов. Базовые типы описаны в пакете с именем www.w3.org

Типы данных текущей конфигурации описаны в пакете http://v8.1c.ru/8.1/data/enterprise/current-config

Сами типы называются в соответствии с именем в конфигураторе с добавлением англоязычного вида (CatalogRef, CatalogObject, DocumentRef, DocumentObject), например:

CatalogObject.Номенклатура

Добавление пакета XDTO 1С

Безусловно все это круто звучит. И мы не дошли еще до темы XSLT – способа преобразовывать файлы XML во что-то другое, например в HTML. Тема XML исключительно большая и ее сложно включить даже в отдельную книгу.

Наша задача – понять, что XDTO 1С позволяет описать какие элементы должны быть у пакета XML, который нужно сформировать или считать.

Пакеты XDTO 1С находятся в конфигурации в ветке Общие/Пакеты XDTO 1С.

Добавить пакет XDTO в 1С можно вручную (круто!), но лучше достать соответствующий XSD файл с готовым описанием схемы.

Описание XSD схемы объектов любой конфигурации можно получить нажатием на ветку Общие/Пакеты XDTO 1С и выбрав пункт меню Экспорт XML схемы конфигурации.

Файл текстовый, Вы можете отредактировать его в блокноте Windows, убрав лишние, ненужные Вам объекты.

Добавить готовую XSD схему в 1С можно нажав правой кнопкой на ветку Общие/XDTO 1С пакеты и выбрав пункт меню Импорт XML схемы.

Использование механизма XDTO 1С

Работа с XDTO 1С – это преобразование значений в XML и из XML.

Работа ведется с помощью объектов языка 1С ЧтениеXML/ЗаписьXML.

При работе с механизмом XDTO 1С Вы должны указать пакет, с которым работаете. Это может быть типовой пакет (обсуждали выше, см. XDTO) или добавленный в конфигурацию пакет. Идентификация пакета производится по URL, указанному в пакете.

Два основных простых способа работы – это:

  • Сериализация – автоматическое преобразование значений из 1С в XML и наоборот
  • Создание объекта, заполнение его полей, запись в XML (и соответственно чтение из XML и потом чтение его полей).

Обратная функция – Сериализатор.ПрочитатьXML(), используется с объектов языка 1С ЧтениеXML.

Пример чтения/записи объекта:

Далее можно записать созданный объект в XML точно таким же способом, как и сериализация. При чтении XML тем же способом, что и выше, может вернуться не значение XDTO, а вот такой объект.

  • При создании объекта XDTO – создается структура, аналогичная структуре объекта конфигурации (конечно, если Вы создаете объект конфигурации из пакета, указанного в примере)
  • Типовые поля (код, наименование и т.д.) – англоязычные
  • Объект создается пустой, его нужно заполнять, каждое поле отдельно или с использованием функции ЗаполнитьЗначенияСвойств

XDTO (XML Data Transfer Objects) — механизм, обеспечивающий объектное моделирование данных схемы XML. XDTO позволяет оперировать не узлами XML, а прикладными типами данных и встроенными типами платформы. Механизм XDTO реализован при помощи общего объекта конфигурации XDTO-пакет.

ВАЖНО! Схема обязательно должна содержать описание пространства имен в виде URL-подобной строки. Если пространство имен не задано, то стороннюю XML-схему импортировать не удастся.

XDTO-пакеты — это общие объекты конфигурации, которые являются частью механизма XDTO и позволяют описать в конфигурации систему типов и значений для взаимодействия с различными внешними источниками данных, например с Web-сервисами.

XDTO-пакет является своеобразным переводчиком между разными информационными системами, с помощью которого можно описать, например, структуру (схему) будущего xml-файла.

В конфигурацию может быть добавлено произвольное количество XDTO-пакетов.

Замечание

Типы данных в 1С чаще всего соответствуют типам данных в других языках, но бывают и исключения, которые проще всего описывать в этом объекте конфигурации.

Механизм XDTO

Механизм XDTO (XML Data Transfer Objects) — один из механизмов интеграции 1C с другими системами, который является механизмом объектного моделирования данных, описываемых с помощью схемы XML.

Механизм XDTO позволяет на уровне языка 1С оперировать не узлами XML, а прикладными понятиями «Накладная», «Сотрудник», «Счет» и т.д., а также встроенными типами 1С («ТаблицаЗначений”, «СправочникСсылка” и т.п.).

Основные возможности XDTO:

  • описание типов параметров и возвращаемых значений Web-сервисов;
  • обмен данными между конфигурациями 1С:Предприятия 8 с существенно разными структурами данных;
  • обмен данными на основе схем XML, не привязанных к той или иной конфигурации (например, обмен с информационными системами, построенными не на основе 1С:Предприятия 8);
  • создание собственной системы типов и значений для обработки произвольных данных.

ФабрикаXDTO

Работу механизма XDTO обеспечивает объект встроенного языка ФабрикаXDTO: именно она отвечает за сериализацию XDTO-объектов в XML и обратно. Причем, за преобразование объектов XDTO в прикладные объекты и встроенные типы отвечает механизм XDTO-сериализации. То есть, процедура приведения объектов 1С к объектам XML схемы двухэтапная.

Особенности ФабрикиXDTO:

  1. При программном создании фабрики XDTO, типы в ней определенные, не могут расширяться, определяются в полном объеме при создании.
  2. Типы, определенные в глобальной фабрике XDTO, могут расширяться за счет:
    • создания пакетов XDTO;
    • изменения состава объектов конфигурации.

Создание XDTO-пакета 1С

Свойства XDTO-пакета 1С:

Система 1С позволяет выполнить следующие действия:

  • создать XDTO-пакет с помощью импорта схемы XML;
  • добавить XDTO-пакет в дерево конфигурации и редактировать его в дальнейшем;
  • экспортировать существующий XDTO-пакет в схему XML.

Редактирование XDTO-пакета 1С

Редактирование XDTO-пакета 1С осуществляется в специальном окне, отображающем его иерархическую структуру:

Особенности использования XDTO-пакетов в 1С:

  1. В рамках создаваемого пакета XDTO (без использования директивы импорта) можно использовать:
    • типы, определенные только в данном пакете и
    • типы, стандартные для XML.
  2. При определении типа свойства объекта XDTO информация о типе включает:
    • имя типа и
    • имя пространства имен (необходимо во избежание их пересечения).
  3. Понятию «Пакет XDTO» больше всего соответствует такое понятие XML как схема XML документа.
  4. Понятию «Фабрика XDTO» больше всего соответствует такое понятие XML как набор схем XML.
  5. В рамках модели XDTO понятие «Фасет» относится к типу значения XDTO.
  6. При программном создании фабрики XDTO, типы, в ней определенные, не могут расширяться, определяются в полном объеме при создании.
  7. Типы, определенные в глобальной фабрике XDTO, могут расширяться за счет создания пакетов XDTO, изменения состава объектов конфигурации.

Сериализация в 1С с помощью XDTO-пакета

XDTO-сериализация предназначена для сохранения данных объекта в файл XML и создания объекта на основе данных, хранящихся в файле XML. Это процесс приведения данных 1С:Предприятия в строку формата .xml (обратный процесс — десериализация).

Сериализованы могут быть не все объекты, а те, которые имеют соответствующую запись в Синтакс-помощнике: «Данный объект может быть сериализован в/из XML».

В системе 1С:Предприятие 8 реализована сериализация данных на основе механизма XDTO, которая позволяет сериализовать в/из XML:

  • все типы данных, хранящиеся в базе данных;
  • некоторые другие типы данных.

Простые типы с точки зрения XML-сериализации

Простые типы с точки зрения XML-сериализации — это типы, значение которых может быть представлено в XML в виде строки:

  • Число;
  • Строка;
  • Дата;
  • Булево;
  • ДвоичныеДанные;
  • NULL;
  • УникальныйИдентификатор;
  • ХранилищеЗначения;
  • ссылки на объекты базы данных;
  • ссылки на перечисления метаданных.

Таким образом, с точки зрения XML-сериализации, например, значение типа «ДокументСсылка.ИмяДокумента» относится к простым типам.

Сложные типы с точки зрения XML-сериализации Сложные типы в XML представляются как объекты, содержащие вложенные элементы. К ним относятся:

  • Тип;
  • ОписаниеТипов;
  • КонстантаМенеджерЗначения;
  • объекты базы данных;
  • наборы записей регистров, последовательностей, перерасчетов;
  • УдалениеОбъекта.

При записи значения с использованием средств XML сериализации в XML документ применяются:

  1. методы, относящиеся к средствам XML-сериализации и
  2. объект «ЗаписьXML».

Пример :

Например, вот такой, привычный в 1С, код:

1С (Код)

С помощью описанного пакета XDTO сериализуется в xml-файл такого типа:

1С (Код)

XML

Работа с XML-документами доступна непосредственно из встроенного языка системы 1С:Предприятие 8.

Рисунок

Система 1С предоставляет возможность:

  1. последовательно читать и записывать xml-документы:
    • преобразовывать из строки, полученной из текста элемента или значения атрибута XML, в значение в соответствии с указанным типом;
    • получать строковое представление значения для помещения в текст элемента или значение атрибута XML;
    • получить тип данных XML, соответствующий переданному в качестве параметра типу;
    • производить проверку возможности чтения из XML значения указанного типа;
    • производить проверку соответствия схеме XML при чтении XML
    • производить запись значения в формате XML;
    • возвращать тип, соответствующий типу данных XML.
  2. использовать модель объектного доступа к данным xml-документов (ДокументDOM), соответствующую следующим стандартам:
    • DOM Level 2;
    • XPath (DOM Level 3);
    • DOM Load and Save (DOM Level 3).
  3. использовать объектную модель схемы XML (СхемаXML);
  4. использовать канонический XML стандарт 1.1 (Canonical XML 1.1).

Используя внешнее соединение и механизмы работы с XML можно организовывать интеграцию с прикладными системами по принятым в этих системах форматам. Для этого применяются механизмы XSL-преобразования.

Пример

Например, для такой интеграции можно использовать BizTalk сервер компании Microsoft:

Fast Infoset

Платформа предоставляет средства для работы с XML-документами в бинарном формате Fast Infoset. Технология Fast Infoset использует альтернативный синтаксис отображения XML-данных. Это обеспечивает меньший объем файлов и более высокую скорость обработки, чем скорость обработки данных, записанных в обычном XML-формате. Файл, записанный в формате Fast Infoset, имеет расширение .fi или .finf.

Читай также:

В этой статье попробую рассказать о механизме XDTO, рассказать постараюсь только суть — без воды.

XDTO (XML Data Transfer Objects) — это разработка фирмы 1С и ни в каком другом языке программирования эту аббревиатуру не встретишь.

Основное назначение этого механизма — обмен данными, как с другой конфигурацией 1С, так и со сторонними приложениями. Кроме этого XDTO используется для описания параметров и возвращаемых значений web-сервисов, а также для произвольной обработки данных.

Основная «полезность» механизма XDTO заключается в том, что он позволяет работать (чтение и запись) с XML-файлом как с объектом 1С — «через точку» и не думать при этом о тегах и атрибутах XML.

Реализован механизм XDTO при помощи объекта конфигурации «Пакет XDTO». Этот объект в действительности является обычной XML-схемой (XSD) т.е. описывает структуру какого-либо XML-документа.

Средствами 1С мы можем:

  • превратить XSD-файл в объект «пакет XDTO»;
  • добавить новый «пакет XDTO» и редактировать его так, как нам нужно;
  • превратить «пакет XDTO» в XSD-файл.

Действия с XDTO пакетом

Для успешного импорта XML-схемы (XSD) в XDTO пакет, необходимо наличие в XSD-файле атрибута «targetNamespace» с указанием пространства имен, иначе импортировать схему не удастся.

Не хватает атрибута «targetNamespace»

Пространство имен обычно указывается URL-подобной строкой (хотя на самом деле это может быть любая строка) и служит для того, чтобы избежать путаницы в том случае, если в разных XDTO пакетах у нас имеются объекты с одинаковым названием.

Таким образом понятно, что названия объектов должны быть уникальны в пределах одного пространства имен (по сути в пределах одного XDTO пакета)

Пространство имен в XSD-файле

XSD-файл можно сделать самому — написать руками в блокноте или сделать XDTO пакет прямо в конфигураторе, кроме этого можно воспользоваться какой-нибудь специализированной программой (например Liquid XML Studio) или онлайн сервисом (Google в помощь) которые умеют создавать XSD-файлы из XML. При использовании программ и сервисов нужно быть осторожным, так как по моему опыту результат их работы (XSD-файл) очень часто не подходит для использования в 1С — неправильно указываются типы данных и, как следствие, записать XML-файл при помощи такого XDTO пакета не удастся. В качестве примера приведу два XDTO пакета для одного и того же XML-файла.

Сравнение XDTO пакетов

Слева тот, что создан руками, справа — программой.

Работа с XDTO в 1С неразрывно связана с объектом «ФабрикаXDTO». Именно этот объект читает и записывает данные из/в XML-файл(а), а также создает все нужные объекты с которыми можно привычно работать «через точку».

Перейдем к практике.

Допустим у нас есть файл заказ вот такого вида:

XSD-файл примера:

XSD-файл примера

Схема в виде пакета XDTO была показа выше.

Чтение XML при помощи XDTO:

«ФабрикаXDTO» при помощи XDTO пакета превращает XML-файла в обычный 1С объект.

Теперь запишем свой XML-файл:

В коде выше, мы получаем все необходимые типы данных, создаем из них объекты, затем заполняем эти объекты нужными данными и записываем все это в XML-файл.

Естественно, данная статья не претендует на звание всеобъемлющего руководства по XDTO. Этого всего лишь небольшой обзор основных возможностей механизма XDTO и я с благодарностью приму все возможные замечания и дополнения.

В следующий статье я постараюсь рассказать о том, что такое XDTO-сериализация в 1С.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Наверх