УПП 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);
Обработка.Параметры.Вставить("ОбъектыДляВыгрузки",ОбъектыБИ);
Для каждого чтото из Обработка.Параметры.ОбъектыДляВыгрузки цикл
Сообщить(Строка(чтото));
конеццикла;
Обработка.ВыполнитьВыгрузку();
Обработка = Неопределено;
Видимо, ставить галки у табличной части и у всех ее реквизитов - практика используемая для случая, когда данные передаются в формате "структура в структуре" (входящие данные - структура, описывающая объект выгрузки, и поле входящих данных "контактнаяИнформация" так же содержит структуру, описывающую табличную часть объекта). Данная ситуация, повторюсь, равносильна добавлению в табличную часть всего лишь одной строки. (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") структура с полями "Тип,Вид,Представление,Страна.Регион...")
В нашем же случае данные передаются в формате "таблица в структуре" (входящиеДанные - структура, описывающая объект в части необходимых к заполнению его реквизитов, и в ее поле "КонтактнаяИнформация" содержится таблица, повторяющая табличную часть объекта) (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") ранее заполненная таблица с полями "Тип,Вид,Представление,Страна.Регион...")
Просто... да не просто... Куча форумов, где вопрос подобный был задан, а ответа не последовало... Или советуют не то, что надо...
Видимо, ставить галки у табличной части и у всех ее реквизитов - практика используемая для случая, когда данные передаются в формате "структура в структуре" (входящие данные - структура, описывающая объект выгрузки, и поле входящих данных "контактнаяИнформация" так же содержит структуру, описывающую табличную часть объекта). Данная ситуация, повторюсь, равносильна добавлению в табличную часть всего лишь одной строки. (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") структура с полями "Тип,Вид,Представление,Страна.Регион...")
В нашем же случае данные передаются в формате "таблица в структуре" (входящиеДанные - структура, описывающая объект в части необходимых к заполнению его реквизитов, и в ее поле "КонтактнаяИнформация" содержится таблица, повторяющая табличную часть объекта) (Если не понятно о чем это я , то подробно вот так: ВходящиеДанные - структура с полем "КонтактнаяИнформация", где в поле КонтактнаяИнформация добавляется (через "Вставить") ранее заполненная таблица с полями "Тип,Вид,Представление,Страна.Регион...")
Просто... да не просто... Куча форумов, где вопрос подобный был задан, а ответа не последовало... Или советуют не то, что надо...