Переносим иерархию групп и элементов из одной папки в другую.
Задача: В справочнике «Номенклатура» есть две группы «Неактуальная номенклатура» и «Актуальная номенклатура». Нужно перенести номенклатуру вместе с иерархией групп и элементов из группы «Нактуальная номенклатура» в группу «Актуальная номенклатура».
Разделим задачу на два этапа: сначала скопируем иерархию групп, а потом перенесём элементы. Подробно остановимся только на первом этапе, так как второй не вызывает сложностей.
Текст запроса для копирования групп:
Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка КАК НеактуальнаяГруппа, | Номенклатура.Наименование КАК НаименованиеНеактуальнойГруппы |ПОМЕСТИТЬ ВТ_НеактуальныеГруппы |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНеактуальнаяНоменклатура) | И Номенклатура.ЭтоГруппа = ИСТИНА | |СГРУППИРОВАТЬ ПО | Номенклатура.Ссылка, | Номенклатура.Наименование | |ИНДЕКСИРОВАТЬ ПО | НаименованиеНеактуальнойГруппы |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НеактуальныеГруппы.НеактуальнаяГруппа, | НеактуальныеГруппы.НаименованиеНеактуальнойГруппы КАК НаименованиеНеактуальнойГруппы, | НеактуальныеГруппы.НеактуальнаяГруппа.Родитель КАК РодительНеактуальнойГруппы, | НеактуальныеГруппы.НеактуальнаяГруппа.Родитель.Наименование КАК НаименованиеРодителяНеактуальнойГруппы, | Номенклатура.Ссылка КАК АктуальнаяГруппа |ИЗ | ВТ_НеактуальныеГруппы КАК НеактуальныеГруппы | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура | ПО НеактуальныеГруппы.НаименованиеНеактуальнойГруппы = Номенклатура.Наименование | И (Номенклатура.Ссылка В ИЕРАРХИИ (&ГруппаАктуальнаяНоменклатура)) | И Номенклатура.Ссылка.ЭтоГруппа = Истина | |СГРУППИРОВАТЬ ПО | НеактуальныеГруппы.НеактуальнаяГруппа, | НеактуальныеГруппы.НаименованиеНеактуальнойГруппы, | НеактуальныеГруппы.НеактуальнаяГруппа.Родитель, | Номенклатура.Ссылка | |УПОРЯДОЧИТЬ ПО | НеактуальныеГруппы.НеактуальнаяГруппа ИЕРАРХИЯ, | НеактуальныеГруппы.НаименованиеНеактуальнойГруппы"; Запрос.УстановитьПараметр("ГруппаНеактуальнаяНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Неактуальная номенклатура")); Запрос.УстановитьПараметр("ГруппаАктуальнаяНоменклатура", Справочники.Номенклатура.НайтиПоНаименованию("Актуальная номенклатура")); Результат = Запрос.Выполнить();
Во временную таблицу ВТ_НеактуальныеГруппы мы выбираем вложенные группы из «Неактуальная номенклатура». Далее «левым соединением» выбираем группы из «Актуальная номенклатура», условие связи – равенство наименования.
При обходе выборки запроса мы будем создавать недостающие группы в папке «Актуальная номенклатура». Главная сложность в том, чтобы в выборке группы располагались с учётом иерархии. То есть, сначала должен идти родитель, потом подчинённые элементы, иначе возникнут трудности при заполнении реквизита «Родитель» для вновь создаваемых групп. Для выстраивания выборки в таком порядке, в запросе задаём упорядочивание:
|УПОРЯДОЧИТЬ ПО | НеактуальныеГруппы.НеактуальнаяГруппа ИЕРАРХИЯ
Осталось обработать выборку – создать группы, и потом перенести элементы номенклатуры.
Добавить комментарий