Имя: Пароль:
1C
 
Работа со списками XDTO
0 SeraFim
 
23.03.11
08:24
Не могу разобраться со списками.
Сделал такой вот тестовый примерчик:
создал пакет XDTO. В нем - тип значения, например, "Неделя".
В нем указал:
 вариант - "список"
 тип - "string"
В web-сервисе создал операцию "ВернутьНеделю()", без параметров, тип возвращаемого значения - "Неделя".
В коде этой операции прописываю:
   НеделяТип = ФабрикаXDTO.Тип("http://localhost/web", "Неделя");
   Неделя = ФабрикаXDTO.Создать(НеделяТип);
А дальше как???
Неделя.Добавить("Понедельник"); - ошибка, так как не объектный тип
Неделя = "понедельник"; - возвращает только последнюю строку.

Документацию читал - там только описание свойств/методов. А вот конкретных примеров нет :(
в общем и вопрос - как все это заполнить?
и заодно, чтоб разобраться: последовательностьXDTO тоже не понятно как с ней работать.
1 SeraFim
 
24.03.11
03:24
Ребятааа, ну что, никто с этой бякой не работал, что ли?(((
2 sda553
 
24.03.11
06:35
Наводишься по XDTO пакету в конфигурации, нажимаешь правой кнопкой мыши и выбираешь "Экспорт XML схемы". Получившуюся XML выкладываешь сюда на форум. Тогда будет всем понятно что там у тебя за неделя
3 SeraFim
 
24.03.11
08:28
Ну, про неё я и в самом начале расписал, но вот:

<xs:schema xmlns:tns="http://localhost/web" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://localhost/web" attributeFormDefault="unqualified" elementFormDefault="qualified">
   <xs:simpleType name="Неделя">
       <xs:list itemType="xs:string"/>
   </xs:simpleType>
</xs:schema>

еще раз обращаю внимание - пример тестовый, никакого смысла в его использовании нет, просто чтоб разобраться :)
4 sda553
 
24.03.11
09:31
<xs:schema xmlns:tns="http://localhost/web" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://localhost/web" attributeFormDefault="unqualified" elementFormDefault="qualified">
   <xs:complexType name="Неделя">
       <xs:sequence>
           <xs:element name="ЭлементСпискаНедели" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
   </xs:complexType>
</xs:schema>

Вот так сделай и потом программно

НеделяТип = ФабрикаXDTO.Тип("http://localhost/web", "Неделя");
  Неделя = ФабрикаXDTO.Создать(НеделяТип);
Неделя.ЭлементСпискаНедели.Добавить("Понедельник");
5 SeraFim
 
24.03.11
09:56
Спасибо, но это не совсем то, что нужно. С этим я и так уже разобрался :)
В данном случае мы получаем "Тип Объекта XDTO", а в моем первом примере - "Тип Значения XDTO". У "Типа Значения XDTO" есть 3 варианта: атомарный, список и объединение. Вот с ними-то я и хочу разобраться :)
6 sda553
 
24.03.11
10:10
ТОгда еще проще

НеделяТип = ФабрикаXDTO.Тип("http://localhost/web", "Неделя");
Неделя = ФабрикаXDTO.Создать(НеделяТип);
Неделя.Список.Добавить("понедельник");
7 SeraFim
 
24.03.11
10:15
Ошибка:
"Значение не является значением объектного типа (Список)"
8 sda553
 
24.03.11
10:20
ага, вижу. Его только читать можно почему то
9 SeraFim
 
24.03.11
10:28
Не знаю, может поможет, наведет вас на мысль:
НеделяТип = ФабрикаXDTO.Тип("http://localhost/web", "Неделя");
Неделя = ФабрикаXDTO.Создать(НеделяТип);
Неделя = "понедельник";
Неделя = "вторник";
Неделя = "среда";

На выходе получаю "Среда". Тип - ФиксированныйМассив
10 sda553
 
24.03.11
10:34
Вот так у меня получилось!


НеделяТип = ФабрикаXDTO.Тип("http://localhost/web", "Неделя");
Неделя = ФабрикаXDTO.Создать(НеделяТип,"понедельник вторник среда");
Сообщить(Неделя.Список.Получить(0).Значение);
Сообщить(Неделя.Список.Получить(1).Значение);
Сообщить(Неделя.Список.Получить(2).Значение);
11 SeraFim
 
24.03.11
10:52
Ух ты, отлично :) Спасибо большое!!!
А как быть, если у "Неделя" тип не строка, а, например, дата?