План обмена для автономного мобильного клиента: Ошибка преобразования XML

1. alex25ru 05.10.22 10:57 Сейчас в теме
Взял код с типовой демонстрационной конфигурации к платформе, встроил в свою конфигурацию.
Есть справочник с табличной частью, как только ЧтениеXML доходит до описания табличной части, так все приехали: ошибка преобразования XML.

Обмен между конфигурацией и ее мобильным клиентом, с автономным режимом, соответственно объекты участвующие в обмене включены в состав "автономной конфигурации".

Вот такое читается отлично:
		
<CatalogObject.УГМ>
	<Ref>9efbf45e-968b-11eb-a9a3-005056af5502</Ref>
	<DeletionMark>false</DeletionMark>
	
Код
000001580
Показать полностью
<Description>Хозтовары</Description> <ТипУГМ>a9a1f926-a13e-11ea-948f-005056afa520</ТипУГМ> <КраткоеНаименование>Хозтовары</КраткоеНаименование> <ПолноеНаименование/> <Параметры/> </CatalogObject.УГМ>
Показать


А вот с таким "ошибка преобразования XML":
<CatalogObject.УГМ>
	<Ref>9efbf461-968b-11eb-a9a3-005056af5502</Ref>
	<DeletionMark>false</DeletionMark>
	
Код
000001581
Показать полностью
<Description>TCLU4545454</Description> <ТипУГМ>58fd2461-749d-11ea-948f-005056afa520</ТипУГМ> <КраткоеНаименование>TCLU4545454</КраткоеНаименование> <ПолноеНаименование/> <Параметры> <Row> <Параметр xsi:type="CatalogRef.ПараметрыУГМ">497a787a-3e36-11ed-864d-005056afa520</Параметр> <Значение xsi:type="CatalogRef.ТипыКонтейнеров">c9e6b288-f7c7-11e7-961c-00e04c59c9be</Значение> <Примечание/> <ЗначениеПлан>0001-01-01T00:00:00</ЗначениеПлан> <ЗначениеФакт>0001-01-01T00:00:00</ЗначениеФакт> </Row> </Параметры> </CatalogObject.УГМ>
Показать



Процедура формирования XML:
Функция СформироватьXML(УзелОбмена)
    
	УстановитьПривилегированныйРежим(Истина);
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку("UTF-8");
	ЗаписьXML.ЗаписатьОбъявлениеXML();
    
	ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелОбмена);					
    
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8",  "http://v8.1c.ru/data");
    
	ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(УзелОбмена, ЗаписьСообщения.НомерСообщения);
	
	Пока ВыборкаИзменений.Следующий() Цикл
		Данные = ВыборкаИзменений.Получить();
		
		Если НЕ ОбменМобильныеПереопределяемый.НуженПереносДанных(Данные, УзелОбмена) Тогда
			УдалениеДанных(Данные); 
		КонецЕсли;	
		ЗаписатьXML(ЗаписьXML, Данные);
    КонецЦикла;
    
	ЗаписьСообщения.ЗакончитьЗапись();
	
	Возврат ЗаписьXML.Закрыть();
	
КонецФункции
Показать


Процедура чтения:
Процедура ПринятьПакетОбмена(УзелОбмена, ДанныеОбмена) Экспорт
	
	пСтрокаДанных = ДанныеОбмена.Получить();
	УстановитьПривилегированныйРежим(Истина);
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(пСтрокаДанных);
	ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
	ЧтениеСообщения.НачатьЧтение(ЧтениеXML);		
	
	ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,ЧтениеСообщения.НомерПринятого);

    НачатьТранзакцию();
	
	Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
		Попытка
			Данные = ПрочитатьXML(ЧтениеXML);
            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
			Данные.Записать();
		Исключение
			пОшибка = ОписаниеОшибки();
        КонецПопытки        
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    
	ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
    
КонецПроцедуры
Показать


Подскажите в какую сторону копать? Уже тупик какой-то %)
По теме из базы знаний
Найденные решения
14. alex25ru 07.10.22 10:35 Сейчас в теме
Дополню информацию, в общем методом проб и ошибок, опытов и экспериментов. В общем надеюсь кому нибудь пригодится с ошибкой преобразования XML.

Скриншотов не будет, ибо задолбался с этими экспериментами.

Ситуация следующая: при включении в состав автономной сразу нескольких объектов, которые содержат ошибки (ошибки именно для мобильного клиента с автономным режимом, допустим недоступность на автономном сервере некоторых модулей) нажимаю "Обновить конфигурацию базы данных" и получаю вылет конфигуратора по ошибке "Нарушена целостность конфигурации: перезапустить\завершить".
После перезапуска конфигуратора при повторной попытке обновить конфигурацию снова вылет. Способ: тестирование и исправление -> "пересоздание автономной конфигурации" - посыпались ошибки, о недоступности модулей, о использовании объектов\методов недоступных на мобильном клиенте, все ненужное обрамил "#Если Не МобильныйАвтономныйСервер Тогда #КонецЕсли".

Также на эти вылеты списал следующую ситуацию: несмотря на выставленные галочки относительно доступности объектов и реквизитов в автономной конфигурации, ситуация в реальности (на андроиде) была иная.
Справочник с табличной частью "Параметры", в которой 5 реквизитов: "Параметр, Значение, ЗначениеФакт, ЗначениеПлан, Примечание". Справочник полностью: сам, все реквизиты объекта, все реквизиты табличной части включены в состав автономной конфигурации. Казалось бы, что может пойти не так. Но попытки загрузки объектов этого справочника через XML постоянно обваливались в "Ошибка преобразования XML". Дошел до того, что скопировал справочник в конфигурации, включил его в автономку, прописал права, частично заполнил и обработкой сделал сериализацию одного элемента в XML, полученный текст XML вставлял в обработку в мобильном клиенте (в автономном режиме) и производил обратную сериализацию. На скопированном справочнике все ок, на исходном ошибка. В итоге, в режиме отладки автономного сервера (это важный момент, т.к. именно в этом режиме можно увидеть что реально творится на автономке), через окно "Вычислить выражение" введя выражение: Справочники.ИмяСправочника.НайтиПоКоду("00000001").Параметры[0] увидел что в табличной части один реквизит "Параметр" и "НомерСтроки". А хде блин, другие? А вот хз, хрень.
Тестирование и исправление - пересоздание автономной конфигурации и переключение доступности объектов в автономке с сохранением\обновлением\перезапуском.

С мобильной платформы удалял базу из списка, в надежде на очистку "кэша" не помогло.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1203706 14 05.10.22 11:02 Сейчас в теме
(1) на итс есть пример с планом обмена для МК с автономным режимом.
5. alex25ru 05.10.22 12:59 Сейчас в теме
(2) Так я и брал это все с демонстрационной конфигурации 1С к платформе поставляется.
(4) Есть.
4. user1203706 14 05.10.22 11:52 Сейчас в теме
ЗЫ: в составе автономной конфигурации в этом справочнике есть эта табличная часть ? Там же вплоть до реквизитов можно указывать состав.
6. user1203706 14 05.10.22 13:03 Сейчас в теме
(5) версия моб платформы какая ? И самой 1с-ины какая ? Если разные, надо втыкать галку режима совместимости
9. alex25ru 05.10.22 13:08 Сейчас в теме
(6) 8.3.20.2039 серверная часть и 8.3.20.40 мобильная
7. user1203706 14 05.10.22 13:04 Сейчас в теме
А ошибка.."Ошибка преобразования XML" это когда конфа отличается, грубо не может слепить объект такой, если самих метаданных нема в базе
8. user1203706 14 05.10.22 13:04 Сейчас в теме
ТипыКонтейнеров - этот справочник включен в автономную конфу ?
10. alex25ru 05.10.22 13:15 Сейчас в теме
(8) Да, включен. ПараметрыУГМ И ТипыКонтейнеров включены.

Единственный важный нюанс: табличная часть "Параметры", там два реквизита: "Параметр" и "Значение". Для "Параметр" составной тип данных: "СправочникСсылка.ПараметрыУГМ, ПланВидовХарактеристикСсылка.ПараметрыУГМ", соответственно оба объекта включены в состав автономной конфигурации. "Значение" - тип данных характеристика от "ПланВидовХарактеристикСсылка.ПараметрыУГМ". На выходе в чистых данных, чаще всего тип это справочник ТипыКонтейнеров.

То что в XML примере тип реквизита "Параметр" обозначен как справочник ПараметрыУГМ, это эксперименты с обменом. Сделал справочник соответствующий ПВХ и перед сериализацией объекта производил подмену Параметра с ПВХ на его аналог в справочнике.

Обмен падает на первой заполненной табличной части.
11. user1203706 14 05.10.22 13:21 Сейчас в теме
(10) выстави простые типы, для начала и проверь падение.
Где-то у тебя не может получить объект из сериализованных данных
12. alex25ru 05.10.22 13:47 Сейчас в теме
13. alex25ru 05.10.22 15:47 Сейчас в теме
В общем проверил с использованием исключительно справочников - работает.

Добавил новый ПВХ - более "чистый" по сравнению с имеющимся, через него определил два типа Справочник.ТипыКонтейнеров и Булево. Этим ПВХ определил типы реквизитов Параметр и Значение. Включил ПВХ в состав автономной конфигурации и план обмена - тоже все сработало.

Буду разбираться со своим хитросплетением типов у ПВХ. Плохо, что XML ругается так, что без бутылки не поймешь что именно ему не нравится.

user1203706 спасибо за наводки!
14. alex25ru 07.10.22 10:35 Сейчас в теме
Дополню информацию, в общем методом проб и ошибок, опытов и экспериментов. В общем надеюсь кому нибудь пригодится с ошибкой преобразования XML.

Скриншотов не будет, ибо задолбался с этими экспериментами.

Ситуация следующая: при включении в состав автономной сразу нескольких объектов, которые содержат ошибки (ошибки именно для мобильного клиента с автономным режимом, допустим недоступность на автономном сервере некоторых модулей) нажимаю "Обновить конфигурацию базы данных" и получаю вылет конфигуратора по ошибке "Нарушена целостность конфигурации: перезапустить\завершить".
После перезапуска конфигуратора при повторной попытке обновить конфигурацию снова вылет. Способ: тестирование и исправление -> "пересоздание автономной конфигурации" - посыпались ошибки, о недоступности модулей, о использовании объектов\методов недоступных на мобильном клиенте, все ненужное обрамил "#Если Не МобильныйАвтономныйСервер Тогда #КонецЕсли".

Также на эти вылеты списал следующую ситуацию: несмотря на выставленные галочки относительно доступности объектов и реквизитов в автономной конфигурации, ситуация в реальности (на андроиде) была иная.
Справочник с табличной частью "Параметры", в которой 5 реквизитов: "Параметр, Значение, ЗначениеФакт, ЗначениеПлан, Примечание". Справочник полностью: сам, все реквизиты объекта, все реквизиты табличной части включены в состав автономной конфигурации. Казалось бы, что может пойти не так. Но попытки загрузки объектов этого справочника через XML постоянно обваливались в "Ошибка преобразования XML". Дошел до того, что скопировал справочник в конфигурации, включил его в автономку, прописал права, частично заполнил и обработкой сделал сериализацию одного элемента в XML, полученный текст XML вставлял в обработку в мобильном клиенте (в автономном режиме) и производил обратную сериализацию. На скопированном справочнике все ок, на исходном ошибка. В итоге, в режиме отладки автономного сервера (это важный момент, т.к. именно в этом режиме можно увидеть что реально творится на автономке), через окно "Вычислить выражение" введя выражение: Справочники.ИмяСправочника.НайтиПоКоду("00000001").Параметры[0] увидел что в табличной части один реквизит "Параметр" и "НомерСтроки". А хде блин, другие? А вот хз, хрень.
Тестирование и исправление - пересоздание автономной конфигурации и переключение доступности объектов в автономке с сохранением\обновлением\перезапуском.

С мобильной платформы удалял базу из списка, в надежде на очистку "кэша" не помогло.
15. user1203706 14 07.10.22 11:15 Сейчас в теме
(14) дык
Параметры[0] - это и есть первая строка, другие тут Параметры + Shift+F9
16. alex25ru 07.10.22 14:33 Сейчас в теме
(15) ты не понял меня, то что это первая строка тут вопросов нету. Суть в том, что в табличной части 5 реквизитов колонок, но в автономке из этих пяти была доступна только одна колонка "Параметр", остальные реквизиты-колонки не существовали в автономной конфигурации.
17. alex25ru 07.10.22 14:44 Сейчас в теме
Вот на картинках.

Первая картинка реальная, исходная картина мира.
Вторая картинка, это что видел отладчик на "сервере"
Третья картинка, то что видел отладчик на "автономном сервере"


P.S. Само собой, что в окне "Состав автономной конфигурации" для всех реквизитов табличной части были проставлены галки.
Прикрепленные файлы:
18. user1203706 14 07.10.22 14:44 Сейчас в теме
(16) автономный МК не ковырял, нам он не подходит для работы. Дешевле бесшовную вафлю на складе протянуть было для полного онлайна.
19. user1203706 14 07.10.22 14:47 Сейчас в теме
(17) пересоздание автономки помогло ? Или только ТиИ ?
20. alex25ru 07.10.22 14:58 Сейчас в теме
(19) Пересоздание автономки как раз и скрывается в ТиИ.

По факту, как только что нибудь включаешь в состав автономки и нажимаешь обновить конфигурацию, конфигуратор генерирует автономную конфигурацию.
Но вот если автономка уже была создана и при включении новых объектов произошли ошибки, в некоторых случаях (у меня при массовом включении объектов), эта созданная автономная конфигурация не завершает некий "процесс сборки" и конфигуратор падает: целостность конфигурации повреждена и все, асталависта.

Я не знаю точно что именно там внутрях происходит, это исключительно догадка.


Мне помогло именно выключение доступности объектов в автономке с обновлением, сохранением, перезапуском и последующим включением.
Прикрепленные файлы:
21. user1203706 14 07.10.22 15:04 Сейчас в теме
(20) ну ясно, восьмёрка еще сырая ))
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот