Копирование группы справочника с иерархией и элементами в другую группу
Задачи пользователя - Подбор и обработка объектов
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Как-то возникала необходимость, решил поделиться.
Естественно нужно поменять тип справочника в реквизитах обработки и в запросе на нужный вам.
Например, если вы хотите использовать эту обработку для справочника "Номенклатура", то вам надо зайти в реквизиты обработки и изменить тип реквизита "Откуда" и "Куда" на "СправочникСсылка.Номенклатура" и далее в модуле формы обработки в тексте запроса заменить "БизнесПроекты" на "Номенклатура". Т.е. вместо текста:
Запрос = Новый Запрос("ВЫБРАТЬ
| БизнесПроекты.Ссылка
|ИЗ
| Справочник.БизнесПроекты КАК БизнесПроекты
|ГДЕ
| БизнесПроекты.Ссылка В ИЕРАРХИИ(&Группа)"
);
у вас должно получиться:
Запрос = Новый Запрос("ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)"
);
Вобщем, чтобы было нагляднее выкладываю весь код модуля формы:
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос("ВЫБРАТЬ
| БизнесПроекты.Ссылка
|ИЗ
| Справочник.БизнесПроекты КАК БизнесПроекты
|ГДЕ
| БизнесПроекты.Ссылка В ИЕРАРХИИ(&Группа)"
);
Запрос.УстановитьПараметр("Группа", Откуда);
Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
СЗ = Новый СписокЗначений; //Будем запихивать туда родителей
Пока Результат.Следующий() Цикл
ТекСпр = Результат.Ссылка.ПолучитьОбъект();
Если ТекСпр.Родитель = Откуда.Родитель Тогда //Копируем корень
Если НЕ ТекСпр.ЭтоГруппа Тогда
Предупреждение("Для элементов надо допилить, работает только для групп.",,"Аларм!");
Возврат;
КонецЕсли;
элементСправочника = ТекСпр.Скопировать();
элементСправочника.Родитель = Куда;
элементСправочника.Записать();
СЗ.Добавить(элементСправочника.Ссылка); //Запихали корневого родителя
Иначе //Копируем все остальное
элементСправочника = ТекСпр.Скопировать();
элементСправочника.Родитель = СЗ[СЗ.Количество()-1].Значение;
элементСправочника.Записать();
Если ТекСпр.ЭтоГруппа Тогда
СЗ.Добавить(элементСправочника.Ссылка); //А здесь запихиваем всех остальных родителей
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Вступайте в нашу телеграмм-группу Инфостарт