Конвертация данных. Выгрузка контактной информации из регистра сведений в табличную часть


Довольно часто встречается задача выгрузить при помощи «Конвертация данных, редакция 2.1» контактной информации контрагента из «Управление торговлей», редакция 10.3» в «Бухгалтерия предприятия, редакция 3.0». Сложность заключается в том, что в УТ контактная информация хранится в регистре сведений, а в БП — в табличной части справочника «Контрагенты».
Предлагаю мое, достаточно простое, решение данной задачи.

Довольно часто встречается задача выгрузить при помощи «Конвертация данных, редакция 2.1» контактной информации контрагента из «Управление торговлей", редакция 10.3» в «Бухгалтерия предприятия, редакция 3.0». Сложность заключается в том, что в УТ контактная информация хранится в регистре сведений, а в БП — в табличной части справочника «Контрагенты».

Предлагаю мое, достаточно простое, решение данной задачи.

 

1. В правило конвертации объектов (ПКО) «Контрагенты» добавляем конвертацию свойств (ПКС) табличной части «КонтактнаяИнформация», причем не указываем источник и ставим галку «получать из входящих данных». Добавляем все, необходимые реквизиты табличной части.

1

 

2. Открываем ПКО «Контрагенты» и добавляем ниже следующий код в обработчик «Перед выгрузкой».

2

 

//Выгружаем контактную информацию контрагента

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

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

Запрос.УстановитьПараметр("ТекущийКонтрагент", Источник);
Выборка = Запрос.Выполнить().Выбрать();

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

Суть в том, что мы программно создаем табличную часть «Контактная информация» и подставляем ее для выгружаемого объекта в качестве входящих данных.

Следует обратить внимание, что инициализация параметра «ВходящиеДанные», и передача в него таблицы значений со всеми необходимыми колонками, обязательна для каждого объекта. В противном случае, будет возникать ошибка типа «Ошибка получения свойства подчиненного объекта из входящих данных».

10 Comments

  1. peterxx

    Метод прекрасный. У него есть только один недостаток, он мало пригоден для переноса контактной информации. Поле приемника «ЗначенияПолей», в котором фактически и содержится контактная информация в виде текста XML, и с которым работают конфигурации на БСП, таким способом не заполнить. Нужны пляски с бубном, точнее, в источнике нужно разделять КИ на элементы, а в приемнике — формировать из них строку в формате XML. Задача, кстати, не совсем тривиальная.

    Reply
  2. Nicholas

    (1) Да, согласен. Но пока нет такой задачи. В рамках текущей задачи мне было достоточно перенести «адрес в свободной форме». Если бы в УТ адреса заполнялись из КЛАДР, а в телефонах указывались «код страны» и «код города», то можно было заморочится.

    Reply
  3. A_Max

    Вариант покороче. В ПКО группы «КонтактнаяИнформация» «Перед обработкой»

    Запрос = Новый Запрос;
    Запрос.Текст = «Выбрать …….»;
    КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();
    Reply
  4. kasper076

    Запрос в ПКО не оч красиво.

    Reply
  5. Nicholas

    (4) А почему не красиво? Мне этот вариант нравится. Получается наоборот более логично. Контактная информация и сбор этой информации — все в одном месте. Если понадобиться изменить или даже удалить эту табличную часть из обмена, то не нужно искать в других местах.

    Reply
  6. kasper076

    (5) Запрос в цикле это зло. В ПВД нужно все реализовывать.

    Reply
  7. A_Max

    (6) Вынести в ПВД — конечно вообще самый правильный способ. Я предложил упрощение которое сразу станет понятно для человека и реализуемо на раз-два.

    Reply
  8. Mbisha

    (2)Пытаюсь таким же образом перенести контактную информацию Физических лиц, возникла проблема с переносом элементов справочника ВидыКонтактнойИнормации. В обеих базах они являются предопределенными. Сопоставляю их на закладке КонвертацияЗначений. При загрузке в строке ТЧ КонтактнаяИнформация поле Вид принимает значение <Объект не найден> и адрес не отображается на форме. Какой момент я упустила?

    Reply
  9. neomike

    а есть у кого-нибудь примерчик с ПВД?!

    Reply
  10. Eremkin

    Не благодари =)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *