Имя: Пароль:
1C
1C 7.7
v7: Запись xml. Не могу добиться нужной структуры.
0 NoobiC
 
08.09.18
17:48
Всем привет.
Необходимо написать выгрузку для сайта из самописной 7.7.
Сайтоделы прислали такую структуру:
-<Склад>

<Код>101</Код>

<Наименование>Склад1</Наименование>

</Склад>

а у меня при формировании получается такая:

<Склад Наименование="Склад1" Код="101"/>

.....
собственно, вот фрагмент кода, который формирует хмл:

  Корень=XMLАнализатор.СоздатьДокумент();
  Данные = Корень.СоздатьПодчиненныйЭлемент("Данные");
  Склады = Данные.СоздатьПодчиненныйЭлемент("Склады");
  Склад=СоздатьОбъект("Справочник.Склады");
  Склад.ВыбратьЭлементы();
  Пока Склад.ПолучитьЭлемент() = 1 Цикл
      СкладXML=Склады.СоздатьПодчиненныйЭлемент("Склад");
      СкладXML.УстановитьАтрибут("Код", Склад.Код);
      СкладXML.УстановитьАтрибут("Наименование", СокрЛП(Склад.Наименование));
  КонецЦикла;

пробовал вместо установки атрибутов пользоваться СоздатьУзел() и потом добавить Подчиненный:

  СкладКод = СкладXML.СоздатьУзел("Код",Склад.Код);
  СкладXML.ДобавитьПодчиненный(СкладКод);

так 1С ругается, что поле агрегатного объекта не обнаружено (СоздатьУзел).
Подскажите, плиз, где че не так-то?
1 youalex
 
08.09.18
18:03
пользуй msxml domdocument
2 NoobiC
 
08.09.18
18:10
3 Cool_Profi
 
08.09.18
18:22
СкладКод = Корень.СоздатьУзел("Код",Склад.Код);

А так?
4 NoobiC
 
08.09.18
18:27
(1) получилась точно такая же структура как и ранее...
(3) а так создается в корне, а мне надо, чтобы тэг(?) создавался именно внутри узла Склад.
То есть (если идти вниз по иерархии), структура будет выглядеть примерно так:
Корень
   склады
      Склад1
        код
        наименование
        и т.д.
   товары
      Товар1
        код
        намиенование
        и т.д.
5 trdm
 
08.09.18
18:41
//==============================================================================
// Сформировать() © trdm 2018-09-08 18:41
Процедура Сформировать()
    вТескт = СоздатьОбъект("Текст");
    вТескт.ДобавитьСтроку("<Склады>");
    вТескт.ДобавитьСтроку("<Склады>");
    вСпрМх = СоздатьОбъект("Справочник.МестаХранения");
    вСпрМх.ВыбратьЭлементы();
    Пока вСпрМх.ПолучитьЭлемент() = 1 Цикл
        Если вСпрМх.ЭтоГруппа() = 1 Тогда
            Продолжить;
        КонецЕсли;
        вТескт.ДобавитьСтроку("<Склад>");
        вТескт.ДобавитьСтроку("<Код>" + вСпрМх.Код + "</Код>");
        вТескт.ДобавитьСтроку("<Наименование>" + вСпрМх.Наименование + "</Наименование>");
        вТескт.ДобавитьСтроку("</Склад>");
    КонецЦикла;
    вТескт.ДобавитьСтроку("</Склады>");
    вИмяФайла = "C:\"+_GetPerformanceCounter()+".xml";
    вТескт.Записать(вИмяФайла);
    ЗапуститьПриложение(вИмяФайла);
КонецПроцедуры // Сформировать()
6 trdm
 
08.09.18
18:45
дубль строки убрать только:
     вТескт.ДобавитьСтроку("<Склады>");
7 trdm
 
08.09.18
18:50
ну и по логике в (0)
        СкладXML=Склады.СоздатьПодчиненныйЭлемент("Склад");
вВремУзел = СкладXML.СоздатьПодчиненныйЭлемент("Код");
вВремУзел.Текст = Склад.Код;
вВремУзел = СкладXML.СоздатьПодчиненныйЭлемент("Наименование");
вВремУзел.Текст = СокрЛП(Склад.Наименование);
8 NoobiC
 
08.09.18
19:02
(7) ай спасибо огромное тебе, добрый человек!!! Прямо в десятку!!!
9 trdm
 
08.09.18
19:13
(8) ты просто синтакс-помошник время от времени покуривай:
http://prntscr.com/ks36m9
10 Strogg
 
08.09.18
19:19
(9) у меня синтакс-помощник дважды показывает в7 плюс. Ну как я мог догадаться, что они замечают, что присвоение этого свойства полностью реорганизует всю структуру подчиненных узлов? И что это именно то, то мне надо...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший