Предлагаю мое, достаточно простое, решение данной задачи.
Довольно часто встречается задача выгрузить при помощи «Конвертация данных, редакция 2.1» контактной информации контрагента из «Управление торговлей", редакция 10.3» в «Бухгалтерия предприятия, редакция 3.0». Сложность заключается в том, что в УТ контактная информация хранится в регистре сведений, а в БП — в табличной части справочника «Контрагенты».
Предлагаю мое, достаточно простое, решение данной задачи.
1. В правило конвертации объектов (ПКО) «Контрагенты» добавляем конвертацию свойств (ПКС) табличной части «КонтактнаяИнформация», причем не указываем источник и ставим галку «получать из входящих данных». Добавляем все, необходимые реквизиты табличной части.
2. Открываем ПКО «Контрагенты» и добавляем ниже следующий код в обработчик «Перед выгрузкой».
//Выгружаем контактную информацию контрагента
ВходящиеДанные = Новый Структура("КонтактнаяИнформация");
ВходящиеДанные.КонтактнаяИнформация = Новый ТаблицаЗначений;
ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить("Представление");
ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить("Вид");
ВходящиеДанные.КонтактнаяИнформация.Колонки.Добавить("Тип");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Представление,
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Тип
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &ТекущийКонтрагент";
Запрос.УстановитьПараметр("ТекущийКонтрагент", Источник);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НовСтрока = ВходящиеДанные.КонтактнаяИнформация.Добавить();
ЗаполнитьЗначенияСвойств(НовСтрока, Выборка);
КонецЦикла;
Суть в том, что мы программно создаем табличную часть «Контактная информация» и подставляем ее для выгружаемого объекта в качестве входящих данных.
Следует обратить внимание, что инициализация параметра «ВходящиеДанные», и передача в него таблицы значений со всеми необходимыми колонками, обязательна для каждого объекта. В противном случае, будет возникать ошибка типа «Ошибка получения свойства подчиненного объекта из входящих данных».
Метод прекрасный. У него есть только один недостаток, он мало пригоден для переноса контактной информации. Поле приемника «ЗначенияПолей», в котором фактически и содержится контактная информация в виде текста XML, и с которым работают конфигурации на БСП, таким способом не заполнить. Нужны пляски с бубном, точнее, в источнике нужно разделять КИ на элементы, а в приемнике — формировать из них строку в формате XML. Задача, кстати, не совсем тривиальная.
(1) Да, согласен. Но пока нет такой задачи. В рамках текущей задачи мне было достоточно перенести «адрес в свободной форме». Если бы в УТ адреса заполнялись из КЛАДР, а в телефонах указывались «код страны» и «код города», то можно было заморочится.
Вариант покороче. В ПКО группы «КонтактнаяИнформация» «Перед обработкой»
Запрос в ПКО не оч красиво.
(4) А почему не красиво? Мне этот вариант нравится. Получается наоборот более логично. Контактная информация и сбор этой информации — все в одном месте. Если понадобиться изменить или даже удалить эту табличную часть из обмена, то не нужно искать в других местах.
(5) Запрос в цикле это зло. В ПВД нужно все реализовывать.
(6) Вынести в ПВД — конечно вообще самый правильный способ. Я предложил упрощение которое сразу станет понятно для человека и реализуемо на раз-два.
(2)Пытаюсь таким же образом перенести контактную информацию Физических лиц, возникла проблема с переносом элементов справочника ВидыКонтактнойИнормации. В обеих базах они являются предопределенными. Сопоставляю их на закладке КонвертацияЗначений. При загрузке в строке ТЧ КонтактнаяИнформация поле Вид принимает значение <Объект не найден> и адрес не отображается на форме. Какой момент я упустила?
а есть у кого-нибудь примерчик с ПВД?!
Не благодари =)