|
Построитель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
|
обычная ссылка :
http://saveimg.ru/show-image.php?id=1029214f18d95ef46bbaea4cfcd75cea |
|||
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
|
||||
69
Fragster
гуру
26.02.13
✎
12:30
|
(67) проверь существование свойства у Документ
(68) автор еще не юзает схему |
|||
70
Pasha12312
26.02.13
✎
12:41
|
||||
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
|
а надо только погуглить было :)
v8: 1С8 XML перебрать внутренный узел http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=604287 :) |
|||
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
|
с вашими мучениями помоему проще было схему быстренько накидать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |