|
Выгрузка в XML (порядок следования элементов) | ☑ | ||
---|---|---|---|---|
0
55reg
16.04.21
✎
04:50
|
Нужна помощь! Уже и не знаю что делать!
Есть выгрузка в XML все работает замечательно, но есть одно НО! Порядок следования элементов не так как их записываю, а зеркально что ли. Пример - это в xml получается! <?xml version="1.0" encoding="WINDOWS-1251"?> -<Файл НаимПрог="1С:Предприятие 8.2" ВерсФорм="4.4" ДатаДок="16.04.2021"> -<ФормаОтч НомФорм="38" ПризПериодОтч="3" ГодПериодОтч="2021"> а в коде я пишу ХМЛФайлДанных.ЗаписатьНачалоЭлемента("Файл"); ХМЛФайлДанных.ЗаписатьАтрибут("ДатаДок",Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy")); ХМЛФайлДанных.ЗаписатьАтрибут("ВерсФорм","4.4"); ХМЛФайлДанных.ЗаписатьАтрибут("НаимПрог","1С:Предприятие 8.2"); ХМЛФайлДанных.ЗаписатьНачалоЭлемента("ФормаОтч"); ХМЛФайлДанных.ЗаписатьАтрибут("ГодПериодОтч",Формат(КонПериода, "ДФ=yyyy")); ХМЛФайлДанных.ЗаписатьАтрибут("ПризПериодОтч",ПризПериодОтч(КонПериода)); ХМЛФайлДанных.ЗаписатьАтрибут("НомФорм","38"); Что бы я не делал он мне в итоге выстраивает в порядке "наоборот" причем даже если в коде менять местами порядок записи - это никак не влияет! А мне важно в одном месте соблюсти порядок следования этих записей иначе не верно парсит ((( Ткните носом что я делаю не так, спасибо! |
|||
1
Мимохожий Однако
16.04.21
✎
06:45
|
ну переставь местами строки и посмотри
|
|||
2
youalex
16.04.21
✎
06:53
|
может не тот файл смотришь?
Напиши Сообщить(ХМЛФайлДанных.Закрыть()) после твоего фрагмента |
|||
3
Chameleon1980
16.04.21
✎
07:00
|
А чем смотришь?
Может это просмотрщик сотрирует |
|||
4
55reg
16.04.21
✎
07:04
|
(1) пробовал бесполезно, все параметры в обратном порядке...
|
|||
5
55reg
16.04.21
✎
07:04
|
(3) Да нет ))) если открыть в блокноте так и будет. Ну и парсер выдает ошибку
|
|||
6
55reg
16.04.21
✎
07:07
|
(2) ну там цикл - это сложно сделать ...
|
|||
7
55reg
16.04.21
✎
07:10
|
(2) это вообще не работает! Ничего не происходит
|
|||
8
55reg
16.04.21
✎
07:11
|
Такое ощущение что какая то сортировка включена!
|
|||
9
Ненавижу 1С
гуру
16.04.21
✎
07:12
|
Оффтоп конечно, но в приличных местах порядок следования элементов в xml или json, а также "лишние" элементы, не должны влиять на результат парсера.
|
|||
10
youalex
16.04.21
✎
07:13
|
(7) блин, для проверки просто сделай, посмотри что выведется
|
|||
11
PowerBoy
16.04.21
✎
07:17
|
Чудес не бывает, это вьюер тебе показывает разный порядок, открой например c помощью Notepad++
|
|||
12
55reg
16.04.21
✎
07:17
|
(10) Ничего не выдается! Сообщить не работает так
|
|||
13
55reg
16.04.21
✎
07:18
|
(9) Ну как бы алкогольная декларация ...
|
|||
14
NorthWind
16.04.21
✎
07:18
|
(0) порядок следования атрибутов в XML не определен и, насколько я понимаю, вы не добьетесь определенного следования. Ну если только не возьметесь записывать это все строками как текст. Вопрос второй: зачем это вам? Обычно определенного порядка атрибутов никто не требует.
|
|||
15
acht
16.04.21
✎
07:20
|
(0) Три пункта:
1) Не следует называть атрибуты XML элементами. 2) Порядок следования атрибутов XML по стандарту неопределен: https://www.w3.org/TR/REC-xml/#sec-starttags - "Note that the order of attribute specifications in a start-tag or empty-element tag is not significant". Так что все претензии к кривому парсеру. 3) Если за победу над кривым парсером платят деньги, то засучивай рукава и пиши все текстом - или ЗаписатьБезОбработки, или вообще весь XML как текст. |
|||
16
55reg
16.04.21
✎
07:23
|
(14) Ну как бы можно рискнуть и попробовать сдать алкогольную декларацию так (в таком порядке) такой себе риск...
|
|||
17
55reg
16.04.21
✎
07:25
|
(14) Я так и понял что это все сведется к тексту... Очень странно - если порядок не определен почему он определяется именно таким, а не так как записываются элементы.
(xml не особо моя тема, не думал что так все через Ж) |
|||
18
acht
16.04.21
✎
07:27
|
(17) > Очень странно
Это обычный вопрос к программе, написаной не тобой. Другие, кстати, задают тот же вопрос, смотря на твои программы =) |
|||
19
youalex
16.04.21
✎
07:28
|
(12) заинтриговал) как "так" не работает?
ну в отладчике посмотри ХМЛФайлДанных.Закрыть(), только помни, что у тебя будет всего один шанс |
|||
20
55reg
16.04.21
✎
07:30
|
(18) вы намекаете что 1С сама при работе с xml сохраняет в таком порядке? Я просто хочу понять на каком этапе принимается решение, "а давайте я все наоборот запишу ради прикола это же весело"
ps Как то можно отредактировать xml? Мне надо то всего две записи поменять местами. |
|||
21
Bigbro
16.04.21
✎
07:31
|
переходите на 7ку там все работает корректно)
|
|||
22
spectre1978
16.04.21
✎
07:34
|
(16) сдадите. Если проблемы и возникнут, то не по этой части.
(21) не-а, v7plus так же записывает ;)) |
|||
23
Провинциальный 1сник
16.04.21
✎
07:36
|
(17) "Очень странно - если порядок не определен почему он определяется именно таким"
Если порядок не определен стандартом - то формирователь упорядочивает так, как ему удобнее и проще. (21) Там такая же хрень. Если вы про v7plus. |
|||
24
spectre1978
16.04.21
✎
07:37
|
(20) все попадавшиеся мне формирователи xml записывали атрибуты в каком-то своем порядке, исходя из внутренних соображений. Было такое, что я тоже задавался тем же вопросом что и вы, но в реальности это оказалось не нужно. Выборка идет по имени, а не по номеру. Ну как член структуры. Так что абсолютно неважно в каком порядке они записаны.
|
|||
25
Bigbro
16.04.21
✎
07:39
|
да пардон, заглянул где у меня XML формируются в строгом порядке - там через текст врукопашную все формируем.
|
|||
26
55reg
16.04.21
✎
07:42
|
(22) Ха! делов то! открыл в блокноте и поменял стоки Возврат и Приход как нужно и все проверилось как надо! Возможно Парсер Декларант-Алко не хочет воспринимать такой порядок (не верный), но рисковать с РАР'ом не хочется ... Типа они то верно распарсят как бы там не шло...
|
|||
27
acht
16.04.21
✎
07:44
|
(20) > вы намекаете
Не намекаю, утверждаю. Там в потрохах, если я правильно помню, libxml2. Это к ней. > отредактировать xml? Мне надо то всего две записи Не надо "хитрить". Надо делать как надо. Кроилово ведет к последующему попадалову. |
|||
28
55reg
16.04.21
✎
07:45
|
(24) Не все с вами согласятся...
https://coderoad.ru/1131495/В-XML-году-важен-ли-порядок |
|||
29
acht
16.04.21
✎
07:46
|
(28) Уважаемый. Ты атрибуты от элементов когда отличать научишся?
|
|||
30
acht
16.04.21
✎
07:46
|
(26) > стоки Возврат и Приход
Про это в примере не слова не было. Если это элементы, то ты ССЗБ, формируя XML так |
|||
31
55reg
16.04.21
✎
07:48
|
В любом случае всем спасибо за участие!
Стало ясно что победить это - никак. Если делать то через Текст (раньше так и делал выгрузки), но эта конкретная выгрузка наследие от др. прогеров )) Сдам пока так (исправлю руками одну строку) - будет еще 3 мес что бы переделать как надо. |
|||
32
55reg
16.04.21
✎
07:49
|
(29) каюсь это касяк - уже иcправляюсь...
|
|||
33
55reg
16.04.21
✎
07:51
|
(30) Ничего не понял что такое ССЗБ ?
Вот кусок (пример проблемы) -<Поставщик ПN="1" ИдПоставщика="000000522"> <Поставка П000000000016="1.01000" П000000000015=" " П000000000014="2190084" П000000000013="19.02.2021"/> <Возврат П000000000016="0.54000" П000000000015=" " П000000000014="" П000000000013="20.02.2021"/> </Поставщик> Это что то меняет? Есть решение? |
|||
34
55reg
16.04.21
✎
07:53
|
.
. . . . Если Строка7.Возврат > 0 Тогда ХМЛФайлДанных.ЗаписатьНачалоЭлемента("Возврат"); // Продукция 4.3 ХМЛФайлДанных.ЗаписатьАтрибут("П000000000013",Формат(Строка7.Документ.Дата,"ДФ=dd.MM.yyyy")); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000014",СокрЛП(Строка7.Документ.НомерВходящегоДокумента)); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000015"," "); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000016",Формат(Строка7.Возврат,"ЧДЦ=5; ЧРД=.; ЧН=0.0000; ЧГ=0")); ХМЛФайлДанных.ЗаписатьКонецЭлемента();//Продукция КонецЕсли; Если Строка7.Приход > 0 Тогда ХМЛФайлДанных.ЗаписатьНачалоЭлемента("Поставка",); // Продукция 4.3 ХМЛФайлДанных.ЗаписатьАтрибут("П000000000013",Формат(Строка7.Документ.Дата,"ДФ=dd.MM.yyyy")); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000014",СокрЛП(Строка7.Документ.НомерВходящегоДокумента)); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000015"," "); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000016",Формат(Строка7.Приход,"ЧДЦ=5; ЧРД=.; ЧН=0.0000; ЧГ=0")); ХМЛФайлДанных.ЗаписатьКонецЭлемента();//Продукция КонецЕсли; КонецЦикла; ХМЛФайлДанных.ЗаписатьКонецЭлемента();//Поставщик Вот сама запись... |
|||
35
55reg
16.04.21
✎
07:55
|
Само собой кусок уже исправленный.
В коде как не меняй местами - Возврат на первом месте а потом приход ... Не хорошо! |
|||
36
RomaH
naïve
16.04.21
✎
08:01
|
делай два цикла
вынеси условия в разные циклы - сначала приход потом возврат |
|||
37
RomaH
naïve
16.04.21
✎
08:04
|
либо коллекцию сортировать так, что бы приход был перед возвратом (или ка тебе надо?)
|
|||
38
55reg
16.04.21
✎
08:39
|
(36) Да, я сначала так и хотел сделать 2 цикла - но работает не корректно - где то путаница с закрытием Элементов.
А как сортировать ? |
|||
39
NorthWind
16.04.21
✎
09:00
|
(28) вы декларацию сдайте. Если вам придет отлуп от проверки синтаксиса из-за проверки атрибутов - тогда и будете греть голову.
|
|||
40
55reg
16.04.21
✎
09:09
|
(39) Так вы точно знаете что порядок следования Атрибутов в Элементах не важен при проверке декларации в РАР?
Сдавали за 1 квартал по новому? |
|||
41
NorthWind
16.04.21
✎
09:59
|
(40) а вы точно знаете что он важен? :)
По сути дела. Заголовки, описанные в (0), встречаются у кучи государственных документов, в том числе у ЭУПД. Все это формировалось стандартными способами и сдавалось. Проблем не было. За порядком атрибутов никто не следил. |
|||
42
NorthWind
16.04.21
✎
10:01
|
я не исключаю, что может найтись какое-то ведомство, которое вдруг начнет вытрепывать голову с этим. В случае с нашим государством удивляться нельзя ничему. Но покуда этого не произошло - пользуйтесь стандартными средствами и не мучайтесь. Когда будут бить - тогда и будете плакать.
|
|||
43
55reg
16.04.21
✎
10:14
|
(42) Проверка в uchet-info.com ругается... Не исключаю что РАРу пофиг на порядок. Логика в ваших словах конечно есть.
|
|||
44
Serg_1960
16.04.21
✎
10:34
|
Чисто формально изучая описание (в том числе "Перечень структурных элементов логической модели файла обмена") не обнаружил никакой информации о порядке следования элементов. Отсутствуют также нумерация строк в перечне элементов и какая-либо кодировка элементов, позволяющая судить о порядке следования.
|
|||
45
MWWRuza
гуру
16.04.21
✎
10:36
|
Правильно тут выше написали, порядок следования атрибутов на просмотре, зависит от того, чем просматривать...
Вот, один и тот-же файл, на скриншоте "из двух" - верхняя часть, до красной линии - браузером(IE), нижняя - Notepad++ https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/i-385.jpg Что касается порядка следования элементов - тут х.з., я такого не наблюдал - как вывожу строки ХМЛ(в данном случае - 1с77, компонентой v7Plus), так они и отображаются, любым просмотрщиком. Так, что ищите у себя. PS На скриншоте, фрагмент реально сданной декларации, никаких проблем с ее приемом не возникло. |
|||
46
Serg_1960
16.04.21
✎
10:40
|
*(44) Исключение: таблицы 3.8 - 3.6.5 в них есть код, содержащий цифры
|
|||
47
MWWRuza
гуру
16.04.21
✎
10:40
|
Не правильно ссылку на скриншот дал, это превьюшка, вот полноразмерная картинка:
https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-385.jpg |
|||
48
RomaH
naïve
16.04.21
✎
11:29
|
могу ошибаться, но если элементы описаны внутри sequence - то порядок важен
|
|||
49
RomaH
naïve
16.04.21
✎
11:31
|
когда порядок не важен - то используется all
для атрибутов такого не видел |
|||
50
55reg
16.04.21
✎
11:57
|
(47) Это старый формат декларации 4.3 - когда у вас его приняли и за какой период?
В новом формате требуют указывать не только поступления (Элемент - Продукция в 4.3) в новой 4.4 это Поставка, теперь но еще и элемент Возврат. Я не знаю может и порядок не важен - сначала идет Возврат потом Поставка - надеюсь РАР примет... |
|||
51
55reg
16.04.21
✎
11:58
|
(47) До начала 2021 у меня все отлично сдавалось - никаких проблем то же не было с порядком Атрибутов.
|
|||
52
Жан Пердежон
16.04.21
✎
12:00
|
уже сказали, что парсер - говно?
|
|||
53
55reg
16.04.21
✎
12:06
|
(52) Да, было такое предположение )))
|
|||
54
MWWRuza
гуру
16.04.21
✎
12:07
|
(51) До начала 2021
Этот файл - 1 квартал 2021. Раньше, точно так-же на просмотр выводилось. Так, что ищите причину, она в чем-то другом. Кстати, что в протоколе приема на сайте ФСРАР пишет, покажите ошибку -? |
|||
55
55reg
16.04.21
✎
12:11
|
(54) Т е вы ничего не меняли просто сформировали все по старому ??? Оч странно... И это не корректировочная за 4 квартал 2020?
Приказ №396 определяет новый формат деклараций в электронном виде - Версии 4.4 Для деклараций объемов оборота этилового спирта и медицинских изделий - Версии 4.33 - это все не читали? https://ucparma.ru/info/news/izmenenie-v-deklarirovanii-alkogolnoy-produktsii-v-2021-godu/ |
|||
56
55reg
16.04.21
✎
12:13
|
(54) В РАР буду сдавать в понедельник уже...
Разработчики программного обеспечения с нетерпением ждали появления XSD схем новых форм деклараций, и, наконец они были опубликованы на сайте ФСРАР: https://fsrar.gov.ru/Declaring/xsd_shemy |
|||
57
MWWRuza
гуру
16.04.21
✎
12:19
|
(56) Т е вы ничего не меняли просто сформировали все по старому ???
В смысле, ничего не менял? Формат 4.40, форма №8... Дописывал в алгоритме формирования,но сам принцип - не менял, основа старая, как еще в 2012 году писал, так и дальше ее допиливаю с каждым изменением формата... |
|||
58
RomaH
naïve
16.04.21
✎
12:19
|
||||
59
55reg
16.04.21
✎
12:25
|
(57) Через текст все написано ? Возвраты Поставщику были в декларации?
|
|||
60
MWWRuza
гуру
16.04.21
✎
12:27
|
+(57) Аааааа!!!! Извиняюсь, я ошибся, когда скриншоты делал, старый файл открыл, 12 формы, чем ввел Вас в заблуждение. Просто первый, попавшийся под руку :-)
Но, и в новых файлах 08 форм, все точно так-же. Могу скриншоты переделать, если надо... |
|||
61
MWWRuza
гуру
16.04.21
✎
12:28
|
Нет, не через текст, через запись ХМЛ...
|
|||
62
MWWRuza
гуру
16.04.21
✎
12:30
|
В боевых - возвратов не было. Но, естественно тестировал.
Просто у меня возвраты проверяются при формировании декларации, что они введены на основании ВозвратЕГАИС. Если возврат сделан просто произвольно, он в декларацию не включается, что-бы не было расхождения с ЕГАИС. |
|||
63
55reg
16.04.21
✎
12:33
|
(57) Вот и у меня основа старая. (60) Ну если есть пример где идут Поступления и Возвраты в то можно - типа какой там порядок у вас? Если сначала Поступления потом Возвраты то хотелось бы знать ка вы это сделали не через текст )))
. . . . + Code Если Строка7.Возврат > 0 Тогда ХМЛФайлДанных.ЗаписатьНачалоЭлемента("Возврат"); // Продукция 4.3 ХМЛФайлДанных.ЗаписатьАтрибут("П000000000013",Формат(Строка7.Документ.Дата,"ДФ=dd.MM.yyyy")); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000014",СокрЛП(Строка7.Документ.НомерВходящегоДокумента)); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000015"," "); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000016",Формат(Строка7.Возврат,"ЧДЦ=5; ЧРД=.; ЧН=0.0000; ЧГ=0")); ХМЛФайлДанных.ЗаписатьКонецЭлемента()//Продукция КонецЕсли; Если Строка7.Приход > 0 Тогда ХМЛФайлДанных.ЗаписатьНачалоЭлемента("Поставка",); // Продукция 4.3 ХМЛФайлДанных.ЗаписатьАтрибут("П000000000013",Формат(Строка7.Документ.Дата,"ДФ=dd.MM.yyyy")); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000014",СокрЛП(Строка7.Документ.НомерВходящегоДокумента)); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000015"," "); ХМЛФайлДанных.ЗаписатьАтрибут("П000000000016",Формат(Строка7.Приход,"ЧДЦ=5; ЧРД=.; ЧН=0.0000; ЧГ=0")); ХМЛФайлДанных.ЗаписатьКонецЭлемента()//Продукция КонецЕсли; КонецЦикла; ХМЛФайлДанных.ЗаписатьКонецЭлемента()//Поставщик Вот мой код ... |
|||
64
Вафель
16.04.21
✎
12:35
|
ЗаписьXML порядок сохраняет ибо это построчная запись текста.
Ищи свой косяк |
|||
65
acht
16.04.21
✎
12:37
|
(63) У тебя "Если Строка7.Возврат > 0 Тогда" и "Если Строка7.Приход > 0 Тогда" выполняются в произвольном порядке. Ищи почему.
|
|||
66
55reg
16.04.21
✎
12:44
|
(64) Моя тема доказывает обратное ))) Я бы рад с вами согласиться но все пишется так как ему хочется
(ряд причин тут уже озвучили) (65) - выполняются в произвольном порядке. - это что еще за произвольный порядок выполнения кода? Отладчик с вами не согласен... |
|||
67
acht
16.04.21
✎
12:48
|
(66) Чудес не бывает. Иди договаривайся со своим отладчиком.
|
|||
68
Джордж1
16.04.21
✎
12:50
|
(0)А как смотришь файл?
За IE такое замечено - отображает атрибуты в обратном порядке |
|||
69
MWWRuza
гуру
16.04.21
✎
12:53
|
(63) Поступления потом Возвраты то хотелось бы знать ка вы это сделали не через текст
Ну, учитывая, что я это все писал методом "латания дыр", алгоритм далеко не оптимальный. Когда я начинал этот отчет писать, такой задачи по возвратам - не было. Сейчас, переделывать все с нуля - лень. Просто я собираю возвраты в отдельную таблицу, и после вывода приходов, проверяю, есть ли в ней строки по этой связке "Алкокод+Производитель", и если есть вывожу. |
|||
70
55reg
16.04.21
✎
12:56
|
(68) Открыл блокнотом - все то же самое ... До меня кажется начинает доходить в чем дело ))) acht навел на мысль
Я понял в чем прикол - остался вопрос как красиво это обыграть теперь ... |
|||
71
55reg
16.04.21
✎
12:56
|
(69) Ну да, нет возвратов нет проблем ))) несчастные 0,54 далл затисались во всей декларации )))
|
|||
72
55reg
16.04.21
✎
13:07
|
В общем переделывать за кем то это пипец! При таком подходе вывода в цикле - возврат всегда тупо стоял первым в таблице ...
|
|||
73
Вафель
16.04.21
✎
13:12
|
(72) вот видишь - всего лишь г...нокод, а не чудеса
|
|||
74
MWWRuza
гуру
16.04.21
✎
13:15
|
(71) несчастные 0,54 далл затисались во всей декларации
Я еще, как выше писал, проверяю, введен ли возврат поставщику на основании возврата ЕГАИС... Просто, некоторые поставщики пива, не хотят с возвратами по ЕГАИС связываться, тупо забирают просрочку и утилизируют, заменяя на новую продукцию. Такие возвраты, которые прошли "по учету" но не проходили по ЕГАИС, показывать в декларации... Мягко говоря, "стремено" :-) |
|||
75
55reg
16.04.21
✎
13:31
|
(74) это понятно - у нас так не принято - только через ЕГАИС!
|
|||
76
55reg
16.04.21
✎
13:31
|
(73) увы так ...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |