PDA

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



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

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


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

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

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


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


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


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

zay
18.01.2013, 12:54
Если структура справочников первой и второй конфигураций одинакова - это делается за 5 минут обработкой "Выгрузка и загрузка данных XML".
Взять можно с диска ИТС.

vovka135
18.01.2013, 13:02
Скопировать надо в пределах ОДНОЙ БАЗЫ :)

Есть справочник "Номенклатура". В нем куча групп с подгруппами. Вот одну из групп и надо скопировать со всем её содержимым и структурой. Оставить все как есть, за исключением кодов разумеется.

Но за идею спасибо! Сейчас попробую из базы в ее копию залить. Возможно что-то и получится.