[РЕШЕНО] Как табличную часть документа вывести в виде иерархии

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Vitaly, 10 авг 2015.

  1. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте.
    Делаю так.
    На форму добавил табличное поле - тип таблица значений. Пишу код:
    Код:
    Функция ЗаполнитьНоменклатуру()
       Запрос=Новый Запрос();
       Запрос.Текст=
       "ВЫБРАТЬ
       |   Номенклатура.Ссылка КАК НаименованиеТовара
       |ИЗ
       |   Справочник.Номенклатура КАК Номенклатура
       |
       |УПОРЯДОЧИТЬ ПО
       |   НаименованиеТовара ИЕРАРХИЯ
       |{УПОРЯДОЧИТЬ ПО
       |   НаименованиеТовара.*}";
       //Запрос.УстановитьПараметр("ЭтоГруппа",Ложь);
       ТЗ=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
       ЭлементыФормы.ТЗ.СоздатьКолонки();
       ЭлементыФормы.ТЗ.Значение=ТЗ;
    КонецФункции
    Но иерархия не выводится.
    Что не так?
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    С чего вы решили что так должна выводится иерархия?
    Для вывода иерархии необходимо сделать ИТОГИ По Ссылка ИЕРАРХИЯ.
    Vitaly нравится это.
  3. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Весь вечер просидел, но безрезультатно, не получилось.
    Код:
    "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК НаименованиеТовара
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ИТОГИ ПО
        |    НаименованиеТовара ТОЛЬКО ИЕРАРХИЯ";
        ТЗ=Запрос.Выполнить().Выгрузить();
        //ТЗ=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией) - вот так вообще пустая таблица выгружается;
        ЭлементыФормы.ТЗ.СоздатьКолонки();
        ЭлементыФормы.ТЗ.Значение=ТЗ;
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Итоги По Ссылка Иерархия + Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам).
    Vitaly нравится это.
  5. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Код:
    "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК НаименованиеТовара
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ИТОГИ ПО
        |    Номенклатура.Ссылка ИЕРАРХИЯ";
        ТЗ=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    //???
        ЭлементыФормы.ТЗ.СоздатьКолонки();
        ЭлементыФормы.ТЗ.Значение=ТЗ;
    Наверняка какой-то еще промежуточный код должен быть (я там ??? поставил)? Не выводится. Нужно как-то таблицу в цикле заполнить.
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    В данном случае будет не ТЗ, а ДЗ.
    Можно конечно сразу выгружать в него:

    ДЗ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

    но думаю, результат не устроит и придется формировать ДЗ "вручную".

    С ДЗ такой код

    ЭлементыФормы.ДЗ.Значение=ДЗ;
    ЭлементыФормы.ДЗ.СоздатьКолонки();

    если не ошибаюсь, не сработает, необходимо добавить реквизит формы с типом ДеревоЗначений, определить колонки на форме вручную .
    Vitaly нравится это.
  7. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Т.е. я на поле добавляю этот реквизит с типом ДеревоЗначений (искал, не могу найти где указать что это дерево), а затем в цикле последовательно заполнить все строчки?
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    ДЗ - это вид ТЗ, принципы работы у них схожи, но некоторые действия просто не доступны.
    В управляемых формах различия только в установленном флаге "выводить иерархию" в определенной колонке.
    В обычных формах - это отдельный тип значения, доступный для реквизиты формы, если память не изменяет.

    В первом приближении да, дерево значений формируется "вручную", нельзя данные загрузить в него - нет нужного метода.
    Vitaly нравится это.
  9. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.760
    Симпатии:
    509
    Баллы:
    204
    Так если нельзя напрямую загрузить, есть же рекурсия :)
    Vitaly нравится это.
  10. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    А это уже - домашнее задание ТС-у :)
    Vitaly нравится это.
  11. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Форма обычная. Нужно разбираться будет, не понятно пока что.
  12. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Отложил данную задачу, но так и не смог ее решить.
    Я понял что придется как-то в цикле заполнять мою таблицу формы элемента, так ка это рекурсия, а она не передается.
    Перепробовал множество вариантов с интернета - ни один не заработал.
    Есть ли у кого-нибудь пример, чтобы можно было наконец то решить данный вопрос и разобраться?
    Благодарю.
  13. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Подскажите, как в таблице значений посмотреть таблица иерархическая или нет.? Через отладчик смотрю, никаких отличий не вижу.
    Код:
    Код:
    ВЫБРАТЬ
        Номенклатура.Ссылка КАК НаименованиеТовара
    ИЗ
        Справочник.Номенклатура КАК Номенклатура
    
    УПОРЯДОЧИТЬ ПО
        НаименованиеТовара ИЕРАРХИЯ
    {УПОРЯДОЧИТЬ ПО
        НаименованиеТовара.*}
  14. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    ТЗ не имеет иерархии вообще. Иерархия есть в ДЗ.
    Отличий между чем и чем не видите?
  15. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Задачу так и не решил. Перечитал весь интернет. Не получилось.
    На данный момент на форму (обычная) добавлено табличное поле ДЗ тип начения ДеревоЗначений.
    И вручную колонки определял, и пользовался СоздатьКолонки() - не выводятся данные.
    Код:
    Запрос=Новый Запрос();
    Запрос.Текст=
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенклатура
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Ссылка В ИЕРАРХИИ(&Родитель)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура ИЕРАРХИЯ
    |{УПОРЯДОЧИТЬ ПО
    |    Номенклатура.*}";
    Запрос.УстановитьПараметр("Родитель",Справочники.Номенклатура.НайтиПоКоду("00000057484"));
    
    Если использую код
    Код:
    ТаблицаЗнач=Запрос.Выполнить().Выгрузить();ЭлементыФормы.ДЗ.Значение=ТаблицаЗнач;
    
    Колонки предопределены - не выводится ничего. Без колонок - +ЭлементыФормы.ДЗ.СоздатьКолонки(); - данные не выводятся.
    Если использую Выбрать вместо Выгрузить, то не могу понять как заполнить дерево значений. ДЗ.Добавить() - не работает, нет возможности ручного заполнения ДЗ?
  16. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    Пока вы внимательно не прочитаете С-П у вас ничего не получится. Да, ДЗ.Добавить() - не работает, такого метода нет. ДЗ заполняется немного по другому.
    Выгружать результат запроса нужно также в ДЗ, либо пользоваться выборкой с обходом по группировкам.
  17. TopicStarter Overlay
    Vitaly
    Offline

    Vitaly Опытный в 1С

    Регистрация:
    21 фев 2014
    Сообщения:
    366
    Симпатии:
    0
    Баллы:
    26
    Все получилось!!! Выгрузил напрямую через ПоГруппировкамСИерархией. Так все вывелось. Вид - как раз как мне нужен. Есть еще много что нужно решить, но думаю разберусь. Большое спасибо!

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