Вход | Регистрация
 

Работа с XML

Работа с XML
Я
   Skipper
 
06.03.20 - 17:40
Всем привет.
Создаю XML через метод ЗаписьXML.
Надо записать объявление, но не типовое, а свое, и свое закрытие тега. Получается XML надо как строку формировать, да?
С объектом ЗаписьXML  не получится поработать?
 
 
   NorthWind
 
1 - 06.03.20 - 17:55
Думаю, нет. Я вообще практически отказался от записихмл, гораздо удобнее создать шаблон и сделать замены значений тегов на нужные, а потом писнуть это в простой текст...
   Skipper
 
2 - 06.03.20 - 17:59
Ясно, спасибо.
А через схему XML тоже фиговая идея?
   NorthWind
 
3 - 06.03.20 - 18:02
Можно попробовать, но черт его знает, оно же нестандарт... Просто ругнется что плохая схема скорее всего.
   Skipper
 
4 - 06.03.20 - 18:03
Ясно, ладно, буду делать через простой текст, который героически, подчеркиваю, героически пихну в xml
   Skipper
 
5 - 06.03.20 - 18:03
Всем спасибо!
   Сияющий в темноте
 
6 - 06.03.20 - 18:08
файловый поток вам в помощь.
   Сияющий в темноте
 
7 - 06.03.20 - 18:10
можно сначала свой заголовок,а потом уже готовый xml из запись xml засунуть.
   Skipper
 
8 - 06.03.20 - 18:11
(7) Не понял, это как?
   NorthWind
 
9 - 06.03.20 - 18:12
а что тут героического? Создаете шаблон примерно вот такого вида
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="%FILEID" ВерсФорм="5.01" ВерсПрог="1C">
  <СвУчДокОбор ИдОтпр="%SENDERID" ИдПол="%RECEIVERID">
    <СвОЭДОтпр НаимОрг="%SENDEROPERNAME" ИННЮЛ="%SENDEROPERINN" ИдЭДО="%SENDEROPERID" />
  </СвУчДокОбор>
  <Документ КНД="1115131" Функция="СЧФДОП" ПоФактХЖ="Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)" НаимДокОпр="Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)" ДатаИнфПр="%FORMDATE" ВремИнфПр="%FORMTIME" НаимЭконСубСост="%FIRMNAME">
    <СвСчФакт НомерСчФ="%DOCNUM" ДатаСчФ="%DOCDATE" КодОКВ="643">
    
      %CORRECTIONDATA
      
      <СвПрод>
        <ИдСв>
          <СвЮЛУч НаимОрг="%FIRMNAME" ИННЮЛ="%FIRMINN" КПП="%FIRMKPP" />
        </ИдСв>
        <Адрес>
          <АдрРФ %FIRMADDR />
        </Адрес>
      </СвПрод>
      <ГрузОт>
        <ОнЖе>он же</ОнЖе>
      </ГрузОт>
      <ГрузПолуч>
        <ИдСв>
          <СвЮЛУч НаимОрг="%CONSNAME" ИННЮЛ="%CONSINN" КПП="%CONSKPP" />

Затем просто через СтрЗаменить меняете все %XXXX на нужные значения. На самом деле там чуть сложнее, пару-тройку сервисных фунок надо написать, но в общем ерунда. Могу код показать
   NorthWind
 
10 - 06.03.20 - 18:14
всяко в разы проще чем через записьхмл записывать простыню
   pechkin
 
11 - 06.03.20 - 18:16
кстати в 1 есть нативная поддержка текстовых шаблонов. а ля печатные формы
   pechkin
 
12 - 06.03.20 - 18:17
см. ТекстовыйДокумент.Параметры
   pechkin
 
13 - 06.03.20 - 18:18
   NorthWind
 
14 - 06.03.20 - 18:25
(13) пробовал, применительно к xml получается какашка, потому как там какие-то символы не экранируются из тех что в литералах используются
   NorthWind
 
15 - 06.03.20 - 18:26
вообще механизм рабочий, но вот конкретно для данной цели не годится
   Skipper
 
16 - 06.03.20 - 18:33
(9) Можете на ЯД выложить обработку пример? Я чет не понимаю, как Товары будут выгружаться.
Типы выгрузка товары в отдельну строку, и блоком вставлять в первоначальную строку?
   NorthWind
 
17 - 06.03.20 - 18:43
(16) совершенно верно.
...
      </ИнфПолФХЖ1>
    </СвСчФакт>
    <ТаблСчФакт>
    
%GOODSTABLE
      
      <ВсегоОпл СтТовБезНДСВсего="%TOTALWOVAT" СтТовУчНалВсего="%TOTALWITHVAT">
        <СумНалВсего>
          <СумНал>%TOTALVAT</СумНал>
        </СумНалВсего>
...

а в секцию %GOODSTABLE выгружается уже сформированная многострочная часть, каждая строка которой делается по другому шаблону
<СведТов НомСтр="%POSITIONNUMBER" НаимТов="%DESCRIPTION" ОКЕИ_Тов="%OKEI" КолТов="%QTY" ЦенаТов="%PRICE" СтТовБезНДС="%SUMWOVAT" СтТовУчНал="%SUMWITHVAT" НалСт="%VATPERCENT">
  <Акциз>
    <БезАкциз>без акциза</БезАкциз>
  </Акциз>
  <СумНал>
    <СумНал>%SUMVAT</СумНал>
  </СумНал>
  <СвТД ДефКодПроисх="-"/>
  <ДопСведТов НаимЕдИзм="%RUSSIANUNIT" />
  <ИнфПолФХЖ2 Идентиф="код_материала" Значен="%PRODUCTIDBUYER" />
  <ИнфПолФХЖ2 Идентиф="штрихкод" Значен="%BARCODE" />
</СведТов>
   NorthWind
 
18 - 06.03.20 - 18:43
всего 4 шаблончика на документ
   Skipper
 
19 - 06.03.20 - 18:44
Прикольно. Спасибо за опыт. Удачных выходных
   NorthWind
 
20 - 06.03.20 - 18:49
Функция СтрокаHTML (ВхСтрока)
    
    Результат = ВхСтрока;
    
    МассивИзменений = Новый Массив;
    
    МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", "&", "&amp;")); 
    МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", "<", "&lt;"));
    МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", ">", "&gt;"));
    МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", """", "&quot;"));
    МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", "'", "&#39;"));

    
    Для Каждого Элем из МассивИзменений Цикл
        Результат = СтрЗаменить (Результат, Элем.Что, Элем.НаЧто);
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

Функция ЗаполнитьСтрокуЗаменамиИзПараметров (ВхСтрока, Параметры);
    
    Результат = ВхСтрока;
    
    Для Каждого Элем из Параметры Цикл
        Результат = СтрЗаменить (Результат, "%" + Элем.Ключ, XMLСтрока (Элем.Значение));
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

...
    ЭУПДТело          = ПолучитьМакет ("УПД_Тело_" + СуффиксФормата).ПолучитьТекст();
    ЭУПДПозиция       = ПолучитьМакет ("УПД_Позиция_" + СуффиксФормата).ПолучитьТекст();
    ЭУПДОригинал      = ПолучитьМакет ("УПД_Оригинал_" + СуффиксФормата).ПолучитьТекст();
    ЭУПДКорректировка = ПолучитьМакет ("УПД_Корректировка_" + СуффиксФормата).ПолучитьТекст();    
    
    Параметры = Новый Структура ();
    
    Параметры.Вставить("FILEID",         ИдентификаторФайла);
    Параметры.Вставить("SENDERID",       ИдентификаторОтправителя);
    Параметры.Вставить("RECEIVERID",     ИдентификаторПолучателя);
    Параметры.Вставить("SENDEROPERNAME", СтрокаHTML (мИдентификаторыСторонОбмена.ОператорЭДО [Реализация.Организация].НаименованиеПолное));
    Параметры.Вставить("SENDEROPERINN",  СокрЛП (мИдентификаторыСторонОбмена.ОператорЭДО [Реализация.Организация].ИНН));
    Параметры.Вставить("SENDEROPERID",   СокрЛП (мИдентификаторыСторонОбмена.IDОператораЭДО [Реализация.Организация]));
    Параметры.Вставить("FORMDATE",       Формат (ТекущаяДата (), "ДФ=дд.ММ.гггг"));
    Параметры.Вставить("FORMTIME",       Формат (ТекущаяДата (), "ДФ=ЧЧ.мм.сс"));
    Параметры.Вставить("DOCNUM",         БезЛидирующихНулей (СчФактура.Номер));
    Параметры.Вставить("DOCDATE",        Формат (СчФактура.Дата,"ДФ=дд.ММ.гггг"));
    Параметры.Вставить("BILLDATE",       Формат (Реализация.Дата,"ДФ=дд.ММ.гггг"));
...
    ЭУПДТело = ЗаполнитьСтрокуЗаменамиИзПараметров (ЭУПДТело, Параметры);
    
    Текст = Новый ЗаписьТекста (ИмяФайла, КодировкаТекста.ANSI);
    Текст.Записать(ЭУПДТело);
    Текст.Закрыть ();
   NorthWind
 
21 - 06.03.20 - 18:54
(8) скорее всего он имеет в виду, что если не делать ЗаписатьОбъявлениеXML(), то ЗаписьXML запишет просто теги без стандартного обрамления.
А нестандартное обрамление можно будет вкрячить уже средствами текстового файла. Что ж, тоже вариант.
   NorthWind
 
22 - 06.03.20 - 18:56
мне не нравится сам код вставки тегов в ЗаписьXML, он чрезвычайно непрозрачный и громоздкий, понять через месяц по нему что и зачем делалось - нереально. А шаблоны читаются отлично.
   Skipper
 
23 - 06.03.20 - 19:37
(20) Черт тебя дери!!! Ты в макет запихал XML!!! Ты реально монстр! В Макет! И работаешь с ним, как с табличным документом????????
   Skipper
 
24 - 06.03.20 - 19:38
Браво! БРАВО!!! Я тебе стоя аплодирую!
   Skipper
 
25 - 06.03.20 - 19:38
С табуретки и в носках!
   Skipper
 
26 - 06.03.20 - 19:38
Блин, это гениально! Ты просто запихал все в макет! Это так просто!
   NorthWind
 
27 - 06.03.20 - 19:58
(23) ну да... А чебынет? Очень удобно, практически полноценная альтернатива Win32-ресурсам в EXE и DLL. Любые данные можно подцеплять.
   Skipper
 
28 - 06.03.20 - 20:02
(27) Класс! Надо будет на макете замутить, удивлю систему )
   NorthWind
 
29 - 06.03.20 - 21:31
(28) ну, сильно не удивите, в типовых XSD-схемы часто в текстовых макетах хранят. Там вообще много чего в макетах хранят, включая бинарники дров торгового оборудования. Просто откройте и посмотрите общие макеты любой типовой...
   NorthWind
 
30 - 06.03.20 - 21:32
Это, кстати, одна из причин, почему ныне типовые такие увесистые стали
 
 
   NorthWind
 
31 - 06.03.20 - 21:38
казалось бы, cf-ник загрузил, данных считай никаких... а уже полгига или больше... это оно.
   Fragster
 
32 - 06.03.20 - 22:00
Проще не шаблон, а пакет или схему сделать, и с объектом XDTO работать, чуть сложнее, чем с массивом и структурой.
   NorthWind
 
33 - 06.03.20 - 22:34
(32) я долго пытался накопать - как, используя xsd, сделать нечто похожее. Я так и не понял как с их помощью создать новый валидный файл по шаблону, просто вставив куда-то значения тегов. Есть пример?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.