Конвертация 2.0. Перенос элементов и групп справочника, имеющих различный вид иерархии (пример).



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

Рассмотрим перенос справочника Подразделения. В базе Источнике справочник имеет иерархию элементов, а в базе Приемнике иерархию групп и элементов.

Для этого, в настройках правил обмена создадим новое правило конвертации свойств, где в Объект — приемник и Объект — источник укажем интересующие нас справочники в базе Приемнике и Базе Источнике. Затем согласимся на автоматическое создание правил конвертации свойств и правил выгрузки данных.

Если перенести данные так как есть, то в базе Приемнике на верхнем уровне элементы, которые указаны в качестве родителя, будут показаны, но на уровень вниз, переход по этим элементам будет невозможен. Для доступа ко всем элементам потребуется выбрать режим просмотра: Список.

 Решение 1.  Если имеется один уровень подчинения, тогда в Правиле конвертации объекта в Правиле конвертации свойств Это Группа  в обработчике Перед Выгрузкой,  пишем следующий код :

Значение = Не ЗначениеЗаполнено(Источник.Родитель);

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

Решение 2.  Универсальное решение. В том же обработчике пишем следующий код:

      

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

|      Подразделения.Наименование

|ИЗ

|      Справочник.Подразделения КАК Подразделения

|ГДЕ

|      Подразделения.Родитель = &Родитель";



Запрос.УстановитьПараметр("Родитель", Источник);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Значение = ВыборкаДетальныеЗаписи.Следующий();

 

Здесь мы проверяем имеются ли в данном справочнике объекты, у которых в качестве родителя указана ссылка на текущий объект. Если такие элементы есть, значит текущий объект — группа, если нет — элемент.

Если все же необходимо перенести все элементы, именно как элементы, и сохранить возможность просмотра, в виде иерархии или дерева, то нужно просто отключить обработку правила конвертации свойства Родитель и Это Группа.

 

 

Leave a Comment

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