Конвертация 2.0. Перенос независимого справочника в подчиненный (пример).

26.08.18

Интеграция - Обмен между базами 1C

Пример переноса независимого справочника в подчиненный с помощью Конвертации 2.0.

Пример. Необходимо Конвертировать справочник Контрагенты, у которого контактное лицо является ссылкой на независимый справочник КонтактныеЛица, в одноименный справочник имеющий в подчинении справочник КонтактныеЛица. То есть, в Источнике контактное лицо является ссылкой на независимый справочник, а в Приемнике оно является ссылкой на подчиненный справочник. В источнике ссылка на справочник находится в реквизите Контактные лица, а в приемнике в реквизите Основное контактное лицо. Таким образом при переносе справочника Контрагенты нам нужно будет так же и перенести справочник КонтактныеЛица, который из независимого становится подчиненным.

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

ИсходящиеДанные = Новый Структура;

ИсходящиеДанные.Вставить("Владелец",Источник);

Где Источник является ссылкой на контрагента.

Стоит заметить, что если  Ключ структуры будет совпадать с Наименованием ПКС Приемника в ПКО куда передаются данные, то для переноса значения будет достаточно поставить флаг  Получить из входящих данных.

Если сейчас произвести перенос данных, то на первый взгляд данные справочника Контрагенты перенесутся корректно.

 

И если контактное лицо не будет повторятся для нескольких элементов справочника, то перенос будет верным. Но, на практике, такая ситуация практически невозможна. Если мы посмотрим контагентов с однаковым контактным лицом, то контактное лицо будет указано верно, но если перейдем по ссылке в справочник КонтактныеЛица, то увидим, что контактное лицо есть лишь для одного из контрагентов.

 

Поэтому получается, что в реквизит Основное контактное лицо передается ссылка на «чужой» элемент. А элемент с нужным владельцем попросту не создается.

Почему так происходит?

Первая причина – система при выгрузке запоминает объекты по ключу выгружаемых данных (по умолчанию - ссылка) и при появлении следующего объекта с таким же ключом, она не создает еще один объект с этим ключом, пускай у него даже отличаются реквизиты, а отсылает к созданному. В нашем примере это выглядит следующим образом:

  1. Создается объект Контрагент, у него в правиле конвертации свойств стоит ссылка на правило конвертации объекта КонтактныеЛица, по нему создается контактное лицо, согласно правилу конвертации, с реквизитами Ссылка (ключ выгружаемых данных), Наименование, Код и Владелец (Контрагент который вызвал ПКО).
  2. Создается следующий объект Контрагент, он так же ссылается на КонтактныеЛица, и если контактное лицо уже встречалась при выгрузке ранее, то, так как ссылка (ключ выгружаемых данных) у этих элементов одинаковая – объект не выгружается, а ссылается на первый созданный объект. То есть, в этом случае, текущий Контрагент имеет ссылку на объект, у которого в качестве Владельца будет указан первый выгруженный Контрагент.

По умолчанию система считает, что в базе в пределах одной таблицы не может быть элементов с одинаковой ссылкой, исходя из этого, при конвертации с стандартными настройками, если правила выгрузки обращаются к элементам с одинаковым ключом выгрузки данных (по умолчанию – ссылка), то система, считает, что обращение идет к одному и тому же объекту и выгружать его дополнительно не нужно, а нужно лишь сослаться на элемент, который уже выгружен.

Отключить возможность запоминания объекта можно, если в Правиле конвертации объектов поставить флаг Не запоминать выгруженные объекты. В нашем случае это будет означать, что для каждого Контрагента будет выгружен контакт в независимости от того повторяется он или нет.

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

Вторая причина – система, в настройках по умолчанию, ищет объект Приемника по внутреннему идентификатору, то есть GUID. Если уникальный идентификатор найден, то перезаписываются данные переданные из конвертации, если элемента с таким идентификатором нет, то создается новый объект с уникальным идентификатором из Источника. То есть, хотя мы и получили для каждого контрагента контактное лицо, каждый последующий выгруженный объект с совпадающим уникальным идентификатором перезаписывает предыдущий. Отличие заключается в следующем, в первом случае для каждого совпадения контактных лиц у контрагентов выгружался один объект, во втором при совпадениях выгружаются все объекты. Получается данных передано больше, а результат все равно аналогичен предыдущему.

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

Правила конвертации объектов и Правила конвертации свойств у нас уже созданы, а так же в контактном лице получен владелец. Проверим настройки. Зайдем в Правило конвертации объектов Контактные лица, в вкладке Настройки проверим отсутствие флагов у Искать объект приемника по внутреннему идентификатору объекта источника и  Не запоминать выгруженные объекты.

В этом же правиле конвертации в обработчике Перед выгрузкой напишем код для создания ключа:

КлючВыгружаемыхДанных = ЗначениеВСтрокуВнутр(Источник)+ЗначениеВСтрокуВнутр(ВходящиеДанные.Владелец);

 

Где Источник – ссылка на объект справочника КонтактныеЛица , а ВходящиеДанные.Владелец ссылка владельца, то есть ссылка на объект справочника Контрагенты.

Далее установим свойства поиска, можно как мы и говорили ранее установить по свойству Наименование (вместо Наименования или в дополнение можно выбрать Код) и Владелец.

Теперь можно делать обмен данными. И посмотрим на результат.

Конвертация прошла успешно.

Конвертация справочники перенос данных обмен.

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

45650 36520 руб.

04.08.2015    159676    363    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134930    722    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68414    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34168    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46288    196    64    

158

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231395    124    327    

296

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9207    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20244    132    38    

90
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. wowik 885 15.08.18 13:21 Сейчас в теме
если есть возможность, прикрепите к статье правила.
4. Lyubogradov.P 54 15.08.18 18:18 Сейчас в теме
Правила обмена для примера
Прикрепленные файлы:
ПравилаОбменаДанными.xml
2. dmitrit 22 15.08.18 15:35 Сейчас в теме
Если знать по какому принципу определять "Владельца" в приемнике то все довольно просто: нужно создать ПКО СпрИсточник - СпрПриемник
в котором ПКС "Владелец" будет определяться в источнике по заданному алгоритму. Соответственно предварительно надо создать ПКО для передачи объекта
"Владелец".
Еще вариант - это задавать Владельца на этапе загрузки. Например в обработчике "После загрузки"
[ Объект.Владелец = ФункцияПолученияВлдельца() ]
Lyubogradov.P; +1 Ответить
3. dmitrit 22 15.08.18 15:42 Сейчас в теме
В моем случае я сделал так: см вложенный файл
Прикрепленные файлы:
_Doc1.doc
5. tusv 210 24.08.18 15:40 Сейчас в теме
Ну если выгружаем из Бухгалтерии 3.0, то сопоставляем свойства источник и применика: ОбъектВладелец - Владелец. ПКО пустое
В ПКС пишем
Если ТипЗнч(Источник.ОбъектВладелец) = Тип("СправочникСсылка.Организации") Тогда
   ИмяПКО="Организации";
ИначеЕсли ТипЗнч(Источник.ОбъектВладелец) = Тип("СправочникСсылка.Контрагенты") Тогда
   ИмяПКО="Контрагенты";
///Бла бла бла
КонецЕсли;
6. burgomister 59 25.01.19 06:35 Сейчас в теме
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1577)}: Ошибка в обработчике события ПередВыгрузкойОбъекта
ПКО = КонтактныеЛица (Справочник: Контактные лица)
Объект = Иванов Николай Иванович, Генеральный директор (Контактное лицо)
Обработчик = ПередВыгрузкойОбъекта
ОписаниеОшибки = Значение не является значением объектного типа (Владелец)
ПозицияМодуля = (1)
КодСообщения = 41
7. vde69 925 14.12.20 10:24 Сейчас в теме
КлючВыгружаемыхДанных = ЗначениеВСтрокуВнутр(Источник)+ЗначениеВСтрокуВнутр(ВходящиеДанные.Владелец);


это будет криво как по размеру так и не рассчитано на то что источником может быть не ссылка, надо так

КлючВыгружаемыхДанных = СокрЛП(Источник.Ссылка.УникальныйИдентификатор())+"/"+
СокрЛП(ВходящиеДанные.Владелец.УникальныйИдентификатор());


кроме того такую строку можно распарсить и прикрутить нормальный поиск по регистру "СоответствиеОбъектовИнформБаз" а не парится с не надежными ключами в виде наименования и т.д.
Оставьте свое сообщение