Имя: Пароль:
1C
1C 7.7
v7: Выгрузка в xml
,
0 AleksChek
 
17.09.21
12:05
Взял за основу одну обработку по выгрузке в xml из 1С 7.7. Сделал выгрузку УПД (счетов-фактур) из конфигурации Производство+Услуги+Бухгалтерия для электронного документооборота (в нашем случае Диадок Контур-а). Все поля выгружаются и загружаются замечательно. Кроме одного: "без акциза".
Если открыть мой файл выгрузки в редакторе, то получается это в таком виде:
        <Акциз>
          <БезАкциз>
          без акциза
        </БезАкциз>
      </Акциз>
А правильно должно быть (файл выгруженный из Диадок-а):
        <Акциз>
          <БезАкциз>без акциза</БезАкциз>
      </Акциз>
Исходя из вышесказанного получается при загрузке ошибка на это поле (БезАкциз).
"Кусок" кода, в котором прописано это прилагаю:
//Записывает начало элемента (тега XML). Имя можно указывать в угловых скобках.
Процедура xml_ЗаписатьНачалоЭлемента(прм_ИмяТега)
    перем стр;
    
    Если xml_ТегОткрыт=1 Тогда
        xml_ТегОткрыт=0;
        xml_file.WriteLine(">");
        xml_Отступы=xml_Отступы+"  ";
    КонецЕсли;
    
    стр=прм_ИмяТега;
    стр=СтрЗаменить(стр, "<", "");
    стр=СтрЗаменить(стр, ">", "");
    
    xml_СтекТегов.ДобавитьЗначение(стр);
    xml_file.Write(xml_Отступы+"<"+стр);
    xml_ТегОткрыт=1;
КонецПроцедуры    

///////////////////////////////////////////////////////////////////////
//Записывает атрибут (параметр) тега XML.
Процедура xml_ЗаписатьАтрибут(прм_ИмяАтрибута, прм_ЗначениеАтрибута)
    Если xml_ТегОткрыт=0 Тогда                                                                          
       Сообщить("Перед записью атрибута необходимо записать начало элемента!","!"); а=10/0;                                  
    КонецЕсли;                                                                                                
    
    стр=прм_ЗначениеАтрибута;
    стр=СтрЗаменить(стр, "&", "&amp;");
    стр=СтрЗаменить(стр, """", "&quot;");
    стр=СтрЗаменить(стр, "<", "&lt;");
    стр=СтрЗаменить(стр, ">", "&gt;");
    стр=СтрЗаменить(стр, "'", "&apos;");
    xml_file.Write(" "+прм_ИмяАтрибута+"="+""""+стр+"""");
КонецПроцедуры    // xml_ЗаписатьЗаписатьАтрибут


Процедура xml_ЗаписатьТекст(прм_Текст)
    Если xml_ТегОткрыт=0 Тогда                                                                          
       Сообщить("Перед записью атрибута необходимо записать начало элемента!","!"); а=10/0;                                  
    КонецЕсли;                                                                                                
    стр=прм_Текст;
    стр=СтрЗаменить(стр, "&", "&amp;");
    стр=СтрЗаменить(стр, """", "&quot;");
    стр=СтрЗаменить(стр, "<", "&lt;");
    стр=СтрЗаменить(стр, ">", "&gt;");
    стр=СтрЗаменить(стр, "'", "&apos;");
    xml_file.WriteLine(">");
    xml_Отступы=лев(xml_Отступы, СтрДлина(xml_Отступы)+2);
    xml_file.WriteLine(xml_Отступы+прм_Текст);
КонецПроцедуры    // xml_ЗаписатьТекст  


Процедура xml_ЗаписатьКонецЭлементаТекст(прм_ОжидаемоеИмяТега="")
    перем стрИмяТега, а;
    Если xml_СтекТегов.РазмерСписка()<1 Тогда
        Сообщить("Попытка закрыть неоткрытый элемент!","!"); а=10/0;                                      
    КонецЕсли;
    
    стрИмяТега=xml_СтекТегов.ПолучитьЗначение(xml_СтекТегов.РазмерСписка());
    
    Если ПустаяСтрока(прм_ОжидаемоеИмяТега)=0 Тогда
        стр=прм_ОжидаемоеИмяТега;
        стр=СтрЗаменить(стр, "<", "");
        стр=СтрЗаменить(стр, ">", "");
        стр=СтрЗаменить(стр, "/", "");
        
        Если стр<>стрИмяТега Тогда
            Сообщить("Ожидается имя тега "+стр+", а закрыто "+стрИмяТега,"!"); а=10/0;                                      
        КонецЕсли;
    КонецЕсли;
    
    
    xml_СтекТегов.УдалитьЗначение(xml_СтекТегов.РазмерСписка());
    Если xml_ТегОткрыт=1 Тогда
        xml_ТегОткрыт=0;
        xml_Отступы=лев(xml_Отступы, СтрДлина(xml_Отступы)-2);
        xml_file.WriteLine(xml_Отступы+"</"+стрИмяТега+">");
        Возврат;
    КонецЕсли;
    xml_Отступы=лев(xml_Отступы, СтрДлина(xml_Отступы)-2);
    xml_file.WriteLine(xml_Отступы+"</"+стрИмяТега+">");
    
КонецПроцедуры    // xml_ЗаписатьКонецЭлементаТекст


///////////////////////////////////////////////////////////////////////
//Записывает конец элемента (тега XML). Имя закрываемого тега можно указывать в угловых скобках,
//а можно - не указывать вовсе.

Процедура xml_ЗаписатьКонецЭлемента(прм_ОжидаемоеИмяТега="")
    перем стрИмяТега, а;
    Если xml_СтекТегов.РазмерСписка()<1 Тогда
        Сообщить("Попытка закрыть неоткрытый элемент!","!"); а=10/0;                                      
    КонецЕсли;
    
    стрИмяТега=xml_СтекТегов.ПолучитьЗначение(xml_СтекТегов.РазмерСписка());
    
    Если ПустаяСтрока(прм_ОжидаемоеИмяТега)=0 Тогда
        стр=прм_ОжидаемоеИмяТега;
        стр=СтрЗаменить(стр, "<", "");
        стр=СтрЗаменить(стр, ">", "");
        стр=СтрЗаменить(стр, "/", "");
        
        Если стр<>стрИмяТега Тогда
            Сообщить("Ожидается имя тега "+стр+", а закрыто "+стрИмяТега,"!"); а=10/0;                                      
        КонецЕсли;
    КонецЕсли;
    
    xml_СтекТегов.УдалитьЗначение(xml_СтекТегов.РазмерСписка());
    Если xml_ТегОткрыт=1 Тогда
        xml_ТегОткрыт=0;
        xml_file.WriteLine("/>");
        Возврат;
    КонецЕсли;
    xml_Отступы=лев(xml_Отступы, СтрДлина(xml_Отступы)-2);
    xml_file.WriteLine(xml_Отступы+"</"+стрИмяТега+">");
    
КонецПроцедуры    // xml_ЗаписатьКонецЭлемента


///////////////////////////////////////////////////////////////////////
//Закрывает открытый файл XML. После окончания работы с файлом его необходимо закрыть.
Функция xml_Закрыть()
    xml_file.Close();
    Если xml_СтекТегов.РазмерСписка()<>0 Тогда
        Сообщить("Имеются незакрытые элементы XML!","!"); а=10/0;                                      
    КонецЕсли;
КонецФункции    // xml_Закрыть

.....................
                                xml_ЗаписатьНачалоЭлемента("<Акциз>");  
                                    xml_ЗаписатьНачалоЭлемента("<БезАкциз>");
                                    xml_ЗаписатьТекст("без акциза");
                                    xml_ЗаписатьКонецЭлементаТекст("<БезАкциз>");
                                xml_ЗаписатьКонецЭлемента("</Акциз>");

Помогите!!!! Уже два месяца не могу понять где мой косяк......
1 ДенисЧ
 
17.09.21
12:07
Если ты смотришь только на форматирование - то забей. XML в принципе не предназначен для чтения глазами.
2 youalex
 
17.09.21
12:08
xml_ЗаписатьНачалоЭлемента("Акциз"); //если я правильно понял
3 Злопчинский
 
17.09.21
12:09
Чтото я не понял - в твоем варианте сто неправильно?
4 Злопчинский
 
17.09.21
12:10
А это с моей точки зрения нелогично
xml_ЗаписатьКонецЭлементаТекст("<БезАкциз>")
5 Злопчинский
 
17.09.21
12:13
Почему тег Акциз закрывается КонецЭлемента
А тег БезАкциз - КонецЭлементаТекст
?
6 Bigbro
 
17.09.21
12:14
никакого косяка
xml_file.WriteLine - выводит строку.
открытие тэга, данные, закрытие, каждый раз.
если надо чтобы все это вместе выводилось в одну строку - надо сломать и переписать.
но в (1) правда. XML не для людей.
7 AleksChek
 
17.09.21
12:18
(1) если отредактировать и убрать эти пробелы, т.е. сделать в таком виде:
<БезАкциз>без акциза</БезАкциз>
то загружается идеально. Т.е. все должно быть в "одну" строку
8 AleksChek
 
17.09.21
12:19
(6) Пробовал этот вариант, но что-то не "прокатило". Сейчас еще раз попробую....
9 AleksChek
 
17.09.21
12:20
(6) т.е. примерно такой вид кода должен быть:
xml_file.WriteLine("<БезАкциз>без акциза<БезАкциз>");
10 AleksChek
 
17.09.21
12:23
(9) тогда получилось вот как:
        <Акциз<БезАкциз>без акциза<БезАкциз>
/>
(это уже в выгруженном файле)
11 youalex
 
17.09.21
12:24
А почему ты считаешь что вариант
  <БезАкциз>
     без акциза
  </БезАкциз>
неправильный, а в одну строку - правильный?
12 AleksChek
 
17.09.21
12:24
т.е. вот такой код:
                                xml_ЗаписатьНачалоЭлемента("<Акциз>");  
                                    xml_file.WriteLine("<БезАкциз>без акциза<БезАкциз>");
                                xml_ЗаписатьКонецЭлемента("</Акциз>");
13 AleksChek
 
17.09.21
12:25
(11) а потому что в таком случае (когда "в разных строках) не корректно воспринимает Диадок. Ругается на это поле. А если "в одну строку" - то все ОК.
14 Злопчинский
 
17.09.21
12:25
(9) слэш в закрывающем забыл
15 AleksChek
 
17.09.21
12:27
(14) можно подробнее?
16 Злопчинский
 
17.09.21
12:29
Ну если все вышивжаются нормально с переводами строк, а в этом узле проблема то посмотри хексредактором может там затесался символ невидимый
17 Злопчинский
 
17.09.21
12:30
БА и /БА
А у тебя
Ба текст ба
18 Злопчинский
 
17.09.21
12:32
Открой свой первоначальный вариант который типа неправильный браузером и смотри что получится
19 AleksChek
 
17.09.21
12:34
(18) когда смотришь браузером, то оба варианта отображаются "тремя строками".... А когда в редакторе открываешь, то правильный вариант - одной строкой, а мой (не правильный) опять же тремя....
20 AleksChek
 
17.09.21
12:34
как здесь можно вложить файлы? Я бы прикрепил оба варианта...
21 Kassern
 
17.09.21
12:36
(0) я в свое время на клюшка юзал XML_DOM=CreateObject("MSXML2.DOMDocument.4.0");  ну или по младше версию, таких проблем не испытвал...
22 Злопчинский
 
17.09.21
12:37
Да пофиг в одну строку или в несколько. Браузер сам построено по узлам выводит
23 Kassern
 
17.09.21
12:37
(21) без проблем создаются  элементы с нужной структурой
24 Злопчинский
 
17.09.21
12:37
(21) я всегда вывожу тупо текстом если формирование линейное.
25 AleksChek
 
17.09.21
12:39
(24) подскажи как вывести эти три строки в одну линейно? (ну совсем я глюканул... хоть запинайте)
26 Злопчинский
 
17.09.21
12:40
(25) хексредактором в проблемном варианте мусора не видно?
27 Kassern
 
17.09.21
12:40
(24) мне после 8ки удобнее так было удобнее. Это как аналог ЗаписьXML с примерно таким же функционалом
28 AleksChek
 
17.09.21
12:41
Вот это мой файл, в котором акциз "не правильно":

  <?xml version="1.0" encoding="WINDOWS-1251" ?>
- <Файл ИдФайл="ON_NSCHFDOPPR_2BM-2434000335-2013022203311441365710000000000_2BM-6627017300-2012052807500941167360000000000_20210917" ВерсФорм="5.01" ВерсПрог="Diadoc 1.0">
  <СвУчДокОбор ИдОтпр="2BM-6627017300-2012052807500941167360000000000" ИдПол="2BM-2434000335-2013022203311441365710000000000" СвОЭДОтпр="" ИННЮЛ="6627017300" ИдЭДО="2BM" НаимОрг="" />
- <Документ КНД="1115131" ВремИнфПр="09.38.27" ДатаИнфПр="17.09.2021" НаимЭконСубСост="Общество с ограниченной ответственностью "Уральское карьероуправление", ИНН/КПП: 6627017300/667001001" Функция="СЧФДОП" ПоФактХЖ="Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)" НаимДокОпр="Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)">
- <СвСчФакт КодОКВ="643" ДатаСчФ="11.09.2021" НомерСчФ="784">
- <СвПрод>
- <ИдСв>
  <СвЮЛУч НаимОрг="Общество с ограниченной ответственностью "Уральское карьероуправление"" ИННЮЛ="6627017300" КПП="667001001" />
  </ИдСв>
- <Адрес>
  <АдрИнф АдрТекст="620033, Свердловская обл, Екатеринбург г, Норильская ул, 77; оф. 317" КодСтр="643" />
  </Адрес>
  </СвПрод>
- <ГрузОт>
- <ГрузОтпр>
- <ИдСв>
  <СвЮЛУч НаимОрг="Общество с ограниченной ответственностью "Уральское карьероуправление"" ИННЮЛ="6627017300" КПП="667001001" />
  </ИдСв>
- <Адрес>
  <АдрИнф АдрТекст="623270 Свердловская обл. г.Дегтярск ул.Вязовая, 1а" КодСтр="643" />
  </Адрес>
  </ГрузОтпр>
  </ГрузОт>
- <ГрузПолуч>
- <ИдСв>
  <СвЮЛУч НаимОрг="АО "Полюс Красноярск"" ИННЮЛ="2434000335" КПП="997550001" />
  </ИдСв>
- <Адрес>
  <АдрИнф АдрТекст="Россия,663282, Красноярский край, Северо-Енисейский район, г.п. Северо-Енисейский, ул. Белинского, 2-Б" КодСтр="643" />
  </Адрес>
  </ГрузПолуч>
- <СвПокуп>
- <ИдСв>
  <СвЮЛУч НаимОрг="АО "Полюс Красноярск"" ИННЮЛ="2434000335" КПП="997550001" />
  </ИдСв>
- <Адрес>
  <АдрИнф АдрТекст="Россия,663282, Красноярский край, Северо-Енисейский район, г.п. Северо-Енисейский, ул. Белинского, 2-Б" КодСтр="643" />
  </Адрес>
  </СвПокуп>
  <ДопСвФХЖ1 НаимОКВ="Российский рубль" />
  <ДокПодтвОтгр НаимДокОтгр="№ п/п 1 - 1" НомДокОтгр="п/п 1 - 1, № 784" ДатаДокОтгр="11.09.2021" />
  </СвСчФакт>
- <ТаблСчФакт>
- <СведТов НомСтр="1" НаимТов="Известь строительная,негашеная,кальциевая,комовая, сорт 2 в МКР" ОКЕИ_Тов="168" КолТов="664.550" ЦенаТов="5860.00" СтТовБезНДС="3894263.00" НалСт="20%" СтТовУчНал="4673115.60">
- <Акциз>
  <БезАкциз>без акциза</БезАкциз>
  </Акциз>
- <СумНал>
  <СумНал>778852.60</СумНал>
  </СумНал>
  <ДопСведТов НаимЕдИзм="т" />
  </СведТов>
- <ВсегоОпл СтТовБезНДСВсего="3894263.00" СтТовУчНалВсего="4673115.60">
- <СумНалВсего>
  <СумНал>778852.60</СумНал>
  </СумНалВсего>
  </ВсегоОпл>
  </ТаблСчФакт>
- <СвПродПер>
- <СвПер СодОпер="Товары переданы, работы сданы, услуги оказаны">
  <ОснПер НаимОсн="Договор поставки № ПКМ 02-21" ДатаОсн="24.03.2021" />
  <ТранГруз СвТранГруз="Ж/д квитанции № ЭГ750266,ЭГ696889,ЭГ825406,ЭГ813683,ЭГ750841,ЭГ625124,ЭГ623069,ЭГ622811,ЭГ624227,ЭГ697388" />
- <СвЛицПер>
- <РабОргПрод Должность="Генеральный директор" ОснПолн="Должностные обязанности">
  <ФИО Фамилия="Бездноздрев" Имя="Сергей" Отчество="Валерьевич" />
  </РабОргПрод>
  </СвЛицПер>
  </СвПер>
  </СвПродПер>
- <Подписант Статус="1" ОблПолн="5" ОснПолн="Должностные обязанности">
- <ЮЛ Должн="Генеральный директор" ИННЮЛ="6627017300">
  <ФИО Фамилия="Бездноздрев" Имя="Сергей" Отчество="Валерьевич" />
  </ЮЛ>
  </Подписант>
  </Документ>
  </Файл>

а вот правильный вариант:

  <?xml version="1.0" encoding="windows-1251" ?>
- <Файл ИдФайл="ON_NSCHFDOPPR_2BM-6670358057-667001001-201601210520349443635_2BM-6646001507-2012052808103911622630000000000_20210916_91d2b83c-1a72-4273-ac70-aac6d5bfdabb" ВерсФорм="5.01" ВерсПрог="Diadoc 1.0">
- <СвУчДокОбор ИдОтпр="2BM-6646001507-2012052808103911622630000000000" ИдПол="2BM-6670358057-667001001-201601210520349443635">
  <СвОЭДОтпр ИННЮЛ="6663003127" ИдЭДО="2BM" НаимОрг="АО "ПФ "СКБ Контур"" />
  </СвУчДокОбор>
- <Документ КНД="1115131" ВремИнфПр="13.44.29" ДатаИнфПр="16.09.2021" НаимЭконСубСост="Общество с ограниченной ответственностью "Уральское карьероуправление", ИНН/КПП: 6627017300/667001001" Функция="СЧФДОП" ПоФактХЖ="Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)" НаимДокОпр="Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)">
- <СвСчФакт НомерСчФ="781" ДатаСчФ="06.09.2021" КодОКВ="643">
- <СвПрод>
- <ИдСв>
  <СвЮЛУч НаимОрг="Общество с ограниченной ответственностью "Уральское карьероуправление"" ИННЮЛ="6627017300" КПП="667001001" />
  </ИдСв>
- <Адрес>
  <АдрИнф КодСтр="643" АдрТекст="620033, Свердловская обл, Екатеринбург г, Норильская ул, 77; оф. 317" />
  </Адрес>
  </СвПрод>
- <ГрузОт>
- <ГрузОтпр>
- <ИдСв>
  <СвЮЛУч НаимОрг="Общество с ограниченной ответственностью "Уральское карьероуправление"" ИННЮЛ="6627017300" КПП="667001001" />
  </ИдСв>
- <Адрес>
  <АдрИнф КодСтр="643" АдрТекст="623270 Свердловская обл. г.Дегтярск ул.Вязовая, 1а" />
  </Адрес>
  </ГрузОтпр>
  </ГрузОт>
- <ГрузПолуч>
- <ИдСв>
  <СвЮЛУч НаимОрг="ООО "ТД "Урализвесть"" ИННЮЛ="6670358057" КПП="667001001" />
  </ИдСв>
- <Адрес>
  <АдрИнф КодСтр="643" АдрТекст="620033, Свердловская обл, Екатеринбург г, Норильская ул, д. 77, оф. 212" />
  </Адрес>
  </ГрузПолуч>
- <СвПокуп>
- <ИдСв>
  <СвЮЛУч НаимОрг="ООО "ТД "Урализвесть"" ИННЮЛ="6670358057" КПП="667001001" />
  </ИдСв>
- <Адрес>
  <АдрИнф КодСтр="643" АдрТекст="620033, Свердловская обл, Екатеринбург г, Норильская ул, д. 77, оф. 212" />
  </Адрес>
  </СвПокуп>
  <ДопСвФХЖ1 НаимОКВ="Российский рубль" />
  </СвСчФакт>
- <ТаблСчФакт>
- <СведТов НомСтр="1" НаимТов="Известь 1 сорт" ОКЕИ_Тов="168" КолТов="24.16" ЦенаТов="2250.00" СтТовБезНДС="54360.00" НалСт="20%" СтТовУчНал="65232.00">
- <Акциз>
  <БезАкциз>без акциза</БезАкциз>
  </Акциз>
- <СумНал>
  <СумНал>10872.00</СумНал>
  </СумНал>
  <ДопСведТов НаимЕдИзм="т" />
  </СведТов>
- <СведТов НомСтр="2" НаимТов="Известь 2 сорт" ОКЕИ_Тов="168" КолТов="175.3" ЦенаТов="2250.00" СтТовБезНДС="394425.00" НалСт="20%" СтТовУчНал="473310.00">
- <Акциз>
  <БезАкциз>без акциза</БезАкциз>
  </Акциз>
- <СумНал>
  <СумНал>78885.00</СумНал>
  </СумНал>
  <ДопСведТов НаимЕдИзм="т" />
  </СведТов>
- <СведТов НомСтр="3" НаимТов="Известь молотая в МКР" ОКЕИ_Тов="168" КолТов="1.74" ЦенаТов="3750.00" СтТовБезНДС="6525.00" НалСт="20%" СтТовУчНал="7830.00">
- <Акциз>
  <БезАкциз>без акциза</БезАкциз>
  </Акциз>
- <СумНал>
  <СумНал>1305.00</СумНал>
  </СумНал>
  <ДопСведТов НаимЕдИзм="т" />
  </СведТов>
- <СведТов НомСтр="4" НаимТов="Известь 2 сорт в МКР" ОКЕИ_Тов="168" КолТов="19.67" ЦенаТов="3083.33" СтТовБезНДС="60649.17" НалСт="20%" СтТовУчНал="72779.00">
- <Акциз>
  <БезАкциз>без акциза</БезАкциз>
  </Акциз>
- <СумНал>
  <СумНал>12129.83</СумНал>
  </СумНал>
  <ДопСведТов НаимЕдИзм="т" />
  </СведТов>
- <СведТов НомСтр="5" НаимТов="Известь 2 сорт фр.0-20" ОКЕИ_Тов="168" КолТов="20.4" ЦенаТов="2250.00" СтТовБезНДС="45900.00" НалСт="20%" СтТовУчНал="55080.00">
- <Акциз>
  <БезАкциз>без акциза</БезАкциз>
  </Акциз>
- <СумНал>
  <СумНал>9180.00</СумНал>
  </СумНал>
  <ДопСведТов НаимЕдИзм="т" />
  </СведТов>
- <ВсегоОпл СтТовБезНДСВсего="561859.17" СтТовУчНалВсего="674231.00">
- <СумНалВсего>
  <СумНал>112371.83</СумНал>
  </СумНалВсего>
  </ВсегоОпл>
  </ТаблСчФакт>
- <СвПродПер>
- <СвПер СодОпер="Товары переданы, работы сданы, услуги оказаны">
  <ОснПер НаимОсн="Договор поставки № 2-П-12/09" ДатаОсн="01.12.2009" />
- <СвЛицПер>
- <РабОргПрод Должность="Генеральный директор" ОснПолн="Должностные обязанности">
  <ФИО Фамилия="Бездноздрев" Имя="Сергей" Отчество="Валерьевич" />
  </РабОргПрод>
  </СвЛицПер>
  </СвПер>
  </СвПродПер>
- <Подписант ОснПолн="Должностные обязанности" ОблПолн="0" Статус="1">
- <ЮЛ ИННЮЛ="6646001507" Должн="Глава Нижнесергинского муниципального района">
  <ФИО Фамилия="Еремеев" Имя="Валерий" Отчество="Васильевич" />
  </ЮЛ>
  </Подписант>
  </Документ>
  </Файл>
29 Злопчинский
 
17.09.21
12:41
Врайтлн пише строку с энтером.
Пиши либо потоком
30 AleksChek
 
17.09.21
12:45
(29) не понял.... Пинай... сколько сил есть...
xml_file.WriteLine("<БезАкциз>без акциза/<БезАкциз>"); - что здесь не так?
31 ДенисЧ
 
17.09.21
12:46
xml_file.WriteLine("<БезАкциз>без акциза</БезАкциз>");

В XML вообще ничего не понимаешь?
32 Kassern
 
17.09.21
12:47
(30) Вы опечатались, или реально так написали закрывающий тег?)) "/<БезАкциз>"
33 AleksChek
 
17.09.21
12:53
(32) опечатался
34 Злопчинский
 
17.09.21
12:56
В 1с++ кстати есть удобные методы для иксемеля. Или в вк Ромикса тоже. Какая-то из них пишет как раз без переводов строк.
35 ChMikle
 
17.09.21
12:58
(0) в первом случае - узел , а во втором реквизит .
36 Kassern
 
17.09.21
13:01
37 Kassern
 
17.09.21
13:02
гляньте как у вас имя организации экранировано, где "&quot;"?
38 Kassern
 
17.09.21
13:02
в общем ковыряйте файлик, пока не будит валидным
39 MWWRuza
 
гуру
17.09.21
13:06
"Открывающие, Закрывающие, форматирование, экранирование".....
Гиморой какой-то..
Используйте "MSXML2.DOMDocument.6.0", там все само формируется, просто добавляете нужные узлы, атрибуты, текст.
Все ХМЛ конструкции сами формируются, вообще не нужно думать о том как тег закрыть/открыть.
Вот пример первого попавшегося под руку запроса из моей конфы, формирующего таким образом файл ХМЛ:

    XML_DOM            = CreateObject("MSXML2.DOMDocument.6.0");
    XML_HELPER        = CreateObject("Msxml2.MXNamespaceManager.6.0");
    XML_HELPER.declarePrefix("qp", "http://fsrar.ru/WEGAIS/QueryParameters");
    XML_HELPER.declarePrefix("ns", "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01");
    Header             = XML_DOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""" );
    XML_DOM.appendChild(Header);
    XML_ROOT         = ДобавитьУзел(XML_DOM, XML_HELPER, XML_DOM, "Documents", "ns");
    ДобавитьАттрибут(XML_DOM, XML_ROOT, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    ДобавитьАттрибут(XML_DOM, XML_ROOT, "xmlns:qp", "http://fsrar.ru/WEGAIS/QueryParameters");
    XML_OWNER         = ДобавитьУзел(XML_DOM, XML_HELPER, XML_ROOT, "Owner", "ns");
    XML_FSRAR_ID     = ДобавитьУзел(XML_DOM, XML_HELPER, XML_OWNER, "FSRAR_ID", "ns");
    ДобавитьТекст(XML_DOM, XML_FSRAR_ID, FSRAR_ID);
    XML_DOCUMENT     = ДобавитьУзел(XML_DOM, XML_HELPER, XML_ROOT, "Document", "ns");    
    XML_Query         = ДобавитьУзел(XML_DOM, XML_HELPER, XML_DOCUMENT, СокрЛП(ВидЗапр), "ns");   // "QueryRestBCode"
    XML_Parameters    = ДобавитьУзел(XML_DOM, XML_HELPER, XML_Query, "Parameters", "qp");
    XML_Parameter    = ДобавитьУзел(XML_DOM, XML_HELPER, XML_Parameters, "Parameter", "qp");
    XML_Name        = ДобавитьУзел(XML_DOM, XML_HELPER, XML_Parameter, "Name", "qp");
    ДобавитьТекст(XML_DOM, XML_Name, СокрЛП(Пар));     //  "ФОРМА2"
    XML_Value        = ДобавитьУзел(XML_DOM, XML_HELPER, XML_PARAMETER, "Value", "qp");
    ДобавитьТекст(XML_DOM, XML_Value, СокрЛП(ЗначПар));    // НомСпрФ2
//    XML_DOM.Save("c:\Temp\1234.xml");
    RESULT_XML_DOM     = ВыгрузитьDOM(XML_DOM, УТМ_URL + "opt/in/" + СокрЛП(ВидЗапр));
40 MWWRuza
 
гуру
17.09.21
13:10
+(39) Еще в ГМ должны быть такие экспортные процедцры/функции:

Функция ДобавитьУзел(XML_DOM, XML_HELPER, XML_NODE, Имя, Префикс) Экспорт
    Если СокрЛП(Префикс) = "" Тогда
        XML_CHILD = XML_DOM.createNode(1,Имя,"");
    Иначе    
        XML_CHILD = XML_DOM.createNode(1,Префикс+":"+Имя,XML_HELPER.getURI(Префикс));    
    КонецЕсли;
    XML_NODE.appendChild(XML_CHILD);
    Возврат XML_CHILD;
КонецФункции

Процедура ДобавитьАттрибут(XML_DOM, XML_NODE, Имя, Значение) Экспорт
    XML_ATTR = XML_DOM.createAttribute(Имя);
    XML_ATTR.nodeValue = Значение;
    XML_NODE.setAttributeNode(XML_ATTR);
КонецПроцедуры

Процедура ДобавитьТекст(XML_DOM, XML_NODE, Значение) Экспорт
    Попытка
        XML_TEXT = XML_DOM.createTextNode(Значение);
        XML_NODE.appendChild(XML_TEXT);
    Исключение
        Сообщить("Ошибка: " + Значение);
    КонецПопытки;
КонецПроцедуры
41 Kassern
 
17.09.21
14:05
(39) а я что писал в (21)?) Ну хочет ТС строкой ковыряться и сам следить за экранированием - пожалуйста.
42 hhhh
 
17.09.21
14:10
(33) вот здесь тоже хрень

<СумНал>
  <СумНал>778852.60</СумНал>
  </СумНал>

СумНал 2 раза, не может это работать.
43 Kassern
 
17.09.21
14:14
(42) почему же не может? все может; Вот пример из рабочего варианта из 8ки
                <Акциз>
                    <БезАкциз>без акциза</БезАкциз>
                </Акциз>
                <СумНал>
                    <СумНал>365.33</СумНал>
                </СумНал>
44 Kassern
 
17.09.21
14:15
(42) откройте какую нибудь УПДшку эдошную и сохраните в файл. Увидите, что только в путь используется)
45 Злопчинский
 
17.09.21
14:52
(42) я сам прифигел когда увидел, но э о непротиворечит формату иксемель и соответственно. Формату электроупд описанного в приказе фнс
46 youalex
 
17.09.21
15:00
(42) вроде норм все  (если не принимать во внимание одаренность авторов этого формата)
в xpath это же разные поля
47 ssh2006
 
17.09.21
16:04
(42) по формату

СумНал состоит из СумНал , БезНДС , ДефНДС
48 MWWRuza
 
гуру
20.09.21
19:48
(41) а я что писал в (21)?
Ну, да, я просто немного подробнее расписал, с примером как это делается.