IE 2018

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
Показать


помогите пожалуйста разобраться в чём проблема.
Ответы
Избранное Подписка Сортировка: Древо
4. ZergKRSK 122 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 122 11.06.13 09:30 Сейчас в теме
(5) hobbit91, ваша строка
ВыгрузитьПоПравилу(ВыборкаДетальныеЗаписи.Объект , ,, , "КонтактнаяИнформация");

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

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

где Источник - ссылка на элемент объекта-источника, который передаем для конвертации. Т.е. получается, что достаточно из запроса вытянуть только объект, точнее ссылку на него, и передать в функцию ВыгрузитьПоПравилу.
Разве нет?
9. ZergKRSK 122 11.06.13 10:01 Сейчас в теме
(7) hobbit91, нет. Источник - произвольный источник данных, подлежащий конвертации. Это может быть ссылка на выгружаемый объект, а может быть произвольный набор данных. Тип значения источника не обязательно должен совпадать с типом значения источника ПКО., с помощью к-рого будет осуществляться преобразование. Обязательно совпадение структуры свойств источника и тех свойств ПКО, к-рые должны быть получены из источника.
В данном случае вы должны передать по правилу Выборку со свойствами, а не голый объект.
hobbit91; +1 Ответить
2. killitch 29 11.06.13 08:45 Сейчас в теме
В РС КИ есть кроме "объекта" два реквизита: вид и тип КИ, для них нужно тоже делать ПКО и соот-но в ПКО КИ указывать правила конвертации для обоих реквизитов.
В запросе ты выбираешь только Объект, надо хотя бы так:
Если НЕ Источник.ЭтоГруппа Тогда
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	|	КорреспондентыКонтактнаяИнформация.Ссылка КАК Объект,
	|	КорреспондентыКонтактнаяИнформация.Тип,
	|	КорреспондентыКонтактнаяИнформация.Вид,
	|	КорреспондентыКонтактнаяИнформация.Представление,
	|	ИСТИНА КАК Активность
	|ИЗ
	|	Справочник.Корреспонденты.КонтактнаяИнформация КАК КорреспондентыКонтактнаяИнформация
	|ГДЕ
	|	КорреспондентыКонтактнаяИнформация.Ссылка = &Ссылка");
	
	Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		ВыгрузитьПоПравилу( , , Выборка, , "КонтактнаяИнформация");
	КонецЦикла;
	
КонецЕсли;
Показать
3. hobbit91 2 11.06.13 08:54 Сейчас в теме
(2) killitch, спасибо за ответ.
ПКО вид и тип существуют. Они появились при синхронизации свойств КИ. Когда я передаю управление ПКО КИ, это правило само должно таскать нужные ему ПКО, которые, повторюсь, существуют.
То что вы привели в качестве примера это не совсем то. ВыгрузитьПоПравилу( , , Выборка, , "КонтактнаяИнформация") - парметр выборка стоит на 3 месте, значит данные будут браться не из объекта иб, а из выборки данных, тогда надо будет ещё в пко ки натыкать галочки "получать из входящих данных". Зачем это делать, если у нас в источнике есть регистр сведений КИ по структуре похожий на РС КИ в приёмнике, и мы можем в качестве выборки указать сам объект.
Поправьте, если не прав.
8. echo77 907 11.06.13 09:54 Сейчас в теме
угу, в типовых именно так :-)
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 28.12.16 12:30 Сейчас в теме
Ребята может кто поможет?!
Я все делаю как в этой статье описано и контактная инфа выгружается (отрабатывает сообщить и в файле видно выгруженные записи регистра), но в приемнике записи не появляются. Бьюсь второй день не могу понять. Выгрузку делаю из типовой конфы Бухгалтерия предприятия, редакция 2.0 (2.0.65.39) в самописную и в ней структура хранения контактной инфы точно такая же как и в бух. Файл с правилами прицепил к сообщению.

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

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

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

Вакансии

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

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

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

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

Программист 1С
Казань
Полный день