Домой / Социальные сети / Создание xml по xsd схеме 1с. Типизированный объект DataSet. Чтение и запись XML-документов. Представление файла XML и его чтение

Создание xml по xsd схеме 1с. Типизированный объект DataSet. Чтение и запись XML-документов. Представление файла XML и его чтение

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

Документа XML

Давайте посмотрим на этот XML - документ под названием "shiporder.xml" :

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
John Smith

Ola Nordmann

Langgt 23

4000 Stavanger
Norway


Empire Burlesque
Special Edition
1
10.90


Hide your heart
1
9.90

Документ XML выше состоит из корневого элемента, "shiporder" , который содержит обязательный атрибут под названием "orderid" . "shiporder" элемент содержит три различных дочерних элемента: "orderperson" , "shipto" и "item" . "item" элемент появляется дважды, и он содержит "title" , необязательный "note" элемент, "quantity" , и "price" элемент.

Линия выше: Xmlns: XSI = "http://www.w3.org/2001/XMLSchema-instance" говорит XML-анализатору, что этот документ должен быть проверен на схеме. Линия: XSI: noNamespaceSchemaLocation = "shiporder.xsd" указывает, где находится схемы что и (here it is in the same folder as "shiporder.xml") .

Создание XML-схемы

Теперь мы хотим создать схему для документа XML выше.

Мы начнем с открытия нового файла, который мы будем называть "shiporder.xsd" . Для того, чтобы создать схему мы могли бы просто следовать структуре в документе XML и определите каждый элемент, как мы находим его. Мы начнем со стандартной декларации XML с последующим хз: элемент схемы, который определяет схему:



...

В схеме выше мы используем стандартные пространства имен (xs) , и URI , связанный с этим пространством имен является определение языка схемы, который имеет стандартное значение http://www.w3.org/2001/XMLSchema.

Далее, мы должны определить "shiporder" элемент. Этот элемент имеет атрибут и содержит другие элементы, поэтому мы рассматриваем его как сложный тип. Дочерние элементы "shiporder" элемент окружен хз: элемент последовательности, которая определяет упорядоченную последовательность субэлементов:




...


Затем мы должны определить "orderperson" элемент в качестве простого типа (так как она не содержит каких - либо атрибутов или других элементов). В типа (xs:string) с префиксом префикс пространства имен, связанного с XML - схемы, которая указывает заранее определенный тип данных схемы:










С помощью схем, которые мы можем определить количество возможных появлений для элемента с MaxOccurs и атрибутами MinOccurs. MaxOccurs определяет максимальное число вхождений для элемента и MinOccurs определяет минимальное число вхождений для элемента. Значение по умолчанию для обоих MaxOccurs и MinOccurs 1!

Теперь мы можем определить "item" элемент. Этот элемент может появляться несколько раз внутри "shiporder" элемента. Это определяется установкой maxOccurs атрибут "item" элемента "unbounded" , что означает, что там может быть много вхождений "item" элемент, как автор хочет. Обратите внимание на то, что "note" элемент не является обязательным. Мы определили это, установив minOccurs атрибут к нулю:










Теперь мы можем объявить атрибут "shiporder" элемента. Поскольку это обязательный атрибут мы указываем использование = "требуется".

Note: Заявления атрибутов всегда должны прийти в последний раз:

Вот полный список файла схемы под названием "shiporder.xsd" :





























Разделите схемы

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

Следующий метод дизайн основан на определении всех элементов и атрибутов, а затем ссылаясь на них, используя ref атрибут.

Вот новый дизайн файла схемы ("shiporder.xsd") :








































Использование именованных типов

Способ третий дизайн определяет классы или типы, что позволяет повторно использовать определения элементов. Это делается путем именования элементов simpleTypes и complexTypes, а затем указать на них через type атрибута элемента.

Вот уже третий дизайн файла схемы ("shiporder.xsd") :

































Элемент ограничение указывает на то, что тип данных был получен из пространства имен типа данных XML-схемы W3C. Таким образом, следующий фрагмент означает, что значение элемента или атрибута должно быть значение строки:

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





Это указывает на то, что значение элемента или атрибута должно быть строкой, оно должно быть ровно шесть символов в строке, и эти символы должны быть числом от 0 до 9.

Появилась задача создания XML файла на основе XSD схемы. Поиски по форумам приводили к большому количеству обсуждений, связанных с непониманием процесса, и всего к паре статей объясняющих суть. Люди задавали вопросы, бились над решением, но после того как задача поддавалась им, просто исчезали, не описав механизм. Это подтолкнуло на создание простого описания процесса.
P.S. Не ругайтесь сильно, моей целью не было создание некой наукообразной статьи, строго использующей правильную терминологию, а желание просто помочь сделать первый шаг к пониманию очень мощного механизма обмена через XML.
P.P.S. Сразу должен оговориться, что прилагаемый к статье файл выгрузки является только заготовкой, создающей только часть требуемой структуры XML файла, т.к. моя работа с этой выгрузкой имела скорее познавательный характер (копировать предыдущий документ по экспорту на сайте ФТС и загружать из Excel"овского файла только табличную часть Товары представилось более эффективным решением), а недостаток времени не позволял дописать создание всей структуры, исходя только из соображений перфекционизма.

Итак, зарегистрировавшись на сайте ФТС, стало понятно, что для создания документов Статистической отчетности по экспорту требуется выгрузка данных из документов Реализация товаров и услуг Управления торговлей и создания файла для загрузки.

Там возможно два варианта загрузки.

Первый: загрузка табличной части с Товарами из файла Excel (этот вариант и был выбран как рабочий, т.к. имел те плюсы, что не надо было возиться с обработкой "Шапки" документа, а можно было просто копировать предыдущий, изменив в "Шапке" то, что требовалось).

Второй: создание XML файла по схеме скачаной с сайта ФТС в виде "Альбома форматов электронных форм документов". Альбом представляет из себя достаточно большое количество XSD схем. В них была найдена схема "Статистической формы учета перемещения товара" и дополнительные файлы с описаниями типов для нее. Схемы прилагаются к статье в архиве с обработкой.

Для просмотра XSD схем использовался бесплатный Майкрософтовский XML Notepad 2007.

На изображении показан основной файл со схемой XSD "Статистическая форма учета перемещения товара". На изображении выделены основные блоки XSD схемы, требуемые нам для ее понимания.

Из схемы видно, что нам надо получить XML файл, заполненый структурой, указанной в ветке "xs:element" типа StaticFormType.

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

Данная структура имеет тип StaticFormType, который в свою очередь, состоит из базового типа BaseDocType, набора объектов разных типов и текстовых аттрибутов.

Базовый тип BaseDocStyle описывается в другом файле (и пространстве имен)
.

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

Теперь перейдем к работе в 1С. В двух словах, то что нам надо сделать сводится к следующему:

1. Создается ФабрикаXDTO

НашаФабрикаXDTO = СоздатьФабрикуXDTO(МассивПолныхИменФайловСоСхемамиXSD);

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

StaticFormType = МояФабрикаXDTO.Тип("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0", "StaticFormType");

Типы данных, входящих в некий тип, можно получить из коллекции его свойств:

CUOrganizationType = StaticFormType.Свойства.Получить("Consignee").Тип; NameType = CUOrganizationType.Свойства.Получить("OrganizationName").Тип; ShortNameType = CUOrganizationType.Свойства.Получить("ShortName").Тип; LanguageCodeType = CUOrganizationType.Свойства.Получить("OrganizationLanguage").Тип;

3. Когда все сложные типа данных созданы, создаем на их основе структуру XML файла, состоящую из объектов ФабрикиXDTO:

StaticFormType_ОбъектXDTO = МояФабрикаXDTO.Создать(StaticFormType); // коллекция с документами NewDocuments = МояФабрикаXDTO.Создать(DocumentsType); NewDocuments.PrDocumentName = МояФабрикаXDTO.Создать(PrDocumentNameType, "Товарная накладная"); NewDocuments.PrDocumentNumber = МояФабрикаXDTO.Создать(PrDocumentNumberType, "123-номер"); NewDocuments.PrDocumentDate = МояФабрикаXDTO.Создать(PrDocumentDateType, "2014-10-05"); StaticFormType_ОбъектXDTO.Documents.Добавить(NewDocuments);

Одновременно заполняем элементарные (простых типов) реквизиты.

4. Ну и наконец выгружаем все из ФабрикиXDTO в файл:

ФайлXML = Новый ЗаписьXML(); ФайлXML.ОткрытьФайл(ИмяФайла); ФайлXML.ЗаписатьОбъявлениеXML(); МояФабрикаXDTO.ЗаписатьXML(ФайлXML, StaticFormType_ОбъектXDTO); ФайлXML.Закрыть();

P.S. В архиве содержится файл заготовки выгрузки в XML (создаются только некоторые реквизиты, отражающие все случае заполнения файла) и схемы XSD.

Разархивировать все файлы в некоторую директорию.

XML будет создаваться в ней же.

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

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

Итак, XSD – это язык программирования, с его помощью описывается структура вашего отчета. В структуру входят, например, параметры содержания отчета, тип, вид, а также синтаксис данных, разделы, которые содержат информацию.

Получается, что XSD-схема- это описание структуры вашего отчета , выполненное на одном из языков программирования. Если в отчет будет внесена неверная информация, то для схемы она будет просто нечитаема, именно поэтому система выдает ошибку о том, что файл не соответствует XSD-схеме.

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

Стоит отметить, что данная проблема может возникнуть как из-за неверно введенных данных (например, вы ошиблись, когда вводили ИНН организации), так и из-за неверного формата введения данных (например, вы указали лишние пробелы или дефисы).

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

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

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

Завершив обновление, попробуйте снова отправить ваш отчет. Если после обновления файл опять выдает ошибку, значит необходимо искать проблему в нем. Если вы работаете в программе 1С, то вы можете проверить файл с помощью специальной кнопки, которая называется «проверить в интернете».

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

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

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

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

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

Но поддаваться панике не стоит, ведь в большинстве случаев эта проблема решается достаточно просто и быстро. К тому же если отчет вы отправили вовремя, но он не был принят из-за неверного формата, то налоговая не имеет права штрафовать вас за не вовремя предоставленный отчет. В первую очередь, обратите внимание на сам текст ошибки, возможно, там уже указана причина ее возникновения.

По-сути, причин может быть всего две. Или у вас на устройстве установлена старая версия программы , с помощью которой вы делаете отчет, в таком случае решить проблему легко, нужно просто загрузить самое последнее обновление, обычно его можно найти на сайте программы, которую вы используете. Второй причиной может быть то, что вы неверно заполнили какие-то данные, или вообще не заполнили какое-либо поле.

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

Формат XML пользуется большой популярностью при обмене различными текстовыми документами между информационными системами. Возможность создания уникальной структуры у документов позволяет ее использовать во многих областях – электронные библиотеки, WEB, импорт/экспорт, а также многих других. Без возможности удобной работы с этим форматом системы 1С не смогли бы получить такую популярность. Поскольку 1С активно использует WEB-технологии, каждый разработчик должен уметь читать XML и записывать в них информацию.

Представление файла XML и его чтение

Одним из ключевых преимуществ языка разметки XML является достаточно удобная и интуитивно понятная структура и синтаксис. При его создании авторы ставили цель создать язык разметки, который был бы удобен для чтения и человеком, и ЭВМ. На сегодняшний день XML получил широкое развитие в другие форматы, но остается популярным и широко используемым. Структура XML файла строится по следующей схеме:

Для рассмотрения примера импорта данных в 1С достаточно будет представленного выше файла. Чтобы написанная процедура смогла прочитать XML файл, достаточно в нее передать путь к самому файлу. Это можно сделать через интерфейс, позволив пользователям самостоятельно указывать файл, либо жестко прописав в тексте обработки.

Одним из популярных способов работы с XML размером до 100 МБ в 1С считается использование объектной модели документа (DOM). Его смысл заключается в поочередной обработке всех узлов документа, представленных в XML. На встроенном языке 1С этот алгоритм выглядит так:

  1. Объявление механизмов, с помощью которых происходит чтение XML файла; Цикл для обхода узлов;
  2. Считывания данных и атрибутов в узле;
  3. Вывод информации. Если есть необходимость, на этом этапе может происходить запись в переменные или сразу в нужные таблицы;
  4. Завершение работы механизма.
&НаСервере Процедура ЧитатьНаСервере(ПутьКФайлу) //объявление механизмов МеханизмЧтения = Новый ЧтениеXML; МеханизмЧтения.ОткрытьФайл(ПутьКФайлу); Построитель = Новый ПостроительDOM; Документ = Построитель.Прочитать(МеханизмЧтения); //цикл для обхода узлов Для каждого элемента Из Документ.ЭлементДокумента.ДочерниеУзлы Цикл //считывание данных Если элемента.ИмяУзла = "Товар" Тогда товар = элемента; Для каждого значения Из товар.ДочерниеУзлы Цикл Если значения.ИмяУзла = "Наименование" тогда Наименование = значения; Цвет = Наименование.Атрибуты.ПолучитьИменованныйЭлемент("Цвет"); ИначеЕсли значения.ИмяУзла = "Цена" тогда Стоимость = значения; Валюта = Стоимость.Атрибуты.ПолучитьИменованныйЭлемент("Валюта"); КонецЕсли; КонецЦикла; //вывод сообщений Сообщить("Наименование: " + Наименование.ТекстовоеСодержимое + "; цвет: "+Цвет.Значение +"; Цена: "+Стоимость.ТекстовоеСодержимое + "; Валюта: "+Валюта.Значение); КонецЕсли; КонецЦикла; //закрытие механизма НеханизмЧтения.Закрыть(); КонецПроцедуры

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

Для выгрузки информации нам также пригодится взаимодействие с файлами формата XML. Рассмотрим пример записи с помощью объекта платформы 1С ЗаписьXML и выгрузим данные по номенклатуре. Главными его преимуществами являются простота кода и скорость обработки данных. Серверный алгоритм записи файла XML можно представить в виде нескольких последовательных шагов:

  1. Подключаемся к файлу xml;
  2. Создаем головные элементы и в них записываем данные. Если вы хотите выгрузить в XML файл большой объем информации, то на этом этапе у вас будут использоваться циклы. Будьте аккуратны и не забывайте, что запрос данных нужно делать до цикла, а не в нем;
  3. Закрываем файл.
//открываем файл Nomenclatura.xml и записываем головной элемент ЗаписьВФайл = Новый ЗаписьХML(); ЗаписьВФайл.ОткрытьФайл("D:\Nomenclatura.xml", "UTF-8"); ЗаписьВФайл.3аписатьНачалоЭлемента("Товары"); //выбираем данные для записи ВыборкаИзСправочника = Справочники.Номенклатура.Выбрать(); //цикл, в котором происходит запись Пока ВыборкаИзСправочника.Следующий() цикл //запись новых данных ЗаписьВФайл.ЗаписатьНачалоЭлемента("Товар"); ЗаписьВФайл.ЗаписатьАтрибут("Наименование", ВыборкаИзСправочника.Наименование); ЗаписьВФайл.ЗаписатьАтрибут("НачальнаяЦена", Строка(ВыборкаИзСправочника.НачальнаяЦена)); ЗаписьВФайл.ЗаписатьКонецЭлемента(); КонецЦикла; //Закрываем головной элемент и файл ЗаписьВФайл.ЗаписатьКонецЭлемента(); ЗаписьВФайл.Закрыть();

Механизм XDTO в 1С

Разработчики компании 1С для обмена информацией через XML создали собственный механизм – XDTO (XML Data Transfer Objects). Начиная с версии 8.1, в платформе появляется возможность обмениваться данными с другими системами, не вникая в вопросы формирования файла XML. Большинство технических вопросов берет на себя 1С, а нам остается только указывать данные, необходимые, чтобы сформировать XML. Правда, для этого разработчику необходимо заранее проделать некоторые манипуляции.

Чтобы загрузить файл XML, используя XDTO, мы должны сообщить 1С структуру файла. Она передается через набор схем, которые можно создать в редакторе текста или воспользоваться специализированной программой. В результате должен получиться файл, описывающий общую структуру и типы данных, используемые в файле XML. Перед тем как считывать или записывать новый XML, разработчик должен загрузить его схему в конфигурацию в раздел «ПакетыXDTO».

В данном случае создадим руками простой пакет, чтобы 1С понимала структуру нашего файла для примера. Чтобы формирование файла закончилось успешно, нам нужно отразить в схеме, что у нас присутствует головной элемент и вложение с атрибутами. Созданную схему нужно экспортировать в файл формата xsd и передать вместе с xml, чтобы другой стороне не понадобилось разбираться со структурой и опять создавать пакет xdto.


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

//Открываем файл XML ЗаписьВФайл = Новый ЗаписьXML; ЗаписьВФайл.ОткрытьФайл("D:\Nomenclatura.xml", "UTF-8"); //Указываем 1C, какой тип данных следует создать - головной элемент ВсеТовары = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://wiseadviceXML.org","Товары")); //выбираем данные для выгрузки ВыборкаИзСправочника = Справочники.Номенклатура.Выбрать(); //Добавляем отдельные товары в головной элемент Пока ВыборкаИзСправочника.Следующий() цикл Товар = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://wiseadviceXML.org","Товар")); Товар.Наименование = ВыборкаИзСправочника.Наименование; Товар.НачальнаяЦена = Строка(ВыборкаИзСправочника.НачальнаяЦена); ВсеТовары.Добавить(Товар); КонецЦикла; //записываем данные и закрываем файл ФабрикаXDTO.ЗаписатьXML(ЗаписьВФайл, ВсеТовары); ЗаписьВФайл.Закрыть();

Рассмотренные механизмы являются достаточно универсальными и при правильной настройке могут решить большинство задач. Однако во взаимодействии 1С и XML достаточно много нюансов. Изучать их намного эффективнее в реальных условиях, а не на тестовых задачах, в которых обработка XML файла решает достаточно узкие задачи.

Платформы : 1С:Предприятие 8.3, 1С:Предприятие 8.2, 1С:Предприятие 8.1
Конфигурации : Все конфигурации

2012-11-25
34938

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

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

XML for dummies

Имена (тэги), использованные в данном файле - root, list, name, el - могут быть абсолютно произвольными. Основные правила образования XML файла видны сразу по его структуре:
- Возможно вложение элементов;

Начало элемента <Имя>, окончание - то же самое имя, но с присоединением символа «/».

Находиться внутри элемента могут:
- Вложенные элементы;
- Текст.

У каждого элемента возможно присутствие свойств (атрибутов), у них указывается значение и имя. В XML запрещается использовать какие-либо символы, потому как несколько из них заняты непосредственно для XML, пример «<» и «>». Способ описания в XML очень удобен для использования при обмене с другими сторонними программами и используется он в 1С механизме обмена данными.

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

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

XML файлы передаются через интернет и воспринимаются многими различными программами. Воспринимаются - это значит, что в их коде имеется зашита - если встретишь в файле XML определенное имя элемента, то необходимо воспринимать его именно так-то и делать именно вот это. Поэтому при использовании нами тэга IBM, то существует достаточно высокий шанс того, что другая программа подумает, что это IBM, известный ей, в то время как мы подразумевали под этим что-то свое.

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

Определить пространство имен (namespace) можно следующим образом — xmlns:Префикс (ИмяПространства) = “URL”, пример:
xmlns:store = "http://site.ru"

Зачем же необходим URL? Кто уже подумал и смотрит дальше - конечно пространство имен, нами придуманное, может быть также не уникально, т.е. кто-либо другой также может его использовать. Именно поэтому указывается особый уникальный идентификатор, который определяет заодно и исполнителя пространства имен.

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

DOM

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

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

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

К минусам данного способа работы, относится высокие требования к производительности ПК, т.к. DOM обрабатывает (формирует структуру в виде объектов) сразу весь XML файл, не зависимо от его размера, и файлы большого размера (более 4Гб) он просто не сможет "переварить".

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

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

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

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

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

Расширение DTD это Document Type Definition;
- Расширение XSD это XML Shema.

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

XDTO

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

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

Фабрика XDTO включает в себя несколько пакетов. Начальные типы описываются в пакете с названиемwww.w3.org Типы данных в конфигурации описываются в пакетеhttp://v8.1c.ru/8.1/data/enterprise/current-config

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

CatalogObject.Контрагенты

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

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

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

Добавить XDTO пакет в 1С возможно вручную, но лучше всего достать соответствующий файл XSD с готовым подробным описанием схемы. Описание схемы объектов XSD любой конфигурации возможно получить путем нажатия на ветку Общие - XDTO-пакеты и выбрав в меню пункт "Экспорт XML схемы данных конфигурации".

Этот текстовый файл, Вы можете отредактировать в блокноте Windows, при этом убрав лишние объекты (ненужные Вам). Добавить готовую схему XSD в 1С возможно путем нажатия правой кнопкой мыши на ветку Общие - XDTO-пакеты и выбрав в меню пункт "Импорт XML-схемы".

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

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

Идентификация пакета осуществляется по URL, который указан в пакете. Есть два способа работы, являющиеся основными - это:

Сериализация - автоматическое изменение значений из XML в 1С и наоборот;

Заполнение полей объекта, его создание и запись в XML (а также соответственно чтение из XML и в дальнейшем чтение его полей).

Представим пример сериализации значения:

Сериализатор = Новый XDTO Сериализатор (XDTO Фабрика);
XML Файл = Новый XML Запись();
XMLФайл.ОткрытьФайл(«ИмяФайла»);
Сериализатор.ЗаписатьXML(XMLФайл, 1С Значение);

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

Справочник XDTOОбъект = ФабрикаXDTO.Создать(XDTOФабрика. Тип("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Контрагенты"));
ЗаполнитьЗначенияСвойств(СправочникXDTOОбъект, Справочник.Контрагенты.НайтиПоРеквизиту("Имя", "Иванов).Ссылка);

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

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