8.х Вывод результата запроса в двухуровневое дерево

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

  1. TopicStarter Overlay
    koshak
    Offline

    koshak Опытный в 1С

    Регистрация:
    28 май 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток!

    Есть самописная конфигурация по неким лабораторным анализам. В конфигурации есть регистр сведений, содержащий поля: ПРОБА, КОМПОНЕНТ, КОЛИЧЕСТВО и ОТДЕЛ.
    Нужно создать форму подбора проб и компонентов из этого регистра. Но организовать это ввиде дерева. Т.к. одна проба может состоять из нескольких компонентов. Хотелось бы чтобы результат выводился следующим образом:

    +Проба1
    --Компонент1
    --Компонент2
    +Проба2
    --Компонент3

    На форму положил элемент типа ДеревоЗначений, и написал следующий код:

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

    +Проба1
    ---Проба1 Компонент1
    ---Проба1 Компонент2
    ---Проба1 Компонент3
    +Проба2
    ---Проба2 Компонент4
    ---Проба2 Компонент5

    Как сделать так, чтобы ПРОБА выводилась только 1 раз в начальной ветке дерева? :unsure:
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Нужно правильно заполнить дерево, т.е. будет что-то вроде:

    Код:
    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока выборка.Следующий() Цикл
    НоваяСтрокаДерева = ДеревоПодбора.Строки.добавить();
    НоваяСтрокаДерева.<Проба> = Выборка.<Проба>;
    ВыборкаПроб = Выборка.Выбрать();
    Пока ВыборкаПроб.Следующий() Цикл
    НоваяСтрока = НоваяСтрокаДерева.Строки.Добавить();
    НоваяСтрока.<Компонент> = ВыборкаПроб.<Компонент>;
    КонецЦикла;
    КонецЦикла;
    
  3. TopicStarter Overlay
    koshak
    Offline

    koshak Опытный в 1С

    Регистрация:
    28 май 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    так в принципе получается, но нельзя ли как-нибудь обойтись без цикла? т.е. сразу же выгрузить запрос?
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    нельзя. т.к. дерево выгружается полностью с заполнением всех полей
Похожие темы
  1. notaSS
    Ответов:
    5
    Просмотров:
    429
Загрузка...

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