1. dndw 6 25.11.16 11:38 Сейчас в теме

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

Пытаюсь настроить обмен, 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 6 25.11.16 11:39 Сейчас в теме
Может кто решал подобные задачи?
3. spezc 518 25.11.16 13:15 Сейчас в теме
Этот механизм подходит только для идентичных конфигураций. Думаю вам предстоит долгий путь изучения механизма XDTO. Начните с изучения мобильной конфигураций для УНФ.
4. dndw 6 25.11.16 13:56 Сейчас в теме
Почему тогда работает в базе из "Знакомство с разработкой мобильных приложений", состав реквизитов различен, а обмен идет нормально?
5. spezc 518 25.11.16 14:06 Сейчас в теме
(4) тогда надо детальнее там глянуть, что там за механизм.
6. dndw 6 25.11.16 14:16 Сейчас в теме
Почти то же самое, но работает нормально, а 1с:заказы мне в ходе экспериментов удавалось пару раз передать заказ, но потом опять вылезала ошибка при вызове метода контекста(ЗакончитьЧтение).
9. DJDUH 19 25.11.16 18:59 Сейчас в теме
(6) у тебя значит в XML есть такие самозакрывающиеся тегы Типа <ТипДокумента/>, а скорее всего на нём ЧтениеXML и сыпется (
Просмотри файл сам
7. DitriX 1614 25.11.16 16:50 Сейчас в теме
убедитесь что составы планов обмена идентичны
8. dndw 6 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 6 25.11.16 20:38 Сейчас в теме
Весь текст XML привел выше. В нем вроде ничего такого.
11. flyer 207 27.11.16 22:42 Сейчас в теме
если можешь откажись от XDTO отлаживать не очень и вот такие ошибки мешают. используй связку план обмена и http сервисы
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Воронеж
зарплата до 80 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 80 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб. до 160 000 руб.
Полный день

Программист 1С
Москва
зарплата от 80 000 руб.
Полный день

Консультант-аналитик 1С
Санкт-Петербург
Полный день