Имя: Пароль:
1C
1С v8
XDTO-пакеты
0 PuhUfa
 
19.01.16
08:48
Есть сторонний xsd. На основании него, импортом делаю новый XDTO-пакет.
https://pp.vk.me/c633123/v633123674/107af/iiftg4Ezy-c.jpg
При попытке выполнить
ФабрикаXDTO.Тип("OMS-Tomsk", "ZL_LIST")
Получаю Неопределено.
Что я не так делаю?
1 Записьдампа
 
19.01.16
09:02
Пытается использовать имя свойства вместо имени типа.
2 PuhUfa
 
19.01.16
09:15
(1) т.е. такая схема не взлетит?
3 Записьдампа
 
19.01.16
09:19
(2) Понятия не имею. На картинке выглядит неплохо, если конечно не фотошоп.
4 PuhUfa
 
19.01.16
09:33
(3) могу на мыло кинуть -)

Если руками создаю со структурой вида:
https://pp.vk.me/c633123/v633123674/107b6/-GDtapEmzjI.jpg
то все нормально
а со структурой из (0) не хочет -(
5 Записьдампа
 
19.01.16
09:44
(4) Естественно. Там же вполне по русски написано - на первой картинке ZL_LIST это имя свойства, а на второй - имя типа.
Нельзя создать тип, если его нет. Так-то! =)
6 PuhUfa
 
19.01.16
09:48
(5) я твой посыл в (1) понял -)
вопрос можно ли это обойти что бы не переносить схему рукам а использовать импортированную.
ФабрикаXDTO.Создать(<Тип>)
требует "тип" и как его получить для схемы вида (0) я не знаю -(
7 Записьдампа
 
19.01.16
09:48
В чем вопрос-то? Почему возвращается неопределено?
8 Записьдампа
 
19.01.16
09:49
(6) А. Получи у пакета свойство по имени и возьми у него тип, там метод есть. Будет вполне себе анонимный тип
9 RomaH
 
naïve
19.01.16
09:52
(0) это нормально
для того что бы типы понимало их надо РУКАМИ описывать
но, поверь - оно тебе не надо

    package = ПолучитьСтруктуруТиповXDTOПакета(ФабрикаXDTO.Тип(ИмяПакета,"package"));

    КорневойРаздел = ФабрикаXDTO.Создать(package.Тип);
    
    КорневойРаздел.body = ЗаполнитьДокумент(РезультатЗапросаПоДокументам, package.body,ПериодОтчета,ИмяПакета);


// Возвращает структуру со всеми типами:
// каждое имя структуры содержит обязательное поле Тип
// и необязательное поле с подчинённой структурой следующего типа
// например: package.Тип - тип корневого элемента
// package.body - подчинённый элемент
// package.body.Тип - тип элемента body
// package.body.bill - подчинённый элемент
// package.body.bill.Тип - тип элемента bill
Функция ПолучитьСтруктуруТиповXDTOПакета(ТекущийЭлемент)
    ТипЭлемента = Новый Структура("Тип", ТекущийЭлемент);
    Для каждого Свойство из ТекущийЭлемент.Свойства Цикл
        Если Свойство.Форма = ФормаXML.Элемент Тогда
            ТипЭлемента.Вставить(Свойство.Имя, ПолучитьСтруктуруТиповXDTOПакета(Свойство.Тип));
        КонецЕсли;
    КонецЦикла;
    Возврат ТипЭлемента;
КонецФункции
10 RomaH
 
naïve
19.01.16
09:54
11 RomaH
 
naïve
19.01.16
09:56
(0) на кого работаешь?
12 RomaH
 
naïve
19.01.16
10:00
у нас получилось из исходником вытянуть вот такую структуру
http://cloud.screenpresso.com/tW6ic/2016-01-19_09h59_51.png
13 Записьдампа
 
19.01.16
10:04
(6) Как-то типа
Пакет = ФабрикаXDTO.Пакеты.Получить("OMS-Tomsk");
Пакет.КорневыеСвойства.Получить("ZL_LIST").Тип

Или Тип() это метод, не помню, надо в СП подглядеть.
14 PuhUfa
 
19.01.16
10:05
(10)(12) Для других регионов есть и такие схемы. А вот ТФОМС Томска прислал схему вида (0).
(11) у нас сеть клиник по РФ. В каждом регионе все по своему.
15 PuhUfa
 
19.01.16
10:13
(13) Спс. Так взлетает.
16 RomaH
 
naïve
19.01.16
10:42
(14) мы её регекспами к такому виду привели
17 PuhUfa
 
19.01.16
12:05
(16) понял. спс
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.