Имя: Пароль:
1C
1С v8
Как побороть "не правильный" XSD
0 pozdeev-artem
 
11.02.17
07:55
Доброго дня!
Есть, по моему разумению, не правильный файл XSD.
Его генерирует некий web-сервис (не 1С).

Я получаю схему и создаю объекты по описанию из XSD.
При попытке заполнить свойства одного из элементов получаю ошибку.
Точнее разные варианты попыток вызывают разные ошибки.

Вопрос к знатокам:
чего не хватает файлу XSD?

Нижайший поклон и благодарность за попытку дать конструктивный совет.

СХЕМА:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.myuniqnamespace.com/XMLSchema"; xmlns:statf="http://www.myuniqnamespace.com/XMLSchema"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified">
  <xs:element name="document_container">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="acts" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="acts">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="act"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="act">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="act_date"/>
        <xs:element ref="act_number"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
<xs:element name="act_number" type="xs:NCName"/>
  <xs:element name="act_date" type="xs:NMTOKEN"/>
</xs:schema>

КОД 1С:
    // ПОЛУЧЕНИЕ СХЕМЫ
    ИмяФайлаСхемы = КаталогДокументов + "\testschema.xsd";
    ФайлыXSD = Новый Массив();
    ФайлыXSD.Добавить(ИмяФайлаСхемы);
    ЛокальнаяФабрикаXDTO = СоздатьФабрикуXDTO(ФайлыXSD);
    
    ПакетMUNS = ЛокальнаяФабрикаXDTO.Пакеты[1];

    // ТИПЫ
    Тип_document_container = ПакетMUNS.КорневыеСвойства.Получить("document_container").Тип;
    
    Тип_acts = ПакетMUNS.КорневыеСвойства.Получить("acts").Тип;
    
    Тип_act = ПакетMUNS.КорневыеСвойства.Получить("act").Тип;
    
    Тип_act_number = ПакетMUNS.КорневыеСвойства.Получить("act_number").Тип;
    
    Тип_act_date = ПакетMUNS.КорневыеСвойства.Получить("act_date").Тип;
    
    // СОЗДАВАЕМЫЕ ОБЪЕКТЫ
    document_container = ЛокальнаяФабрикаXDTO.Создать(Тип_document_container);
    
    acts = ЛокальнаяФабрикаXDTO.Создать(Тип_acts);
    
    act = ЛокальнаяФабрикаXDTO.Создать(Тип_act);
    
    act_number = ЛокальнаяФабрикаXDTO.Создать(Тип_act_number, "N12345");
    act_date = ЛокальнаяФабрикаXDTO.Создать(Тип_act_date, Дата(2015,1,1));
    
// А ВОТ И ОШИБКИ

    act.act_number = act_number;// Поле объекта не обнаружено (act_number)
    act.Установить("act_number",act_number);// Свойство 'act_number' не обнаружено
    
    // метод act.свойства().Количество() возвращает 0
1 Fram
 
11.02.17
10:53
дык, а что отладчик то говорит?
2 Fram
 
11.02.17
10:54
а тут .Пакеты[1] не 0 случайно нужен?
3 Злопчинский
 
11.02.17
11:03
(0) я совсем не спец
Но как-то мнеиксжется что act_number это не атрибут
4 pozdeev-artem
 
11.02.17
16:01
(1) Объект act создается, но свойств никаких не имеет
(2) Пакеты[1] содержит типы данных из пространства имен http://www.myuniqnamespace.com/XMLSchema

(3) Логика поставщиков web-сервиса говорит, что это атрибут/свойство объекта act.
Там сервис по обмену документами между контрагентами. И номер акта выполненных работ интуитивно тянет сохранить в атрибуте "act_number". Может я Ваш коммент не правильно понял.
5 Неверный Параметр И
 
12.02.17
11:39
(4) maxOccurs="unbounded" прямо кричит в полный голос о том, что это список.

Но тебя "интуитивно тянет" к выдумыванию "логики поставщиков web-сервиса", ок.
6 pozdeev-artem
 
13.02.17
10:04
(4) Спасибо за подсказку. Если не затруднит, пожалуйста поясните коротко, Должна ли в этом случае работать
конструкция act["act_number"].Добавить(act_number)?
Я вижу в отладке что объект act не содержит никаких свойств, поэтому не ясно, как добавить в act одно или несколько свойств act_number.

Извините, если громоздко объясняюсь.
7 DrShad
 
13.02.17
10:16
если это вся схема, не проще вообще с ней не заморачиваться и просто собрать необходимый файл?
8 Cyberhawk
 
13.02.17
10:20
act - это список / массив
9 pozdeev-artem
 
13.02.17
18:01
(7) Конечно не вся. Привел уменьшенный экземпляр чтобы ускорить чтение.
Меня смущает отсутствие имен у типов. Предполагаю, что это является причиной проблемы с заполнением объектов созданным по этой схеме.

(8) Спасибо. Пытался его заполнять, но эффект тот же.