v7: Как скопировать иерархический справочник #196271


#0 by Куркуль-ятор
Подскажите решение пжлста. Тут много веток было по похожей проблеме но не в одной не нашёл конкретного решения. Необходимо в справочнике номенклатура сделать копию одной директории с множественной иерархией и при этом скопировать необходимо только группы с сохранением этой самой иерархии. У меня получилось просто перенести группы, теперь бы вложенность кто помог сохранить:
#1 by Diman000
Что такое ТекИмяГрупп? Похоже на строку, а должна быть ссылка на элемент справочника
#2 by Ёпрст2
А потом вот появляются постоянно вот такие сообщения: "Помогите на  избавиться от дублей!"
#3 by Куркуль-ятор
Это Идентификатор объекта формы "Поле ввода"
#4 by Diman000
Короче, вчитался окончательно. У тебя явно два раза в методе ИспользоватьРодителя используется параметр типа строка. А это должна быть ссылка на группу справочника, которая является необходимым родителем.
#5 by Куркуль-ятор
У меня объект формы "Поле ввода" имеет кнопку выбора к которой привязан тип справочник.номенклатура
#6 by Куркуль-ятор
(+5) и через поле ввода я выбираю группу родителя из которой надо копировать и в которую надо копировать
#7 by Diman000
Так, давай по порядку: здесь присваивается строка НовИмяГрупп НовГр.ИспользоватьРодителя(НовИмяГрупп); а здесь снова используется НовИмяГрупп. Или здесь это уже не строка?
#8 by Куркуль-ятор
сначала я создаю новую группу в которую буду переносить:СпрНом.Наименование=НовИмяГрупп; НовИмяГрупп;-это идентификатор поля ввода в котором уже находится выбранная группа в которую нужно перенести иерархический справочник групп. Затем я выбираю все группы из директории из которой я буду переносить иерархич.спр.групп : СпрНом.ИспользоватьРодителя(ТекИмяГрупп); (ТекИмяГрупп);-это идентификатор поля ввода в котором уже находится выбранная группа из которой я буду переносить. Потом выставляю в роли родителя созданную мною раннее группу: НовГр.ИспользоватьРодителя(НовИмяГрупп);. Считываю из выборки каждый элемент из группы "ТекИмяГрупп" и записываю его в группу "НовИмяГрупп"
#9 by Иде я
СпрНом.Наименование=НовИмяГрупп.Наименование;
#10 by Иде я
И Убери ИМЯ из названий переменных. Если Сообщить(текГруппа) выводит в виде наименования группы, это не значит что текГруппа строка.
#11 by Diman000
Все, дошло... Ща напишу чего надо делать...
#12 by Куркуль-ятор
Новая группа у меня создаётся без проблемм. С выводом Сообщения - это я временно ставил для себя потом уберу, выводится нормально. Мне бы решение как сохранить иерархию в перенесённых группах.
#13 by Diman000
#14 by Diman000
+ Проверил у себя - работает. Рекурсия, панимаш...
#15 by Куркуль-ятор
Попробывал у себя, есть ещё пара вопросов: 1)Твоё решение запустил только после удаления параметров "СпрТекГруппа,СпрНовГруппа" в имени процедуры и удаления строки:КопированиеГруппСпр(СпрНом,НовГр); , т.к. 1с говорила "Недостаточно фактических параметров" 2)Обработка копирует только одну корневую группу и всё, тоесть к примеру у меня есть справочник групп 1 директория, в ней содержиться 1.1 и 1.2 директории, то обработка копирует только директорию с наименованием 1. Как можно всю иерархию скопировать?
#16 by Diman000
Не надо удалять эти параметры! И верни назад строчку КопированиеГруппСпр(СпрНом,НовГр), ибо в ней весь смысл! Тебе просто нужно добавить еще сам вызов этой процедуры в таком виде: Где: СпрВыбТекГруппа - группа справочника откуда нужно выполнять перенос СпрВыбНовГруппа - группа справочника куда нужно выполнять перенос
#17 by Куркуль-ятор
Чёт я никак немогу разобраться :/  Я считал что из процедуры можно только передать параметры функции, а процедуру из процедуры нельзя вызвать... У меня щас получилось: 1С при синтаксическом контроле говорит что процедура КопированиеГруппСпр<<?>>(СпрВыбТекГруппа,СпрВыбНовГруппа); не обнаружена...
#18 by Diman000
"...а процедуру из процедуры нельзя вызвать...". Можно, конечно. Вызов процедурой самой себя и называется рекурсивным вызовом. А чтобы 1С не ругалась при синтакс-контроле, нужно процедуру КопированиеГруппСпр поставить перед процедурой Сформировать))))))
#19 by Ёпрст2
Есть еще Далее ...
#20 by Diman000
Ага...
#21 by Куркуль-ятор
Спасибо Diman000 за разъеснение по поводу рекурсии, обработка работает. Конечный вариант модуля обработки: Где: СпрТекГруппа - группа справочника откуда нужно выполнять перенос СпрНовГруппа - группа справочника куда нужно выполнять перенос Так как я не нашёл на форуме подробного описания по копированию групп справочников с сохранением иерархии, неплохо было бы затолкать эту обработку в базу знаний.
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям