![]() |
|
Работа с 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 (ВхСтрока)
Результат = ВхСтрока; МассивИзменений = Новый Массив; МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", "&", "&")); МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", "<", "<")); МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", ">", ">")); МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", """", """)); МассивИзменений.Добавить (Новый Структура ("Что,НаЧто", "'", "'")); Для Каждого Элем из МассивИзменений Цикл Результат = СтрЗаменить (Результат, Элем.Что, Элем.НаЧто); КонецЦикла; Возврат Результат; КонецФункции Функция ЗаполнитьСтрокуЗаменамиИзПараметров (ВхСтрока, Параметры); Результат = ВхСтрока; Для Каждого Элем из Параметры Цикл Результат = СтрЗаменить (Результат, "%" + Элем.Ключ, 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, сделать нечто похожее. Я так и не понял как с их помощью создать новый валидный файл по шаблону, просто вставив куда-то значения тегов. Есть пример?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |