Имя: Пароль:
1C
 
Фабрика XDTO (Заполнение свойств)
0 LeyNoEscrita
 
24.06.13
06:27
Здравствуйте. Помогите пожалуйста. В 1С v8.2 имеется объект данных "Фабрика XDTO" что является, практически, синонимом схеме XML. И в этой фабрике есть поля: - Свойства
- Типы значений
- Типы объектов.
Не как не могу понять как заполнить "Коллекцию свойств XDTO", код представлен ниже. Помогите кто чем может...

   //************************************************************************************************
   ФайлыXSD = Новый Массив;
   ФайлыXSD.Добавить("D:\XMLSchema1.xsd");
   Фабрика = СоздатьФабрикуXDTO(ФайлыXSD);
   //Заполним свойства XML
   Пакет = Фабрика.Пакеты.Получить("http://tempuri.org/XMLSchema.xsd");
   Для Каждого ТекСвойство Из Пакет.КорневыеСвойства Цикл //Получаем свойство "Файл"
       Для Каждого ТекДочСвойство Из ТекСвойство.Тип.Свойства Цикл //Получаем все дочерние свойства
           Если ТекДочСвойство.Имя = "ВерсФорм" Тогда
               //ТекДочСвойство.ЗначениеПоУмолчанию = "5.01";
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   ФабФайл = Фабрика.Тип("http://tempuri.org/XMLSchema.xsd", "ФИОТип");
   Сотр = Фабрика.Создать(ФабФайл);
   Сотр.Имя = "Иван";
   Сотр.Фамилия = "Иванов";
   Сотр.Отчество = "Иванович";
   
   Параметры = Новый ПараметрыЗаписиXML("windows-1251", "1.0");
   Файл = Новый ЗаписьXML;
   Файл.ОткрытьФайл(ЭлементыФормы.Адрес.Значение, Параметры);
   Файл.ЗаписатьОбъявлениеXML();
   Фабрика.ЗаписатьXML(Файл, Сотр);
   Файл.Закрыть();
1 LeyNoEscrita
 
24.06.13
06:30
Вопросы собственно по следующему участку кода (остальное все работает)

   Пакет = Фабрика.Пакеты.Получить("http://tempuri.org/XMLSchema.xsd");
   Для Каждого ТекСвойство Из Пакет.КорневыеСвойства Цикл //Получаем свойство "Файл"
       Для Каждого ТекДочСвойство Из ТекСвойство.Тип.Свойства Цикл //Получаем все дочерние свойства
           Если ТекДочСвойство.Имя = "ВерсФорм" Тогда
               //ТекДочСвойство.ЗначениеПоУмолчанию = "5.01";
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
2 ЧеловекДуши
 
24.06.13
07:20
А оно тебе зачем?
Обмены пишешь рукотворные? :)
3 LeyNoEscrita
 
24.06.13
07:25
Причем тут обмены???
Приказ ФНС России (какой то там номер) чтобы сдавать книги покупок книги продаж и журнал счет-фактур выданных и полученных в формате MXL. А так как предприятие весьма сложной Структуры (В том числе и бухгалтерия) 1С полностью с самописной конфигурацией. Вот и пишу сам себе обнавление 1С.

В общем не важно зачем. Пожалуйста по теме.
4 LeyNoEscrita
 
24.06.13
07:29
Срри не MXL  а XML
5 ЧеловекДуши
 
24.06.13
07:30
+(1) Зачем это делать руками?

(3) >>> в формате XML

Тогда ты не с того конца зашёл, XDTO нужен в сущности для полу автоматической выгрузки метаданных БД в другую БД или среду.

Вот как мне проще всего заполнять "своими руками", а не через "XDTO" :)
6 LeyNoEscrita
 
24.06.13
07:40
Человек Души))) А предложи ка мне альтернативу...

Ну и собственно на заметку... А XDTO выгружает данные в полуавтоматическом режиме куда??? в какие файлы??? Для справки  я в коде не пользовался XDTO а пользовался Cхемой XML (что является ПРАКТИЧЕСКИ синонимами).

Повторяю. По теме.... ну пожалуйста.
7 ЧеловекДуши
 
24.06.13
07:43
(6) ЗаписьXML (XMLWriter)
8 ЧеловекДуши
 
24.06.13
07:45
+(6) Наверняка перед тобой должно лежать типо "Формат от ФНС № ххх" с полным описанием узлов, формата представления данных :)
9 ЧеловекДуши
 
24.06.13
07:49
+(6) >>> По теме.... ну пожалуйста.

По теме, что за фигня в (1)? Я же говорю, через "XDTO" грузится чут ли не весь объект метаданных.
А основываясь на фабрикеXDTO в файл XML все заполняется чуть ли не в пару строчек но на основе объектов метаданных и содержимого БД, т.е. пишется весь документ махом и не надо долго думать по узлам.

http://v8.1c.ru/overview/xdto.htm?printversion=1

Вот тут более подробней... что такое XDTO
http://v8.1c.ru/overview/Term_000000274.htm#1
10 Ageres
 
24.06.13
08:00
(9) Сам-то прочитал, для чего XDTO нужен?
Одно из применений: создание собственной системы типов и значений для обработки произвольных данных
11 LeyNoEscrita
 
24.06.13
08:02
Спасибо. На конец то более менее по теме)))
1) Так как конфигурация полностью самописная сериализатор я не буду использовать просто потому что сеарилизатор предназначен для быстрой и просто выгрузки/загрузки БД (он также будет путаться с полями типа "ПРЧА_ОТ2_ФИОСотрудника") а мне необходимо точное соответствие поля "ПРЧА_ОТ2_ФИОСотрудника" Трем полям (которые есть в коде) Фамилия Имя Отчество.

2) Ты совершенно прав у меня лежат стандарты ФНС России и (ими же утвержденная) схема XML c расширением *.XSD которая посредством стандартной функции 1С (Контекстное меню) импортируется в "ФабрикаXDTO". Все чуточку сложнее в общем..

3) Спасибо за ссылки. Но прежде чем написать эту тему, я перерыл весь интернет и на офф сайте 1С конечно тоже был. И если ты перейдешь по ним ты убедишься что описанны там лишь "Типы Объектов", а про то как заполнить свойства ни слова.... В том числе и в Руководстве разработчика (Книжка от 1С)
12 Ageres
 
24.06.13
08:04
(0) ПакетXDTO (XDTOPackage)
КорневыеСвойства (RootProperties)
Использование:

Только чтение.
Описание:

Тип: КоллекцияСвойствXDTO.
Содержит коллекцию корневых свойств пакета XDTO.
13 Ageres
 
24.06.13
08:05
(0) На инфостарте работу с XDTO подробно описывали.
14 Ageres
 
24.06.13
08:10
Вот у меня рабочий код:

НаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML("http://www.tempuri.org/CatalogPrice");
Фабрика = Новый ФабрикаXDTO(НаборСхемXML);
   
ДанныеТип = Фабрика.Тип("http://www.tempuri.org/CatalogPrice","Данные");
ОписаниеНоменклатурыТип = Фабрика.Тип("http://www.tempuri.org/CatalogPrice","ОписаниеНоменклатуры");
ОписаниеШтрихкодТип = Фабрика.Тип("http://www.tempuri.org/CatalogPrice","ОписаниеШтрихКода");
   
ДанныеXDTO = Фабрика.Создать(ДанныеТип);
ДанныеXDTO.ИдОтправителя = Строка(ЮрФизЛицо.УникальныйИдентификатор());
15 Defender aka LINN
 
24.06.13
08:16
(0) А перевод можно? Что именно не получается-то?
16 LeyNoEscrita
 
24.06.13
08:27
Defender aka
Я не знаю еще как объяснить...(((
Вот ссылка на такойже мой топик тока он с картинками

http://forum.infostart.ru/forum26/topic88450/
17 Ageres
 
24.06.13
08:34
Вот у меня рабочий код:

НаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML("http://www.tempuri.org/CatalogPrice");
Фабрика = Новый ФабрикаXDTO(НаборСхемXML);
   
ДанныеТип = Фабрика.Тип("http://www.tempuri.org/CatalogPrice","Данные");
ОписаниеНоменклатурыТип = Фабрика.Тип("http://www.tempuri.org/CatalogPrice","ОписаниеНоменклатуры");
ОписаниеШтрихкодТип = Фабрика.Тип("http://www.tempuri.org/CatalogPrice","ОписаниеШтрихКода");
   
ДанныеXDTO = Фабрика.Создать(ДанныеТип);
ДанныеXDTO.ИдОтправителя = Строка(ЮрФизЛицо.УникальныйИдентификатор());

Пока Выборка.Следующий() Цикл
   ОписаниеНоменклатурыXDTO = Фабрика.Создать(ОписаниеНоменклатурыТип);    
   ОписаниеНоменклатурыXDTO.Код            = ВыборкаТоваров.ТоварКод;
   ОписаниеНоменклатурыXDTO.Наименование        = ВыборкаТоваров.Наименование;

   ДанныеXDTO.Номенклатура.Добавить(ОписаниеНоменклатурыXDTO);
КонецЦикла;
18 Defender aka LINN
 
24.06.13
08:46

ТипФайл = Фабрика.Тип("http://tempuri.org/XMLSchema.xsd", "Файл");
Файл = Фабрика.Создать(ТипФайл);

Файл.ИдФайл = Идентификатор;

Ну и т.д.
19 LeyNoEscrita
 
24.06.13
09:07
Defender aka

Ты не прав. Значение "Файл" в фабрике XDTO это свойство а не Типы объектов. Твой код "ТипФайл = Фабрика.Тип("http://tempuri.org/XMLSchema.xsd", "Файл");" Вернет тебе значение Неопределено.

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

ТЕМА ЗАКРЫТА
20 ЧеловекДуши
 
24.06.13
09:11
(10) Да, объясни мне, что я неправ :)