Речь в статье пойдет о том, как можно создать правила обмена в конфигурации «Конвертация данных» для переноса данных из подчиненного справочника (в 7.7) в табличную часть справочника (8.х).
Итак, в 7.7 есть справочник _ПотенцКонтрагенты, которому подчинен справочник _СпециализацииПотенц. У справочника _СпециализацииПотенц есть реквизит Специализация (тип спр. _Специализации).
В 8.х есть справочник _ПотенциальныеКлиенты с табличной частью Специализации. У этой табличной части один реквизит Специализация (тип спр. Специализации).
Нужно перенести данные из подчиненного справочника _СпециализацииПотенц в табличную часть справочника _ПотенциальныеКлиенты.
Первое, что нужно сделать — это сгенерировать правила конвертации объектов (ПКО) для справочников _ПотенциальныеКлиенты и _Специализации.
В правилах конвертации свойств(ПКС) для этих ПКО выставляем соответствия для реквизитов «код», «наименование» и «пометка удаления». Также отмечаем, что поиск объектов будет вестись по реквизиту «код».
Теперь переходим к описанию алгоритма получения данных из подчиненного справочника _СпециализацииПотенц и их загрузку в табличную часть справочника _ПотенциальныеКлиенты.
Для этого для справочника _ПотенцКонтрагенты вручную создаем правило конвертации группы свойст(ПКГС) «Специализации». Источник оставляем пустым. Ставим галку «Получать из входящих свойств». Это и будет табличная часть.
В обработчике «Перед обработкой» для этого ПКГС пишем алгорим выгрузки данных из подчиненного справочника:
СпециализацииКлиента = СоздатьОбъект(«Справочник._СпециализацииПотенц»);
СпециализацииКлиента.ИспользоватьВладельца(Источник);
ТЗСпециализации = СоздатьОбъект(«ТаблицаЗначений»);
ТЗСпециализации.НоваяКолонка(«Специализация»);// имена колонок должны совпадать с именами табличной части справочника, в который загружаем данные
// Источник — это элемент справочника _ПотенцКонтрагенты который выгружается из 7.7
Сообщить(«Выгружается клиент: «+Источник);
СпециализацииКлиента.ВыбратьЭлементы();
Пока СпециализацииКлиента.ПолучитьЭлемент() = 1 Цикл
ТЗСпециализации.НоваяСтрока();
ТЗСпециализации.Специализация = СпециализацииКлиента.Специализация;
Сообщить(«Специализация:»+СпециализацииКлиента.Специализация.Наименование);
КонецЦикла;
//Параметр КоллекцияОбъектов — предназначен для программного определения состава выгружаемой коллекции.
КоллекцияОбъектов = ТЗСпециализации;
Далее, в ПКГС «Специализации» нужно создать ПКС «Специализация»(оно соответствует реквизиту табличной части «Специализация»). Причем, источник нужно оставить пустым, а реквизите «Правило» выбрать правило «Специализации»(чтобы система понимала, по какому правилу конвертировать объекты из параметра КоллекцияОбъектов).
«Получать из входящих свойств» лишнее, так как будущая табличная часть объекта как раз формируется из ТЗ КоллекцияОбъектов. У меня всё и без этого флажка переносится.
(1) Поручик, спасибо, буду знать
Спасибо за статью, у меня сейчас есть похожая задача, но немного сложнее. Была бы очень благодарна за подсказку как это сделать. В 7.7 есть несколько справочников: Акции, НоменклатураАкций, ЦеныАкции, все они связаны по владельцу (ссылка на акции) в 8.2 есть один справочник «Акции» с табличными частями НоменклатураАкции и ЦеныАкции. А шапка справочника должна заполняться из справочника Акции из 7.7. То есть получается из 3 справочников нужно сделать 1. Не могли бы Вы подсказать как это сделать?
А чем сложнее? 🙂 Один в один, как в статье. Только в статье для одной табличной части сделано, а Вам для трен нужно.
В том, что это табличная часть не у одного справочника. Это как если бы в Вашем примере в 7.7 в справочнике _ПотенцКонтрагенты были бы еще реквизиты которые необходимо было бы перенести в _ПотенциальныеКлиенты в 8.2. Я так понимаю, что необходимо создавать еще одно ПКО: _ПотенциальныеКлиенты<—>_ПотенциальныеКлиенты, но в этом случае будет создано 2 элемента, на основании справочника _ПотенциальныеКлиенты и _СпециализацииПотенц. А как дать понять системе, что элемент в 8.2 один и тот же?
У Вас в 7.7 справочник Акции это владелец справочников НоменклатураАкций и ЦеныАкции?
А в 8.2 справочник Акции и у него подчиненные части НоменклатураАкций и ЦеныАкции? Я правильно понял?
Я разобралась. Спасибо! )