Проблема при конвертации данных

1. Максим ааа (hobbit91) 2 11.06.13 08:26 Сейчас в теме
в обработчике события после выгрузки ПКО контрагенты прописал следующее:
Запрос = Новый Запрос();
Запрос.Текст = 
		"ВЫБРАТЬ
		|	КонтактнаяИнформация.Объект		
		|ИЗ
		|	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
		|ГДЕ
		|	КонтактнаяИнформация.Объект = &Ссылка";

		Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
	Результат = Запрос.Выполнить();

	ВыборкаДетальныеЗаписи = Результат.Выбрать();

	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ВыгрузитьПоПравилу(ВыборкаДетальныеЗаписи.Объект , ,, , "КонтактнаяИнформация");
	КонецЦикла;


т.е. фактически, после выгрузке контрагента(если она произойдёт) будем выгружать и всю его контактную информацию. Причём ПКО КИ это преобразование из регистра сведений в регистр сведений. 
При попытке выгрузить контрагентов из базы выдал ошибку:

Ошибка получения значения свойства объекта (по имени свойства источника)
	ПКО                    =  КонтактнаяИнформация  (Регистр сведений: Контактная информация)
	ПКС                    =  1  (Вид --> Вид)
	Объект                 =  ЛУКОЙЛ-Интер-Кард  (Контрагенты)
	СвойствоПриемника      =  Вид  ()
	ОписаниеОшибки         =  Поле объекта не обнаружено (Вид)
	ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8323)
	КодСообщения           =  13

Ошибка в обработчике события ПослеВыгрузкиОбъекта
	ПКО                    =  Контрагенты  (:)
	Объект                 =  ЛУКОЙЛ-Интер-Кард  (Контрагенты)
	Обработчик             =  ПослеВыгрузкиОбъекта
	ОписаниеОшибки         =  Ошибка получения значения свойства объекта (по имени свойства источника)
	ПКО                    =  КонтактнаяИнформация  (Регистр сведений: Контактная информация)
	ПКС                    =  1  (Вид --> Вид)
	Объект                 =  ЛУКОЙЛ-Интер-Кард  (Контрагенты)
	СвойствоПриемника      =  Вид  ()
	ОписаниеОшибки         =  Поле объекта не обнаружено (Вид)
	ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8323)
	КодСообщения           =  13
	ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1672)
	КодСообщения           =  43

Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1641)}: Ошибка в обработчике события ПослеВыгрузкиОбъекта
	ПКО                    =  Контрагенты  (:)
	Объект                 =  ЛУКОЙЛ-Интер-Кард  (Контрагенты)
	Обработчик             =  ПослеВыгрузкиОбъекта
	ОписаниеОшибки         =  Ошибка получения значения свойства объекта (по имени свойства источника)
	ПКО                    =  КонтактнаяИнформация  (Регистр сведений: Контактная информация)
	ПКС                    =  1  (Вид --> Вид)
	Объект                 =  ЛУКОЙЛ-Интер-Кард  (Контрагенты)
	СвойствоПриемника      =  Вид  ()
	ОписаниеОшибки         =  Поле объекта не обнаружено (Вид)
	ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8323)
	КодСообщения           =  13
	ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1672)
	КодСообщения           =  43
...Показать Скрыть


помогите пожалуйста разобраться в чём проблема.
Ответы
2. Илья Илья (killitch) 29 11.06.13 08:45 Сейчас в теме
В РС КИ есть кроме "объекта" два реквизита: вид и тип КИ, для них нужно тоже делать ПКО и соот-но в ПКО КИ указывать правила конвертации для обоих реквизитов.
В запросе ты выбираешь только Объект, надо хотя бы так:
Если НЕ Источник.ЭтоГруппа Тогда
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	|	КорреспондентыКонтактнаяИнформация.Ссылка КАК Объект,
	|	КорреспондентыКонтактнаяИнформация.Тип,
	|	КорреспондентыКонтактнаяИнформация.Вид,
	|	КорреспондентыКонтактнаяИнформация.Представление,
	|	ИСТИНА КАК Активность
	|ИЗ
	|	Справочник.Корреспонденты.КонтактнаяИнформация КАК КорреспондентыКонтактнаяИнформация
	|ГДЕ
	|	КорреспондентыКонтактнаяИнформация.Ссылка = &Ссылка");
	
	Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		ВыгрузитьПоПравилу( , , Выборка, , "КонтактнаяИнформация");
	КонецЦикла;
	
