Ошибка валидации xml документа

Не могу получить вручную файл xml для загрузки в ЕИС Госзакупок
   prog1Csww

19.07.22 — 09:47

Есть следующий формат файла для ЕИС Госзакупок.

Описан здесь

https://zakupki.gov.ru/epz/main/public/download/downloadDocument.html?id=36503

Получился такой файлик

<?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<ФайлПакет ИдТрПакет=»37B62CBA-66A5-4722-A350-5AF49F97E111″ ИдФайл=»ON_NSCHFDOPPR_2ZK-CUS-03223001038_2ZK-SUP-00019150656_20220715_37B62CBA-66A5-4722-A350-5AF49F97E98E» ДатаВрФормир=»2022-07-19T00:00:01″ ТипПрилож=»УПДПрод» ВерсФорм=»1.00″ ИдОтпр=»2ZK-SUP-00019150656″ ИдПол=»2ZK-CUS-03223001038″>

    <Документ>

    <Контент>PNCk  много букв base64 Pg==</Контент>

    </Файл>

    </Документ>

</ФайлПакет>

Но выдает ошибку

РДИК_ИК_0003. Ошибка валидации xml-документа «DP_PAKET»: cvc-datatype-valid.1.2.1: ‘PNCk много букв base64 Pg==’ is not a valid value for ‘base64Binary’.

Что означает эта ошибка?

Формировал base64Binary следующим кодом в 1С

    ВременныйФайл = ПолеВвода3;

    ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл, «CESU-8»);

    ЗаписьТекста.Записать(ПолеВвода1);

    ЗаписьТекста.Закрыть();

    ДД_Файла = Новый ДвоичныеДанные(ВременныйФайл);

    
    ПолеВвода2 = Base64Строка(ДД_Файла);

Потом ПолеВвода2 скопировал в тег «Контент» непосредственно в блокноте.

Как создать рабочий файлик чтобы хоть посмотреть как он выглядит?

   prog1Csww

1 — 19.07.22 — 09:50

Есть наше обращение в техподдержку ЕИС Госзакупок. Может поможет чем…

Вопрос…

Работает ли загрузка документа приемки из файла?

Описание:

Здравствуйте.

1. Зашли в контракты

2. Для отправленного заказчику документа о приемке выбрали «Скачать архив документов»

3. В УПД из архива поменяли ГУИД в имени файла и в тексте xml документа тоже поменяли аттрибут Файл.

4. Поменяли порядковый номер документа и дату первичного документа в тексте xml файла.

5. Попытались загрузить.

6. Выдало ошибку РДИК_ИК_0003. Ошибка валидации xml-документа «DP_PAKET»: cvc-elt.1.a: Cannot find the declaration of element ‘Файл’.

Работает ли Ваша опция загрузки? Или наш подход в корне не верен и выгруженный из ЕИС но подредактированный файл нельзя подгрузить в ЕИС снова?

******************************* Ответ **************************************

Уважаемый пользователь!

Контроль РДИК_ИК_0003 возникает по причине не корректно сформированного транспортного пакета.

Загружается xml-файл (транспортный пакет), не соответствующий интеграционным схемам ЕИС.

Для успешной обработки необходимо передавать транспортный пакет (ФайлПакет) сформированный согласно схеме DP_PAKET_EIS_01_00.xsd.

В составе загружаемого в ЕИС транспортного пакета должны передаваться:

•УПД или УКД

•Приложение к документу, которое является составной и неотъемлемой частью УПД (титул продавца) или УКД (титул продавца) в схеме DP_PACKET_EIS_01_00

Сам пакет должен содержать:

•soap-оболочку (при загрузке xml-файла непосредственно в личном кабинете поставщика soap-оболочка не требуется)

•Шапка (ФайлПакет)

•Документ/Контент в base64 (содержит УПД или УКД)

•Прилож/Контент в base64 (содержит ФайлУПДПрод / ФайлУКДПрод)

УПД — Универсальный передаточный документ (титул Продавца). Интеграционная схема ON_NSCHFDOPPR_1_997_01_05_01_02

УКД — Универсальный корректировочный документ. Интеграционная схема ON_NKORSCHFDOPPR_1_996_03_05_01_01

Отметим, что передаваемые сведения должны иметь кодировку windows-1251 (В шапке ФайлПакет, Файл, ФайлУПДПрод/ФайлУКДПрод необходимо указывать <?xml version=»1.0″ encoding=»windows-1251″ ?>).

Структура документов указана в Схемах Эл. Акт. 12.2 и описана в Альбоме ТФФ Эл Акт 12.2 размещенных в открытой части ЕИС.

https://zakupki.gov.ru/epz/main/public/document/view.html?searchString=§ionId=432&strictEqual=false

   prog1Csww

2 — 20.07.22 — 01:33

Вверх.

   prog1Csww

3 — 20.07.22 — 07:20

Удалось победить первое препятствие

код обработки заменил на

    ПотокВПамяти = Новый ПотокВПамяти();

    Текст = Новый ЗаписьТекста(ПотокВПамяти, КодировкаТекста.UTF8, , Символы.ПС);

    Текст.Записать(ПолеВвода1);

    Текст.Закрыть();

    
    ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();

    СтрокаФорматBase64 = Base64Строка(ДвоичныеДанные);

    
    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ВК, «»);

    СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ПС, «»);

    
    ПолеВвода2 = СтрокаФорматBase64;

И всё прошло. Но возникла новая проблема

ЕИС ругается на Element type «Р» must be followed by either attribute specifications, «>» or «/>».

Яндекс.Валидатор XML + XSD тоже выдает такую же ошибку причем пишет что сервис временно недоступен.

В XML видимых ошибок нет. Тег «Контент» можно декодировать на сайте http://base64.ru/

Иностранный валидатор XML + XSD https://www.freeformatter.com/xml-validator-xsd.html ошибок не выдает. Жду ответа от техподдержки ЕИСа.

   Ryzeman

4 — 20.07.22 — 07:27

Ну, вообще тебе английским по-белому писало ошибку что в (0) что сейчас. В (0) была проблема с <Контент> как раз то, что ты не написал. В теле ожидалась строка base64Binary, у тебя там были какие-то недопустимые символы. В (3) у тебя где-то в XML незакрытый элемент <p>. То есть он буквально тебе пишет, что открытие тега <p> должно сопровождаться его закрытием. Посмотреть это можно в любой удобной гляделке XML — в браузере или notepad++ с компонентой для XML, например. Не видя что ты там формируешь что-то тебе ещё посоветовать невозможно.

   Ryzeman

5 — 20.07.22 — 07:29

Вариант — у тебя где-то шифруется что то вроде <p или <p>, например, если ты код маркировки передаёшь — это возможно. Тогда надо символы < и > экранировать.

   prog1Csww

6 — 20.07.22 — 09:51

(4) <?xml version=»1.0″ encoding=»WINDOWS-1251″?>

<Файл ИдФайл=»ON_NSCHFDOPPR_2ZK-CUS-03223001038_2ZK-SUP-00019150656_20220715_37B62CBA-66A5-4722-A350-5AF49F97E98E» ВерсФорм=»5.01″ ВерсПрог=»12.2″>

    <СвУчДокОбор ИдОтпр=»2ZK-SUP-00019150656″ ИдПол=»2ZK-CUS-03223001038″>

        <СвОЭДОтпр НаимОрг=»Федеральное казначейство» ИННЮЛ=»7710568760″ ИдЭДО=»2ZK»/>

    </СвУчДокОбор>

    <Документ КНД=»1115131″ Функция=»СЧФДОП» ПоФактХЖ=»Документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)» НаимДокОпр=»Счет-фактура и документ об отгрузке товаров (выполнении работ), передаче имущественных прав (документ об оказании услуг)» ДатаИнфПр=»15.07.2022″ ВремИнфПр=»01.44.16″ НаимЭконСубСост=»ИВАНОВА ОЛЬГА ВЛАДИМИРОВНА» СоглСтрДопИнф=»0000.0000.0000″>

        <СвСчФакт НомерСчФ=»4″ ДатаСчФ=»20.07.2022″ КодОКВ=»643″>

            <СвПрод>

                <ИдСв>

                    <СвИП ИННФЛ=»123456789012″>

                        <ФИО Фамилия=»ИВАНОВА» Имя=»ОЛЬГА» Отчество=»ВЛАДИМИРОВНА»/>

                    </СвИП>

                </ИдСв>

                <Адрес>

                    <АдрРФ КодРегион=»99″ Город=»Г ИВАНОВО»/>

                </Адрес>

                <Контакт Тлф=»7 999 999 9999″ ЭлПочта=»hleb@mail.ru»/>

                <БанкРекв НомерСчета=»99999999999999999999″>

                    <СвБанк НаимБанк=»ПАО СБЕРБАНК» БИК=»999999999″ КорСчет=»99999999999999999999″/>

                </БанкРекв>

            </СвПрод>

            <СвПокуп ОКПО=»99999999″ ИнфДляУчаст=»0″ КраткНазв=»МБДОУ ДЕТСКИЙ САД»>

                <ИдСв>

                    <СвЮЛУч НаимОрг=»МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ДОШКОЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДЕТСКИЙ САД» ИННЮЛ=»9999999999″ КПП=»999999999″/>

                </ИдСв>

                <Адрес>

                    <АдрРФ Индекс=»999999″ КодРегион=»99″ Город=»ГОРОД ИВАНОВО» Улица=»УЛИЦА ИВАНОВА» Дом=»ДОМ 9″/>

                </Адрес>

                <Контакт Тлф=»8 999 999 99 99″ ЭлПочта=»dou@yandex.ru»/>

                <БанкРекв НомерСчета=»99999999999999999999″>

                    <СвБанк НаимБанк=»УФК по Иваново» БИК=»999999999″ КорСчет=»99999999999999999999″/>

                </БанкРекв>

            </СвПокуп>

            <ДопСвФХЖ1 НаимОКВ=»Российский рубль»>

                <ИнфПродГосЗакКазн ДатаГосКонт=»14.06.2022″ НомерГосКонт=»999 999″/>

            </ДопСвФХЖ1>

            <ДокПодтвОтгр НаимДокОтгр=»Документ о приемке» НомДокОтгр=»2″ ДатаДокОтгр=»15.07.2022″/>

        </СвСчФакт>

        <ТаблСчФакт>

            <СведТов НомСтр=»1″ НаимТов=»Хлеб пшеничный» ОКЕИ_Тов=»166″ КолТов=»4.8″ ЦенаТов=»100.33″ СтТовБезНДС=»481.58″ НалСт=»без НДС» СтТовУчНал=»481.58″>

                <Акциз>

                    <БезАкциз>без акциза</БезАкциз>

                </Акциз>

                <СумНал>

                    <БезНДС>без НДС</БезНДС>

                </СумНал>

                <ДопСведТов ПрТовРаб=»1″ НаимЕдИзм=»Килограмм» КодТов=»10.71.11.110″/>

            </СведТов>

            <СведТов НомСтр=»2″ НаимТов=»Хлеб ржано-пшеничный» ОКЕИ_Тов=»166″ КолТов=»2.8″ ЦенаТов=»99″ СтТовБезНДС=»277.2″ НалСт=»без НДС» СтТовУчНал=»277.2″>

                <Акциз>

                    <БезАкциз>без акциза</БезАкциз>

                </Акциз>

                <СумНал>

                    <БезНДС>без НДС</БезНДС>

                </СумНал>

                <ДопСведТов ПрТовРаб=»1″ НаимЕдИзм=»Килограмм» КодТов=»10.71.11.110″/>

            </СведТов>

            <ВсегоОпл СтТовБезНДСВсего=»758.78″ СтТовУчНалВсего=»758.78″>

                <СумНалВсего>

                    <БезНДС>без НДС</БезНДС>

                </СумНалВсего>

            </ВсегоОпл>

        </ТаблСчФакт>

        <СвПродПер>

            <СвПер СодОпер=»Работы выполнены в полном объеме» ДатаПер=»04.07.2022″>

                <ОснПер НаимОсн=»Контракт» НомОсн=»999 9999″ ДатаОсн=»14.06.2022″ ДопСвОсн=»Реестровый номер в реестре контрактов: 9999999999999999999″/>

                <ТранГруз/>

            </СвПер>

        </СвПродПер>

        <Подписант ОблПолн=»5″ Статус=»4″ ОснПолн=»Должностные обязанности»>

            <ИП ИННФЛ=»123456789012″>

                <ФИО Фамилия=»ИВАНОВА» Имя=»ОЛЬГА» Отчество=»ВЛАДИМИРОВНА»/>

            </ИП>

        </Подписант>

    </Документ>

</Файл>

  

prog1Csww

7 — 21.07.22 — 02:18

Ответ техподдержки

Уважаемый пользователь!

Несмотря на то, что в прологе титула продавца указана кодировка <?xml version=»1.0″ encoding=»WINDOWS-1251″?> сведения закодированы в UTF-8.

Просьба сведения, находящиеся в Документ/Контент, формировать в windows-1251, а затем кодировать в base64.

Также отметим, что в загружаемом транспортном пакете отсутствует приложение к титулу продавца (ФайлУПДПрод), которое является составной и неотъемлемой частью УПД (титул продавца) и передается в блоке Прилож/Контент.

Просьба корректно формировать загружаемый xml-файл.

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

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

XML документ с корректным синтаксисом называется «правильно сформированным» или «синтаксически верным».

«Валидный» XML документ кроме всего прочего должен соответствовать определенному типу документов.

Синтаксически верные XML документы

XML документ с корректным синтаксисом является «синтаксически верным».

Синтаксические правила были описаны в предыдущих главах:

  • XML документ должен иметь корневой элемент
  • XML элемент должен иметь закрывающий тег
  • XML теги регистрозависимы
  • XML элементы должны соблюдать последовательность вложенности
  • Значения XML атрибутов должны заключаться в кавычки

<?xml version="1.0" encoding="UTF-8"?>
<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь про меня в эти выходные!</body>
</note>

Валидные XML документы

Валидный XML документ не то же самое, что и синтаксически верный XML документ.

Первое правило для валидного XML документа то, что он должен быть синтаксически верным.

Второе правило — валидный XML документ должен соответствовать определенному типу документов.

Правила, определяющие допустимые элементы и атрибуты для XML документа, часто называются определениями документа или схемами документа.

Когда используют определения документа?

Определения документа — это самый простой способ предоставить рекомендации по допустимым элементам и атрибутам документа.

Определения документа также предоставляют общие рекомендации, которые могут использоваться другими пользователями и/или разработчиками.

Определения документа предоставляют стандартизацию, которая значительно облегчает жизнь.

Когда не используют определения документа?

В действительности XML не требует определений документа.

Когда вы экспериментируете с XML или работаете с небольшими XML файлами, создание определений документа может стать лишней тратой времени.

Если вы разрабатываете приложения, то подождите до тех пор, пока спецификации не будут стабильными, и только потом добавляйте определения документов. В обратном случае ваше приложение может перестать работать из-за ошибок проверки правильности документа.

Определения документа

С XML можно использовать различные типы определений документа:

  • Оригинальное определение типа документа (DTD)
  • Более новый тип определений, основанный на XML, — XML схема.

Проверка валидности XML документа

Для проверки валидности XML документов в сети Интернет существует множество программ и сайтов проверки XML документов.

XML ошибки остановят вас

Ошибки в XML документе остановят работу вашего XML приложения.

W3C спецификации XML предписывают, что при возникновении ошибки программа разбора XML документа должна прекратить свою работу. Это сделано для того, чтобы приложения XML были небольшого размера, быстрые и широко совместимые.

HTML браузеры отобразят HTML документ даже с ошибками (например, пропущенный закрывающий тег).

С XML ошибки не допустимы.

XML — распространенный формат хранения данных. отличительными особенностями XML является структурированность с открывающимися и закрывающимися тэгами. Документы в этом формате могут успешно обрабатываться программным кодом только если являются Well-formed, т.е. не содержат ошибок в структуре, другое понятие — валидность — соответствие спецификации. Чтобы XML можно было использовать в программе файл должен быть Well-formed и, опционально, валидным.

Процесс проверки соответствия спецификации производится валидатором, но сначала проверяется сама структура документа. На вход которого подается сам документ, валидатор проверяет его структуру и выдает заключение: либо XML является well formed, либо нет — во втором случае будет выведена ошибка.

Что проверяет валидатор:

  • присутствие только одного корневого элемента
  • парность тегов и наличие открывающего и закрывающего для каждой пары
  • уникальность атрибутов внутри каждого элемента

В случае если все требования удовлетворены на выходе будет well formed xml, который может использоваться приложением.

«Валидный» xml — то же самое, что well formed xml, но помимо трех приведенных выше критериев документ должен удовлетворять требованиям спецификаций, которые вместе с исходным документом подаются на вход

Спецификаций для XML существует 2 вида:

DTD — Document Type Descriptor

XML Schema (XSD — XML Schema Description)

XSD значительно шире распространен.

Проверка синтаксиса просто выявляет присутствие или отсутствие ошибок в XML, результатом является либо Well-formed XML документ, который можно использовать далее в программе считывая из него данные и записывая их
well formed xml

Валидация подразумевает, что на вход парсера вместе с документом подается спецификация и проверяется уже не только структура документа, но и соответствие спецификации, на выходе может быть либо валидный XML, либо ошибка

валидация xml

Плюсы и минусы использования спецификаций и валидация XML

+++ DTD/XSD:

  • программа предполагает структуру данных, требуется меньше проверок на возможные ошибки
  • CSS/XSL — правила по которым XML информация переводится в HTML также может быть проще
  • существование обширной документации

— DTD/XSD:

  • проигрыш в гибкости и легкости изменения данных
  • сложность спецификаций, которые могут быть гораздо больше непосредственно XML документа
Определение и ключевые понятия DTD

DTD — язык определяющий необходимость использования атрибутов, теги, их порядок и количество.
DTD определяет также специальные типы атрибутов ID и IDREF(S) — они определяют как элементы документа обращаются к другим элементам.

*IDREFS — идентификаторы, которые являются ссылками на идентификаторы других элементов XML документа

Отличия XSD

XSD отличается от DTD дополнительным функционалом — в частности, присутствием типов данных и ключей. Типы данных принциптально важны — если в XSD задано, что в поле может быть только тип данных integer (целое число) попытка ввести в него текст повлечет ошибку при валидации.

XSD предполагает, что спецификация сама по себе написана на XML и может быть только отдельным документом, для DTD специафикация может являться частью основного документа, который валидируется.

Сама валидация XML производится при помощи утилиты xmllint, которая присутствует в большинстве стандартных инсталяций Linux, а также в Windows

xmllint -schema xsdfile.xsd —noout xmlfile.xml

Схема со ссылками в XSD выглядит иначе. Здесь нет IDREFS, у тегов — например, <Authors> есть подтеги — <Auth authIdent=»THA»> или <Auth authIdent=»THE»>, которые в свою очередь ссылаются на элементы Ident=»THA» и Ident=»THE»

Понравилась статья? Поделить с друзьями:
  • Ошибка вакуумного усилителя тормозов шкода йети
  • Ошибка вак бана
  • Ошибка вайм ворлд рабочий путь лаунчера не верен
  • Ошибка вайм ворлд unexpected error
  • Ошибка ваз р2138