vovka135
18.01.2013, 10:34
Доброго времени суток!
Имеется иерархический справочник. Необходимо скопировать одну из его групп, со всеми вложенными элементами и уровнями.
Под семерку нашел пример:
//************************************************** *****Процедура КопированиеГруппСпр(СпрТе� �Группа,СпрНовГруппа) СпрНом = СоздатьОбъект("Справочник.Номенклатура"); НовГр = СоздатьОбъект("Справочник.Номенклатура"); СпрНом.ИспользоватьРодите� �я(СпрТекГруппа); СпрНом.ВыбратьЭлементы(1); Пока СпрНом.ПолучитьЭлемент(1)>0 Цикл Если (СпрНом.ЭтоГруппа() = 1) и (СпрНом.Уровень() - 1 = СпрТекГруппа.Уровень()) Тогда Сообщить(СпрНом); НовГр.ИспользоватьРодител� �(СпрНовГруппа); НовГр.НоваяГруппа(); НовГр.Наименование = СпрНом.Наименование; НовГр.Записать(); КопированиеГруппСпр(СпрНо� �,НовГр); КонецЕсли; КонецЦикла;КонецПроцедуры//************************************************** ****Процедура Сформировать() КопированиеГруппСпр(СпрТе� �Группа,СпрНовГруппа);Конец Процедуры//************************************************** ****Где:СпрТекГруппа - группа справочника откуда нужно выполнять переносСпрНовГруппа - группа справочника куда нужно выполнять перенос
Попытался переделать его под восьмерку, но пока ничего не выходит :(
Вот что получилось:
Перем СпрТекГруппа,СпрНовГруппа; Процедура КнопкаВыполнитьНажатие(Кн� �пка)СпрТекГруппа = Справочники.Номенклатура.Н айтиПоКоду("0 11");КопированиеГруппСпр(СпрТ� �кГруппа,СпрНовГруппа);Коне цПроцедурыПроцедура КопированиеГруппСпр(СпрТе� �Группа,СпрНовГруппа)СпрНо� � = Справочники.Номенклатура;Н овГр = Справочники.Номенклатура;;� �ыборка = СпрНом.Выбрать(СпрТекГрупп а);Пока Выборка.Следующий() Цикл //Если (Выборка.ЭтоГруппа() = 1) и (Выборка.Уровень() - 1 = СпрТекГруппа.Уровень()) Тогда Если (Выборка.ЭтоГруппа) Тогда Сообщить(СпрНом); НовЭл = НовГр.СоздатьГруппу(); //НовЭл.Родитель(СпрНовГрупп а); НовЭл.Наименование = Выборка.Наименование; НовЭл.Записать(); Сообщить(НовЭл.Код); КопированиеГруппСпр(Выбор� �а,НовЭл); КонецЕсли; КонецЦикла;КонецПроцедуры
Цикл проходит один раз, создается новая группа и уже на втором кругу цикла вываливает ошибку:
{Форма.Форма(12)}: Ошибка при вызове метода контекста (Выбрать): Несоответствие типов (параметр номер '1')Выборка = СпрНом.Выбрать(СпрТекГрупп а);по причине:Несоответствие типов (параметр номер '1')
Да и с условием этим
Если (Выборка.ЭтоГруппа() = 1) и (Выборка.Уровень() - 1 = СпрТекГруппа.Уровень())
я никак не разберусь :(
Имеется иерархический справочник. Необходимо скопировать одну из его групп, со всеми вложенными элементами и уровнями.
Под семерку нашел пример:
//************************************************** *****Процедура КопированиеГруппСпр(СпрТе� �Группа,СпрНовГруппа) СпрНом = СоздатьОбъект("Справочник.Номенклатура"); НовГр = СоздатьОбъект("Справочник.Номенклатура"); СпрНом.ИспользоватьРодите� �я(СпрТекГруппа); СпрНом.ВыбратьЭлементы(1); Пока СпрНом.ПолучитьЭлемент(1)>0 Цикл Если (СпрНом.ЭтоГруппа() = 1) и (СпрНом.Уровень() - 1 = СпрТекГруппа.Уровень()) Тогда Сообщить(СпрНом); НовГр.ИспользоватьРодител� �(СпрНовГруппа); НовГр.НоваяГруппа(); НовГр.Наименование = СпрНом.Наименование; НовГр.Записать(); КопированиеГруппСпр(СпрНо� �,НовГр); КонецЕсли; КонецЦикла;КонецПроцедуры//************************************************** ****Процедура Сформировать() КопированиеГруппСпр(СпрТе� �Группа,СпрНовГруппа);Конец Процедуры//************************************************** ****Где:СпрТекГруппа - группа справочника откуда нужно выполнять переносСпрНовГруппа - группа справочника куда нужно выполнять перенос
Попытался переделать его под восьмерку, но пока ничего не выходит :(
Вот что получилось:
Перем СпрТекГруппа,СпрНовГруппа; Процедура КнопкаВыполнитьНажатие(Кн� �пка)СпрТекГруппа = Справочники.Номенклатура.Н айтиПоКоду("0 11");КопированиеГруппСпр(СпрТ� �кГруппа,СпрНовГруппа);Коне цПроцедурыПроцедура КопированиеГруппСпр(СпрТе� �Группа,СпрНовГруппа)СпрНо� � = Справочники.Номенклатура;Н овГр = Справочники.Номенклатура;;� �ыборка = СпрНом.Выбрать(СпрТекГрупп а);Пока Выборка.Следующий() Цикл //Если (Выборка.ЭтоГруппа() = 1) и (Выборка.Уровень() - 1 = СпрТекГруппа.Уровень()) Тогда Если (Выборка.ЭтоГруппа) Тогда Сообщить(СпрНом); НовЭл = НовГр.СоздатьГруппу(); //НовЭл.Родитель(СпрНовГрупп а); НовЭл.Наименование = Выборка.Наименование; НовЭл.Записать(); Сообщить(НовЭл.Код); КопированиеГруппСпр(Выбор� �а,НовЭл); КонецЕсли; КонецЦикла;КонецПроцедуры
Цикл проходит один раз, создается новая группа и уже на втором кругу цикла вываливает ошибку:
{Форма.Форма(12)}: Ошибка при вызове метода контекста (Выбрать): Несоответствие типов (параметр номер '1')Выборка = СпрНом.Выбрать(СпрТекГрупп а);по причине:Несоответствие типов (параметр номер '1')
Да и с условием этим
Если (Выборка.ЭтоГруппа() = 1) и (Выборка.Уровень() - 1 = СпрТекГруппа.Уровень())
я никак не разберусь :(