Ошибка получения свойства из внешних данных: Перенос контактной информации физлица из регистра УПП в табличную часть ДО (документооборот)

1. parubetssm 04.07.17 12:38 Сейчас в теме
УПП 1.3; ДО 2.0.16.1. Требуется выполнить перенос конкретного физического лица в xml-файл (одного или, иногда, нескольких) вместе с контактной информацией соблюдая соответствие по УИД), выполняя запуск конвертации программно.

Программный запуск выгрузки реализован. Выгрузка отобранных физических лиц без контактной информации происходит. Пользователи источника и приемника согласуются по УИД (это и требуется: в получателе пользователей ручками заводить не планируется).

Далее пЫТАЮСЬ ОСНОВНЫЕ РЕКВИЗИТЫ физлица ПОЛУЧИТЬ ЧЕРЕЗ УКАЗАНИЕ СООТВЕТСТВИЯ реквизитов, а контактную информацию достать из внешних данных
При попытке передачи контактной информации через внешние данные происходит ошибка (эксперимент показывает, что независимо от того, свойство ссылочного типа или нет)

Подскажите, в чем может быть ошибка (текст ошибки - далее)!!!
Начало выгрузки:   04.07.2017 10:51:22

Ошибка получения свойства подчиненного объекта из входящих данных 
	ПКО                    =  ФизическиеЛица  (Справочник: Физические лица)
	ПКС                    =  14  (--> Представление)
	Объект                 =  Борков Александр Владимирович  (Физические лица)
	СвойствоПриемника      =  Представление  (Строка)
	ОписаниеОшибки         =  Поле объекта не обнаружено (Представление)
	ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8329)
	КодСообщения           =  67

Ошибка в глобальном обработчике события ПередВыгрузкойОбъекта (конвертация)
	ПВД                    =  ФизическиеЛица
	Объект                 =  Гамлетов Борис Сергеевич  (Физические лица)
	Обработчик             =  ПередВыгрузкойОбъектаВыборки (глобальный)
	ОписаниеОшибки         =  Ошибка получения свойства подчиненного объекта из входящих данных 
	ПКО                    =  ФизическиеЛица  (Справочник: Физические лица)
	ПКС                    =  14  (--> Представление)
	Объект                 =  Борков Александр Владимирович  (Физические лица)
	СвойствоПриемника      =  Представление  (Строка)
	ОписаниеОшибки         =  Поле объекта не обнаружено (Представление)
	ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8329)
	КодСообщения           =  67
	ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1674)
	КодСообщения           =  65

Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1697)}: Ошибка в глобальном обработчике события ПередВыгрузкойОбъекта (конвертация)
	ПВД                    =  ФизическиеЛица
	Объект                 =  Гамлетов Борис Сергеевич  (Физические лица)
	Обработчик             =  ПередВыгрузкойОбъектаВыборки (глобальный)
	ОписаниеОшибки         =  Ошибка получения свойства подчиненного объекта из входящих данных 
	ПКО                    =  ФизическиеЛица  (Справочник: Физические лица)
	ПКС                    =  14  (--> Представление)
	Объект                 =  Борков Александр Владимирович  (Физические лица)
	СвойствоПриемника      =  Представление  (Строка)
	ОписаниеОшибки         =  Поле объекта не обнаружено (Представление)
	ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8329)
	КодСообщения           =  67
	ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1674)
	КодСообщения           =  65
Показать


Галки "пОЛУЧАТЬ ИЗ ВходящИХ ДАННЫХ" СТОЯТ И У ТАБЛИЧНОЙ ЧАСТИ, И У КАЖДОГО ИЗ СВОЙСТВ ТАБЛИЧНОЙ ЧАСТИ. Код, достающий информацию для заполнения из регистра, отлажен в модуле объекта одного из справочников: все работает как надо.

ВходящиеДанные - структура с полем "КонтактнаяИнформация", в которую помещена таблица значений с полями, соответствующими полям табличной части (даже порядок полей совпадает)

Даннные в обработку перед ее запуском подсовываются через параметр "Объекты для выгрузки". Параметр инициализируется в обработчике "После загрузки правил обмена" ПРАВИЛ КОНВЕРТАЦИИ (ПК)

Параметры.Вставить("ОбъектыДляВыгрузки", новый Массив);


Настройка самих правил в КД показана в прикрепленных скринах

Выгрузка объекта и формирование входящих данных происходит в правиле конвертации (ПК) "Перед выгрузкой объекта" (согласно изученного и рассмотренных в литературе примеров)

ТаблицаКонтактнИнформация = новый ТаблицаЗначений;
ТаблицаКонтактнИнформация.Колонки.Добавить("Тип");
ТаблицаКонтактнИнформация.Колонки.Добавить("Вид");
ТаблицаКонтактнИнформация.Колонки.Добавить("Представление");
ТаблицаКонтактнИнформация.Колонки.Добавить("НомерТелефона");
ТаблицаКонтактнИнформация.Колонки.Добавить("Регион");
ТаблицаКонтактнИнформация.Колонки.Добавить("Страна");
ТаблицаКонтактнИнформация.Колонки.Добавить("АдресЭП");
ТаблицаКонтактнИнформация.Колонки.Добавить("ДоменноеИмяСервера");
ТаблицаКонтактнИнформация.Колонки.Добавить("Город");

ВходящиеДанные = новый Структура("КонтактнаяИнформация");

Для каждого Истк Из Параметры.ОбъектыДляВыгрузки Цикл

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

	//Заполняем таблицу, аналогичную табличной части
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	
		СтрокаВходДанных = ТаблицаКонтактнИнформация.Добавить();
		СтрокаВходДанных.Тип = ВыборкаДетальныеЗаписи.Тип;
		СтрокаВходДанных.Вид = ВыборкаДетальныеЗаписи.Вид;
		СтрокаВходДанных.Представление = ВыборкаДетальныеЗаписи.Представление;
		СтрокаВходДанных.НомерТелефона = ВыборкаДетальныеЗаписи.НомерТелефона;
		СтрокаВходДанных.Регион = ВыборкаДетальныеЗаписи.Регион;
		СтрокаВходДанных.Страна = "Россия";
		СтрокаВходДанных.АдресЭП = "";
		СтрокаВходДанных.ДоменноеИмяСервера = "";
		Если ПустаяСтрока(ВыборкаДетальныеЗаписи.Город) Тогда
			СтрокаВходДанных.Город = ВыборкаДетальныеЗаписи.НаселенныйПункт;
		Иначе
			СтрокаВходДанных.Город = ВыборкаДетальныеЗаписи.Город;
		КонецЕсли;

	КонецЦикла;
	
//складываем таблицу в структуру	
	ВходящиеДанные.Вставить("КонтактнаяИнформация",ТаблицаКонтактнИнформация);
	
//ВыгрузитьПоПравилу(Истк,,,,"ФизическиеЛица");
	ВыгрузитьПоПравилу(Истк,,ВходящиеДанные,,"ФизическиеЛица");

// очищаем таблицу, подготовив ее к новому заполнению во время следующей итерации
// (= при рассмотрении другого пользователя)
	ТаблицаКонтактнИнформация.Очистить();

КонецЦикла;

// зачищаем таблицу и структуру после использования

ТаблицаКонтактнИнформация = Неопределено;
ВходящиеДанные.Очистить();

Отказ = Истина; //Отменяем стандартную выгрузку объекта
Показать


Может ли функция ВыгрузитьПоПравилу(Истк,,ВходящиеДанные,,"ФизическиеЛица"); не поддерживать работу при одновременном указании параметров ИСТОЧНИК и ВНЕШНИЕДАННЫЕ
Выгрузка, запускаемая с кода, реализована так

Обработка = ВнешниеОбработки.Создать("D:\Obrabotki\V8Exchan82.epf");	
		//Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
	Обработка.РежимОбмена = "Выгрузка";
	Обработка.ИмяФайлаПравилОбмена = "D:\Obrki\handle_ruleUPP_DO_NoData.xml";//"D:\Obrki\ruleUPP_DO_NoData.xml";
	//Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
	
	//Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина; //отсутствует в данной версии обработки обмена
	Обработка.ЗапоминатьЗагруженныеОбъекты = Истина;
	//Обработка.ЗапоминатьЗагруженныеОбъекты = Истина;
	//Обработка.ДатаНачала = Дата;
    //Обработка.ДатаОкончания = КонецДня(Дата);
	Обработка.ВыгружатьТолькоРазрешенные = Истина;
	Обработка.ИмяФайлаОбмена = "D:\Obrki\vigruz2017_06_06SKoda.xml";
	//Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0; // 0 - не снимать регистрацию, 1 - снимать регистрацию
	Обработка.ЗагрузитьПравилаОбмена();

ОбъектыБИ = новый массив;
	СсылкаНаФизЛицо1 = Справочники.ФизическиеЛица.НайтиПоНаименованию("Борков Александр Владимирович");
	ОбъектыБИ.Добавить(СсылкаНаФизЛицо1);
	СсылкаНаФизЛицо2 = Справочники.ФизическиеЛица.НайтиПоНаименованию("Царева Ирина Ивановна");
	ОбъектыБИ.Добавить(СсылкаНаФизЛицо2);
	
	Обработка.Параметры.Вставить("ОбъектыДляВыгрузки",ОбъектыБИ);

Для каждого чтото из Обработка.Параметры.ОбъектыДляВыгрузки цикл
		Сообщить(Строка(чтото));
	конеццикла;

	Обработка.ВыполнитьВыгрузку();
	Обработка = Неопределено;
Показать


Всем заранее спасибо. Горю ...
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
3. parubetssm 06.07.17 12:00 Сейчас в теме
Уфффф. Решил сам... Выгрузка контактной информации информации стала прокатывать... .

Видимо, когда в табличную часть добавляется НЕ ОДНА строка , а таблица (несколько строк), то галку в настройках реквизитов "получать из входящих данных" надо ставить ТОЛЬКО у табличной части, а не одновременно у табличной части и всех ее свойств (последнее было сказано тут http://1c-pro.ru/threads/konvertacija-dannyx-registra-svedenij-v-tablichnuju-chast-spravochnika.50334/).

Видимо, ставить галки у табличной части и у всех ее реквизитов - практика используемая для случая, когда данные передаются в формате "структура в структуре" (входящие данные - структура, описывающая объект выгрузки, и поле входящих данных "контактнаяИнформация" так же содержит структуру, описывающую табличную часть объекта). Данная ситуация, повторюсь, равносильна добавлению в табличную часть всего лишь одной строки. (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") структура с полями "Тип,Вид,Представление,Страна.Регион...")

В нашем же случае данные передаются в формате "таблица в структуре" (входящиеДанные - структура, описывающая объект в части необходимых к заполнению его реквизитов, и в ее поле "КонтактнаяИнформация" содержится таблица, повторяющая табличную часть объекта) (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") ранее заполненная таблица с полями "Тип,Вид,Представление,Страна.Регион...")

Просто... да не просто... Куча форумов, где вопрос подобный был задан, а ответа не последовало... Или советуют не то, что надо...

Спасибо всем, кто заинтересовался
user611975_na__svyazi; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. пользователь 06.07.17 11:59
Сообщение было скрыто модератором.
...
3. parubetssm 06.07.17 12:00 Сейчас в теме
Уфффф. Решил сам... Выгрузка контактной информации информации стала прокатывать... .

Видимо, когда в табличную часть добавляется НЕ ОДНА строка , а таблица (несколько строк), то галку в настройках реквизитов "получать из входящих данных" надо ставить ТОЛЬКО у табличной части, а не одновременно у табличной части и всех ее свойств (последнее было сказано тут http://1c-pro.ru/threads/konvertacija-dannyx-registra-svedenij-v-tablichnuju-chast-spravochnika.50334/).

Видимо, ставить галки у табличной части и у всех ее реквизитов - практика используемая для случая, когда данные передаются в формате "структура в структуре" (входящие данные - структура, описывающая объект выгрузки, и поле входящих данных "контактнаяИнформация" так же содержит структуру, описывающую табличную часть объекта). Данная ситуация, повторюсь, равносильна добавлению в табличную часть всего лишь одной строки. (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") структура с полями "Тип,Вид,Представление,Страна.Регион...")

В нашем же случае данные передаются в формате "таблица в структуре" (входящиеДанные - структура, описывающая объект в части необходимых к заполнению его реквизитов, и в ее поле "КонтактнаяИнформация" содержится таблица, повторяющая табличную часть объекта) (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") ранее заполненная таблица с полями "Тип,Вид,Представление,Страна.Регион...")

Просто... да не просто... Куча форумов, где вопрос подобный был задан, а ответа не последовало... Или советуют не то, что надо...

Спасибо всем, кто заинтересовался
user611975_na__svyazi; +1 Ответить
4. DENSKR 15 13.04.22 21:27 Сейчас в теме
(3) Так а в конечном итоге решение в чем заключено?
Оставьте свое сообщение

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