Имя: Пароль:
1C
1С v8
свойство XDTO объекта
0 Олег2510
 
21.08.13
12:08
Все делаю по инструкции от 1С, и не только по официальной,кучу мануалов перечитал в сети, но ни как не могу победить один баг, все время вылетает  ошибка
"Поле объекта недоступно для записи"
где поле объекта это

Свойство - свойства объекта XDTO

Как бы я не получал объект XDTO через фабрику
например вот так в моем случае
объектТип = ФабрикаXDTO.Тип("http://localhost:8090/TEST_Accor/";, "Contacts");
Объект = фабрикаXDTO.Создать(объектТип)

Объект.Свойство = "блабла" -------- всегда не работает

Свойство "Поле объекта недоступно для записи"


ПОМОГИТЕ!!!!! (версия платформы 8.2.18.61 ИБ серверный вариант)
1 Defender aka LINN
 
21.08.13
12:11
Телепат.длл подсказывает, что "Свойство" - это список XDTO
2 Олег2510
 
21.08.13
12:33
А почему так? ведь реально все делал по мануалу
3 Олег2510
 
21.08.13
12:35
И когда делаю Сообщить(Объект);

Получаю ОбъектXDTO
4 Олег2510
 
21.08.13
13:51
Вот схема XDTO пакета

<xs:schema xmlns:tns="http://localhost:8090/TEST_Accor/"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://localhost:8090/TEST_Accor/"; attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:complexType name="Contacts">
        <xs:choice>
            <xs:element name="FIO" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="phone" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
            <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
        <xs:anyAttribute namespace="##any" processContents="lax"/>
    </xs:complexType>
</xs:schema>
5 Serginio1
 
21.08.13
13:58
А где ты там свойство Свойство то увидел?
6 Олег2510
 
21.08.13
14:14
Это я привел пример "Свойство" так я конечно FIO задаю
7 Олег2510
 
21.08.13
14:20
Defender aka LINN Что-то мне хотел сказать, только я не понял что. В отладчике действительно FIO - это списокXDTO -т.е. он оказался прав! its greate! а дальше то что? Как мне записать значение в FIO - в синтаксиПомощнике ничего не нашел.
8 Serginio1
 
21.08.13
14:37
Ну так покажи полный код
FIO это войтво choice и доступ к нему нужно через типы
Коллекция = объектТип.Свойства;
СвойствоТип = Коллекция.Получить("choice").Тип;


В типовых есть функция

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

То есть можно тип получить

ПолучитьТипОбъектаCML("Contacts.choice", "http://localhost:8090/TEST_Accor/";)
9 Олег2510
 
21.08.13
14:48
Ниже полный код моего веб сервиса. Я сразу скажу что я нуб в 1С я веб программист, и заранее прошу прощения за не знания предметной области и(или) синтаксиса, если таковые обнаружаться

Функция  GetParam(getSTR)
    
    Возврат "привет " + getSTR;
КонецФункции

Функция GetComplex()
    

объектТип = ФабрикаXDTO.Тип("http://localhost:8090/TEST_Accor/";, "Contacts");
Объект = фабрикаXDTO.Создать(объектТип);  
  
  
    
    Объект.FIO = "blabla";
      

    
    
      
     //ТипСтрока=ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema","string";);
     //Артикул=ФабрикаXDTO.Создать(ТипСтрока,"000000");
    
      
      
//Выборка = Справочники.СотрудникиОрганизаций.Выбрать();

//Массив = Новый Массив;
//Пока Выборка.Следующий()  Цикл
    // Массив.Добавить(Выборка.Наименование);
//КонецЦикла;

//Для каждого Элемент из Массив Цикл
    //Сообщить(Элемент);
    
//КОнецЦикла    

Возврат Объект;


КонецФункции
10 Serginio1
 
21.08.13
15:02
Сделай так
Объект = фабрикаXDTO.Создать(объектТип);
Коллекция = объектТип.Свойства;
СвойствоТип = Коллекция.Получить("choice").Тип;
Свойство=фабрикаXDTO.Создать(СвойствоТип);
Свойство.FIO = "blabla";

Объект.choice=Свойство;
11 Олег2510
 
21.08.13
15:21
Сделал. Пишет ошибку

Значение не является значением объектного типа

Уважаемый,Serginio1. Если от меня нужна финасовая стимуляция я готов обсудить этот момент. Нужно объяснить мне как использовать XDTO пакет в веб сервисе.

Так же можно обсудить возможность удаленного подключения к моему компу через TeamViewer.
12 Олег2510
 
21.08.13
15:24
13 Олег2510
 
21.08.13
15:29
Уточнение ошибки

Значение не является значением объектного типа (Тип)
14 Defender aka LINN
 
21.08.13
15:40
(7) Ну это же очевидно.
Объект.Свойство.Добавить(ЭлементКоллекцииXDTO)
15 Serginio1
 
21.08.13
15:46
А ты схему откуда выгрузил из 1С? Обычно в complexType  для определения полей идет sequence так, что по идее все должно работать
http://msdn.microsoft.com/ru-ru/library/ms256067.aspx
16 Serginio1
 
21.08.13
15:48
Все дошло наконец
Объект.FIO.Добавить("blabla") не посмотрел на minOccurs="0" maxOccurs="unbounded"/>
Посыпаю пеплом свою седую голову
17 Олег2510
 
21.08.13
15:55
ООУУУУУУУУУУУУУУУ!!!! СУпер мега крутые чуваки + 10000 всем к карме
18 Олег2510
 
21.08.13
15:59
Если нужна консультация по Python, PHP, Unity 3d, Высоким нагрузкам - обращайтесь с радостью отвечу
19 Олег2510
 
21.08.13
16:00
velmisoff123@gmail.com
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан