![]() |
|
Запрос для работы с иерархическим справочником | ☑ | ||
---|---|---|---|---|
0
tg30000
14.10.11
✎
09:46
|
Сделал запрос к иерархическому справочнику , например "Склады"
Запрос работает, но получается что в справочнике есть и группы и элементы... Так вот : Группа=>Элемент все вроде нормально выводит ,но в последней группе например 3 элемента всего ,он их выводит, а элементы без груп помещает ниже и получается вузуально в последней группе не 3 и 3+количество элементов не входящих ни в одну группу.. подскажите как можно это оформить удобнее? Текст запроса ниже... &НаСервереБезКонтекста Процедура ПолучитьДанныеСправочника(ТабДок); ТабДок.Очистить(); Запрос =Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | Склады.Код, | Склады.Наименование, | Склады.ЭтоГруппа |ИЗ | Справочник.Склады КАК Склады | |УПОРЯДОЧИТЬ ПО |Склады.ЭтоГруппа ИЕРАРХИЯ, |Наименование"; Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); Макет = Отчеты.ПолучениеДанныхСправочников.ПолучитьМакет("Макет"); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьГруппа = Макет.ПолучитьОбласть("Группа"); ОбластьЭлемент = Макет.ПолучитьОбласть("Элемент"); ТабДок.Вывести(ОбластьШапка); Пока Выборка.Следующий() Цикл Если Выборка.ЭтоГруппа Тогда Обл= ОбластьГруппа; Иначе Обл= ОбластьЭлемент; КонецЕсли; Обл.Параметры.Заполнить(Выборка); ТабДок.Вывести(Обл); КонецЦикла; КонецПроцедуры |
|||
1
mikecool
14.10.11
✎
09:52
|
нафига было группы создавать? имхо - правильнее подчинение элементам
|
|||
2
tg30000
14.10.11
✎
09:54
|
(1) в смысле зачем пользователи создавали группы? Если об этом, то так было сделано давно, а сейчас нужно сделать отчет, вот и встал вопрос.
Или я что неправильно в коде написал? |
|||
3
catena
14.10.11
✎
10:00
|
(0)"как можно это оформить удобнее"
Выводить с уровнями? |
|||
4
tg30000
14.10.11
✎
10:02
|
(3) Ну как сделать что бы отдельно вывести те элементы справочника ,которые не входят ни в одну группу , а просто в корневом каталоге находятся. А то сейчас она выводятся прямо тиже элементов последней группы, и кажется что в этой последней группе много элементов, хотя по факту их там к примеру 3. Я об этом.
|
|||
5
tg30000
14.10.11
✎
10:05
|
Ну сейчас так:
Группа№1 1 2 3 Группа№2 1 2 3 стол стул Где "стол,стул" элементы не входящие в группы, как их отделить ? например так: Группа№1 1 2 3 Группа№2 1 2 3 стол стул |
|||
6
tg30000
14.10.11
✎
10:06
|
ну что бы пользователь визуально видел что они не относятся к группе №2 ?
|
|||
7
tg30000
14.10.11
✎
10:08
|
В скд можно сделать, но хочется понять, как без СКД сделать..
|
|||
8
Cube
14.10.11
✎
10:10
|
(7) Тебя научить отступ делать в макете что-ли?
|
|||
9
tg30000
14.10.11
✎
10:15
|
(8) чем отступ поможет, если выводятся элементы? Может я что не так понимаю конечно, но все же..
|
|||
10
tg30000
14.10.11
✎
10:18
|
(8)
Шапка => Группа => код //наименование Элемент => код //наименование Гда там отступишь? |
|||
11
Cube
14.10.11
✎
10:21
|
||||
12
tg30000
14.10.11
✎
10:23
|
(11)Нет так не получится, смысл то в том что отступятся и элементы в самой последней группе и опять будут сливаться....
|
|||
13
tg30000
14.10.11
✎
10:26
|
получается сейчас у меня так...
Группа№1 1 2 3 ............... ПоследняяГруппа 1 2 3 Стол Стул Где "стол,стул" элементы не входящие в группы..! |
|||
14
catena
14.10.11
✎
10:28
|
ТабДок.Вывести(Обл, Выборка.Уровень());
+ автогруппировка строк в 8.2 не работают? |
|||
15
tg30000
14.10.11
✎
10:29
|
(14) Попробую,спасибо!
|
|||
16
tg30000
14.10.11
✎
10:37
|
(14)
Что-то без зменений... ТабДок.Вывести(Обл, Выборка.Уровень()); |
|||
17
catena
14.10.11
✎
10:39
|
(16) ТабДок.НачатьАвтогруппировкуСтрок();
ТабДок.ЗакончитьАвтогруппировкуСтрок(); не забыл? |
|||
18
catena
14.10.11
✎
10:40
|
первое совсем перед выводом, второе совсем после вывода всего табдока.
|
|||
19
tg30000
14.10.11
✎
10:40
|
(17) Попробую)
|
|||
20
Cube
14.10.11
✎
10:43
|
(16) Что, совсем не жуётся? Ну давай я пожую:
Из синтаксис-помощника: ТабличныйДокумент (SpreadsheetDocument) Вывести (Put) Синтаксис: Вывести(<Таблица>, <Уровень>, <ИмяГруппы>, <Открыта>) Параметры: <Таблица> (обязательный) Тип: ТабличныйДокумент; ПолеТабличногоДокумента. Выводимая таблица. <Уровень> (необязательный) Тип: Число. Уровень используется для автоматической группировки строк табличного документа. Соседние строки с одинаковым уровнем будут отнесены к одной группе. Строки с минимальным уровнем в группу не объединяются. <ИмяГруппы> (необязательный) Тип: Строка. Название группы, к которой относятся выводимые строки. Значение по умолчанию: Пустая строка <Открыта> (необязательный) Тип: Булево. Истина - выведенная группа будет открыта, Ложь - группа будет выведена в свернутом виде. Значение по умолчанию: Истина Возвращаемое значение: Тип: ОбластьЯчеекТабличногоДокумента. Область, в которую был осуществлен вывод. Описание: Выводит табличный документ в результирующий табличный документ, добавляя его со следующей строки вслед за самой нижней выведенной строкой, начиная с первой колонки. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: ТабДок = Новый ТабличныйДокумент; Секция = ТабДок.ПолучитьОбласть("R1"); Секция.Область("R1C1").Текст = "Численность сотрудников"; ТабДок.НачатьАвтогруппировкуСтрок(); ТабДок.Вывести(Секция,1,"Группа",Истина); Итого = 0; Для Н=1 По 3 Цикл Значение = Н; Итог = 0; Секция.Область("R1C1").Текст = "Отдел "+Н; Секция.Область("R1C2").Текст = ""; ТабДок.Вывести(Секция,2,"Группа 1",Истина); Секция.Область("R1C1").Текст = "Группа"; Секция.Область("R1C2").Текст = "Численность"; ТабДок.Вывести(Секция,2,"Группа 1",Истина); Для К=1 По 10 Цикл Секция.Область("R1C1").Текст = "А"+Н+К; Секция.Область("R1C2").Текст = Значение; ТабДок.Вывести(Секция,3,"Группа 2",Истина); Итог = Итог + Значение; Значение = Значение + 10; КонецЦикла; Секция.Область("R1C1").Текст = "Итого"+Н; Секция.Область("R1C2").Текст = Итог; ТабДок.Вывести(Секция,2,"Группа 1",Истина); Секция.Область("R1C1:R1C2").Текст = ""; ТабДок.Вывести(Секция); Итого = Итого + Итог; КонецЦикла; Секция.Область("R1C1").Текст = "Всего:"; Секция.Область("R1C2").Текст = Итого; ТабДок.Вывести(Секция,1,"Группа",Истина); ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.ИтогиСнизу = Истина; ТабДок.ОтображатьСетку = Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр = Истина; ТабДок.Показать("Пример использования верт. автогруппировки"); |
|||
21
tg30000
14.10.11
✎
10:46
|
(18)
(20) Все сделал.Большое спасибо всем!) Всем хорошего дня! |
|||
22
tg30000
14.10.11
✎
13:21
|
В общем если кому нужно то получилось так...
&НаКлиенте Процедура Сформировать(Команда) ПолучитьДанныеСправочника(ТабДок); КонецПроцедуры //&НаСервереБезКонтекста Процедура ПолучитьДанныеСправочника(ТабДок); ТабДок.Очистить(); Макет = Отчеты.а01ПолучениеДанныхСправочников1.ПолучитьМакет("Макет"); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьГруппа = Макет.ПолучитьОбласть("Группа"); ОбластьЭлемент = Макет.ПолучитьОбласть("Элемент"); ОбластьЭлементБГ = Макет.ПолучитьОбласть("ЭлементБГ"); ТабДок.Вывести(ОбластьШапка); Выборка = Справочники.Склады.ВыбратьИерархически(); ОбластьЭлемент=Макет.ПолучитьОбласть("Элемент"); ЭлементБГ = Макет.ПолучитьОбласть("ЭлементБГ"); ТабДок.НачатьАвтогруппировкуСтрок(); Пока Выборка.Следующий() Цикл Если Не Выборка.ЭтоГруппа и Выборка.Родитель.Пустая() Тогда ОбластьЭлементБГ.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОбластьЭлементБГ, Выборка.УровеньВВыборке()); Иначе Если Выборка.ЭтоГруппа Тогда ОбластьГруппа.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОбластьГруппа, Выборка.УровеньВВыборке()); Иначе ОбластьЭлемент.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОбластьЭлемент, Выборка.УровеньВВыборке()); КонецЕсли; КонецЕсли; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |