[РЕШЕНО] Дерево номенклатуры

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Peroman, 10 янв 2017.

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    896
    Симпатии:
    14
    Баллы:
    29
    Платформа: 1С:Предприятие 8.3 (8.3.8.1652)
    Конфигурация: Управление торговлей, редакция 11.2 (11.2.3.189)

    Всем доброго времени суток и с наступившем!)

    Нужно перестроить иерархию в нумерованный список так:

    upload_2017-1-10_12-10-9.png

    Максимальная вложенность может быть 5 уровней. Весь мозг сломал как мне из дерева номенклатуры сделать нумерованный список.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.955
    Симпатии:
    522
    Баллы:
    204
    В СКД можно выводить уровень вложенности
  3. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    896
    Симпатии:
    14
    Баллы:
    29
    Да? А не подскажете как?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.955
    Симпатии:
    522
    Баллы:
    204
    Вот так:
    111.png
  5. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    896
    Симпатии:
    14
    Баллы:
    29
    Немного не то что мне нужно, да и СКД в моём случае мне не подойдёт.

    Я делаю всё через запрос:
    Код:
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ    Номенклатура.ЭтоГруппа
        |И НЕ Номенклатура.ПометкаУдаления
        | УПОРЯДОЧИТЬ ПО
        |Номенклатура.Ссылка ИЕРАРХИЯ
        |АВТОУПОРЯДОЧИВАНИЕ";
    
    Потом:
    Код:
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Потом нумерую верхний уровень и закидываю результат в ТЗ
    Код:
        Пока Выборка.Следующий() Цикл
            Если Выборка.Уровень() = 0 Тогда
                НомерУровня = НомерУровня+1;
                НоваяСтрока = ТЗ.Добавить();
                НоваяСтрока.НомерУровня = НомерУровня;
                НоваяСтрока.НоменклатурнаяГруппа = Выборка.Ссылка;
            КонецЕсли;
    
    и на этом всё))). Ну т.е. дальше я пробовал делать так:
    Код:
            Если Выборка.Уровень()=1 Тогда
                НомерПапки = НомерПапки+1;
                НоваяСтрока = Тз.Добавить();
                НужнаяСтрока = ТЗ.Найти(Выборка.Ссылка.Родитель,"НоменклатурнаяГруппа");
                НомерУровняРодителя = НужнаяСтрока.НомерУровня;
                НоваяСтрока.НомерУровня = Строка(НомерУровняРодителя)+"."+Строка(НомерПапки);
                НоваяСтрока.НоменклатурнаяГруппа = Выборка.Ссылка;
    
    В итоге получается не совсем то:

    upload_2017-1-10_16-58-6.png

    Мне нужно чтобы нумерация обнулялась как только я начал работать с другой папкой.

    Вообще я почему то думал что если я сделаю так:
    Код:
            Для i=0 По Выборка.Уровень() Цикл
               
                Пока Выборка.Следующий() Цикл
                   
                КонецЦикла;       
               
            КонецЦикла;
    
    То мне это поможет, но не получилось не смотря на то что я вроде бы пробегаюсь в цикле по уровням. Цикл Пока Выборка.Следущий() всё равно пробегается по всему результату запроса.
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.955
    Симпатии:
    522
    Баллы:
    204
    Вы посмотрите как строится обработка результата запроса, если есть группировки, там как минимум два цикла - один для группировки, второй для детальных записей.
  7. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    896
    Симпатии:
    14
    Баллы:
    29
    Не совсем понимаю о чём вы? Дело в том что Выборка проходит всё в хаотичном порядке. Т.е. элемент выборки может иметь Уровень 1, а следующий 3, потом следующий 5, а потом опять 1. Мне же надо как-то организовать обход таким образом: сначала весь первый уровень, пронумеровываю его, потом новый цикл, для каждой папки первого уровня, получаю внутри них подчинёные папки, пронумеровываю их так до самого нижнего уровня. Так сказать некая рекурсия получается.
  8. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    7.095
    Симпатии:
    408
    Баллы:
    104
  9. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    896
    Симпатии:
    14
    Баллы:
    29
    Да уже сделал. Просто совсем забыл про рекурсию.
    праздники видно сказались)))
    alexburn нравится это.

Поделиться этой страницей