|
Макет. Глубина группировки. | ☑ | ||
---|---|---|---|---|
0
antihacker
30.05.15
✎
11:26
|
Всем привет. Ребята подскажите. Как в макет динамический добавить группы по иерархии за ранее не зная глубину иерархии ?
|
|||
1
Zhuravlik
30.05.15
✎
12:35
|
Если 1Сv8 - СКД. Если 77 - много думать головой. И что значит "макет динамический"??
|
|||
2
Chameleon1980
30.05.15
✎
12:57
|
ТабличныйДокумент.НачатьГруппуСтрок (SpreadsheetDocument.StartRowGroup)
ТабличныйДокумент (SpreadsheetDocument) НачатьГруппуСтрок (StartRowGroup) Синтаксис: НачатьГруппуСтрок(<ИмяГруппы>, <ОткрытаЛиГруппа>) Параметры: <ИмяГруппы> (необязательный) Тип: Строка. Название группы. <ОткрытаЛиГруппа> (необязательный) Тип: Булево. Определяет необходимость открытия группы. Истина - выведенная группа будет открыта; Ложь - группа будет выведена в свернутом виде. Значение по умолчанию: Истина. Описание: Начинает новую группу строк. Можно создавать вложенные группы строк. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Пример: ТабДок = Новый ТабличныйДокумент; Секция = ТабДок.ПолучитьОбласть("R1"); Секция.Область("R1C1").Текст = "Численность сотрудников"; ТабДок.Вывести(Секция); ТабДок.НачатьГруппуСтрок("По всем подразделениям", Истина); Всего = 0; Для Н=1 По 3 Цикл Значение = Н; Итог = 0; Секция.Область("R1C1").Текст = "Отдел "+Н; Секция.Область("R1C2").Текст = ""; ТабДок.Вывести(Секция); ТабДок.НачатьГруппуСтрок("Отдел"+Н, Истина); Секция.Область("R1C1").Текст = "Группа"; Секция.Область("R1C2").Текст = "Численность"; Секция.Область("R1C2").ГоризонтальноеПоложение = ГоризонтальноеПоложение.Авто; ТабДок.Вывести(Секция); ТабДок.НачатьГруппуСтрок("Группа "+Н, Истина); Для К=1 По 4 Цикл Секция.Область("R1C1").Текст = "А"+Н+К; Секция.Область("R1C2").Текст = Значение; ТабДок.Вывести(Секция); Итог = Итог + Значение; Значение = Значение + 10; КонецЦикла; ТабДок.ЗакончитьГруппуСтрок(); // окончить группу "Группа" ТабДок.ЗакончитьГруппуСтрок(); // окончить группу "Отдел" Секция.Область("R1C1").Текст = "Итого"+Н; Секция.Область("R1C2").Текст = Итог; ТабДок.Вывести(Секция); Секция.Область("R1C1:R1C2").Текст = ""; ТабДок.Вывести(Секция); Всего = Всего + Итог; КонецЦикла; ТабДок.ЗакончитьГруппуСтрок(); // окончить группу "По всем отделам" Секция.Область("R1C1").Текст = "Всего:"; Секция.Область("R1C2").Текст = Всего; ТабДок.Вывести(Секция); ТабДок.ИтогиСнизу = Ложь; ТабДок.ОтображатьСетку = Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Истина; ТабДок.Показать("Пример использования метода НачатьГруппуСтрок"); |
|||
3
Chameleon1980
30.05.15
✎
12:58
|
тут СП продают.
оставьте свой заказ. |
|||
4
antihacker
01.06.15
✎
08:17
|
Вот код. Почему не группирует ? Ди названии группы вообе не выводит. Только номенклатуры
ТабДок.НачатьАвтогруппировкуСтрок(); //********Идем по списку НОМЕНКЛАТУР*************** ДЛЯ КАЖДОГО СтрНоменклатура Из ЭтаФорма.СпискоНоменклатуры ЦИКЛ //----Запрос на номенклатур в текущей группе ВсеНоменклатуры=новый запрос; ВсеНоменклатуры.Текст="ВЫБРАТЬ | Номенклатура.Ссылка КАК СсылкаНоменклатуры, | Номенклатура.Наименование КАК Наименование |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка В ИЕРАРХИИ(&Группа) | УПОРЯДОЧИТЬ ПО | Номенклатура.ЭтоГруппа ИЕРАРХИЯ,Наименование "; ВсеНоменклатуры.УстановитьПараметр("Группа",СтрНоменклатура.Номенклатура.Ссылка); СписокНоменклатуры=ВсеНоменклатуры.Выполнить().Выбрать(); //--Хранилище из список значения для номенклатурной группы-- СЗНоменклатур = Новый Списокзначений ; Пока СписокНоменклатуры.Следующий() Цикл СЗНоменклатур.Добавить(СписокНоменклатуры.СсылкаНоменклатуры); КонецЦикла; //--Запрос на количество продаж--------------------------------- ЗапросПродажиНоменклатур=новый запрос; ЗапросПродажиНоменклатур.Текст="ВЫБРАТЬ |Продажи.Номенклатура КАК Номенклатура, |Продажи.Период, |Продажи.Количество КАК Количество | ИЗ |РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Номенклатура В (&СЗНоменклатур) И Продажи.Контрагент В (&СЗКонтрагенты) И Продажи.Контрагент НЕ В (&СЗИсключенныхКонтрагентов) И Продажи.Период>=&ДатаНач И Продажи.Период<=&ДатаКон |ИТОГИ | СУММА(Количество) |ПО | Номенклатура ИЕРАРХИЯ "; ЗапросПродажиНоменклатур.УстановитьПараметр("СЗНоменклатур",СЗНоменклатур); ЗапросПродажиНоменклатур.УстановитьПараметр("СЗКонтрагенты",СЗКонтрагенты); ЗапросПродажиНоменклатур.УстановитьПараметр("СЗИсключенныхКонтрагентов",СЗИсключенныхКонтрагентов); ЗапросПродажиНоменклатур.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач)); ЗапросПродажиНоменклатур.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон)); РезПродажиВсе=ЗапросПродажиНоменклатур.Выполнить(); ВыборкаРезПродажиВсе = РезПродажиВсе.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаРезПродажиВсе.Следующий() Цикл ВыборкаНоменклатура = ВыборкаРезПродажиВсе.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл Если ВыборкаНоменклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда СтрокаТовара=МакетОтчета.ПолучитьОбласть("СтрокаГруппы"); Иначе СтрокаТовара=МакетОтчета.ПолучитьОбласть("СтрокаТовара"); КонецЕсли; СтрокаТовара=МакетОтчета.ПолучитьОбласть("СтрокаТовара"); // |СтолбецТовара СтрокаТовара.Параметры.Товар=ВыборкаНоменклатура.Номенклатура; ТабДок.Вывести(СтрокаТовара, ВыборкаНоменклатура.Уровень()); КонецЦикла; КонецЦикла; //--Группировка закончено //------------------------------------- КОНЕЦЦИКЛА; ТабДок.ЗакончитьАвтогруппировкуСтрок(); |
|||
5
antihacker
01.06.15
✎
08:22
|
Понимаете я выбираю группу. А глубина может быть разными. Например в Группе1 есть группа11 и группа12. А внтури группа11 есть группа группа111 и группа112 итд. И все это надо группировать точно по такой иерархии.
|
|||
6
Zhuravlik
01.06.15
✎
08:24
|
(4) Выгрузи в отладчик в дерево значений, и посмотри чего там будет.
(5) И почему условие на итог иерархии вставлено в выборке детальных записей? Если глубина иерархии - заранее неизвестна, имхо надо что-то с рекурсией мутить. - И вообще - зачем так морочиться, если есть СКД?.. |
|||
7
Zhuravlik
01.06.15
✎
08:25
|
*Выгрузить в отладчике результат запроса в дерево значений
|
|||
8
Zhuravlik
01.06.15
✎
08:27
|
+ Я уж не говорю про запрос в цикле...
|
|||
9
Zhuravlik
01.06.15
✎
08:34
|
Как минимум цикл убрать, первый запрос - тоже - смысла в этом всем никакого. Создать массив групп, в запросе к "РегистрНакопления.Продажи" - условие В ИЕРАРХИИ на массив групп.
- Это вообще что-то новое: И Продажи.Контрагент В (&СЗКонтрагенты) И Продажи.Контрагент НЕ В (&СЗИсключенныхКонтрагентов) Почему нельзя составить один массив, и отфильтровать по вхождению? - Кроме того, почему запрос к физической таблице, а не виртуальной? - Прорешайте Радченко, пройдите бесплатный курс по СКД - думаю это самые лучшие советы, которые тут возможно дать. Код бестолковый. |
|||
10
antihacker
01.06.15
✎
11:17
|
Ок. Пробовал так. Тже не группирует. Что делать ?
ТабДок.НачатьАвтогруппировкуСтрок(); //********Идем по списку НОМЕНКЛАТУР*************** ДЛЯ КАЖДОГО СтрНоменклатура Из ЭтаФорма.СпискоНоменклатуры ЦИКЛ //--Запрос на количество продаж--------------------------------- ЗапросПродажиНоменклатур=новый запрос; ЗапросПродажиНоменклатур.Текст="ВЫБРАТЬ |Продажи.Номенклатура.Ссылка КАК СсылкаНоменклатуры, |Продажи.Номенклатура.Наименование КАК Наименование, |Продажи.Период, |Продажи.Количество КАК Количество | ИЗ |РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Номенклатура.Ссылка В ИЕРАРХИИ(&Группа) И Продажи.Контрагент В (&СЗКонтрагенты) И Продажи.Контрагент НЕ В (&СЗИсключенныхКонтрагентов) И Продажи.Период>=&ДатаНач И Продажи.Период<=&ДатаКон |ИТОГИ | СУММА(Количество) | УПОРЯДОЧИТЬ ПО | Номенклатура.ЭтоГруппа ИЕРАРХИЯ,СсылкаНоменклатуры "; ЗапросПродажиНоменклатур.УстановитьПараметр("Группа",СтрНоменклатура.Номенклатура.Ссылка); ЗапросПродажиНоменклатур.УстановитьПараметр("СЗКонтрагенты",СЗКонтрагенты); ЗапросПродажиНоменклатур.УстановитьПараметр("СЗИсключенныхКонтрагентов",СЗИсключенныхКонтрагентов); ЗапросПродажиНоменклатур.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач)); ЗапросПродажиНоменклатур.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон)); РезПродажиВсе=ЗапросПродажиНоменклатур.Выполнить(); ВыборкаРезПродажиВсе = РезПродажиВсе.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаРезПродажиВсе.Следующий() Цикл СтрокаТовара=МакетОтчета.ПолучитьОбласть("СтрокаТовара"); // |СтолбецТовара СтрокаТовара.Параметры.Товар=ВыборкаРезПродажиВсе.Наименование; ТабДок.Вывести(СтрокаТовара, ВыборкаРезПродажиВсе.Уровень()); КонецЦикла; //--Группировка закончено //------------------------------------- КОНЕЦЦИКЛА; ТабДок.ЗакончитьАвтогруппировкуСтрок(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |