При интеграции учетных систем на платформе 1С с ЕГАИС нередко возникает задача передачи дополнительных файлов, например, PDF-документов в составе XML-сообщений. Стандартным способом передачи бинарных данных в XML является использование кодировки Base64. Однако при реализации этой задачи разработчики часто сталкиваются с тем, что принимающая сторона выдает ошибку или некорректно обрабатывает файл. Давайте разберем, в чем кроется причина и как правильно сформировать XML, чтобы данные проходили валидацию.
Основная сложность заключается в том, как платформа 1С по умолчанию преобразует двоичные данные в строковый формат. Метод Base64Строка(), используемый для конвертации, ориентирован на стандарты MIME (RFC 2045). Согласно этим стандартам, длинная строка Base64 должна быть разбита на части по 76 символов с использованием переносов строк.
В контексте формирования XML для государственных систем, таких как ЕГАИС, наличие таких «технических» переносов внутри тега данных является критической ошибкой. Парсер на стороне ЕГАИС ожидает непрерывную последовательность символов. Если в строке присутствуют символы возврата каретки (Символ 13) или перевода строки (Символ 10), структура XML нарушается, и вложенный документ становится нечитаемым.
Чтобы успешно прикрепить PDF-файл к вашему XML-запросу, необходимо выполнить следующие действия:
ДвоичныеДанные. Важно использовать конструктор Новый ДвоичныеДанные(ПутьКФайлу). Ни в коем случае не пытайтесь читать файл как текстовый, это приведет к порче содержимого.Base64Строка().Рассмотрим реализацию этого алгоритма на практике. Мы будем использовать функцию СтрЗаменить() для удаления лишних спецсимволов. Это позволит привести строку к формату непрерывного блока данных:
// Считываем двоичные данные файла
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлуPDF);
// Получаем строковое представление Base64
Base64СтрокаPDF = Base64Строка(ДвоичныеДанныеФайла);
// Удаляем символы переноса строки (Символ 10) и возврата каретки (Символ 13)
ОчищеннаяСтрока = СтрЗаменить(СтрЗаменить(Base64СтрокаPDF, Символ(13), ""), Символ(10), "");
// Теперь записываем результат в XML
ЗаписьXML.ЗаписатьНачалоЭлемента("rpp:LabelFoto");
ЗаписьXML.ЗаписатьТекст(ОчищеннаяСтрока);
ЗаписьXML.ЗаписатьКонецЭлемента();
Система ЕГАИС предъявляет строгие требования к XML-документам, которые проверяются по XSD-схемам. Элемент, содержащий изображение или документ, обычно описан как тип xs:base64Binary. Когда вы передаете «чистую» строку без переносов, парсер воспринимает её как единый блок данных и успешно декодирует обратно в PDF. Если же оставить переносы, структура XML визуально выглядит разбитой на несколько строк, что парсер интерпретирует как ошибку структуры или некорректное значение данных.
При работе с вложениями помните о следующих рекомендациях:
ДвоичныеДанные для передачи файлов. Использование промежуточных текстовых преобразований может исказить бинарную структуру PDF, что сделает файл нечитаемым даже после успешной загрузки в ЕГАИС.Следуя этим простым правилам, вы сможете избежать распространенных ошибок интеграции и успешно передавать необходимые вложения в ЕГАИС без лишних затрат времени на поиск проблем с форматом данных.