КонецЕсли;
...Показать Скрыть
3. Максим ааа (hobbit91) 2 11.06.13 08:54 Сейчас в теме
(2) killitch, спасибо за ответ.
ПКО вид и тип существуют. Они появились при синхронизации свойств КИ. Когда я передаю управление ПКО КИ, это правило само должно таскать нужные ему ПКО, которые, повторюсь, существуют.
То что вы привели в качестве примера это не совсем то. ВыгрузитьПоПравилу( , , Выборка, , "КонтактнаяИнформация") - парметр выборка стоит на 3 месте, значит данные будут браться не из объекта иб, а из выборки данных, тогда надо будет ещё в пко ки натыкать галочки "получать из входящих данных". Зачем это делать, если у нас в источнике есть регистр сведений КИ по структуре похожий на РС КИ в приёмнике, и мы можем в качестве выборки указать сам объект.
Поправьте, если не прав.
4. Александр Новиков (ZergKRSK) 121 11.06.13 09:05 Сейчас в теме
(1) hobbit91, засовываешь в событие "После выгрузки в файл" код
Запрос = Новый Запрос("
|ВЫБРАТЬ
| КонтактнаяИнформация.Объект,
| КонтактнаяИнформация.Тип,
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Представление,
| КонтактнаяИнформация.Поле1,
| КонтактнаяИнформация.Поле2,
| КонтактнаяИнформация.Поле3,
| КонтактнаяИнформация.Поле4,
| КонтактнаяИнформация.Поле5,
| КонтактнаяИнформация.Поле6,
| КонтактнаяИнформация.Поле7,
| КонтактнаяИнформация.Поле8,
| КонтактнаяИнформация.Поле9,
| КонтактнаяИнформация.Поле10,
| КонтактнаяИнформация.Комментарий
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект");

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

В приведенном примере контактная информация в файле обмена будет располагаться после выгруженного объекта.
5. Максим ааа (hobbit91) 2 11.06.13 09:21 Сейчас в теме
(4) ZergKRSK, Спасибо за ответ.
После некоторых манипуляций с правилами (отключение лишних пкс в КИ) ваш код отработал вроде бы корректно.
Не могли бы Вы объяснить, чем Ваш вариант отличается от моего, и почему у меня не срабатывало?
6. Александр Новиков (ZergKRSK) 121 11.06.13 09:30 Сейчас в теме
(5) hobbit91, ваша строка
ВыгрузитьПоПравилу(ВыборкаДетальныеЗаписи.Объект , ,, , "КонтактнаяИнформация");

моя строка
ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация");

Нужно передавать не только сам объект, а и его контактную информацию! Ну и сам Запрос у вас возвращает зачем то голый объект, а надо еще контактную инфу.
И плюс логичнее пихать контактную информацию после самого владельца...
7. Максим ааа (hobbit91) 2 11.06.13 09:42 Сейчас в теме
(6) ZergKRSK, по поводу запроса. Если я правильно понимаю:
ВыгрузитьПоПравилу(Источник,
Приемник,
ВходящиеДанные,
ИсходящиеДанные,
ИмяПКО,
УзелСсылки,
ТолькоПолучитьУзелСсылки,
ПКО,
ЭтоПравилоСГлобальнойВыгрузкойОбъектов,
ВыборкаДляВыгрузкиДанных)

где Источник - ссылка на элемент объекта-источника, который передаем для конвертации. Т.е. получается, что достаточно из запроса вытянуть только объект, точнее ссылку на него, и передать в функцию ВыгрузитьПоПравилу.
Разве нет?
8. Александр Крынецкий (echo77) 737 11.06.13 09:54 Сейчас в теме
угу, в типовых именно так :-)
9. Александр Новиков (ZergKRSK) 121 11.06.13 10:01 Сейчас в теме
(7) hobbit91, нет. Источник - произвольный источник данных, подлежащий конвертации. Это может быть ссылка на выгружаемый объект, а может быть произвольный набор данных. Тип значения источника не обязательно должен совпадать с типом значения источника ПКО., с помощью к-рого будет осуществляться преобразование. Обязательно совпадение структуры свойств источника и тех свойств ПКО, к-рые должны быть получены из источника.
В данном случае вы должны передать по правилу Выборку со свойствами, а не голый объект.
hobbit91; +1 Ответить
10. Максим ааа (hobbit91) 2 11.06.13 13:31 Сейчас в теме
Всем спасибо за ответы, особенно Вам, ZergKRSK.
11. Владимир Бакланов (NikusXXZ) 04.04.14 16:37 Сейчас в теме
По этой же методологии в ПКО контрогенты в событие после выгрузки добавляю выборку:
Если НЕ Источник.ЭтоГруппа Тогда
        Запрос = Новый Запрос;
		//Структура = Новый Структура("Объект,Тип,Вид,Представление,Поле1,Поле2,Поле3,Поле4,Поле5,Поле6,Поле7,Поле8,Поле9,Поле10,Комментарий,ЗначениеПоУмолчанию");
        Запрос.Текст =        
        "
        |ВЫБРАТЬ
        |    КонтактнаяИнформация.Объект,
        |    КонтактнаяИнформация.Тип,
        |    КонтактнаяИнформация.Вид,
        |    КонтактнаяИнформация.Представление,
        |    КонтактнаяИнформация.Поле1,
        |    КонтактнаяИнформация.Поле2,
        |    КонтактнаяИнформация.Поле3,
        |    КонтактнаяИнформация.Поле4,
        |    КонтактнаяИнформация.Поле5,
        |    КонтактнаяИнформация.Поле6,
        |    КонтактнаяИнформация.Поле7,
        |    КонтактнаяИнформация.Поле8,
        |    КонтактнаяИнформация.Поле9,
        |    КонтактнаяИнформация.Поле10,
        |    КонтактнаяИнформация.Комментарий,
        |ИЗ
        |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |ГДЕ
        |    КонтактнаяИнформация.Объект = &Объект";
		
//      |    КонтактнаяИнформация.ЗначениеПоУмолчанию,
//		|	 КонтактнаяИнформация.ТипДома,
//		|	 КонтактнаяИнформация.ТипКорпуса,
//		|	 КонтактнаяИнформация.ТипКвартиры
		
		
        Запрос.УстановитьПараметр("Объект" ,    Источник.Ссылка);         
		Выборка = Запрос.Выполнить().Выбрать();

		Пока Выборка.Следующий() Цикл
			 ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация");
		КонецЦикла;
            
			//Если Выборка.Количество()>0 Тогда
			//	Пока Выборка.Следующий() Цикл
			//			   
			//		Структура.Вставить("Объект", Выборка.Объект);
			//		Структура.Вставить("Тип", Выборка.Тип);
			//		Структура.Вставить("Вид", Выборка.Вид);
			//		Структура.Вставить("Представление", Выборка.Представление);
			//		Структура.Вставить("Комментарий", Выборка.Комментарий);
			//		Структура.Вставить("Поле1", Выборка.Поле1);
			//		Структура.Вставить("Поле2", Выборка.Поле2);
			//		Структура.Вставить("Поле3", Выборка.Поле3);
			//		Структура.Вставить("Поле4", Выборка.Поле4);
			//		Структура.Вставить("Поле5", Выборка.Поле5);
			//		Структура.Вставить("Поле6", Выборка.Поле6);
			//		Структура.Вставить("Поле7", Выборка.Поле7);
			//		Структура.Вставить("Поле8", Выборка.Поле8);    
			//		Структура.Вставить("Поле9", Выборка.Поле9);
			//		Структура.Вставить("Поле10", Выборка.Поле10);
			//		//Структура.Вставить("Активность",  Выборка.Активность);

			//		ВыгрузитьПоПравилу(Структура, , , , "КонтактнаяИнформация");        
			//	КонецЦикла;
			//КонецЕсли;  
			//Структура = Неопределено;
            Выборка = Неопределено;    
КонецЕсли;
...Показать Скрыть


В ПКО КонтактнаяИнформация отключен встроеный реквизит "Активность" - сначало на него материлась обработка универсального обмена данными. Сейчас ругается на поле вид хотя конфигурации идентичные и загружены с нуля из xml файла который сформирован в конфигурации приемника и источника. Ругается на этапе выгрузки данных.

Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1672)}: Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО = КонтактнаяИнформация (Регистр сведений: Контактная информация)
ПКС = 22 (Вид --> Вид)
Объект = РегистрСведенийНаборЗаписей.КонтактнаяИнформация (Регистр сведений набор записей: Контактная информация)
СвойствоПриемника = Вид ()
ОписаниеОшибки = Поле объекта не обнаружено (Вид)
ПозицияМодуля = Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8323)
КодСообщения = 13


Просьба помоч кто сможет понять или встречался с похожей проблеммой и пожалуйста конечно же.
12. Алексей palax (palax) 28.12.16 12:30 Сейчас в теме
Ребята может кто поможет?!
Я все делаю как в этой статье описано и контактная инфа выгружается (отрабатывает сообщить и в файле видно выгруженные записи регистра), но в приемнике записи не появляются. Бьюсь второй день не могу понять. Выгрузку делаю из типовой конфы Бухгалтерия предприятия, редакция 2.0 (2.0.65.39) в самописную и в ней структура хранения контактной инфы точно такая же как и в бух. Файл с правилами прицепил к сообщению.

ПКО Контрагенты ПослеВыгрузкиВФайл:

Запрос = Новый Запрос("
|ВЫБРАТЬ
|ИСТИНА КАК Активность,
| КонтактнаяИнформация.Объект,
| КонтактнаяИнформация.Тип,
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Представление,
| КонтактнаяИнформация.Поле1,
| КонтактнаяИнформация.Поле2,
| КонтактнаяИнформация.Поле3,
| КонтактнаяИнформация.Поле4,
| КонтактнаяИнформация.Поле5,
| КонтактнаяИнформация.Поле6,
| КонтактнаяИнформация.Поле7,
| КонтактнаяИнформация.Поле8,
| КонтактнаяИнформация.Поле9,
| КонтактнаяИнформация.Поле10,
| КонтактнаяИнформация.Комментарий
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект");

Запрос.УстановитьПараметр("Объект", Источник);
Выборка = Запрос.Выполнить().Выбрать();
Сообщить(Выборка.Количество());
Пока Выборка.Следующий() Цикл
 ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация");
КонецЦикла;
...Показать Скрыть
Прикрепленные файлы:
Оплата.xml
13. Алексей palax (palax) 28.12.16 16:58 Сейчас в теме
(12)
Вопрос решил. Спасибо! Мой пост можно закрыть.
Оставьте свое сообщение