Имя: Пароль:
1C
1С v8
ПостроительDOM
,
0 Pasha12312
 
25.02.13
00:20
Доброго времени суток. Разбираюсь с ПостроительDOM.
Вот выгрузка:
<СчетаНаОплату>
   <Документ>
       <Дата>2011-04-14T12:00:00</Дата>
       <Организация>Пілот ТД</Организация>
       <Контрагент>НДІ Автоматики</Контрагент>
       <ДоговорКонтрагента>Основний договір</ДоговорКонтрагента>
       <АдресДоставки/>
       <СтруктурнаяЕдиница>Р/р Пілот</СтруктурнаяЕдиница>
       <ВалютаДокумента>грн</ВалютаДокумента>
       <Комментарий/>
       <КратностьВзаиморасчетов>1</КратностьВзаиморасчетов>
       <КурсВзаиморасчетов>1</КурсВзаиморасчетов>
       <Склад>Головний склад</Склад>
       <СуммаВключаетНДС>false</СуммаВключаетНДС>
       <СуммаДОкумента>120000</СуммаДОкумента>
       <ТипЦен>Дрібнооптова</ТипЦен>
       <УчитыватьНДС>true</УчитыватьНДС>
       <АвторасчетНДС>true</АвторасчетНДС>
   </Документ>
   <Документ>
       <Дата>2011-04-17T17:00:00</Дата>
       <Организация>Добро</Организация>
       <Контрагент>Візіо</Контрагент>
       <ДоговорКонтрагента>2011/1</ДоговорКонтрагента>
       <АдресДоставки/>
       <СтруктурнаяЕдиница>Р/р Добро</СтруктурнаяЕдиница>
       <ВалютаДокумента>грн</ВалютаДокумента>
       <Комментарий/>
       <КратностьВзаиморасчетов>1</КратностьВзаиморасчетов>
       <КурсВзаиморасчетов>1</КурсВзаиморасчетов>
       <Склад>Головний склад</Склад>
       <СуммаВключаетНДС>true</СуммаВключаетНДС>
       <СуммаДОкумента>1574.4</СуммаДОкумента>
       <ТипЦен>Дрібнооптова</ТипЦен>
       <УчитыватьНДС>true</УчитыватьНДС>
       <АвторасчетНДС>true</АвторасчетНДС>

   </Документ>

.... вот код для загрузки:

Чтение = Новый ЧтениеXML;
   Чтение.ОткрытьФайл("C:\Users\user\Desktop\xml\schet.xml");
   ПостроительDOM = Новый ПостроительDOM;
   ДокументDOM  = ПостроительDOM.Прочитать(Чтение);
   
   POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("Документ");
   Для Позиц=0 По POSITION.Количество()-1 Цикл
       
       ДочерниеУзлы = POSITION[Позиц].ДочерниеУзлы;
       НоваяСтрока = СписокЗначений.Добавить();    
       Для каждого Узел Из ДочерниеУзлы Цикл
           Если Узел.ИмяУзла = "Дата" Тогда
           ИначеЕсли Узел.ИмяУзла = "Контрагент" Тогда
               НоваяСтрока.Контрагент = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "ДоговорКонтрагента" Тогда
               НоваяСтрока.ДоговорКонтрагента = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "АдресДоставки" Тогда
               НоваяСтрока.АдресДоставки = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "СтруктурнаяЕдиница" Тогда
               НоваяСтрока.СтруктурнаяЕдиница = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "ВалютаДокумента" Тогда
               НоваяСтрока.ВалютаДокумента = Узел.ТекстовоеСодержимое;        
           ИначеЕсли Узел.ИмяУзла = "Комментарий" Тогда
               НоваяСтрока.Комментарий = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "КратностьВзаиморасчетов" Тогда
               НоваяСтрока.КратностьВзаиморасчетов = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "КурсВзаиморасчетов" Тогда
               НоваяСтрока.КурсВзаиморасчетов = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "Склад" Тогда
               НоваяСтрока.Склад = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "СуммаВключаетНДС" Тогда
               НоваяСтрока.СуммаВключаетНДС = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "СуммаДОкумента" Тогда
               НоваяСтрока.СуммаДОкумента = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "ТипЦен" Тогда
               НоваяСтрока.ТипЦен = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "УчитыватьНДС" Тогда
               НоваяСтрока.УчитыватьНДС = Узел.ТекстовоеСодержимое;
           ИначеЕсли Узел.ИмяУзла = "АвторасчетНДС" Тогда
               НоваяСтрока.АвторасчетНДС = Узел.ТекстовоеСодержимое;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
проблема следующая, в СписокЗначений попалает только первый документ, так как я не знаю как опустится с узла "СчетаНаОплату" на "Документ", а сразу  начинаю с узла "Документ"...
Подскажите ,пожалуйста,  как сделать обход для каждого узла "Документ" , а не только для одного...
1 alexei366
 
25.02.13
00:54
СчетаНаОплату скорее всего будет у тя ЭлементДокумента, посмотри в отладчике, а следом значит все дочерние узды будут у тя Документ, или же у Документ взять свойство Следующий, оно по теории укажет тебе на следующий документ
2 Pasha12312
 
25.02.13
01:04
не совсем понял...имеется введу - Пока POSITION.Следующий ()...?
покажите , пожалуйста , что нужно изменить в коде.
3 zladenuw
 
25.02.13
01:14
СчетаНаОплату= ДокументDOM.ПолучитьЭлементыПоИмени("СчетаНаОплату");
   Для Позиц=0 По СчетаНаОплату.Количество()-1 Цикл
       
       Документ= СчетаНаОплату[Позиц].ДочерниеУзлы;
4 Pasha12312
 
25.02.13
01:35
так не получается... в СписокЗначений ничего не попадает.
5 alexei366
 
25.02.13
09:39
СчетНаОплату = ДокументDOM.ЭлементДокумента;

Для Каждого Документ Из СчетНаОплату.ДочерниеУзлы Цикл

// тута своё


КонецЦикла;
6 Pasha12312
 
25.02.13
12:08
попробовал так тоже, получается тоже самое...

СчетНаОплату = ДокументDOM.ЭлементДокумента;    
      Для Каждого Узел  Из СчетНаОплату.ДочерниеУзлы Цикл
           Если Узел.ИмяУзла = "Дата" Тогда
           ИначеЕсли Узел.ИмяУзла = "Контрагент" Тогда...........
7 alexei366
 
25.02.13
12:43
Узел это у тя "Документ", чтоб до даты добраться Узел.ДочерниеУзлы
8 alexei366
 
25.02.13
12:44
Яж написал в коде "Для Каждого Документ Из СчетНаОплату.ДочерниеУзлы Цикл"
9 Pasha12312
 
25.02.13
13:11
Алексей, написал как вы говорите .... при отладке во всех "Документ.ИмяУзла"  значение "Документ" .. "Документ.ТекстовоеСодержимое" значение имеет весь текст (Дата,Контрагент......)
В списокЗначений по прежнему не попадает...




ПостроительDOM = Новый ПостроительDOM;
   ДокументDOM  = ПостроительDOM.Прочитать(Чтение);
НоваяСтрока = СписокЗначений.Добавить();
СчетНаОплату = ДокументDOM.ЭлементДокумента;    
      Для Каждого Документ  Из СчетНаОплату.ДочерниеУзлы Цикл
           Если Документ.ИмяУзла = "Дата" Тогда
           ИначеЕсли Документ.ИмяУзла = "Контрагент" Тогда
               НоваяСтрока.Контрагент = Документ.ТекстовоеСодержимое;
           ИначеЕсли Документ.ИмяУзла = "ДоговорКонтрагента" Тогда
10 Шапокляк
 
25.02.13
13:29
(0) POSITION = ДокументDOM.ПолучитьЭлементыПоИмени("*","Документ"); не пробовали?
11 alexei366
 
25.02.13
13:33
Да    б л я т ь    


ПостроительDOM = Новый ПостроительDOM;
ДокументDOM  = ПостроительDOM.Прочитать(Чтение);
НоваяСтрока = СписокЗначений.Добавить();
СчетНаОплату = ДокументDOM.ЭлементДокумента;  

Для Каждого Документ  Из СчетНаОплату.ДочерниеУзлы Цикл

  Для Каждого УзелДокумента Из Документ.ДочерниеУзлы Цикл

      Если УзелДокумента.ИмяУзла = "Дата" Тогда
      ИначеЕсли УзелДокумента.ИмяУзла = "Контрагент" Тогда
           НоваяСтрока.Контрагент = Документ.ТекстовоеСодержимое;
      ИначеЕсли УзелДокумента.ИмяУзла = "ДоговорКонтрагента" Тогда
...............................


  КонецЦикла;

КонецЦикла;
12 Fragster
 
гуру
25.02.13
13:41
автору нужен не построитель дом, а фабрика XDTO
13 Fragster
 
гуру
25.02.13
13:42
Список = ФабрикаXDTO.Прочитать(Чтение);
Для каждого ЭлементСписка из Список Цикл
 Сообщить(ЭлементСписока.Организация);
КонецЦикла;
14 alexei366
 
25.02.13
13:53
У него пространства имен нет, а так-то можно и ФабрикуXDTO применить. Да и пока этого хватит, человек с ЧтенияXML начинал, пусть пока с ДокументDOM разберётся. И вообще  Pasha12312 пробуй побольше отладчиком пользоваться, там сразу всё поймешь что куда и откуда
15 Pasha12312
 
25.02.13
13:53
(11)
При отладке значение есть только у "Дата" ....


ПостроительDOM = Новый ПостроительDOM;
   ДокументDOM  = ПостроительDOM.Прочитать(Чтение);
   НоваяСтрока = СписокЗначений.Добавить();
   СчетНаОплату = ДокументDOM.ЭлементДокумента;  
   
   Для Каждого Документ  Из СчетНаОплату.ДочерниеУзлы Цикл
       
       Для Каждого УзелДокумента Из Документ.ДочерниеУзлы Цикл
           
           Если УзелДокумента.ИмяУзла = "Дата" Тогда
               НоваяСтрока.Дата = УзелДокумента.ТекстовоеСодержимое;
           ИначеЕсли УзелДокумента.ИмяУзла = "Контрагент" Тогда
               НоваяСтрока.Контрагент = УзелДокумента.ТекстовоеСодержимое;
           ИначеЕсли УзелДокумента.ИмяУзла = "ДоговорКонтрагента" Тогда
               НоваяСтрока.ДоговорКонтрагента = УзелДокумента.ТекстовоеСодержимое;.........
16 Fragster
 
гуру
25.02.13
13:53
(14) там все и без нее работает
17 alexei366
 
25.02.13
13:54
(16) Фиг его знает, помню как-то случайно затер пространство имен в пакете, так конфигуратор не давал сохранить
18 Fragster
 
гуру
25.02.13
13:56
(17) в конфигураторе ничего сохранять не надо
19 alexei366
 
25.02.13
13:56
(15) Ты точку останова сделай в цикле где получаешь УзелДокумента, к примеру на первом Если, и посмотри его свойства, там если не ошибаюсь есть ИмяУзла, ЛокальноеИмя и ещё всякая фигня.
20 alexei366
 
25.02.13
13:56
(18) Ты имеешь ввиду создавать Фабрику из файла
21 Fragster
 
гуру
25.02.13
13:58
(20) нет. просто сделать (13) безо всяких дополнительных приблуд. единственное, что потребуется - это через XMLЗначение() преобразовывать числа и даты - потому как там все текстовое содержимое будет строками
22 Fragster
 
гуру
25.02.13
13:58
ну и булево, да
23 alexei366
 
25.02.13
14:01
(21) я конешь сам не пробывал, но в СП пишет что преобразовывать при методе Прочитать без указания типа будет пытаться к любому поддерживаемому сериализацию, а эт как понимаю наличие xsd. Я конеш могу ошибаться.
24 Pasha12312
 
25.02.13
14:08
(19)
тут разобрался, значения попадают , но в СпискеЗначений все равно загружает  только 1-й документ.
25 Fragster
 
