Есть ли способ с минимальными затратами перенести очень много элементов
справочника из одной папки в другую?
Да, вы правы - вручную (CTRL+F5, Enter, CTRL+F5, Enter, CTRL+F5, Enter...)
перемещать элементы из одной папки в другую можно только когда их единицы,
если же их число достигает хотя бы нескольких десятков, то эта операция
становится долгой и мучительной.
Поэтому будем думать...
Мне знакомо два способа выполнения этой операции:
1-й cпособ. Классический.
Пишем обработку которая меняет родителя у наших элементов.
Спр = СоздатьОбъект("Справочник.ХХХХХХ");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 цикл
Если Спр.Родитель = СтараяПапка тогда
Спр.Родитель = НоваяПапка;
Спр.Записать();
КонецЕсли;
КонецЦикла;
2-й способ. Недокументированный.
Все справочники в нашей базе хранятся в виде таблиц с именами sc*.dbf. Если
открыть такую табличку любым вьювером, то мы увидим, что кроме полей
описанных в конфигураторе, там есть еще служебные поля. Одно из таких полей
называется "ParentID" и в нем храниться ID родителя.
Т.е. наша задача сводится к тому чтобы отобрать элементы у которых значение
ParentId равно ID старого родителя и присвоить ему значение ID нового
родителя. Для поиска воспользуемся полями CODE и DESCR. Все. Запрос для
выполнения этой операции в Access выглядит так:
UPDATE SCXXX SET SCXXX.PARENTID = NewParent
WHERE (((SCXXX.PARENTID)=OldParent));
Да и работает этот способ намного быстрее.