(c) Митичкин:

Запись XML
Следующий фрагмент создает простой XML-документ и записывает его в файл. Иерархический отступ конструкций языка показывает вложенность XML-элементов друг в друга:



Код 1c:
Файл = Новый ЗаписьХМL;
Файл.ОткрытьФайл(ПутьКФайлу);
Файл.ЗаписатьОбъявлениеХМL();
Файл.ЗаписатьНачалоЭлемента("goods");
Файл.ЗаписатьНачалоЭлемента("good");
Файл.ЗаписатьНачалоЭлемента("name");
Файл.ЗаписатьТекст("Ботинки");
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьНачалоЭлемента("price");
Файл.ЗаписатьТекст(ХМLСтрока(600));
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьНачалоЭлемента("good");
Файл.3 аписатьНачалоЭлемента("name");
Файл.ЗаписатьТекст("Сапоги");
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьНачалоЭлемента("price");
Файл.ЗаписатьТекст(ХМLСтрока(1000)) ;
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента() ;


В результате работы программы получился следующий XML-документ:



Код HTML:
<?xml version="1.0"?>
    <goods>
        <good>
            <пате>Ботинки</пате>
            <рпсе>600</рпсе>
        </good>
        <good>
            <пате>Сапоги</пате>
            <price>1000</price>
        </good>
    </goods>
======================================

Ну как пишется в хмл я знаю. Суть в том чтобы сохранить иерархию, чтобы связь родительских и починенных элементов не терялась. Ну мысли у меня уже появились. Буду записывать максимальный уровень иерархии. Имена элементов будут уровни иерархии. при считывании создам соответствие текущий родитель/уровень иерархии. Главное надо будет в правильном порядке все записать. Что-то такое, надо будет еще подумать.

=====================================

В свое время меня просили перенести справочник номенклатуры с одной конфигурации в другую, сохранив при этом иерархию. XML я только только хочу заняться, а тогда я вообще почти о нем не слышал и посмотрев кое, что из того, что я понимал, я скинул информацию в ДБФ (только наименование и код элементов). В другой обработке, с помощью которой шла загрузка, я вбил все в таблицу значений следующим образом.
1 столбец (булевый: 1-группа, 0-элемент), является ли крайний элемент группой (на случай когда есть крайние пустые группы)
2 столбец - уровень крайнего элемента

далее восемь столбцов с кнаименованием и кодом элементов(наименование1, код1, наименование2, код2,...,код4), справочник 4 уровневый.

принцип расположения элемнентов: в строке таблицы идут 1 информация о первом элементе, 2 информация о группе в которой он находится, 3 инфомация о группе в которой находится предыдущая группа и т д.
в первом столбце во всех строках стоят только нижние элементы справочника: либо сами элементы, либо пустые группы; группы в которых что-то есть в других столбцах в зависимости от уровня низшего элемента.
Построив таким образом таблицу написал обработку о забивке элементов в иерархическом порядке. Делал это в 7.7. С восьмеркой ни разу не общался. В общем, если из нижеследующей обработки извлечешь что-то ценное, буду только рад.

Код 1c:
Спр = СоздатьОбъект("Справочник.Номенклатура");
к = 0;
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку() = 1 Цикл 
      Р = "";
      к = к + 1;
      н = ТабЗнач.ПолучитьЗначение(к,2)*2+2; // в значение н скидываем иерархию ветви дерева
 
      Иерархия = н;
      Пока н > 2 Цикл
    Если Спр.НайтиПоКоду(ТабЗнач.ПолучитьЗначение(к,н)) = 0 Тогда
        Если (н = иерархия) и (н > 4) Тогда
            Спр.НоваяГруппа();
            Спр.Наименование = ТабЗнач.ПолучитьЗначение(к,н - 1);
            Спр.Код = ТабЗнач.ПолучитьЗначение(к,н);
            Спр.Записать();
            Спр.НайтиПоКоду(ТабЗнач.ПолучитьЗначение(к,н));
            Р = Спр.ТекущийЭлемент();
            н = н - 2;
            Пока н > 4 Цикл
              Спр.НоваяГруппа();
              Спр.Наименование = ТабЗнач.ПолучитьЗначение(к,н - 1);
              Спр.Код = ТабЗнач.ПолучитьЗначение(к,н);
              Спр.Родитель = Р;
              Спр.Записать();
              Спр.НайтиПоКоду(ТабЗнач.ПолучитьЗначение(к,н));
              Р = Спр.ТекущийЭлемент();
              н = н - 2;
 
             КонецЦикла; 
 
             Если ТабЗнач.ПолучитьЗначение(к,1) = 1 Тогда
              Спр.НоваяГруппа();
              Спр.Наименование = ТабЗнач.ПолучитьЗначение(к,н - 1);
              Спр.Код = ТабЗнач.ПолучитьЗначение(к,н); 
              Спр.Родитель = Р;
              Спр.Записать();
            Иначе 
              Спр.Новый();
              Спр.Наименование = ТабЗнач.ПолучитьЗначение(к,н - 1);
              Спр.Код = ТабЗнач.ПолучитьЗначение(к,н); 
              Спр.Родитель = Р;
              Спр.Записать();
            КонецЕсли;
          Иначе 
            Если ТабЗнач.ПолучитьЗначение(к,1) = 1 Тогда
              Спр.НоваяГруппа();
              Спр.Наименование = ТабЗнач.ПолучитьЗначение(к,н - 1);
              Спр.Код = ТабЗнач.ПолучитьЗначение(к,н);
              Спр.Родитель = Р;
              Спр.Записать();
            Иначе 
              Спр.Новый();
              Спр.Наименование = ТабЗнач.ПолучитьЗначение(к,н - 1);
              Спр.Код = ТабЗнач.ПолучитьЗначение(к,н);
              Спр.Родитель = Р;
              Спр.Записать();
            КонецЕсли;
          КонецЕсли;
        Иначе н = н - 2;
          Р = Спр.ТекущийЭлемент();
        КонецЕсли;    
    КонецЦикла;    
КонецЦикла;

===============================