гуру
25.02.13
14:10
(23) а я - пробовал
26 alexei366
 
25.02.13
14:27
Ах да

Для Каждого Документ  Из СчетНаОплату.ДочерниеУзлы Цикл

НоваяСтрока = СписокЗначений.Добавить();



Вот так делай
27 alexei366
 
25.02.13
14:30
(25) А вот теперь представь, что у него в СчетаНаОплату будет только 1 Документ. И наверно Список превратиться в свойство, эт ему ещё логику распаралеливать придётся немного
28 Pasha12312
 
25.02.13
14:57
29 Pasha12312
 
25.02.13
14:57
30 Pasha12312
 
25.02.13
14:58
в файле выгрузки вообще находится 10 документов...
31 Pasha12312
 
25.02.13
15:01
делал как говорили:


ПостроительDOM = Новый ПостроительDOM;
   ДокументDOM  = ПостроительDOM.Прочитать(Чтение);
   НоваяСтрока = СписокЗначений.Добавить();
   СчетНаОплату = ДокументDOM.ЭлементДокумента;  
   
   Для Каждого Документ  Из СчетНаОплату.ДочерниеУзлы Цикл
       НоваяСтрока = СписокЗначений.Добавить();
       Для Каждого УзелДокумента Из Документ.ДочерниеУзлы Цикл
           
           Если УзелДокумента.ИмяУзла = "Дата" Тогда
               НоваяСтрока.Дата = УзелДокумента.ТекстовоеСодержимое;
           ИначеЕсли УзелДокумента.ИмяУзла = "Контрагент" Тогда
               НоваяСтрока.Контрагент = УзелДокумента.ТекстовоеСодержимое;
           ИначеЕсли УзелДокумента.ИмяУзла = "ДоговорКонтрагента" Тогда
32 Fragster
 
гуру
25.02.13
15:05
(27) обязательно превратится. но это 1 строка вместо бесконечных
           Если УзелДокумента.ИмяУзла = "Дата" Тогда
               НоваяСтрока.Дата = УзелДокумента.ТекстовоеСодержимое;
33 alexei366
 
25.02.13
15:49
(31) Ну во первых убери после
ДокументDOM  = ПостроительDOM.Прочитать(Чтение);
строку
НоваяСтрока = СписокЗначений.Добавить();
34 alexei366
 
25.02.13
15:50
И это в отладчике сколько циклов делает если поставить точку останова после Для Каждого Документ  Из СчетНаОплату.ДочерниеУзлы Цикл , на НоваяСтрока = СписокЗначений.Добавить();?
35 alexei366
 
25.02.13
16:00
(32) можно конешь автору ещё разочек ФабрикуXDTO предложить, но я думаю щас уже не согласиться.
36 Pasha12312
 
25.02.13
16:26
я проверил отладчиком "СчетНаОплату.ДочерниеУзлы" - количество  документов 10 (правильно), "Документ.ДочерниеУзлы" - тоже правильно показывает , а чего  цикл проходит только раз не понимаю..
... я б согласен делать через  ФабрикаXDTO, только ничего ниразу не делал через нее..

// как применить на моем примере?
Список = ФабрикаXDTO.Прочитать(Чтение);
Для каждого ЭлементСписка из Список Цикл
 Сообщить(ЭлементСписока.Организация);
КонецЦикла;
37 alexei366
 
25.02.13
16:35
(36) Посмотри СчетНаОплату.ДочерниеУзлы.Количество(), если 10 то значит гдето в коде или ошибка вылетает (хотя как понимаю нет), или же мож Прервать где написал, или СписокЗначений гдето очищаешь постоянно, или инициализируешь.
38 alexei366
 
25.02.13
16:41
Процедура Первая()

СчетНаОплату = ФабрикаXDTO.Прочитать(Чтение);

Если СчетНаОплату.Документ.Тип() = Тип("СписокXDTO") Тогда
  Вторая(СчетНаОплату.Документ);
Иначе

   Для Каждого Документ Из СчетНаОплату.Документ Цикл
       Вторая(Документ);
   КонецЦикла;

КонецЕсли;

КонецПроцедуры


Процедура Вторая(Документ)


   НоваяСтрока = СписокЗначений.Добавить();
   НоваяСтрока.Дата = Документ.Дата;
   .............



КонецПроцедуры
39 alexei366
 
25.02.13
16:42
Ой только поменяй ветки условия  в Первой процедуре, я перепутал чуток
40 Fragster
 
гуру
25.02.13
16:45
к (38):
для дат, чисел и булево надо использовать соответственно
НоваяСтрока.Дата = XMLЗначение(Тип("Дата"), Документ.Дата);
НоваяСтрока.Число = XMLЗначение(Тип("Число"), Документ.Число);
НоваяСтрока.Булево = XMLЗначение(Тип("Булево"), Документ.Бузевл);
41 Fragster
 
гуру
25.02.13
16:45
Бузевл = Булево :) хотя непринципиально
42 Pasha12312
 
25.02.13
16:49
сделал так:
Для Каждого Документ  Из СчетНаОплату.ДочерниеУзлы Цикл
       Количество = СчетНаОплату.ДочерниеУзлы.Количество();
       Сообщить(Количество);
//количество = 10 (это правильно по моему, так как  //"СчетаНаОплату" имеет в себе 10 "Документ-ов"..
//Сообщить вылетело 10 раз..
       НоваяСтрока = СписокЗначений.Добавить();
       Для Каждого УзелДокумента Из Документ.ДочерниеУзлы Цикл
           
//прервать и очищать не тоже не могу...
43 Pasha12312
 
25.02.13
16:50
оооо тут уже ФабрикаXDTO)) ...
Ветки так поменять?

  Тип("СписокXDTO")=СчетНаОплату.Документ.Тип()
44 alexei366
 
25.02.13
17:01
(42) А СписокЗначений это у тя "ТаблицаЗначений" ?
45 alexei366
 
25.02.13
17:03
(43) Я имел ввиду обработку когда Истина и Ложь.
46 alexei366
 
25.02.13
17:04
(45) + имеется ввиду поменять местами код следующий за Тогда и Иначе местами.
47 Pasha12312
 
25.02.13
17:04
(44) да.
48 alexei366
 
25.02.13
17:09
(47) Закоментируй весь код который присваивает значения в колонки, оставь только где НоваяСтрока = СписокЗначений.Добавить(); а остальное в коммент, и посмотри сколько пустых строк на выходе вышло.
49 Pasha12312
 
25.02.13
17:25
Процедура ПрочитатьИзФайлаXML()
   Чтение = Новый ЧтениеXML;
   Чтение.ОткрытьФайл("C:\Users\user\Desktop\xml\schet.xml");
   
   СчетНаОплату = ФабрикаXDTO.ПрочитатьXML(Чтение);
   Если СчетНаОплату.Документ.Тип() = Тип("СписокXDTO") Тогда
       Для Каждого Документ Из СчетНаОплату.Документ Цикл
           ЗаполнитьТаблицуЗначений(Документ);
       КонецЦикла;
   Иначе
       ЗаполнитьТаблицуЗначений(СчетНаОплату.Документ);
   КонецЕсли;
КонецПроцедуры
50 Pasha12312
 
25.02.13
17:25
{Форма.Форма.Форма(49)}: Метод объекта не обнаружен (Тип)
   Если СчетНаОплату.Документ.Тип() = Тип("СписокXDTO") Тогда
51 Pasha12312
 
25.02.13
17:29
посмотрел по синтаксису:
Тип(<ИмяXML>)
.. какое имя нужно передать?
52 Pasha12312
 
25.02.13
17:32
товарищи , в особенности   alexei366, большое человеческое СПАСИБО, за помощь  сегодня..
53 alexei366
 
25.02.13
17:34
(51) Чувак я честно говоря даж конфигуратор не запускал (всмысле своим делом занимался) чтоб твой пример посмотреть, из памяти фигачил, ты посмотри в отладчике и СП как определить Тип свойства ОбъектаXDTO, я просто не помню.
54 Pasha12312
 
25.02.13
17:50
(53) я не знаю как определить Тип свойства ОбъектаXDTO, но я посмотрел значение "СчетНаОплату.Документ" и там - о чудо !! )) все мои 10 документов , со всеми записями  и табличными частями .  ета строка обязательно нужна?:
Если СчетНаОплату.Документ.Тип() = Тип("СписокXDTO") Тогда
55 Pasha12312
 
25.02.13
17:50
...и я надеюсь последний вопрос , у меня там в документе еще Табличная часть есть...как обойти еще ёё?
56 alexei366
 
25.02.13
17:56
(54) Там фишка в чём, если количество у тя будет 1 то у тя там не список будет и тогда у тя ошибка вывалется на Для Каждого Документ Из СчетНаОплату.Документ Цикл
57 alexei366
 
25.02.13
17:57
(55) XML тогда покажи пока я домой не ушёл.
58 Pasha12312
 
25.02.13
17:59
мне нужна только "Табличная_Часть_Услуги"

<СчетаНаОплату>
   <Документ>
       <Дата>2011-04-14T12:00:00</Дата>
       <Контрагент>НДІ Автоматики</Контрагент>
       <ДоговорКонтрагента>Основний договір</ДоговорКонтрагента>
       <АдресДоставки/>
       <СтруктурнаяЕдиница>Р/р Пілот</СтруктурнаяЕдиница>
       <ВалютаДокумента>грн</ВалютаДокумента>
       <Комментарий/>
       <КратностьВзаиморасчетов>1</КратностьВзаиморасчетов>
       <КурсВзаиморасчетов>1</КурсВзаиморасчетов>
       <Склад>Головний склад</Склад>
       <СуммаВключаетНДС>false</СуммаВключаетНДС>
       <СуммаДОкумента>120000</СуммаДОкумента>
       <ТипЦен>Дрібнооптова</ТипЦен>
       <УчитыватьНДС>true</УчитыватьНДС>
       <АвторасчетНДС>true</АвторасчетНДС>
       <Табличная_Часть_Товары>
           <Номенклатура>Кондиціонер FIRMSTAR 12М</Номенклатура>
           <ЕдиницаИзмерения>шт</ЕдиницаИзмерения>
           <Цена>1500</Цена>
           <Сумма>90000</Сумма>
           <СтавкаНДС>НДС20</СтавкаНДС>
           <СуммаНДС>18000</СуммаНДС>
           <Коэффициент>1</Коэффициент>
           <Количество>60</Количество>
           <СуммаБезСкидки>90000</СуммаБезСкидки>
           <СуммаСкидки>0</СуммаСкидки>
       </Табличная_Часть_Товары>
       <Табличная_Часть_ВозвратнаяТара/>
       <Табличная_Часть_Услуги>
           <Номеклатура>Доставка </Номеклатура>
           <Содержание>Доставка</Содержание>
           <Количество>60</Количество>
           <Цена>166.67</Цена>
           <Сумма>10000</Сумма>
           <СтавкаНДС>НДС20</СтавкаНДС>
           <СуммаНДС>2000</СуммаНДС>
           <СуммаБезСкидки>10000</СуммаБезСкидки>
           <СуммаСкидки>0</СуммаСкидки>
       </Табличная_Часть_Услуги>
   </Документ>
59 alexei366
 
25.02.13
18:10
Процедура Вторая(Документ)


   НоваяСтрока = СписокЗначений.Добавить();
   НоваяСтрока.Дата = Документ.Дата;
   .............

   Для Каждого СтрокаТабЧасти Из Документ.Табличная_Часть_Товары Цикл

   ............................

   КонецЦикла;


КонецПроцедуры
60 Pasha12312
 
25.02.13
18:13
спасибо!! вы уже домой идете ?))))
61 alexei366
 
25.02.13
18:28
(60) пока нет, ещё в Dota 2 разок сыграю.
62 Pasha12312
 
25.02.13
18:49
блин, опять лажа у меня:
{Форма.Форма.Форма(90)}: Итератор для значения не определен
   Для Каждого СтрокаТабЧасти Из Документ.Табличная_Часть_Товары Цикл
63 Pasha12312
 
25.02.13
18:50
и может кто в курсе какой тип тут задать?

Если СчетНаОплату.Документ.Тип(??? ) = Тип("СписокXDTO")
64 alexei366
 
25.02.13
18:58
Процедура Первая()

СчетНаОплату = ФабрикаXDTO.Прочитать(Чтение);

Если ТипЗнч(СчетНаОплату.Документ) = Тип("СписокXDTO") Тогда
  Вторая(СчетНаОплату.Документ);
Иначе

   Для Каждого Документ Из СчетНаОплату.Документ Цикл
       Вторая(Документ);
   КонецЦикла;

КонецЕсли;

КонецПроцедуры


Процедура Вторая(Документ)


   НоваяСтрока = СписокЗначений.Добавить();
   НоваяСтрока.Дата = Документ.Дата;
   .............


   Если ТипЗнч(Документ.Табличная_Часть_Товары) = Тип("СписокXDTO") Тогда

        Для Каждого СтрокаТабЧасти Из Документ.Табличная_Часть_Товары Цикл
         
            Третья(СтрокаТабЧасти);

        КонецЦикла;

   Иначе

        Третья(Документ.Табличная_Часть_Товары);


   КонецЕсли;
               

КонецПроцедуры





Процедура Третья(СтрокаТабЧасти)


   // Обрабатываешь строку таб части
   .............


КонецПроцедуры
65 alexei366
 
25.02.13
18:59
Ну тут опять тотже венегред, если строка таб части одна, то это уже не список и обход элементов не применим.
66 Fragster
 
гуру
25.02.13
19:08
автору можно получить большой левелап, если он сам покурить про схемы xml, сделает схему, создаст фабрику с этой схемой и будет уже работать со схемой.

Тогда там где список - всегда будет список, примитивные типы сами станут нормальными значениями и прочее.

Но это если точить есть время.
67 Pasha12312
 
26.02.13
12:14
тут есть еще 3-й вариант ( по поводу табличной части документа). Если в табличной части нет ни одной записи тоже ошибка. Как тут проверить ёё на Количество ().

Документ.Табличная_Часть_Товары.Количество() - нет такого метода. Как по другому , может кто подскажет?
68 Serginio1
 
26.02.13
12:17
(67) В схеме укажи минимальное количество (minOccurs) 0.


v8: СписокXTDO и ОбъектXTDO
69 Fragster
 
гуру
26.02.13
12:30
(67) проверь существование свойства у Документ
(68) автор еще не юзает схему
70 Pasha12312
 
26.02.13
12:41
(69) извиняйте, но не совсем понял..
как его проверить?
http://uploads.ru/jYdVo.jpg
71 Fragster
 
гуру
26.02.13
12:49
Если ТипЗнч(Документ.Табличная_Часть_Товары) = Тип("СписокXDTO") Тогда
// это список и количество() есть
Иначе
// это объект, и надо юзать прямо его
72 Pasha12312
 
26.02.13
12:52
так ето есть ! А если  табличная часть вообше пустая!? оно выдает что "поле объекта не обнаружено"...
Вот что у меня:
Если ТипЗнч(Документ.Табличная_Часть_Услуги) = Тип("СписокXDTO") Тогда
       Для Каждого СтрокаТабЧасти Из Документ.Табличная_Часть_Услуги Цикл
           НоваяСтрока.Номенклатура = Документ.Табличная_Часть_Услуги.Номенклатура;
           НоваяСтрокаНоменклатура = Документ.Табличная_Часть_Услуги.Номенклатура;

           
       КонецЦикла;
   Иначе
       НоваяСтрока.Номенклатура = Документ.Табличная_Часть_Услуги.Номенклатура;
       НоваяСтрокаНоменклатура = Документ.Табличная_Часть_Услуги.Номенклатура;
   
       
       
   КонецЕсли;
73 Serginio1
 
26.02.13
13:01
(69) Ну Фабрика по любому схему использует
Можно выгрузить схему и её подправить.
74 alexei366
 
26.02.13
13:12
(72) Так наверно перед эти сделай условие вроде токое если память не изменяет

Если Документ.Свойство("Табличная_Часть_Услуги") <> Неопределенно Тогда

// Наш код с переходом в Третья(...)

КонецЕсли;
75 alexei366
 
26.02.13
13:12
(73) Нет у него xsd, пространства имен нет.
76 Pasha12312
 
26.02.13
13:17
{Форма.Форма.Форма(91)}: Метод объекта не обнаружен (Свойство)
   Если Документ.Свойство("Табличная_Часть_Услуги") <> Неопределено Тогда
77 alexei366
 
26.02.13
13:22
(76)
Если Документ.Свойства().Получить("Табличная_Часть_Услуги") <> Неопределенно Тогда

// Наш код с переходом в Третья(...)


КонецЕсли;
78 Pasha12312
 
26.02.13
13:31
(77)
выдает тоже самое:
Поле объекта не обнаружено (Номенклатура)
79 Fragster
 
гуру
26.02.13
13:36
(78) о_О
80 Fragster
 
гуру
26.02.13
13:37
Документ.Табличная_Часть_Услуги.Свойства().Количество() <> 0
81 Fragster
 
гуру
26.02.13
13:37
я оттелепатил
82 Fragster
 
гуру
26.02.13
13:37
типа там <Табличная_Часть_Услуги/> в XMLе
83 alexei366
 
26.02.13
13:42
(78) Чот я тя не понял, какая нафиг Номенклатура

Если Документ.Свойства().Получить("Табличная_Часть_Услуги") <> Неопределенно Тогда

   Если ТипЗнч(Документ.Табличная_Часть_Товары) = Тип("СписокXDTO") Тогда

        Для Каждого СтрокаТабЧасти Из Документ.Табличная_Часть_Товары Цикл
         
            Третья(СтрокаТабЧасти);

        КонецЦикла;

   Иначе

        Третья(Документ.Табличная_Часть_Товары);


   КонецЕсли;


КонецЕсли;
84 alexei366
 
26.02.13
13:46
(78)  Мож у тя в Табличной части Номенклатуры нет?
85 Pasha12312
 
26.02.13
13:48
помогло))) спасибо огромное, товарищи))
86 alexei366
 
26.02.13
13:51
(85) Давай, давай, а то ща до 100 сообщений дойдём.
87 Serginio1
 
26.02.13
13:52
72 Универсальное средство это попытка исключение
88 Pasha12312
 
26.02.13
13:56
та почти готово. только сделать сопоставление и записать))
89 zladenuw
 
26.02.13
13:56
90 Pasha12312
 
26.02.13
13:59
(89)
так я же что -то пробовал с построителем!не получалось немного.. "немного" затянулось  почти на 100 сообщений))
91 Fragster
 
гуру
26.02.13
13:59
(89) построитель дом - он не для того немного
92 zladenuw
 
26.02.13
14:10
(91) да вариант решение милионы :). я про то, что слепо ждать ответа, тут не надо. а гугл в помощь. кто то, ведь, когда то делал, что то такое
93 Pasha12312
 
26.02.13
14:36
так я так и делал.. сначала было прямое чтение, потом построителем пару вариантов пробовал ,ВычислитьВыражениеXPath  ...
94 Pasha12312
 
05.03.13
16:40
Здравствуйте, снова.. Опять вернулся к этой обработку. Хотел перегрузить док, где в ТабЧасть 3 наименования, получил ошибку.. Подскажите , как мне тут получить значение колонки "Номенклатура"
http://uploads.ru/Os7mh.jpg
95 Fragster
 
гуру
05.03.13
16:43
СтрокаТабЧасти.Номенклатура
96 Fragster
 
гуру
05.03.13
16:43
ПЦ, вообще-то
97 Pasha12312
 
05.03.13
16:52
спасибо)))))
..стыдно так тупить)), но опыта пока мало..
98 etc
 
06.03.13
01:54
с вашими мучениями помоему проще было схему быстренько накидать.