Инструменты пользователя

Инструменты сайта


playground:playground

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
playground:playground [2016/10/26 11:13]
alex
playground:playground [2016/11/18 18:03] (текущий)
admin
Строка 1: Строка 1:
-===== Что это такое ===== +<pre class="brush:1c"> 
-XDTO - это аббревиатура, обозначающая обмен данными посредством XML (XML Data Transfer Objects). Аббревиатура придумана разработчиками 1с и вряд ли встретится где-то ещёНо реализует она вполне стандартизированный механизм обмена информацией с помощью файлов XML, известный как [[https://ru.wikipedia.org/wiki/XML_Schema|XML Schema]].+Массив  Новый Массив; 
 +НоваяСтрокаМассива = Новый Массив; 
 +НоваяСтрокаМассиваобавить(1); 
 +НоваяСтрокаМассива.Добавить(2)
 +Массив.Добавить(НоваяСтрокаМассива); 
 +НоваяСтрокаМассива = Новый Массив; 
 +НоваяСтрокаМассива.Добавить(6); 
 +НоваяСтрокаМассива.Добавить(7); 
 +Массив.Добавить(НоваяСтрокаМассива); 
 +</pre>
  
-Суть этого механизма заключается в том, что создаётся специальный файл, называемый схемой. Этот файл описывает структуру XML-файла. Если XML-файл соответствует этой структуре, то он считается корректным. Отдающей стороне достаточно сформировать корректный XML-файл для успешного обмена. Принимающая сторона должна гарантировать, что любой корректный XML-файл будет загружен без ошибок. В результате достаточно легко можно обеспечить обмен между двумя и более закрытыми информационными системами. Каждая схема характеризуется пространством имён, которое должно быть уникальным. Оно связывает XML-файл со своей схемой. 
  
-Самым ярким примером использования такого механизма обмена являются различного рода декларации (налоговые и прочее). На сайтах соответствующих ведомств всегда можно найти файл со схемой. Другой распространённый пример - обмен данными с сайтом.+====== XDTO-пакеты ======
  
-С точки зрения программиста 1с, объект XDTO очень похож на [[1c:коллекции:Фиксированная структура|Фиксированную структуру]], созданную на основе файла со схемой. Эта псевдоструктура может быть загружена из XML-файла и использована для загрузки сторонних данных. А может быть заполнена данными и записана в корректный XML-файл. Который впоследствии будет использован для загрузки в другую информационную систему. В любом случае работа с объектом состоит из 3 основных этапов: получение типа объекта, создание объекта XDTO требуемого типа, использование объекта XDTO для выгрузки или загрузки данных.+===== Описание =====
  
-===== Получение типа объекта ===== +XDTO-пакеты предназначены для сохранения в конфигурации 1с схемы обмена данными между различными информационными системами по стандарту [[https://ru.wikipedia.org/wiki/XML_Schema|XML Schema]]. Данный механизм используется самой платформой, в частности, на ней построен обмен РИБРазработчик имеет возможность создавать неограниченное количество собственных схем обмена данными.
-Это наиболее трудный для понимания этап т.кон не соответствует обычной работе с переменными 1сНо для работы с объектами XDTO он обязателен. Прежде чем создать объект XDTO, необходимо получить его тип. Для этого используются специальные объекты - [[1c:общие:ФабрикаXDTO|фабрики типов XDTO]].+
  
-Платформа позволяет использовать 2 вида схем - встроенные в конфигурацию [[1c:общие:пакетыXDTO|XDTO-пакеты]] или внешние файлы с расширением .xsd и оформленные в соответствии со стандартами [[https://www.w3.org/TR/xmlschema-0/|w3c]]. Соответственно, существует 2 способа получения объекта-фабрики типов.+У каждого XDTO-пакета, подобно любому другому объекту конфигурацииесть своё имя, синоним и комментарийСобственный реквизит пакета - это ''URI пространства имён''Других свойств у XDTO-пакетов не существует.
  
-==== Использование XDTO-пакетов ==== 
-[[1c:общие:пакетыXDTO|XDTO-пакет]] - это отдельный объект конфигурации, расположенный в ветке Общие дерева конфигурации. Платформа позволяет создавать неограниченное количество XDTO-пакетов как с помощью конструктора, так и путём импорта существующих файлов .xsd. Эти пакеты могут служить основой для получения типов объектов XDTO. Выглядит это так: 
-<code 1c> 
-ТипОбъектаНоменклатура = ФабрикаXDTO.Тип("http://www.wiki-1c.ru/xdto", "Номенклатура");  
-</code> 
-Здесь [[1c:общие:глобальные_объекты:ФабрикаXDTO]] - это особый глобальный объект, который знает всё обо всех объектах XDTO, описанного в имеющихся в конфигурации XDTO-пакетах. Метод [[1c:общие:глобальные_объекты:ФабрикаXDTO:Тип|Тип()]] возвращает искомый тип объекта XDTO ([[1c:общие:объекты:ТипОбъектаXDTO]]). Он принимает 2 параметра - пространство имён и имя типа (оба - строки). Результат полезно запомнить в переменной, в дальнейшем её можно использовать для создания объектов XDTO произвольное количество раз. 
  
-<WRAP round tip>Заметим, что в параметре передаётся не имя пакета, а его пространство имён. Имя пакета вообще нигде не используется и задаётся только для удобства поиска в дереве конфигурации.</WRAP>+===== URI пространства имён =====
  
-==== Использование файлов с описанием схемы XML ==== +Имя пакета относится исключительно к самому объекту конфигурации и нигде не фигурирует в самой схеме обмена. Процедуры работы с объектами XDTO умеют определять описываемые в пакете типы по URI пространству имён.
-Такие файлы традиционно имеют расширение .xsd. Преимущество данного метода в том, что он работает независимо от конфигурации. И если первому методу обязательно требуется отдельный объект конфигурации, этот требует только наличия файла со схемой. Вот код создания соответствующего объекта-фабрики и получение типа объекта XDTO: +
-<code 1c> +
-МояФабрикаXDTO = СоздатьФабрикуXDTO("D:\Temp\goods.xsd"); +
-ТипОбъектаНоменклатура = МояФабрикаXDTO.Тип("http://www.wiki-1c.ru/xdto", "Номенклатура"); +
-</code> +
-Здесь мы использовали глобальную функцию [[1c:общие:глобальные_объекты:СоздатьФабрикуXDTO]], которая считывает файл со схемой (параметр функции) и создаёт объектабрику. Этот объект в будущем может произвольное число раз использоваться для создания любых доступных в схеме типов объектов. Если требуется загрузить несколько файлов со схемами, можно передать массив строк с именами файлов. Дальнейшая работа с фабрикой объектов не отличается от описанного в 1 способе.+
  
-===== Создание объекта XDTO ===== +В конфигурации может существовать несколько пакетов с одинаковым URI. Это позволяет хранить несколько версий одной и той же схемы обмена. Но это усложняет использование пакетов - к их объектам уже невозможно обратиться простым указанием URI.
-Сами объекты XDTO также создаются фабрикой объектов. Причём той же самой, которая использовалась при получении типа. Но используется уже другой метод - [[1c:общие:глобальные_объекты:ФабрикаXDTO:Создать|Создать()]]: +
-<code 1c> +
-Номенклатура = МояФабрикаXDTO.Создать(ТипОбъектаНоменклатура);  +
-</code> +
-В результате в переменной Номенклатура окажется объект XDTO, описанный в файле-схемеК его реквизитам можно обращаться наподобие реквизитов фиксированной структуры. Естественно, нельзя добавлять или удалять реквизиты. В отличие от фиксированной структуры, каждый реквизит имеет определённый тип, поэтому произвольное присваивание не получится.+
  
-===== Запись объектов XDTO в файл ===== +Имена типов, описываемые в XDTO-пакетахдолжны быть уникальными в пределах одного пространства имён. Контролируется это платформой только в пределах одного XDTO-пакета. В различных пакетах имена объектов могут повторяться, даже если у пакетов одинаковое URI пространства имён.
-Прежде чем записать объект, его нужно заполнить. Принципы заполнения схожи с заполнением фиксированной структуры для реквизитов базовых типов, и с созданием объекта XDTO для прочих реквизитов.+
  
-==== Заполнение объекта XDTO ==== +URI пространства имён обычно похожи на адрес веб-страницы. Это не обязательноно рекомендовано стандартом. Более того, стандарт рекомендует по этому адресу размещать страницу с описанием данной схемы обмена. В реальной жизни этой рекомендации редко следуют. В частности, сама фирма 1с не создаёт таких страниц..
-Использование фабрики объектов на этом не закончится. Ведь у переменной Номенклатура есть несколько реквизитов, и каждый из реквизитов относится к какому-то типу. К счастью, простые типы можно использовать без подобных преобразований простым присваиванием: +
-<code 1c> +
-Номенклатура.Наименование = "Носки суровые";  +
-</code> +
-Более сложные типы требуют обращения к фабрике объектов: +
-<code 1c> +
-ТипОбъектаЕдиницаИзмерения = МояФабрикаXDTO.Тип("http://www.wiki-1c.ru/xdto", "ЕдиницаИзмерения"); +
-ЕдиницаИзмерения = МояФабрикаXDTO.Создать(ТипОбъектаЕдиницаИзмерения); +
-ЕдиницаИзмерения.ОКЕИ = 796; +
-ЕдиницаИзмерения.Наименование = "шт"; +
-Номенклатура.ЕдиницаИзмерения = ЕдиницаИзмерения;  +
-</code> +
-Стандарт позволяет создавать реквизиты-списки и реквизиты-структуры без создания отдельных типов. Заполнять такие реквизиты можно следующим образом: +
-<code 1c> +
-// Список элементов простых типов +
-Штрихкоды = Номенклатура.ПолучитьСписок("Штрихкоды"); +
-Штрихкоды.Добавить("4601546124937"); +
-Штрихкоды.Добавить("4601546093981");+
  
-// Список элементов сложных типов, описанных в схеме +===== Конструктор XDTO-пакетов =====
-ПрочиеЕдиницыИзмерения = Номенклатура.ПолучитьСписок("ПрочиеЕдиницыИзмерения"); +
-ЕдиницаИзмерения = МояФабрикаXDTO.Создать(ТипОбъектаЕдиницаИзмерения); +
-ЕдиницаИзмерения.ОКЕИ = 166; +
-ЕдиницаИзмерения.Наименование "кг"; +
-ПрочиеЕдиницыИзмерения.Добавить(ЕдиницаИзмерения); +
-</code>+
  
-Получение типа элементов-структур немного напоминает работу с метаданными конфигурации. Используем метод [[1c:общие:объекты:ОбъектXDTO:Свойства|Свойства()]] для получения списка реквизитов ([[1c:общие:объекты:КоллекцияСвойствXDTO]]). Далее получаем параметры реквизита методом списка [[1c:общие:объекты:КоллекцияСвойствXDTO:Получить|Получить()]] ([[1c:общие:объекты:СвойствоXDTO]]). В его реквизите [[1c:общие:объекты:СвойствоXDTO:Тип]] и находится искомый тип значения.+Для создания схем обмена существует удобный графический конструктор:
  
-<code 1c> +{{http://i.imgur.com/rrPUwtV.png}}
-// Список элементов-структур +
-Характеристики = Номенклатура.ПолучитьСписок("Характеристики"); +
-ТипЭлементаХарактеристика = Номенклатура.Свойства().Получить("Характеристики").Тип; +
-Характеристика = МояФабрикаXDTO.Создать(ТипЭлементаХарактеристика); +
-Характеристика.Код = 1; +
-Характеристика.Наименование = "Жёлтые"; +
-Характеристики.Добавить(Характеристика);+
  
-// Реквизиты-структуры +С его помощью можно создавать любые схемы обмена, а также экспортировать их в файлы. Конструктор состоит из панели инструментов и рабочего поля. В панели инструментов кроме команд заполнения схемы обменаесть также кнопки проверки корректности пакета и экспорта пакета во внешний файлПоследние версии платформы также позволяют использовать XDTO-пакеты в расширениях конфигурации.
-ТипОбъектаСчетаУчета = Номенклатура.Свойства().Получить("СчетаУчета").Тип; +
-НоменклатурачетаУчета = МояФабрикаXDTO.Создать(ТипОбъектаСчетаУчета); +
-Номенклатура.СчетаУчета.СчетУчетаОстатков = "10.01"; +
-Номенклатура.СчетаУчета.СчетУчетаРасходов = "26"; +
-</code>+
  
-Сейчас объект заполнен и его можно записать. 
  
-==== Запись объекта XDTO ==== 
playground/playground.1477469591.txt.gz · Последнее изменение: 2016/10/26 11:13 — alex