Имя: Пароль:
1C
 
Работа с XML
0 Skipper
 
06.03.20
17:40
Всем привет.
Создаю XML через метод ЗаписьXML.
Надо записать объявление, но не типовое, а свое, и свое закрытие тега. Получается XML надо как строку формировать, да?
С объектом ЗаписьXML  не получится поработать?
1 NorthWind
 
06.03.20
17:55
Думаю, нет. Я вообще практически отказался от записихмл, гораздо удобнее создать шаблон и сделать замены значений тегов на нужные, а потом писнуть это в простой текст...
2 Skipper
 
06.03.20
17:59
Ясно, спасибо.
А через схему XML тоже фиговая идея?
3 NorthWind
 
06.03.20
18:02
Можно попробовать, но черт его знает, оно же нестандарт... Просто ругнется что плохая схема скорее всего.
4 Skipper
 
06.03.20
18:03
Ясно, ладно, буду делать через простой текст, который героически, подчеркиваю, героически пихну в xml
5 Skipper
 
06.03.20
18:03
Всем спасибо!
6 Сияющий в темноте
 
06.03.20
18:08
файловый поток вам в помощь.
7 Сияющий в темноте
 
06.03.20
18:10
можно сначала свой заголовок,а потом уже готовый xml из запись xml засунуть.
8 Skipper
 
06.03.20
18:11
(7) Не понял, это как?
9 NorthWind
 
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 на нужные значения. На самом деле там чуть сложнее, пару-тройку сервисных фунок надо написать, но в общем ерунда. Могу код показать
10 NorthWind
 
06.03.20
18:14
всяко в разы проще чем через записьхмл записывать простыню
11 pechkin
 
06.03.20
18:16
кстати в 1 есть нативная поддержка текстовых шаблонов. а ля печатные формы
12 pechkin
 
06.03.20
18:17
см. ТекстовыйДокумент.Параметры
13 pechkin
 
06.03.20
18:18
14 NorthWind
 
06.03.20
18:25
(13) пробовал, применительно к xml получается какашка, потому как там какие-то символы не экранируются из тех что в литералах используются
15 NorthWind
 
06.03.20
18:26
вообще механизм рабочий, но вот конкретно для данной цели не годится
16 Skipper
 
06.03.20
18:33
(9) Можете на ЯД выложить обработку пример? Я чет не понимаю, как Товары будут выгружаться.
Типы выгрузка товары в отдельну строку, и блоком вставлять в первоначальную строку?
17 NorthWind
 
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" />
</СведТов>
18 NorthWind
 
06.03.20
18:43
всего 4 шаблончика на документ
19 Skipper
 
06.03.20
18:44
Прикольно. Спасибо за опыт. Удачных выходных
20 NorthWind
 
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);
    Текст.Записать(ЭУПДТело);
    Текст.Закрыть ();
21 NorthWind
 
06.03.20
18:54
(8) скорее всего он имеет в виду, что если не делать ЗаписатьОбъявлениеXML(), то ЗаписьXML запишет просто теги без стандартного обрамления.
А нестандартное обрамление можно будет вкрячить уже средствами текстового файла. Что ж, тоже вариант.
22 NorthWind
 
06.03.20
18:56
мне не нравится сам код вставки тегов в ЗаписьXML, он чрезвычайно непрозрачный и громоздкий, понять через месяц по нему что и зачем делалось - нереально. А шаблоны читаются отлично.
23 Skipper
 
06.03.20
19:37
(20) Черт тебя дери!!! Ты в макет запихал XML!!! Ты реально монстр! В Макет! И работаешь с ним, как с табличным документом????????
24 Skipper
 
06.03.20
19:38
Браво! БРАВО!!! Я тебе стоя аплодирую!
25 Skipper
 
06.03.20
19:38
С табуретки и в носках!
26 Skipper
 
06.03.20
19:38
Блин, это гениально! Ты просто запихал все в макет! Это так просто!
27 NorthWind
 
06.03.20
19:58
(23) ну да... А чебынет? Очень удобно, практически полноценная альтернатива Win32-ресурсам в EXE и DLL. Любые данные можно подцеплять.
28 Skipper
 
06.03.20
20:02
(27) Класс! Надо будет на макете замутить, удивлю систему )
29 NorthWind
 
06.03.20
21:31
(28) ну, сильно не удивите, в типовых XSD-схемы часто в текстовых макетах хранят. Там вообще много чего в макетах хранят, включая бинарники дров торгового оборудования. Просто откройте и посмотрите общие макеты любой типовой...
30 NorthWind
 
06.03.20
21:32
Это, кстати, одна из причин, почему ныне типовые такие увесистые стали
31 NorthWind
 
06.03.20
21:38
казалось бы, cf-ник загрузил, данных считай никаких... а уже полгига или больше... это оно.
32 Fragster
 
гуру
06.03.20
22:00
Проще не шаблон, а пакет или схему сделать, и с объектом XDTO работать, чуть сложнее, чем с массивом и структурой.
33 NorthWind
 
06.03.20
22:34
(32) я долго пытался накопать - как, используя xsd, сделать нечто похожее. Я так и не понял как с их помощью создать новый валидный файл по шаблону, просто вставив куда-то значения тегов. Есть пример?