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

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 11 13.04.22 21:27 Сейчас в теме
(3) Так а в конечном итоге решение в чем заключено?
Оставьте свое сообщение
Вакансии
Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

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

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

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

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