|
v7: Загрузка в справочник 1С Предприятие 7.7 из XML | ☑ | ||
---|---|---|---|---|
0
Начинающий Админ
25.12.11
✎
12:18
|
Всем Добрый День! Делаю загрузку из XML в справочник "Основные средства". Подскажите пожалуйста, почему при чтении элемента появляется ошибка: Значение не представляет агрегатный объект (Значение)? Может быть потому что в XML-файле в названиях элементов добавлено d3p1: (Например: d3p1:Протяженность)? Пробовала в коде при чтении значения добавлять d3p1: , например Протяженность=СокрЛП(Строка(Элемент.ВыбратьУзел("d3p1:Протяженность").Значение)); ,но появляется другая ошибка: Ошибка исполнения метода.
Вот часть XML: <Трубы> − <Строка Номер="1"> <d3p1:Наименование> г Липецк ул Ленина</d3p1:Наименование> <ИнвентарныйНомер/> <d3p1:НомерДокументации>13007-Д</d3p1:НомерДокументации> <d3p1:Протяженность>1,00</d3p1:Протяженность> </Строка> −<Строка Номер="2"> <d3p1:Наименование> г Липецк ул 300 лет Рос.Флота</d3p1:Наименование> <ИнвентарныйНомер/> <d3p1:НомерДокументации>12760-Д</d3p1:НомерДокументации> <d3p1:Протяженность>51,60</d3p1:Протяженность> </Строка> ... -<Строка Номер="16894"> <d3p1:Наименование>ул. Советская</d3p1:Наименование> <d3p1:ИнвентарныйНомер>52700</d3p1:ИнвентарныйНомер> <d3p1:НомерДокументации>3-С</d3p1:НомерДокументации> <d3p1:Протяженность>1478,80</d3p1:Протяженность> </Строка> </Трубы> Код: ФайлДанных=Анализатор.СоздатьДокумент(); ФайлДанных.Загрузить(ИмяФайла); ВсеУзлы=ФайлДанных.ВыбратьУзлы("Трубы"); Данные=ВсеУзлы.ПолучитьУзел(0); Справочник = Данные.ПолучитьПодчиненныйПоНомеру(1); Трубы= СоздатьОбъект("Справочник.ОсновныеСредства"); Для х = 1 по Данные.КоличествоПодчиненных() Цикл Элемент = Данные.ПолучитьПодчиненныйПоНомеру(х); ТекущийЭлемент = Элемент.Наименование; Если ТекущийЭлемент = "Строка" Тогда ИнвентарныйНомер=СокрЛП(Строка(Элемент.ВыбратьУзел("ИнвентарныйНомер").Значение)); Протяженность=СокрЛП(Строка(Элемент.ВыбратьУзел("Протяженность").Значение)); НомерДокументации=СокрЛП(Строка(Элемент.ВыбратьУзел("НомерДокументации").Значение)); Наименование=СокрЛП(Строка(Элемент.ВыбратьУзел("Наименование").Значение)); КонецЕсли; Если Трубы.НайтиПоКоду(ИнвентарныйНомер) = 0 Тогда Сообщить("При загрузке файла не найдено " + Наименование + "с инвентарным номером "+ ИнвентарныйНомер + "и Номером архивного дела "+НомерДокументации+". Протяженность не записана!"); Продолжить; Иначе Трубы.Кол = Протяженность; Трубы.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
Дачник
25.12.11
✎
13:19
|
А так
Наименование=СокрЛП(Строка(Элемент.ВыбратьУзел("d3p1:Наименование").Значение)); |
|||
2
andrewks
25.12.11
✎
19:47
|
(0) брось ты эту v7plus. глючная она. юзай msxml напрямую
|
|||
3
Rie
25.12.11
✎
19:51
|
(0) Попробуй его не оптом загружать, а последовательно читать.
|
|||
4
Начинающий Админ
26.12.11
✎
09:50
|
Спасибо за советы! Если посмотреть исходный XML например, в AkelPad, то в структуре можно заметить вот такие строки:
<d3p1:Наименование xmlns:d3p1=" г Липецк ул Сокольская"> г Липецк ул Сокольская</d3p1:Наименование> Так что пришлось переделывать исходный файл программно. ))) Теперь другая проблема: я что-то напутала с поиском элемента справочника по номеру арх.дела, элемент не ищется, да еще и сообщение о том, что элемент не найден, выводится по первому элементу до бесконечности. Помогите,люди добрые, пожалуйста ))) Вот часть кода: Трубы= СоздатьОбъект("Справочник.ОсновныеСредства"); Трубы.ВыбратьЭлементы(); Пока Трубы.ПолучитьЭлемент()=1 Цикл Если Трубы.ЭтоГруппа()=0 Тогда Если (Трубы.НомАрхДела=НомерДокументации) Тогда Трубы.Кол = Протяженность; Трубы.Записать(); Прервать; Иначе Предупреждение("При загрузке файла не найдено " + Наименование + "с Номером архивного дела "+НомерДокументации+". Протяженность не записана!"); Продолжить; КонецЕсли; КонецЕсли; КонецЦикла; |
|||
5
andrewks
26.12.11
✎
10:02
|
реквизит Трубы.НомАрхДела проиндексирован, или нет?
|
|||
6
andrewks
26.12.11
✎
10:07
|
короче, если нет, и реквизит строковый, тогда
Если (СокрП(Трубы.НомАрхДела)=СокрП(НомерДокументации)) Тогда если да, используй НайтиПоРеквизиту() |
|||
7
Начинающий Админ
26.12.11
✎
14:45
|
если использовать метод НайтиПоРеквизиту(), то ошибок нет, обработка идет, но тем не менее, ничего не находится и ничего в элемент не записывается. Сейчас код вот такого вида:
Функция НайтиПоНомеруАрхДела(НомерДокументации) Трубы= СоздатьОбъект("Справочник.ОсновныеСредства"); НомАрхДела=Трубы.НомАрхДела; Если Трубы.НайтиПоРеквизиту("НомАрхДела",НомерДокументации,1)=0 Тогда Возврат 0; Иначе Возврат 1; КонецЕсли; КонецФункции и еще: Трубы= СоздатьОбъект("Справочник.ОсновныеСредства"); Трубы.ВыбратьЭлементы(); Если НайтиПоНомеруАрхДела(НомерДокументации) = 1 Тогда Если Трубы.ЭтоГруппа()=0 Тогда Если Трубы.Выбран()=1 тогда Трубы.ТекущийЭлемент(); Трубы.Кол = Протяженность; Трубы.Записать(); //Прервать; Иначе Сообщить("При загрузке файла не найдено: " + Наименование + "и Номером архивного дела "+НомерДокументации+"."); Продолжить; КонецЕсли; КонецЕсли; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |