1с скопировать группу номенклатуры

Обновлено: 07.07.2024

Как скопировать иерархический справочник?

Доброго времени суток!
Имеется иерархический справочник. Необходимо скопировать одну из его групп, со всеми вложенными элементами и уровнями.

Под семерку нашел пример:


//************************************************** ***** Процедура КопированиеГруппСпр ( СпрТекГруппа , СпрНовГруппа ) СпрНом = СоздатьОбъект ( "Справочник.Номенклатура " ) ; НовГр = СоздатьОбъект ( "Справочник.Номенклатура " ) ; СпрНом . ИспользоватьРодителя ( СпрТекГруппа ) ; СпрНом . ВыбратьЭлементы ( 1 ) ; Пока СпрНом . ПолучитьЭлемент ( 1 ) > 0 Цикл Если ( СпрНом . ЭтоГруппа ( ) = 1 ) и ( СпрНом . Уровень ( ) - 1 = СпрТекГруппа . Уровень ( ) ) Тогда Сообщить ( СпрНом ) ; НовГр . ИспользоватьРодителя ( СпрНовГруппа ) ; НовГр . НоваяГруппа ( ) ; НовГр . Наименование = СпрНом . Наименование ; НовГр . Записать ( ) ; КопированиеГруппСпр ( СпрНом , НовГр ) ; КонецЕсли ; КонецЦикла ; КонецПроцедуры //************************************************** **** Процедура Сформировать ( ) КопированиеГруппСпр ( СпрТекГруппа , СпрНовГруппа ) ; КонецПроцедуры //************************************************** **** Где:СпрТекГруппа - группа справочника откуда нужно выполнять переносСпрНовГруппа - группа справочника куда нужно выполнять перенос

Попытался переделать его под восьмерку, но пока ничего не выходит :(

Вот что получилось:


Перем СпрТекГруппа , СпрНовГруппа ; Процедура КнопкаВыполнитьНажатие ( Кнопка ) СпрТекГруппа = Справочники . Номенклатура . НайтиПоКоду ( "0 11" ) ; КопированиеГруппСпр ( СпрТекГруппа , СпрНовГруппа ) ; КонецПроцедуры Процедура КопированиеГруппСпр ( СпрТекГруппа , СпрНовГруппа ) СпрНом = Справочники . Номенклатура ; НовГр = Справочники . Номенклатура ; ; Выборка = СпрНом . Выбрать ( СпрТекГруппа ) ; Пока Выборка . Следующий ( ) Цикл //Если (Выборка.ЭтоГруппа() = 1) и (Выборка.Уровень() - 1 = СпрТекГруппа.Уровень()) Тогда Если ( Выборка . ЭтоГруппа ) Тогда Сообщить ( СпрНом ) ; НовЭл = НовГр . СоздатьГруппу ( ) ; //НовЭл.Родитель(СпрНовГрупп а); НовЭл . Наименование = Выборка . Наименование ; НовЭл . Записать ( ) ; Сообщить ( НовЭл . Код ) ; КопированиеГруппСпр ( Выборка , НовЭл ) ; КонецЕсли ; КонецЦикла ; КонецПроцедуры
Цикл проходит один раз, создается новая группа и уже на втором кругу цикла вываливает ошибку:


: Ошибка при вызове метода контекста ( Выбрать ) : Несоответствие типов ( параметр номер ' 1 ' ) Выборка = СпрНом . Выбрать ( СпрТекГруппа ) ; по причине:Несоответствие типов ( параметр номер ' 1 ' )
Да и с условием этим


Если ( Выборка . ЭтоГруппа ( ) = 1 ) и ( Выборка . Уровень ( ) - 1 = СпрТекГруппа . Уровень ( ) )
я никак не разберусь :(

Читайте также: