- от автора admin
Содержание
В этой статье опишу свой, пока небольшой, опыт организации обмена данными через универсальный формат 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:
- При программном создании фабрики XDTO, типы в ней определенные, не могут расширяться, определяются в полном объеме при создании.
- Типы, определенные в глобальной фабрике XDTO, могут расширяться за счет:
- создания пакетов XDTO;
- изменения состава объектов конфигурации.
Создание XDTO-пакета 1С
Свойства XDTO-пакета 1С:
Система 1С позволяет выполнить следующие действия:
- создать XDTO-пакет с помощью импорта схемы XML;
- добавить XDTO-пакет в дерево конфигурации и редактировать его в дальнейшем;
- экспортировать существующий XDTO-пакет в схему XML.
Редактирование XDTO-пакета 1С
Редактирование XDTO-пакета 1С осуществляется в специальном окне, отображающем его иерархическую структуру:
Особенности использования XDTO-пакетов в 1С:
- В рамках создаваемого пакета XDTO (без использования директивы импорта) можно использовать:
- типы, определенные только в данном пакете и
- типы, стандартные для XML.
- При определении типа свойства объекта XDTO информация о типе включает:
- имя типа и
- имя пространства имен (необходимо во избежание их пересечения).
- Понятию «Пакет XDTO» больше всего соответствует такое понятие XML как схема XML документа.
- Понятию «Фабрика XDTO» больше всего соответствует такое понятие XML как набор схем XML.
- В рамках модели XDTO понятие «Фасет» относится к типу значения XDTO.
- При программном создании фабрики XDTO, типы, в ней определенные, не могут расширяться, определяются в полном объеме при создании.
- Типы, определенные в глобальной фабрике XDTO, могут расширяться за счет создания пакетов XDTO, изменения состава объектов конфигурации.
Сериализация в 1С с помощью XDTO-пакета
XDTO-сериализация предназначена для сохранения данных объекта в файл XML и создания объекта на основе данных, хранящихся в файле XML. Это процесс приведения данных 1С:Предприятия в строку формата .xml (обратный процесс — десериализация).
Сериализованы могут быть не все объекты, а те, которые имеют соответствующую запись в Синтакс-помощнике: «Данный объект может быть сериализован в/из XML».
В системе 1С:Предприятие 8 реализована сериализация данных на основе механизма XDTO, которая позволяет сериализовать в/из XML:
- все типы данных, хранящиеся в базе данных;
- некоторые другие типы данных.
Простые типы с точки зрения XML-сериализации
Простые типы с точки зрения XML-сериализации — это типы, значение которых может быть представлено в XML в виде строки:
- Число;
- Строка;
- Дата;
- Булево;
- ДвоичныеДанные;
- NULL;
- УникальныйИдентификатор;
- ХранилищеЗначения;
- ссылки на объекты базы данных;
- ссылки на перечисления метаданных.
Таким образом, с точки зрения XML-сериализации, например, значение типа «ДокументСсылка.ИмяДокумента» относится к простым типам.
Сложные типы с точки зрения XML-сериализации Сложные типы в XML представляются как объекты, содержащие вложенные элементы. К ним относятся:
- Тип;
- ОписаниеТипов;
- КонстантаМенеджерЗначения;
- объекты базы данных;
- наборы записей регистров, последовательностей, перерасчетов;
- УдалениеОбъекта.
При записи значения с использованием средств XML сериализации в XML документ применяются:
- методы, относящиеся к средствам XML-сериализации и
- объект «ЗаписьXML».
Пример :
Например, вот такой, привычный в 1С, код:
1С (Код)
С помощью описанного пакета XDTO сериализуется в xml-файл такого типа:
1С (Код)
XML
Работа с XML-документами доступна непосредственно из встроенного языка системы 1С:Предприятие 8.
Рисунок
Система 1С предоставляет возможность:
- последовательно читать и записывать xml-документы:
- преобразовывать из строки, полученной из текста элемента или значения атрибута XML, в значение в соответствии с указанным типом;
- получать строковое представление значения для помещения в текст элемента или значение атрибута XML;
- получить тип данных XML, соответствующий переданному в качестве параметра типу;
- производить проверку возможности чтения из XML значения указанного типа;
- производить проверку соответствия схеме XML при чтении XML
- производить запись значения в формате XML;
- возвращать тип, соответствующий типу данных XML.
- использовать модель объектного доступа к данным xml-документов (ДокументDOM), соответствующую следующим стандартам:
- DOM Level 2;
- XPath (DOM Level 3);
- DOM Load and Save (DOM Level 3).
- использовать объектную модель схемы XML (СхемаXML);
- использовать канонический 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-файл.
Для успешного импорта 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.
Интересные материалы:
- 1С обновление неверный формат хранилища данных
К сожалению, при работе с программой зачастую встречаются ошибки, не имеющие единственного общего способа устранения.…
- Перевод файловой 1С в SQL
Перенос файловой базы 1С в SQL Продукты фирмы "1С" имеют два основных решения для хранения…
- Загрузка в 1С из xml
Простой обмен данными между различными учетными программами является одним из ключевых моментов их распространенности, на…
- 1С где кэш
Кэш пользователя 1С – это автоматически создаваемый программой буфер, в котором хранится наиболее часто запрашиваемая…
- 1С скопировать табличный документ в другой
Метод табличного документа ВставитьОбласть() предназначен для копирования некоторой области ячеек табличного документа в другой или…