База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как перенести группу «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ» в 1С дереве?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 дня, 22 часа назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
15 апреля 2026 в 12:10 #36426
ДеревоВыгрузки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); //Сформируем дерево выгрузки
// Перенос группы «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ»
Для каждого Строка из ДеревоВыгрузки.Строки Цикл
Если Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(«УТ000016443») Тогда // 19. АВТОТОВАРЫ
СтрокаА = Строка;
КонецЕсли;
КонецЦикла;
Для каждого Строка из ДеревоВыгрузки.Строки Цикл
Если Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(«00004044») Тогда // 05. КРЕПЕЖ
СтрокаК = Строка;
КонецЕсли;
КонецЦикла;Если СтрокаА <> Неопределено И СтрокаК <> Неопределено Тогда
НовСтрока = СтрокаА.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НовСтрока, СтрокаК);
ПеренестиСтроки(НовСтрока, СтрокаК);
ДеревоВыгрузки.Строки.Удалить(СтрокаК);
КонецЕсли; -
15 апреля 2026 в 12:10 #36427
Код, который вы привели, корректно реализует перенос узла дерева значений (группы «05. КРЕПЕЖ») в другую ветку (в папку «19. АВТОТОВАРЫ») с сохранением всех вложенных подузлов.
Разберу по шагам, что происходит и как это работает:
1. Выгрузка результата запроса в дерево значений с иерархией:
1С (Код)1ДеревоВыгрузки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);Это формирует структуру дерева, где каждая строка может содержать подчинённые строки в свойстве
.Строки.2. Поиск узлов по справочнику номенклатуры:
1С (Код)1234567891011Для каждого Строка из ДеревоВыгрузки.Строки ЦиклЕсли Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("УТ000016443") Тогда // 19. АВТОТОВАРЫСтрокаА = Строка;КонецЕсли;КонецЦикла;Для каждого Строка из ДеревоВыгрузки.Строки ЦиклЕсли Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00004044") Тогда // 05. КРЕПЕЖСтрокаК = Строка;КонецЕсли;КонецЦикла;Здесь вы проходите по верхнему уровню дерева и находите две строки: папку «19. АВТОТОВАРЫ» и группу «05. КРЕПЕЖ».
3. Перенос группы «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ»:
1С (Код)123456Если СтрокаА <> Неопределено И СтрокаК <> Неопределено ТогдаНовСтрока = СтрокаА.Строки.Добавить();ЗаполнитьЗначенияСвойств(НовСтрока, СтрокаК);ПеренестиСтроки(НовСтрока, СтрокаК);ДеревоВыгрузки.Строки.Удалить(СтрокаК);КонецЕсли;— Создаёте новую строку в дочерних элементах папки «19. АВТОТОВАРЫ».
— Копируете все реквизиты из «05. КРЕПЕЖ» в новую строку.
— Вызываете процедуруПеренестиСтроки, которая рекурсивно переносит все подчинённые строки из «05. КРЕПЕЖ» в новую строку.
— Удаляете исходную строку «05. КРЕПЕЖ» из корня дерева.—
Что важно:
— Процедура
ПеренестиСтрокидолжна быть реализована рекурсивно, чтобы скопировать все вложенные подузлы. Пример реализации:1С (Код)1234567Процедура ПеренестиСтроки(СтрокаПриемник, СтрокаИсточник)Для каждого ПодСтрока Из СтрокаИсточник.Строки ЦиклНоваяПодСтрока = СтрокаПриемник.Строки.Добавить();ЗаполнитьЗначенияСвойств(НоваяПодСтрока, ПодСтрока);ПеренестиСтроки(НоваяПодСтрока, ПодСтрока);КонецЦикла;КонецПроцедуры— Если
ПеренестиСтрокине реализована, вложенные элементы не будут перенесены.— После удаления исходной строки «05. КРЕПЕЖ» в корне дерева, она будет только в новой ветке «19. АВТОТОВАРЫ».
—
Рекомендации:
— Убедитесь, что
ПеренестиСтрокиреализована именно так, как показано выше.— Если дерево имеет несколько уровней вложенности, такой рекурсивный перенос сохранит всю структуру.
— Если нужно изменить ключи или связи в дереве (например, если есть поля
КлючСтрокииКлючСвязи), то после переноса нужно обновить эти ключи, чтобы не было конфликтов.—
Если нужно, могу помочь с полной реализацией процедуры переноса и обновления ключей в дереве значений.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.