Как перенести группу «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ» в 1С дереве?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как перенести группу «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ» в 1С дереве?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #36426
      Фото аватараOdineski
      Участник

        ДеревоВыгрузки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); //Сформируем дерево выгрузки
        // Перенос группы «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ»
        Для каждого Строка из ДеревоВыгрузки.Строки Цикл
        Если Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(«УТ000016443») Тогда // 19. АВТОТОВАРЫ
        СтрокаА = Строка;
        КонецЕсли;
        КонецЦикла;
        Для каждого Строка из ДеревоВыгрузки.Строки Цикл
        Если Строка.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(«00004044») Тогда // 05. КРЕПЕЖ
        СтрокаК = Строка;
        КонецЕсли;
        КонецЦикла;

        Если СтрокаА <> Неопределено И СтрокаК <> Неопределено Тогда
        НовСтрока = СтрокаА.Строки.Добавить();
        ЗаполнитьЗначенияСвойств(НовСтрока, СтрокаК);
        ПеренестиСтроки(НовСтрока, СтрокаК);
        ДеревоВыгрузки.Строки.Удалить(СтрокаК);
        КонецЕсли;

      • #36427
        bot_avaOdin — Одинэсник
        Участник

          Код, который вы привели, корректно реализует перенос узла дерева значений (группы «05. КРЕПЕЖ») в другую ветку (в папку «19. АВТОТОВАРЫ») с сохранением всех вложенных подузлов.

          Разберу по шагам, что происходит и как это работает:

          1. Выгрузка результата запроса в дерево значений с иерархией:

          Это формирует структуру дерева, где каждая строка может содержать подчинённые строки в свойстве .Строки.

          2. Поиск узлов по справочнику номенклатуры:

          Здесь вы проходите по верхнему уровню дерева и находите две строки: папку «19. АВТОТОВАРЫ» и группу «05. КРЕПЕЖ».

          3. Перенос группы «05. КРЕПЕЖ» в папку «19. АВТОТОВАРЫ»:

          — Создаёте новую строку в дочерних элементах папки «19. АВТОТОВАРЫ».
          — Копируете все реквизиты из «05. КРЕПЕЖ» в новую строку.
          — Вызываете процедуру ПеренестиСтроки, которая рекурсивно переносит все подчинённые строки из «05. КРЕПЕЖ» в новую строку.
          — Удаляете исходную строку «05. КРЕПЕЖ» из корня дерева.

          Что важно:

          — Процедура ПеренестиСтроки должна быть реализована рекурсивно, чтобы скопировать все вложенные подузлы. Пример реализации:

          — Если ПеренестиСтроки не реализована, вложенные элементы не будут перенесены.

          — После удаления исходной строки «05. КРЕПЕЖ» в корне дерева, она будет только в новой ветке «19. АВТОТОВАРЫ».

          Рекомендации:

          — Убедитесь, что ПеренестиСтроки реализована именно так, как показано выше.

          — Если дерево имеет несколько уровней вложенности, такой рекурсивный перенос сохранит всю структуру.

          — Если нужно изменить ключи или связи в дереве (например, если есть поля КлючСтроки и КлючСвязи), то после переноса нужно обновить эти ключи, чтобы не было конфликтов.

          Если нужно, могу помочь с полной реализацией процедуры переноса и обновления ключей в дереве значений.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С