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

```1c
    &НаСервере
    Функция ОбменСЦентральнойБазойНаСервере()

    Попытка
    ВСОпределение = Новый WSОпределения("http://"+Константы.АдресСервера.Получить()+"/Obmen/ws/ExchangeTP.1cws?wsdl");
    ВебСервис = ВСОпределение.Сервисы.Получить("ExchangeTP","ExchangeTP");
    ТочкаПодключения = ВебСервис.ТочкиПодключения.Получить("ExchangeTPSoap");
    ВебОперация = ТочкаПодключения.Интерфейс.Операции.Получить("НачатьОбмен");

    //Данные = Новый ХранилищеЗначения("Данные для центральной базы", Новый СжатиеДанных(9);
    Данные = Новый ХранилищеЗначения(СформироватьСообщениеДляЦентральнойБазы(), Новый СжатиеДанных(9));

    ДанныеXDTO = ВСОпределение.ФабрикаXDTO.Создать(ВебОперация.Параметры.Получить("Данные").Тип, Данные);

    ВебПрокси = Новый WSПрокси(ВСОпределение, "ExchangeTP","ExchangeTP","ExchangeTPSoap") ;

    Ответ = ВебПрокси.НачатьОбмен(ДанныеXDTO);
    //Сообщить(Ответ.Получить());
    ПринятьСообщениеИзЦентральнойБазы(Ответ.Получить());
    Возврат Истина
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат Ложь;
    КонецПопытки;
    КонецФункции

    &НаСервере
    Процедура ПринятьСообщениеИзЦентральнойБазы(СтрокаСообщения);
    ЧтениеХМЛ = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);

    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого);
    Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл
    Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML);
    Если Не Данные = Неопределено Тогда
    Если Не Данные = Неопределено Тогда
    Если ТипЗнч(Данные) = Тип("ДокументОбъект.ОбслуживаниеКлиентовТП") Тогда
    Если Данные.ТорговыйПредставитель <> ПланыОбмена.МобильныеУстройства.ЭтотУзел().ТорговыйПредставитель Тогда
    Продолжить
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
    Данные.ОбменДанными.Загрузка = Истина;

    Данные.Записать();

    КонецЕсли;
    КонецЦикла;
    ЧтениеСообщения.ЗакончитьЧтение();
    КонецПроцедуры

    &НаСервере
    Функция СформироватьСообщениеДляЦентральнойБазы()
    ЗаписьХМЛ = Новый ЗаписьXML;
    ЗаписьХМЛ.УстановитьСтроку();
    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();

    Узел = Константы.ЦентральнаяБаза.Получить();

    ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ,Узел);
    ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел,ЗаписьСообщения.НомерСообщения);
    Пока ВыборкаИзменений.Следующий() Цикл
    ОбъектОбмена = ВыборкаИзменений.Получить();
    ЗаписатьXML(ЗаписьХМЛ,ОбъектОбмена);
    КонецЦикла;

    ЗаписьСообщения.ЗакончитьЗапись();
    Возврат ЗаписьХМЛ.Закрыть();
    КонецФункции
```

Структура xml файла:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<v8msg:Message xmlns:v8msg="http://v8.1c.ru/messages">
<v8msg:Header>
<v8msg:ExchangePlan>МобильныеУстройства</v8msg:ExchangePlan>
<v8msg:To>Вс</v8msg:To>
<v8msg:From>ЦБ</v8msg:From>
<v8msg:MessageNo>11</v8msg:MessageNo>
<v8msg:ReceivedNo>4</v8msg:ReceivedNo>
</v8msg:Header>
<v8msg:Body>
<CatalogObject.Склады>
<Ref>603e0c1f-854a-11e3-b76c-001e6713b1c1</Ref>
<IsFolder>false</IsFolder>
<DeletionMark>false</DeletionMark>
<Parent>00000000-0000-0000-0000-000000000000</Parent>
Код000000078Показать полностью
<Description>Товары в пути</Description>
<DepartmentID/>
<DepartmentName/>
<IDD>c8fc0e92-3b6f-473</IDD>
<ВидСклада>Оптовый</ВидСклада>
<Комментарий/>
<НомерСекции>0</НомерСекции>
<Подразделение>2942db25-a881-4609-884d-0966dfc290bb</Подразделение>
<РасчетРозничныхЦенПоТорговойНаценке>false</РасчетРозничныхЦ­енПоТорговойНаценке>
<ТипСклада>00000000-0000-0000-0000-000000000000</ТипСклада>
<ТипЦенРозничнойТорговли>00000000-0000-0000-0000-000000000000</ТипЦенРозничнойТорговли>
<ЛимитСклад>0</ЛимитСклад>
</CatalogObject.Склады>
<CatalogObject.Склады>
<Ref>603e0c22-854a-11e3-b76c-001e6713b1c1</Ref>
<IsFolder>false</IsFolder>
<DeletionMark>false</DeletionMark>
<Parent>7fd05392-8545-11e3-b76c-001e6713b1c1</Parent>
Код000000150Показать полностью
<Description>Торговый зал</Description>
<DepartmentID/>
<DepartmentName/>
<IDD> </IDD>
<ВидСклада>Оптовый</ВидСклада>
<Комментарий/>
<НомерСекции>0</НомерСекции>
<Подразделение>00000000-0000-0000-0000-000000000000</Подразделение>
<РасчетРозничныхЦенПоТорговойНаценке>false</РасчетРозничныхЦ­енПоТорговойНаценке>
<ТипСклада>00000000-0000-0000-0000-000000000000</ТипСклада>
<ТипЦенРозничнойТорговли>00000000-0000-0000-0000-000000000000</ТипЦенРозничнойТорговли>
<ЛимитСклад>0</ЛимитСклад>
</CatalogObject.Склады>
</v8msg:Body>
</v8msg:Message>

Пытаюсь по-разному прочитать,но всегда выдает ошибки. Как прочитать этот XML файл?
---
1) Если обмениваться данными с идентичной структурой в центральной базе и мобильном приложении,то ошибок не выдает.
2) не могу дойти до основной ошибки,где пишет,что неправильный формат сообщения.
3) из-за чего может выдавать такую ошибку

Моя версия такова:
1) всё работало.
2) были внесены изменения либо в основную конфигурацию, либо в мобильную.
Изменённые данные были только в центральной базе (2 склада).
Результат - ошибка их чтения на стороне мобильного приложения (по Вашей терминологии - основная ошибка).
3) Были изменены данные (не конфигурация) в мобильной базе.
Результат - ошибка их чтения на стороне ЦБ при выполнении на мобильном клиенте строки
Ответ = ВебПрокси.НачатьОбмен(ДанныеXDTO);
---
Выдает ошибку:
Ошибка при вызове метода контекста (ЗакончитьЧтение):Неправильеый формат сообщения.
Ошибку выдает на строке:
 ЧтениеСообщения.ЗакончитьЧтение();

Давайте абстрагируемся от лишнего кода.

```1c
    Если Не Данные = Неопределено Тогда
    Если Не Данные = Неопределено Тогда
```

Выполните только минимально необходимый код, без логики разбора сообщения.

```1c
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ИмяФайла);
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    // Действия по чтению тела сообщения

    ЧтениеСообщения.ЗакончитьЧтение();
```

Какой результат?
дайте скрин итогового кода "без лишних обвесов"
дайте скрин ошибки (если она осталась)
---
Получите файл по своему

```1c
    ЧтениеХМЛ = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
```

Итого, вам надо выполнить следующее:

```1c
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    ЧтениеСообщения.ЗакончитьЧтение();
```
---
На какой строке выпадает в ошибку?
Скрин ошибки?
---
Я бы запустил отладку.

Может быть кто-то и в голове "прокрутит" этот XML-текст через процедуру чтения,
но даже такому мастеру не помешала бы ещё и информация о возникающих ошибках.
---
Выдает ошибку "Неправильный формат сообщения". Уже много раз смотрел через отладчик, но от этого ничего понятнее не стало
---
"Неправильный формат сообщения".

Между строками
<Parent>7fd05392-8545-11e3-b76c-001e6713b1c1</Parent>
и
<Description>Торговый зал</Description>

должна стоять похожая строка типа
Код000123Показать полностью

Вместо этого я вижу что-то странное (см. картинку).
Пробовал просматривать через Яндекс-браузер и через Google Chrome.

Каков на самом деле текст в файле XML?
---
Вопрос снимается (увидел отображение своего вопроса).
Похоже, так отображает строку кода сайт Инфостарта.
---
неделю не трогал этот xml обмен, сегодня центральную базу опубликовал на сервере, пытаюсь подключиться через мобильное приложение и выдает ошибку "Операция не модет быть выполнена в процессе записи . Код ошибки: Client......"
Вроде все позакрывал и конфигу центральной базы перезапустил
---
Операция не может быть выполнена в процессе записи . Код ошибки: Client.....
Тема обсуждения - "Как прочитать XML файл?"
А это сообщение, видимо, - про другое.
Могу только повторить вопрос товарища work.sable:
На какой строке выпадает в ошибку?.

И ещё: Какова судьба проблемы?
Вы написали этот обмен и он не работает ?
Или он работал и перестал (например, после изменений в конфигурациях) ?
---
Сейчас почему-то выдает такую ошибку.
На это строке выдает ошибку:

```1c
    Ответ = ВебПрокси.НачатьОбмен(ДанныеXDTO);
```

Не знаете из-за чего может выдавать такую ошибку?До этого не было этой ошибки. Теперь из-за этой ошибки не могу дойти до основной ошибки,где пишет,что неправильный формат сообщения.
Как-будто какой-то сеанс не завершил,но других сеансов нет.
---
Похоже, то, что мы видим на картинке - это, отражение ошибки, возникающей в центральной(!) базе.
Так что отлаживать надо ЦБ (текст в переменной ДанныеXDTO и код, который его обрабатывает, ).
---
Обмен осуществляется через веб- сервисы.Если обмениваться данными с идентичной структурой в центральной базе и мобильном приложении,то ошибок не выдает. Я хочу обмениваться именно теми реквизитами,которые мне нужно передавать.Вот такой обмен изначально не получается сделать.
Такой обмен по-идеи должен был работать,потому что весь этот код взял из одного курса.Все сделал также, как показывается на курсе, но почему-то не работает.
---
1) Если обмениваться данными с идентичной структурой в центральной базе и мобильном приложении,то ошибок не выдает.
2) не могу дойти до основной ошибки,где пишет,что неправильный формат сообщения.
3) из-за чего может выдавать такую ошибку

Моя версия такова:
1) всё работало.
2) были внесены изменения либо в основную конфигурацию, либо в мобильную.
Изменённые данные были только в центральной базе (2 склада).
Результат - ошибка их чтения на стороне мобильного приложения (по Вашей терминологии - основная ошибка).
3) Были изменены данные (не конфигурация) в мобильной базе.
Результат - ошибка их чтения на стороне ЦБ при выполнении на мобильном клиенте строки
Ответ = ВебПрокси.НачатьОбмен(ДанныеXDTO);
---
вы были полностью правы. Дошел до основной ошибки.
Выдает ошибку:
Ошибка при вызове метода контекста (ЗакончитьЧтение):Неправильеый формат сообщения.
Ошибку выдает на строке:

```1c
    ЧтениеСообщения.ЗакончитьЧтение();
```

Код всей процедура,где находится эта строка:

```1c
    &НаСервере
    Процедура ПринятьСообщениеИзЦентральнойБазы(СтрокаСообщения);
    ЧтениеХМЛ = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);

    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого);
    //Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл Для идентичных конфигураций
    Пока ОбменДанными.ВозможностьЧтенияДанных(ЧтениеХМЛ) Цикл
    //Данные = ПрочитатьXML(ЧтениеСообщения.ЧтениеXML); Для идентичных конфигураций
    Данные = ОбменДанными.ПрочитатьДанные(ЧтениеСообщения.ЧтениеXML);
    Если Не Данные = Неопределено Тогда
    Если Не Данные = Неопределено Тогда
    Если ТипЗнч(Данные) = Тип("ДокументОбъект.ОбслуживаниеКлиентовТП") Тогда
    Если Данные.ТорговыйПредставитель <> ПланыОбмена.МобильныеУстройства.ЭтотУзел().ТорговыйПредставитель Тогда
    Продолжить
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
    Данные.ОбменДанными.Загрузка = Истина;

    Данные.Записать();

    КонецЕсли;
    КонецЦикла;
    ЧтениеСообщения.ЗакончитьЧтение();
    КонецПроцедуры
```

У меня в отладчике "Данные" почему-то равняется Неопределено

Процедура "ПрочитатьДанные":

```1c
    Функция ПрочитатьДанные(ЧтениеXML) Экспорт

    ТипXML = ПолучитьXMLТип(ЧтениеXML);
    Если ТипXML = Неопределено Тогда

    Возврат Неопределено;

    КонецЕсли;

    Если ТипXML.ИмяТипа = "CatalogObject.Контрагенты.РучнойОбмен" И ТипXML.URIПространстваИмен = " Тогда

    // Пытаемся прочесть значение справочника
    Возврат ПрочитатьXMLКонтрагент(ЧтениеXML);

    КонецЕсли;

    Если ТипXML.ИмяТипа = "CatalogObject.Склады.РучнойОбмен" И ТипXML.URIПространстваИмен = " Тогда

    // Пытаемся прочесть значение справочника
    Возврат ПрочитатьXMLСклад(ЧтениеXML);

    КонецЕсли;

    // Пытаемся прочесть значение из объекта ЧтениеXML стандартным образом.
    Возврат ПрочитатьXML(ЧтениеXML);

    КонецФункции // ПрочитатьДанные(ЧтениеXML)
```

Процедура ПрочитатьXMLСклад:

```1c
    Функция ПрочитатьXMLСклад(ЧтениеXML)

    Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда
    ВызватьИсключение "Ошибка чтения XML";

    КонецЕсли;

    // Чтение следующего узла.
    ЧтениеXML.Прочитать();

    // Чтение ссылки на элемент справочника.
    КонтрагентСсылка = ПрочитатьXML(ЧтениеXML);
    Если ТипЗнч(КонтрагентСсылка) <> Тип("СправочникСсылка.Склады") Тогда

    ВызватьИсключение "Ошибка чтения XML";

    КонецЕсли;

    // Пытаемся создать объект по полученной ссылке.
    Контрагент = КонтрагентСсылка.ПолучитьОбъект();

    Если Контрагент = Неопределено Тогда

    // Создаем элемент справочника.
    Контрагент = Справочники.Склады.СоздатьЭлемент();
    // Устанавливаем значение ссылки для нового объекта
    Контрагент.УстановитьСсылкуНового(КонтрагентСсылка);

    КонецЕсли;

    // Наименование.
    Контрагент.Наименование = ПрочитатьXML(ЧтениеXML);

    //Код
    Контрагент.Код = ПрочитатьXML(ЧтениеXML);

    // Проверяем, что текущим узлом является "КонецЭлемента".
    Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Тогда
    ВызватьИсключение "Ошибка чтения XML";

    КонецЕсли;

    // Чтение следующего узла для завершения чтения элемента.
    ЧтениеXML.Прочитать();

    Возврат Контрагент;

    КонецФункции
```
---
Выдает ошибку:
Ошибка при вызове метода контекста (ЗакончитьЧтение):Неправильеый формат сообщения.
Ошибку выдает на строке:
 ЧтениеСообщения.ЗакончитьЧтение();

Давайте абстрагируемся от лишнего кода.

```1c
    Если Не Данные = Неопределено Тогда
    Если Не Данные = Неопределено Тогда
```

Выполните только минимально необходимый код, без логики разбора сообщения.

```1c
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ИмяФайла);
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    // Действия по чтению тела сообщения

    ЧтениеСообщения.ЗакончитьЧтение();
```

Какой результат?
дайте скрин итогового кода "без лишних обвесов"
дайте скрин ошибки (если она осталась)
---
ЧтениеXML.ОткрытьФайл(ИмяФайла);
как я черех ОткрытьФайл() открою xml файл,если xml файл передается через веб-сервис?
---
Получите файл по своему

```1c
    ЧтениеХМЛ = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
```

Итого, вам надо выполнить следующее:

```1c
    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
    ЧтениеСообщения.ЗакончитьЧтение();
```
---
В итоге все получилось. Вчера ещё раз прошёлся по всему коду и получилось сделать. Уже точно не смогу сказать из-за чего выдала ошибку , потому что заново переписал весь код, но скорее всего из-за того,что просто одна строка кода в базе мобильного приложения была закомментирована.
Спасибо большое, реально помогли. Дали понять куда нужно копать
---
Пожалуйста

Есть такая кнопка под комментариями у ТС, как "это решение".
после этого:
 - вопрос считается закрытым (это самый главный плюс - т.к. топик перестает выпадать в категории "вопросы без ответов")
 - люди которые приходят в топик сразу видят решение без чтение истории
 - и мб плюшки какие за правильный ответ, не знаю.

Пометьте ответы которые были верными и помогли вам в решении (можно отметить несколько комментариев как решение).
---
Насколько я понял, первоначально речь шла об обмене данными одной структуры.
Вы приводили для того случая тексты процедур и XML-текст файла обмена.

Сейчас Вы приводите процедуры для обмена данными разной структуры.
А данные то где ?
---
нет,первоначальна речь шла об обмене данными с разной структуры
---
Почему тогда разные версии процедуры
ПринятьСообщениеИзЦентральнойБазы
в сообщениях 1 и 13 ?

И где 2-я версия текста XML ?
---
без ВозможностьЧтенияДанных тоже как-то трудно всё полностью представить ...