Имя: Пароль:
1C
1С v8
XDTO-пакет, вложенный элемент
0 marinelli
 
16.08.12
14:07
Здравствуйте! Очень нужна помощь...
Пожалуйста, подскажите, где почитать. Есть XDTO-пакет. Не понимаю, как обратиться к подчиненным объектам.
Надежда только на форум) заранее премногоблагодарна!
1 Balonbl4
 
16.08.12
14:20
Просто по имени и обращаешься.
Есть например пакет TestPacket состоящий из TestPacketID (тип строка) и TestPAcketArray  тоже строка, но уже массив.
К id обращаешься TestPacket.TestPacketID
А к массиву, как и к любой другой коллекции.
2 neomarat
 
16.08.12
14:21
3 neomarat
 
16.08.12
14:25
4 marinelli
 
16.08.12
14:35
Спасибо, ссылки эти я изучила, всё равно ничего не поняла))
покажу на примере
помимо понимания у меня ещё и с изложением ситуации проблемы)))
http://s001.radikal.ru/i194/1208/dd/7a5f5ca6565d.jpg
например, есть такой xdto-пакет. Пока я понимаю только, как обратиться к объектам "Файл", "ИдФайл" и пр. А как обратиться к "СвУчДокОбор" и далее вниз по иерархии - не понимаю

   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("c:\1.xml");
   
   ЗаписьXML.ЗаписатьОбъявлениеXML(); // <?xml version="1.0" encoding="UTF-8"?>
   
   Тип_Док  = ФабрикаXDTO.Тип("SFAKT", "Файл");
   Док_XDTO = ФабрикаXDTO.Создать(Тип_Док);

Очень дико сорри за многобукв и женскую глупость((
5 Balonbl4
 
16.08.12
14:50
(4) Через точку и обращайся, как к обычному объекту
6 marinelli
 
16.08.12
14:55
Тут всё ок:
Док_XDTO.ВерсПрог = "1С:Предприятие 8";

Как правильно обратиться в данном случае?
Значение не является значением объектного типа (ИдОтпр)
Док_XDTO.СвУчДокОбор.ИдОтпр = "тест";
7 Balonbl4
 
16.08.12
15:11
(6) сдается мне что СвУчДокОбор - это массив
8 marinelli
 
16.08.12
15:16
а как к нему обратиться?..
9 Balonbl4
 
16.08.12
15:19
(8) Если это действительно массив, то так:

Для Каждого СтрокаХМЛ Из Док_XDTO.СвУчДокОбор Цикл
   
       СтрокаХМЛ.ИдОтпр = "тест";
   
КонецЦикла;
10 Serginio1
 
16.08.12
15:23
(8)
Типа такого
ФабрикаXDTO=Прокси.ФабрикаXDTO;
ТипТаблица        = ФабрикаXDTO.Тип(ПространствоИмен, "Таблица");
   Таблица     = ФабрикаXDTO.Создать(ТипТаблица);
   ТипСтрокаТаблицы = ФабрикаXDTO.Тип(ПространствоИмен,"СтрокаТаблицы");

СтрокаТаблицы            = ФабрикаXDTO.Создать(ТипСтрокаТаблицы );

ОтветТаблицаЦен.СвойствоСписок.Добавить(СтрокаТаблицыЦен);
11 marinelli
 
16.08.12
15:33
видимо не массив, потому как не получается))
Пробую сделать так:
   Тип_СвУчДокОбор = ФабрикаXDTO.Тип("SFAKT", "СвУчДокОбор");
   СвУчДокОбор_XDTO = ФабрикаXDTO.Создать(Тип_СвУчДокОбор);

Ошибка при вызове метода контекста (Создать)
   СвУчДокОбор_XDTO = ФабрикаXDTO.Создать(Тип_СвУчДокОбор);    
по причине:
Несоответствие типов (параметр номер '1')
12 marinelli
 
16.08.12
15:34
Тип_СвУчДокОбор - Неопределено
13 Serginio1
 
16.08.12
15:34
А "Файл.СвУчДокОбор"
14 Serginio1
 
16.08.12
15:35
Вообще посмотри в отладчике пакет фабрики
15 marinelli
 
16.08.12
15:40
16 marinelli
 
16.08.12
15:41
17 Serginio1
 
16.08.12
15:45
Посмотри ФабрикаXDTO.Пакеты или что типа этого. Начни с ФабрикаXDTO
18 Balonbl4
 
16.08.12
15:47
ТС пора бы уже выкладывать фотку в профиль.
19 Serginio1
 
16.08.12
15:47
Ты кстати покажи типы которые справа
20 Serginio1
 
16.08.12
15:49
Покажи тип СвУчДокОбор
21 marinelli
 
16.08.12
15:49
про ФабрикаXDTO.Пакеты в синтакс-помощнике ничего непонятно(

фотки хоть все выложу, распечатаю и по почте всем "в этом чате" отправлю, если разобраться поможете))
22 Serginio1
 
16.08.12
15:53
Да не в синтаксис а в Отладчике.
У тебя обыкновенная структура.  У каждого реквизита структуры есть свой тип. Вот по нему и создавай не не по имени реквизита
23 Serginio1
 
16.08.12
15:56
(22) Да странная структура. Нужно ииследовать пакет. Не сталкивался с таким. Откуда накопала такую схему?
24 Serginio1
 
16.08.12
16:01
Посмотри в отладчике ФабрикаXDTO.Тип("SFAKT", "Файл").Свойства
25 marinelli
 
16.08.12
16:02
ееее! спасибо огромное!
ФабрикаXDTO.Создать(Тип_Док.Свойства[3].Тип)

схема из типовой бухгалтерии 2.0
26 Serginio1
 
16.08.12
17:06
(25) Да уж. А какой строковый тип там указан? Вообще номальные люди отдельно тип создают и реквизиту присваивают тип.
27 marinelli
 
16.08.12
17:25
а тип никакой не указан))
28 Serginio1
 
16.08.12
17:31
(27) А что там показывает Тип_Док.Свойства[3].Тип.Имя или локальноеИмя
29 marinelli
 
16.08.12
18:03
Имя = ""
ЛокальноеИмя - имя объекта не обнаружено
30 Serginio1
 
16.08.12
18:05
(29) Ясно. Спасибо.
31 marinelli
 
17.08.12
15:50
Вам спасибо!
32 Serginio1
 
20.08.12
12:24
Посмотрел УТ там есть такая функция

Функция ПолучитьТипОбъектаCML(Тип, ВерсияСхемы) Экспорт
   
   МассивПути = СтрРазделить(Тип, ".");
   
   ПервыйЭлемент = МассивПути[0];
   Если Лев(ПервыйЭлемент,1) = "{" И Прав(ПервыйЭлемент,1) = "}" Тогда
       ИмяПакета = Сред(ПервыйЭлемент, 2, СтрДлина(ПервыйЭлемент) - 2);
       Коллекция = ФабрикаXDTO.Пакеты.Получить(ИмяПакета).КорневыеСвойства;
   ИначеЕсли ВерсияСхемы <> "4.02" Тогда
       ТипОбъекта = ФабрикаXDTO.Тип(ВерсияСхемы, ПервыйЭлемент);
       Коллекция = ТипОбъекта.Свойства;
   Иначе
       ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd", ПервыйЭлемент);
       Коллекция = ТипОбъекта.Свойства;
   КонецЕсли;
   
   МассивПути.Удалить(0);
   Пока МассивПути.Количество() > 0 Цикл
       
       Если Коллекция = Неопределено Тогда
           Возврат Неопределено;
       КонецЕсли;
       
       Свойство = Коллекция.Получить(МассивПути[0]);
       Если Свойство = Неопределено Тогда
           Возврат Неопределено;
       КонецЕсли;
       
       ТипОбъекта = Свойство.Тип;
       МассивПути.Удалить(0);
       Попытка
           Коллекция = ТипОбъекта.Свойства;
       Исключение
           Коллекция = Неопределено;
       КонецПопытки;
       
   КонецЦикла;
   
   Возврат ТипОбъекта;
   
КонецФункции
33 Serginio1
 
20.08.12
12:26
И вызов соответственно
ПространствоИменСхемы = "SFAKT";
СвУчДокОбор = ПолучитьОбъектТипаCML("Файл.СвУчДокОбор", ПространствоИменСхемы);