При выполнении типового обмена данными между конфигурациями «1С:Управление торговлей» и «1С:Бухгалтерия предприятия» может возникать критическая ошибка чтения ответа от базы-корреспондента. Проанализируем причину возникновения этой проблемы и разберем по шагам доступные способы ее решения.
При попытке загрузить сообщение обмена в приемнике система сбоит в общем модуле ОбменДаннымиXDTOСервер. Ошибка проявляется следующим сообщением в журнале регистрации или в диалоге синхронизации:
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1933)}: Ошибка при вызове метода контекста (ПрочитатьXML)
Header = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ФабрикаXDTO.Тип(XMLБазоваяСхема(), "Header"));
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.1c.ru/SSL/Exchange/Message}Header - [20,11]
Проверка дополнительного свойства:
форма: Элемент
имя: {http://www.1c.ru/SSL/Exchange/Message}NewFrom по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://www.1c.ru/SSL/Exchange/Message}Header
Разберем структуру выгруженного XML-файла сообщения. В заголовке формата http://www.1c.ru/SSL/Exchange/Message присутствуют служебные теги:
<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns:msg="http://www.1c.ru/SSL/Exchange/Message" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<msg:Header>
<msg:Format>http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.3</msg:Format>
<msg:CreationDate>2017-10-27T07:08:15</msg:CreationDate>
<msg:Confirmation>
<msg:ExchangePlan>СинхронизацияДанныхЧерезУниверсальныйФормат</msg:ExchangePlan>
<msg:To>00</msg:To>
<msg:From>БП</msg:From>
<msg:MessageNo>22</msg:MessageNo>
<msg:ReceivedNo>10</msg:ReceivedNo>
</msg:Confirmation>
<msg:AvailableVersion>1.5</msg:AvailableVersion>
<msg:AvailableVersion>1.4</msg:AvailableVersion>
<msg:AvailableVersion>1.3</msg:AvailableVersion>
<msg:AvailableVersion>1.2</msg:AvailableVersion>
<msg:NewFrom>БП</msg:NewFrom>
</msg:Header>
<Body xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.3"/>
</Message>
Выясним причину такого поведения. Ошибка связана с версионным расхождением подсистемы «Обмен данными» Библиотеки стандартных подсистем (БСП). Более свежий релиз базы-источника (в данном случае БП) формирует XML-заголовок по расширенной XDTO-схеме, включая элемент NewFrom. Однако приемник (УТ) работает на более старом релизе БСП, в XDTO-пакете которого свойство NewFrom еще не описано. Позиция платформы при строгой валидации XDTO требует полного соответствия типов, из-за чего метод ФабрикаXDTO.ПрочитатьXML() прекращает считывание структуры с исключением.
Самым корректным решением является обновление конфигурации «1С:Управление торговлей» до актуального релиза. Рассмотрим преимущества этого варианта:
ExchangeMessage.Header, поддерживающее элемент NewFrom.Если быстрое обновление базы-приемника невозможно по причине наличие доработок, внесем изменения в служебный XDTO-пакет базы-приемника (через расширение или напрямую в конфигураторе):
ExchangeMessage (пространство имен http://www.1c.ru/SSL/Exchange/Message).Header.NewFromstring (пространство имен XMLSchema)Элемент0 (чтобы свойство оставалось необязательным)ФабрикаXDTO сможет считывать XML-сообщения, содержащие этот элемент.Рассмотрим вариант быстрого обхода ошибки без модификации структур данных конфигурации. Так как тег NewFrom является служебным и не критичен для передачи самих бизнес-данных (документов и справочников), его можно удалить из файла перед считыванием.
Проанализируем ручной и автоматический варианты очистки:
<msg:NewFrom>БП</msg:NewFrom>, после чего повторно запустим загрузку в УТ.ОбменДаннымиXDTOСервер и реализуем удаление ненужного тега из текста файла до вызова метода ФабрикаXDTO.ПрочитатьXML().