Версия для печати темы (https://pro1c.org.ua/index.php?s=dd59d1eb5be1ccb73adcbb09165b5801&showtopic=37424)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Отчет обработка иерархического справочника с уровнями и спойлерами (+)

Автор: Constantus 25.05.17, 8:06

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Делаю отчет в Обработке (1 часть), а именно обход справочника "Контрагенты" по иерархии:

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


Отчет выводится в форме обработки в ПолеТабличногоДокумента. Сейчас иерархию добился только путем добавления пробелов.
Как можно добиться вывода отчета по иерархии путем появления спойлеров, т.е. как в отчете на СКД по уровням с (+) и (-)

Автор: Vidocq05 25.05.17, 13:11

Constantus @ Сегодня, 9:06 * ,

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

Автор: Constantus 25.05.17, 13:38

Vidocq05 @ Сегодня, 16:11 * ,

Благодарю. Вроде это оно...

Немного не понял:

Область.Параметры.Заполнить(ВыборкаСсылка);


"Заполнить" выполняет заполнение, если наименование полей в запросе совпадает с параметрами в Макете?

Отчет получился, но почему-то дублируется в детализации наименование группы:

Группа01
____КК05
____КК06
____Группа01
____КК01
____КК02

И наименования идут не по порядку по возрастанию...

        |УПОРЯДОЧИТЬ ПО
        |    Ссылка


Автор: Vidocq05 25.05.17, 14:25

Constantus @ Сегодня, 14:38 * ,

Цитата(Constantus @ 25.05.17, 14:38) *
"Заполнить" выполняет заполнение, если наименование полей в запросе совпадает с параметрами в Макете?

Да

Цитата(Constantus @ 25.05.17, 14:38) *
И наименования идут не по порядку по возрастанию...

сделайте упорядочить по наименованию
Цитата(Constantus @ 25.05.17, 14:38) *
Отчет получился, но почему-то дублируется в детализации наименование группы:

Прошу прощения ))

Запрос.Текст = 
        "ВЫБРАТЬ
        |    Контрагенты.Ссылка КАК Ссылка,
        |    Контрагенты.Представление
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.ЭтоГруппа = ЛОЖЬ
        |ИТОГИ ПО
        |    Ссылка ИЕРАРХИЯ";

Автор: Constantus 25.05.17, 15:14

Vidocq05 @ Сегодня, 17:25 * ,


Благодарю... и как я сам до такого не додумался :-)

Автор: Constantus 25.05.17, 17:19

А как сделать спойлеры без учета всяких Иерархий...

Например, просто спрятать в спойлер определенную область макета?

Имеется код выполнения заполнения определенной области в макете, как только заканчивается, то эту область замочить в спойлер

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua