Обмен 1с:УП и 1С:Заказы с измененным составом реквизитов документа заказы

1. dndw 25.11.16 11:38 Сейчас в теме
Пытаюсь настроить обмен, 1с:УП и 1С:Заказы с измененным составом реквизитов документа заказы.
Делаю по примеру из книги "Знакомство с разработкой мобильных приложений" (в тестовых базах из приложения к книге все проходит нормально). сами по себе конфигурации похожи как и механизмы использующиеся в них. Но при переносе функционала обмена данными с различной структурой, в 1с:УП и 1С:Заказы появляются ошибки обмена "Ошибка при вызове метода контекста(ЗакончитЧтение)".
Добавленный код:
Процедура ЗаписатьДанные(ЗаписьXML, Данные) Экспорт
    
  	
	Если
		ТипЗнч(Данные) = Тип("ДокументОбъект.Заказ") Тогда
		ЗаписатьXMLЗаказы(ЗаписьXML, Данные);		
	Иначе
		// Записываем данные с помощью стандартного метода
		ЗаписатьXML(ЗаписьXML, Данные);
	КонецЕсли
	

КонецПроцедуры
Показать

Процедура ЗаписатьXMLЗаказы(ЗаписьXML, Заказ)Экспорт
	
	 Записываем начало элемента XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject.Заказы.Вручную");
	
	 //Ссылка
	ЗаписатьXML(ЗаписьXML, Заказ.Ссылка.УникальныйИдентификатор(), "Ref", НазначениеТипаXML.Явное);
	
	ЗаписатьXML(ЗаписьXML, Заказ.ПометкаУдаления, "DeletionMark", НазначениеТипаXML.Явное); 
	
	ЗаписатьXML(ЗаписьXML, Заказ.Дата, "Date", НазначениеТипаXML.Явное);
	
	ЗаписатьXML(ЗаписьXML, Заказ.Номер, "Number", НазначениеТипаXML.Явное);
	
	ЗаписатьXML(ЗаписьXML, Заказ.Проведен, "Posted", НазначениеТипаXML.Явное);
	
	// Клиент
	ЗаписатьXML(ЗаписьXML, Заказ.Покупатель, "Покупатель", НазначениеТипаXML.Явное);
	/
	// Склад
	ЗаписатьXML(ЗаписьXML, Заказ.Склад, "Склад", НазначениеТипаXML.Явное);
	// Валюта
	ЗаписатьXML(ЗаписьXML, Заказ.Валюта, "Валюта", НазначениеТипаXML.Явное);
	// ВидЦен
	ЗаписатьXML(ЗаписьXML, Заказ.ВидЦен, "ВидЦен", НазначениеТипаXML.Явное);
	// Организация
	ЗаписатьXML(ЗаписьXML, Заказ.Организация, "Организация", НазначениеТипаXML.Явное);
	// СостояниеЗаказа
	ЗаписатьXML(ЗаписьXML, Заказ.СостояниеЗаказа, "СостояниеЗаказа", НазначениеТипаXML.Явное);
	// Автор"
	ЗаписатьXML(ЗаписьXML, Заказ.Автор, "Автор", НазначениеТипаXML.Явное);
	
	ЗаписатьXML(ЗаписьXML, Заказ.Сумма, "Сумма", НазначениеТипаXML.Явное);
	 Записываем конец элемента
	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	
КонецПроцедуры
Показать

Функция ПрочитатьДанные(ЧтениеXML) Экспорт
	
	ТипXML = ПолучитьXMLТип(ЧтениеXML);
	Если ТипXML = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Если ТипXML.ИмяТипа = "CatalogObject.Заказы.Вручную" 
		И ТипXML.URIПространстваИмен = "" Тогда
		// Пытаемся прочесть значение справочника Товары
		Возврат ПрочитатьXMLЗаказы(ЧтениеXML);
	КонецЕсли;
	
	// Пытаемся прочесть значение из объекта ЧтениеXML стандартным образом
	Возврат ПрочитатьXML(ЧтениеXML);
	
КонецФункции
Показать

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

   Заказ.Автор = Автор;
 //     

 //   
 //   
  Заказ.Сумма = ПрочитатьXML(ЧтениеXML);
 //   
	
	
	
	// Проверяем, что текущим узлом является КонецЭлемента
	Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Тогда
		ВызватьИсключение "Ошибка чтения XML";
	КонецЕсли;
	
	// Чтение следующего узла для завершение чтения элемента
	ЧтениеXML.Прочитать();
	Возврат Заказ;
	
КонецФункции	
Показать
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dndw 25.11.16 11:39 Сейчас в теме
Может кто решал подобные задачи?
+
3. spezc 25.11.16 13:15 Сейчас в теме
Этот механизм подходит только для идентичных конфигураций. Думаю вам предстоит долгий путь изучения механизма XDTO. Начните с изучения мобильной конфигураций для УНФ.
+
4. dndw 25.11.16 13:56 Сейчас в теме
Почему тогда работает в базе из "Знакомство с разработкой мобильных приложений", состав реквизитов различен, а обмен идет нормально?
+
5. spezc 25.11.16 14:06 Сейчас в теме
(4) тогда надо детальнее там глянуть, что там за механизм.
+
6. dndw 25.11.16 14:16 Сейчас в теме
Почти то же самое, но работает нормально, а 1с:заказы мне в ходе экспериментов удавалось пару раз передать заказ, но потом опять вылезала ошибка при вызове метода контекста(ЗакончитьЧтение).
+
9. DJDUH 25.11.16 18:59 Сейчас в теме
(6) у тебя значит в XML есть такие самозакрывающиеся тегы Типа <ТипДокумента/>, а скорее всего на нём ЧтениеXML и сыпется (
Просмотри файл сам
+
7. DitriX 25.11.16 16:50 Сейчас в теме
убедитесь что составы планов обмена идентичны
+
8. dndw 25.11.16 18:50 Сейчас в теме
Состав планов обмена одинаковый, без заказов все выгружается, как только добавляешь заказ сразу "Ошибка при вызове метода контекста (ЗакончитьЧтение)".
Файл обмена при выгрузке получается такой (оставил только ссылку и пометку удаления)

<?xml version="1.0" encoding="UTF-8"?>
<v8msg:Message xmlns:v8msg="http://v8.1c.ru/messages">
	<v8msg:Header>
		<v8msg:ExchangePlan>Мобильные</v8msg:ExchangePlan>
		<v8msg:To>008</v8msg:To>
		<v8msg:From>001</v8msg:From>
		<v8msg:MessageNo>9</v8msg:MessageNo>
		<v8msg:ReceivedNo>31</v8msg:ReceivedNo>
	</v8msg:Header>
	<v8msg:Body>
		<CatalogObject.Заказы.Вручную>
			<Ref xmlns:v8="http://v8.1c.ru/data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="v8:UUID">72912d4c-b299-11e6-a41f-005056c00008</Ref>
			<DeletionMark xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:boolean">false</DeletionMark>
		</CatalogObject.Заказы.Вручную>
	</v8msg:Body>
</v8msg:Message>
Показать
+
10. dndw 25.11.16 20:38 Сейчас в теме
Весь текст XML привел выше. В нем вроде ничего такого.
+
11. flyer 27.11.16 22:42 Сейчас в теме
если можешь откажись от XDTO отлаживать не очень и вот такие ошибки мешают. используй связку план обмена и http сервисы
+
Внимание! Тема сдана в архив

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