Имя: Пароль:
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) Спасибо. Пытался его заполнять, но эффект тот же.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn