1С. Справочник «Номенклатура». Как перенести номенклатуру с иерархией из одной папки в другую.

Переносим иерархию групп и элементов из одной папки в другую.

Задача: В справочнике «Номенклатура» есть две группы «Неактуальная номенклатура» и «Актуальная номенклатура». Нужно перенести номенклатуру вместе с иерархией групп и элементов из группы «Нактуальная номенклатура» в группу «Актуальная номенклатура».

Разделим задачу на два этапа: сначала скопируем иерархию групп, а потом перенесём элементы. Подробно остановимся только на первом этапе, так как второй не вызывает сложностей.

Текст запроса для копирования групп:

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

Во временную таблицу ВТ_НеактуальныеГруппы мы выбираем вложенные группы из «Неактуальная номенклатура». Далее «левым соединением» выбираем группы из «Актуальная номенклатура», условие связи – равенство наименования.

При обходе выборки запроса мы будем создавать недостающие группы в папке «Актуальная номенклатура». Главная сложность в том, чтобы в выборке группы располагались с учётом иерархии. То есть, сначала должен идти родитель, потом подчинённые элементы, иначе возникнут трудности при заполнении реквизита «Родитель» для вновь создаваемых групп. Для выстраивания выборки в таком порядке, в запросе задаём упорядочивание:

|УПОРЯДОЧИТЬ ПО
|	НеактуальныеГруппы.НеактуальнаяГруппа ИЕРАРХИЯ

Осталось обработать выборку – создать группы, и потом перенести элементы номенклатуры.

Комментарии

Добавить комментарий

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