|   |   | 
| 
 | Выгрузка в 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) увы так ...     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |