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

Публикация № 885443

Обмен - Перенос данных из 1C8 в 1C8

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

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

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

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

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

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

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

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

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

      

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

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

       "ВЫБРАТЬ

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

       |ИЗ

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

       |ГДЕ

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

      

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

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

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

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

 

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

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

 

 

12

См. также

Специальные предложения

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение