Как передать и установить ГУИД объекту при синхронизации данных по правилам обмена КД2

1. Sergik82 22.04.22 16:38 Сейчас в теме
Настроена синхронизация данных между самописной базой (на базе УТ 10.3) и Бухгалтери 3.0.
Описание проблемы: В "Базе1" есть документ Инвойс, в табличной части данного документа собираются данные из документов "Поступление доп. расходов" из другой базы "База2", т. е. каждая строка - это отдельный документ, в каждой строке также содержится ГУИД этого документа из базы "База2".
Появилась необходимость передавать при синхронизации между базой "База1" и Бухгалтери 3.0 каждую строку из табличной части документа Инвойс в отдельный документ "ПоступлениеТоваровИУслуг". Как и где в правилах обмена в КД2 прописать передачу и присвоение новому объекту ГУИД, из строки табличной части.

Через параметры объекта не получается.
По теме из базы знаний
Найденные решения
11. Sergik82 22.04.22 22:57 Сейчас в теме
Вопрос решен.

Была ошибка в коде при записи свойств в 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;
	КонецЕсли;

	Приемник.ЗаписатьБезОбработки(ИнформацияДляЗаписиВФайл);
Показать


Теперь документы передаются и создаются с нужным ГУИД.

Спасибо пользователю Ivanov_OM
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 22.04.22 16:48 Сейчас в теме
(1) Пишете правила конвертации объектов поступлений доп. расходов в документ поступление товаров и услуг. О ГУИДах думать не надо правила сами его передадут.
7. Ivanov_OM 38 22.04.22 17:48 Сейчас в теме
(1) В Обработчике ПриВыгрузке.
У меня так перегружается Номенклатура, которая создается при обмене из другого справочника.
УзелСсылкиXML = СоздатьУзел("Ссылка");
УстановитьАтрибут(УзелСсылкиXML,"Нпп",НПП);
УзелГуид = ДобавитьУзел(УзелСсылкиXML,"Свойство");
УстановитьАтрибут(УзелГуид,"Тип","Строка");
УстановитьАтрибут(УзелГуид,"Имя","{УникальныйИдентификатор}");
одЗаписатьЭлемент(УзелГуид,"Значение", Источник.ЮС_УдалитьGUIDНоменклатуры);
УзелСсылкиXML.ЗаписатьКонецЭлемента();
УзелСсылкиXML.ЗаписатьКонецЭлемента();
УзелСсылки = УзелСсылкиXML.Закрыть();
ДобавитьПодчиненный(Приемник,УзелСсылки);
Показать

Обязательно снять флажок ПоискПоВнутреннемуИдентификатору.
8. Ivanov_OM 38 22.04.22 17:49 Сейчас в теме
(1) В строке одЗаписатьЭлемент подставь ГУИД строки табличной части
3. soft_wind 22.04.22 16:49 Сейчас в теме
а гуид то зачем хранить? он же в ссылке и заключен!
с ссылкой и передается.
4. soft_wind 22.04.22 16:57 Сейчас в теме
т.е. объект передается и создается с той ссылкой с какой он есть! (если конечно не задано явно другое)
5. Sergik82 22.04.22 17:21 Сейчас в теме
В базе "Базе1" в документ инвойс собираются данные из многих документов из другой базы в табличную часть, где и присутствует исходный ГУИД, во его-то мне и нужно передавать в бухгалтерию в документ Поступление товаров и услуг. А вот если включить поля поиска, например контрагент, входящий номер и входящая дата, то документы передаются и создаются. А вот по ГУИД не создаются.
6. RustamZz 22.04.22 17:24 Сейчас в теме
(5) В каком виде исходный ГУИД присутствует в ТЧ? В виде строки или ссылки?
9. triviumfan 94 22.04.22 17:52 Сейчас в теме
Через исходящие параметры.
10. Sergik82 22.04.22 21:49 Сейчас в теме
Обмен идет не через обработку УниверсальныйОбменДаннымиXML. Используется обработка ОбработчикиВыгрузкиВБухгалтерияПредприятия30 (как в УТ 10.3).

Флажок ПоискПоВнутреннемуИдентификатору снят. Сняты флаги поиска со всех реквизитов.

В обработчике "При выгрузке":

	ГУИД = ВходящиеДанные.ГУИД;

	// Создаем узел "Ссылка"
	УзелСсылкиXML = Новый ЗаписьXML;
	УзелСсылкиXML.УстановитьСтроку();
	УзелСсылкиXML.ЗаписатьНачалоЭлемента("Ссылка");

	// Устанавливаем атрибут "Нпп"
	СтрокаЗаписи = XMLСтрока(УзелСсылки);
	УзелСсылкиXML.ЗаписатьАтрибут("Нпп", СтрокаЗаписи);

		// Создаем узел "Свойство" 
		УзелГуид = Новый ЗаписьXML;
		УзелГуид.УстановитьСтроку();
		УзелГуид.ЗаписатьНачалоЭлемента("Свойство");
		
			// Устанавливаем атрибут "Строка","Имя" 
			СтрокаЗаписи = XMLСтрока("Строка");
			УзелГуид.ЗаписатьАтрибут("Тип", СтрокаЗаписи);
			СтрокаЗаписи = XMLСтрока("{УникальныйИдентификатор}");
			УзелГуид.ЗаписатьАтрибут("Имя", СтрокаЗаписи);
			
			СтрокаЗаписи = XMLСтрока(ПКО.ТипИсточника);
			УзелГуид.ЗаписатьАтрибут("ТипИсточника", СтрокаЗаписи);
			СтрокаЗаписи = XMLСтрока(ПКО.ТипПриемника);
			УзелГуид.ЗаписатьАтрибут("ТипПриемника", СтрокаЗаписи);
			
			
			// Запишем "Значение" - ГУИД
			УзелГуид.ЗаписатьНачалоЭлемента("Значение");
			Стр = XMLСтрока(ГУИД);
			УзелГуид.ЗаписатьТекст(Стр);
			УзелГуид.ЗаписатьКонецЭлемента();
			
		УзелГуид.ЗаписатьКонецЭлемента();  // Записать конец элемента "Свойство"

	Если ТипЗнч(УзелСсылкиXML) <> Тип("Строка") Тогда
		УзелСсылкиXML.ЗаписатьКонецЭлемента();
		ИнформацияДляЗаписиВФайл = УзелСсылкиXML.Закрыть();
	Иначе
		ИнформацияДляЗаписиВФайл = УзелСсылкиXML;
	КонецЕсли;

	Приемник.ЗаписатьБезОбработки(ИнформацияДляЗаписиВФайл);
Показать


Но в сообщение обмена не прописывается свойство с уникальным идентификатором
11. Sergik82 22.04.22 22:57 Сейчас в теме
Вопрос решен.

Была ошибка в коде при записи свойств в 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;
	КонецЕсли;

	Приемник.ЗаписатьБезОбработки(ИнформацияДляЗаписиВФайл);
Показать


Теперь документы передаются и создаются с нужным ГУИД.

Спасибо пользователю Ivanov_OM
Оставьте свое сообщение

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