Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
playground:playground [2016/10/26 12:06] alex |
playground:playground [2016/11/18 18:03] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ===== Что это такое ===== | + | <pre class=" |
- | XDTO - это аббревиатура, обозначающая обмен данными посредством XML (XML Data Transfer Objects). Аббревиатура придумана разработчиками 1с и вряд ли встретится где-то ещё. Но реализует она вполне стандартизированный механизм обмена информацией | + | Массив |
+ | НоваяСтрокаМассива = Новый Массив; | ||
+ | НоваяСтрокаМассива.Добавить(1); | ||
+ | НоваяСтрокаМассива.Добавить(2); | ||
+ | Массив.Добавить(НоваяСтрокаМассива); | ||
+ | НоваяСтрокаМассива = Новый Массив; | ||
+ | НоваяСтрокаМассива.Добавить(6); | ||
+ | НоваяСтрокаМассива.Добавить(7); | ||
+ | Массив.Добавить(НоваяСтрокаМассива); | ||
+ | </pre> | ||
- | Суть этого механизма заключается в том, что создаётся специальный файл, называемый схемой. Этот файл описывает структуру XML-файла. Если XML-файл соответствует этой структуре, | ||
- | Самым ярким | + | ====== XDTO-пакеты |
- | С точки зрения | + | ===== Описание |
- | ===== Получение типа объекта ===== | + | XDTO-пакеты предназначены для сохранения в конфигурации 1с схемы обмена данными между различными информационными системами по стандарту [[https:// |
- | Это наиболее трудный для понимания этап т.к. он не соответствует | + | |
- | Платформа позволяет использовать 2 вида схем - встроенные в конфигурацию [[1c:общие:пакетыXDTO|XDTO-пакеты]] | + | У каждого XDTO-пакета, подобно любому другому объекту |
- | ==== Использование XDTO-пакетов ==== | ||
- | [[1c: | ||
- | <code 1c> | ||
- | ТипОбъектаНоменклатура = ФабрикаXDTO.Тип(" | ||
- | </ | ||
- | Здесь [[1c: | ||
- | <WRAP round tip> | + | ===== URI пространства имён |
- | ==== Использование файлов с описанием схемы XML ==== | + | Имя пакета относится исключительно к самому объекту конфигурации и нигде не фигурирует |
- | Такие | + | |
- | <code 1c> | + | |
- | МояФабрикаXDTO = СоздатьФабрикуXDTO(" | + | |
- | ТипОбъектаНоменклатура = МояФабрикаXDTO.Тип(" | + | |
- | </ | + | |
- | Здесь мы использовали глобальную функцию [[1c: | + | |
- | ===== Создание объекта XDTO ===== | + | В конфигурации |
- | Сами объекты XDTO также создаются фабрикой объектов. Причём | + | |
- | <code 1c> | + | |
- | Номенклатура = МояФабрикаXDTO.Создать(ТипОбъектаНоменклатура); | + | |
- | </ | + | |
- | В результате | + | |
- | ===== Запись объектов XDTO в файл ===== | + | Имена типов, описываемые в XDTO-пакетах, должны быть |
- | Прежде чем записать объект, его нужно заполнить. Принципы заполнения схожи с заполнением фиксированной структуры для реквизитов базовых типов, и с созданием объекта XDTO для прочих | + | |
- | ==== Заполнение объекта XDTO ==== | + | URI пространства имён обычно |
- | Использование фабрики объектов на этом не закончится. Ведь у переменной Номенклатура есть несколько | + | |
- | <code 1c> | + | |
- | Номенклатура.Наименование = "Носки суровые"; | + | |
- | </ | + | |
- | Более сложные типы | + | |
- | <code 1c> | + | |
- | ТипОбъектаЕдиницаИзмерения = МояФабрикаXDTO.Тип(" | + | |
- | ЕдиницаИзмерения = МояФабрикаXDTO.Создать(ТипОбъектаЕдиницаИзмерения); | + | |
- | ЕдиницаИзмерения.ОКЕИ = 796; | + | |
- | ЕдиницаИзмерения.Наименование = " | + | |
- | Номенклатура.ЕдиницаИзмерения = ЕдиницаИзмерения; | + | |
- | </ | + | |
- | Стандарт позволяет создавать реквизиты-списки и реквизиты-структуры без | + | |
- | <code 1c> | + | |
- | // Список элементов простых типов | + | |
- | Штрихкоды = Номенклатура.ПолучитьСписок(" | + | |
- | Штрихкоды.Добавить(" | + | |
- | Штрихкоды.Добавить(" | + | |
- | // Список элементов | + | ===== Конструктор XDTO-пакетов ===== |
- | ПрочиеЕдиницыИзмерения = Номенклатура.ПолучитьСписок(" | + | |
- | ЕдиницаИзмерения = МояФабрикаXDTO.Создать(ТипОбъектаЕдиницаИзмерения); | + | |
- | ЕдиницаИзмерения.ОКЕИ = 166; | + | |
- | ЕдиницаИзмерения.Наименование | + | |
- | ПрочиеЕдиницыИзмерения.Добавить(ЕдиницаИзмерения); | + | |
- | </ | + | |
- | Здесь мы получаем объект-список методом [[1c:объекты:ОбъектXDTO: | + | Для |
- | Получение типа элементов-структур немного напоминает работу с метаданными конфигурации. Используем метод [[1c:объекты: | + | {{http://i.imgur.com/rrPUwtV.png}} |
- | <code 1c> | + | С его |
- | // Список элементов-структур | + | |
- | Характеристики = Номенклатура.ПолучитьСписок(" | + | |
- | ТипЭлементаХарактеристика = Номенклатура.Свойства().Получить(" | + | |
- | Характеристика = МояФабрикаXDTO.Создать(ТипЭлементаХарактеристика); | + | |
- | Характеристика.Код = 1; | + | |
- | Характеристика.Наименование | + | |
- | Характеристики.Добавить(Характеристика); | + | |
- | // Реквизиты-структуры | ||
- | ТипОбъектаСчетаУчета = Номенклатура.Свойства().Получить(" | ||
- | Номенклатура.СчетаУчета = МояФабрикаXDTO.Создать(ТипОбъектаСчетаУчета); | ||
- | Номенклатура.СчетаУчета.СчетУчетаОстатков = " | ||
- | Номенклатура.СчетаУчета.СчетУчетаРасходов = " | ||
- | </ | ||
- | |||
- | Сейчас объект заполнен и его можно записать. | ||
- | |||
- | ==== Запись объекта XDTO ==== | ||
- | Для записи воспользуемся объектом типа [[1c: | ||
- | |||
- | <code 1c> | ||
- | РезультатXML = Новый ЗаписьXML; | ||
- | РезультатXML.УстановитьСтроку(" | ||
- | РезультатXML.ЗаписатьОбъявлениеXML(); | ||
- | МояФабрикаXDTO.ЗаписатьXML(РезультатXML, | ||
- | Результат = РезультатXML.Закрыть(); | ||
- | </ | ||
- | |||
- | В результате в переменной '' | ||
- | |||
- | <code xml> | ||
- | <?xml version=" | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | Первая строка была добавлена методом [[1c: | ||
- | |||
- | Если требуется результат записать сразу в файл, можно воспользоваться соответствующими методами объекта [[1c: | ||
- | |||
- | ===== Чтение объектов XDTO из файла ===== | ||
- | Процесс чтения проще чем процесс записи. Сначала выполняем непосредственно чтение с помощью объекта [[1c: | ||
- | |||
- | <code 1c> | ||
- | РезультатXML = Новый ЧтениеXML; | ||
- | РезультатXML.УстановитьСтроку(Результат); | ||
- | НоменклатураСчитанная = МояФабрикаXDTO.ПрочитатьXML(РезультатXML, | ||
- | РезультатXML.Закрыть(); | ||
- | НоменклатураСчитанная.Проверить(); | ||
- | </ | ||
- | |||
- | Как видим, [[1c: | ||
- | |||
- | В последней строке кода мы воспользовались методом [[1c: | ||
- | |||
- | Обращение к реквизитам аналогично обращению к реквизитам фиксированных структур. Для реквизитов-списков можно воспользоваться итератором: | ||
- | |||
- | <code 1c> | ||
- | Для Каждого Штрихкод Из НоменклатураСчитанная.Штрихкоды Цикл | ||
- | Сообщить(Штрихкод); | ||
- | КонецЦикла; | ||
- | </ | ||
- | |||
- | Разумеется, | ||