Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

ИнфоСофт использует файлы «cookie» с целью персонализации сервисов и повышения удобства пользования веб-сайтом. Вы можете запретить обработку сookies в настройках браузера. Пожалуйста, ознакомьтесь с политикой использования cookies.
Оставаясь на сайте, вы соглашаетесь с политикой использования cookies.

Раскрываем тайны Фабрики XDTO

Власова Ирина Посмотреть все статьи >> Специалист по внедрению 1С франчайзинговой сети "ИнфоСофт".
13.08.2024
788
Время прочтения - 7 мин.
Заказать консультацию

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

Для начала разберемся, что такое Фабрика XDTO, так как работа с XDTO-пакетами осуществляется с ее использованием, и как с ней работать.

Фабрика XDTO – это объект встроенного языка 1С, в котором содержится описание типов, которыми оперирует система, и которые сгруппированы в один или несколько пакетов XDTO. Именно фабрика XDTO позволяет обращаться к свойствам пакетов через точку.

В платформе 1С существует глобальная ФабрикаXDTO, в которой определены все встроенные пакеты XDTO, предоставляемые платформой:

  1.  Пакет XDTO, содержащий описание типов платформы. Этот пакет является одинаковым для всех конфигураций системы «1С:Предприятие».

  2.  Пакет «http://v8.1c.ru/8.1/data/enterprise/current-config», описывающий метаданные текущей конфигурации со всеми изменениями.

  3.  Пакеты, описанные непосредственно в дереве объектов конфигурации в ветке Общие / XDTO-пакеты.

Глобальная фабрика XDTO создается системой автоматически при создании новой информационной базы. Посмотрим, что в ней содержится:

1.png


В конце списка коллекции пакетов находятся добавленные разработчиком в ветку «Общие» пакеты XDTO. Найдем среди них основной пакет.

2.png


В коллекции пакетов XDTO «Зависимости» содержится список пакетов XDTO, на которые имеются ссылки в пакете в директивах импорта, и стандартный пакет http://www.w3.org/2001/XMLSchema. В корневых свойствах перечислен список свойств, которые были добавлены в свойства пакета.

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

Создадим программно свою Фабрику XDTO на основе разработанных XDTO-пакетов. Один из пакетов – основной, находится в файле .xsd, а другой - в конфигурации. Выполнять создание Фабрики будем с помощью метода СоздатьФабрикуXDTO:

3.png


Первым параметром передаем массив со списком путей к файлам .xsd, а вторым – массив существующих пакетов в глобальной фабрике XDTO.

В созданной фабрике содержатся добавленные пакеты, а также стандартный пакет http://www.w3.org/2001/XMLSchema (добавляется в созданную фабрику по-умолчанию).

4.png


Вторым вариантом создания Фабрики XDTO является использование DOM – объектной модели документа, представляющей структуру XML-файла в виде древовидной иерархии. В 1С работа с DOM выполняется с помощью построителя, который создает специальный документ DOM. Полученную иерархию в документе DOM можно обходить по узлам и при необходимости редактировать.

5.png


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

6.png


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

Для начала нужно получить тип из фабрики XDTO – ТипОбъектаXDTO или ТипЗначенияXDTO – те самые типы объектов/значений, которые были добавлены в дерево XDTO-пакета:

7.png


8.png

9.png


Для типа, который описан в свойствах другого типа (в нашем случае в типе «Номенклатура» используется тип «Единица измерения»), возможно получение через свойства исходного типа:

10.png

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

После получения создаем значение или объект указанного типа, вызвав метод Фабрики «Создать»:

11.png


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

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

12.png 

13.png


В конце заполнения объекта можно вызвать метод «Проверить» для исключения возможных ошибок заполнения. Например, мы не указали одно из обязательных свойств (Возможно пустое = Ложь):

14.png

15.png


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

Пример формирования объекта XDTO с сохранением в файл:

16.png

17.png


И пример файла, который получился:

18.png


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

19.png

20.png


Эта ошибка возникает, если не удается сериализовать (преобразовать) какой-либо тип платформы 1С в строку XML. Например, при попытках записи значений перечислений, уникальных идентификаторов объектов или ссылок на объекты.

Для ее решения необходимо получить XML представление значения платформы 1С, используя сериализатор XDTO. Получение представления выполняется с помощью метода XMLСтрока:

21.png


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

22.png


Теперь проведем обратную работу – попробуем с помощью Фабрики XDTO загрузить данные, содержащиеся в этом файле:

23.png


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

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


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку
Рассказать друзьям
Для разработчиков 1С
Вам может быть интересно: