Имя: Пароль:
1C
1С v8
v8: Поделитесь примерчиком выгрузки по XML посредством DOM
0 Надсмотрщик
 
13.09.12
13:33
Начинаю "ковырять" снеговика, а в типовой все через ЗаписьXML
1 andrewks
 
13.09.12
13:36

&НаКлиенте
Функция ВывестиЭлем_ДОМ(ДОМ,Знач Смещ);
   
   Рез=1;
   Попытка
       ТипУзла=ДОМ.ТипУзла;
       Если (ТипУзла=ТипУзлаDOM.Документ) Тогда
           ;
       ИначеЕсли (ТипУзла=ТипУзлаDOM.Элемент) Тогда
           Смещ=Смещ+"    ";
           Сообщить(Смещ+"Элемент "+ДОМ.ИмяУзла+":",СтатусСообщения.Важное);
           
           Для каждого ТекАтр из ДОМ.Атрибуты Цикл
               Сообщить(Смещ+"Атрибут: "+ТекАтр.ИмяУзла+", значение: <"+ТекАтр.ЗначениеУзла+">");
           КонецЦикла;
       ИначеЕсли (ТипУзла=ТипУзлаDOM.Текст) Тогда
           Сообщить(Смещ+"Текст элемента: <"+ДОМ.ЗначениеУзла+">");
       ИначеЕсли (ТипУзла=ТипУзлаDOM.СекцияCDATA) Тогда
           Сообщить(Смещ+"CDATA: <"+ДОМ.ЗначениеУзла+">");
       ИначеЕсли (ТипУзла=ТипУзлаDOM.Комментарий) Тогда
           Сообщить(Смещ+"Комментарий: <"+ДОМ.ЗначениеУзла+">",СтатусСообщения.Информация);
       Иначе
           Сообщить(Смещ+"Элемент "+ДОМ.ИмяУзла+":");
           Сообщить(Смещ+"Тип: "+ДОМ.ЗначениеУзла);
       КонецЕсли;
       
       Для каждого ТекУзел из ДОМ.ДочерниеУзлы Цикл
           ВывестиЭлем_ДОМ(ТекУзел,Смещ);
       КонецЦикла;
   Исключение
       Сообщить(ОписаниеОшибки());
       Рез=0;
   КонецПопытки;
   
   Возврат Рез;
КонецФункции

&НаКлиенте
Процедура ЗаписатьХМЛ_ДОМ()
   ДОМ=Новый ДокументDOM;
   ТекЭлем=ДОМ.СоздатьЭлемент("Файл");
   ТекЭлем.УстановитьАтрибут("Атрибут_Файл_1","Здесь содержимое Атрибут_Файл_1");
   ТекТекст=ДОМ.СоздатьТекстовыйУзел("Здесь содержимое ""Файл""");
   ТекКомм=ДОМ.СоздатьКомментарий("Далее следует содержимое файла");
   ТекЭлем.ДобавитьДочерний(ТекТекст);
   ТекЭлем.ДобавитьДочерний(ТекКомм);
   ДОМ.ДобавитьДочерний(ТекЭлем);
   ТекЭлем=ТекЭлем.ДобавитьДочерний(ДОМ.СоздатьЭлемент("СодержимоеФайла"));
   ТекЭлем.УстановитьАтрибут("Атрибут_СодержимоеФайла_1","Здесь содержимое Атрибут_СодержимоеФайла_1");
   ТекТекст=ДОМ.СоздатьТекстовыйУзел("Здесь содержимое СодержимоеФайла");
   ТекCDATA=ДОМ.СоздатьСекциюCDATA("Это секция CDATA");
   ТекЭлем.ДобавитьДочерний(ТекТекст);
   ТекЭлем.ДобавитьДочерний(ТекCDATA);
   
   ХМЛ=Новый ЗаписьXML;
   ХМЛ.ОткрытьФайл(ИмяФайла,Новый ПараметрыЗаписиXML("windows-1251",,Ложь,Ложь));
   ЗаписьДОМ=Новый ЗаписьDOM;
   ЗаписьДОМ.Записать(ДОМ,ХМЛ);
   ХМЛ.Закрыть();
   
   ПострДОМ=Новый ПостроительDOM;
   ХМЛ=Новый ЧтениеXML;
   ХМЛ.ОткрытьФайл(ИмяФайла,Новый ПараметрыЧтенияXML(,,,ТипПроверкиXML.НетПроверки));
   ДОМ=ПострДОМ.Прочитать(ХМЛ);
   
   ВывестиЭлем_ДОМ(ДОМ,"");
   ХМЛ.Закрыть();
КонецПроцедуры

2 Широкий
 
13.09.12
13:37
Чтение через дом я понимаю.. а запись зачем?
3 Надсмотрщик
 
13.09.12
13:41
(2) На клюшках привык иметь дело с "объектами", а не последовательной записью.
Иной раз приходится записывать значения в ранее введенные элементы.
4 lubja
 
13.09.12
15:44
не выходит каменный цветочек... скопировала процедуру ЗаписатьЧХМЛ_ДОМ() (до строки ПострДОМ=Новый ПостроительDOM). не хочет сохранять. пишет:
{ВнешняяОбработка.ВыгрузкаНакладныхДляКлиентов.МодульОбъекта(176)}: Значение не является значением объектного типа (ОткрытьФайл)
ХМЛ.ОткрытьФайл(Каталог + "\111.xml", Новый ПараметрыЗаписиXML("windows-1251",,Ложь,Ложь));

не могу въехать, что не так...
5 Надсмотрщик
 
13.09.12
15:55
Я вот тоже ищу. Как открыть XML и внести в него изменения. На снеговике
6 andrewks
 
13.09.12
15:55
(4) показывай свой код
7 lubja
 
13.09.12
15:57
(6) скопировала твою процедуру

ДОМ=Новый ДокументDOM;
ТекЭлем=ДОМ.СоздатьЭлемент("Файл");
ТекЭлем.УстановитьАтрибут("Атрибут_Файл_1","Здесь содержимое Атрибут_Файл_1");

ТекТекст=ДОМ.СоздатьТекстовыйУзел("Здесь содержимое ""Файл""");
ТекКомм=ДОМ.СоздатьКомментарий("Далее следует содержимое файла");

ТекЭлем.ДобавитьДочерний(ТекТекст);
ТекЭлем.ДобавитьДочерний(ТекКомм);
ДОМ.ДобавитьДочерний(ТекЭлем);
ТекЭлем=ТекЭлем.ДобавитьДочерний(ДОМ.СоздатьЭлемент("СодержимоеФайла"));
ТекЭлем.УстановитьАтрибут("Атрибут_СодержимоеФайла_1","Здесь содержимое Атрибут_СодержимоеФайла_1");
ТекТекст=ДОМ.СоздатьТекстовыйУзел("Здесь содержимое СодержимоеФайла");
ТекCDATA=ДОМ.СоздатьСекциюCDATA("Это секция CDATA");
ТекЭлем.ДобавитьДочерний(ТекТекст);
ТекЭлем.ДобавитьДочерний(ТекCDATA);

ХМЛ=Новый ЗаписьXML;
ХМЛ.ОткрытьФайл(Каталог + "\111.xml", "windows-1251");
ЗаписьДОМ=Новый ЗаписьDOM;
ЗаписьДОМ.Записать(ДОМ,ХМЛ);
ХМЛ.Закрыть();
8 lubja
 
13.09.12
15:58
(7)+ я просто хотела посмотреть, что твоя процедура в результате делает... а она не хочет сохранять...
а вообще мне нужно значение узла добавить (v8: работа с xml
9 Надсмотрщик
 
13.09.12
16:01
(6) Плиззз пример.
1 Открыть файл
2 Проверить, есть ли запись. если есть - удалить.
3 Ввести новую запись на место удаленной
10 andrewks
 
13.09.12
16:01
(7) как-то ты интересно скопировала, не находишь? есть некоторые отличия от оригинала в (1)
11 andrewks
 
13.09.12
16:02
(9) а самому слабо?
12 lubja
 
13.09.12
16:04
(10) ладно, допустим... но рубится на строчке ХМЛ.ОткрытьФайл(ИмяФайла,Новый ПараметрыЗаписиXML("windows-1251",,Ложь,Ложь))   дальше-то не идет )))
13 Надсмотрщик
 
13.09.12
16:04
(11) Пока "слабо"    :-(((    
На снеговике. На клюшках все летает.
14 lubja
 
13.09.12
16:04
(12)+ в куске

ХМЛ=Новый ЗаписьXML;
ХМЛ.ОткрытьФайл(ИмяФайла,Новый ПараметрыЗаписиXML("windows-1251",,Ложь,Ложь));
ЗаписьДОМ=Новый ЗаписьDOM;
ЗаписьДОМ.Записать(ДОМ,ХМЛ);
ХМЛ.Закрыть();
15 andrewks
 
13.09.12
16:07
(14) слушай, ну я не знаю, чего у тебя там глючит, код рабочий абсолютно. давай мыло, вышлю обработкой
16 lubja
 
13.09.12
16:07
17 andrewks
 
13.09.12
16:10
(16) выслал. только открывай управляемую форму
18 lubja
 
13.09.12
16:11
вижу, спасибо )
19 Надсмотрщик
 
13.09.12
16:20
(17) Как на снеговике реализовать следующее?

СчетаИз1СXML = XMLАнализатор.СоздатьДокумент();
Если ФС.СуществуетФайл(КаталогОбмена + "\Bills_1C_R.xml") = 1 Тогда
   ФС.ПереименоватьФайл(КаталогОбмена + "\Bills_1C_R.xml", КаталогОбмена + "\_Bills_1C_R.xml", 1);
   СчетаИз1СXML.Загрузить(КаталогОбмена + "\_Bills_1C_R.xml");
Иначе
   СчетаИз1СXML.ЗагрузитьИзСтроки("<?xml version=""1.0"" encoding=""windows-1251"" ?><Файл Отправитель= ""1С"" Получатель=""ВЭБ Регистратор"" ВерсФорм=""1.01""><Счета1С></Счета1С><Счета></Счета><АктыУслуг></АктыУслуг><Лицензии></Лицензии><СчетаФактуры></СчетаФактуры></Файл>");
КонецЕсли;
20 andrewks
 
13.09.12
16:30
(19) можно через ЧтениеХМЛ.УстановитьСтроку(), например
21 Надсмотрщик
 
13.09.12
16:34
(20) Примерчик есть?
А то ковыряюсь в типовых...
22 Надсмотрщик
 
13.09.12
17:07
:-(((
23 Serginio1
 
13.09.12
17:25
24 Надсмотрщик
 
13.09.12
17:36
(23) Спасибо! Посмотрю.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн