|
Группировка табличной части документа. | ☑ | ||
---|---|---|---|---|
0
antihacker
25.10.17
✎
11:09
|
Всем привет ! Можно как то сгруппировать строки табличной части ? Не просто группировать и выводить сумму, а по уровням. Как в дерево значение ? Ну самый верхний уровен показывает итоговую сумму, при этом нажимая на плюсик. можно развернуть строки.
|
|||
1
asady
25.10.17
✎
11:20
|
(0) например запросом ключевое слово ИТОГИ ПО
|
|||
2
antihacker
25.10.17
✎
11:25
|
Мне не надо группировать и потом выводить куда то. А там же на форме надо делать.
|
|||
3
antihacker
25.10.17
✎
11:26
|
Делаю так
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбъектЗначение = РеквизитФормыВЗначение ("Объект"); ОбъектЗначение.ТЧИтоговыеЗатраты.Свернуть("ВидыЗатрат","Сумма"); ЗначениеВРеквизитФормы (ОбъектЗначение,"Объект"); КонецПроцедуры Но он не показывает иерархию. |
|||
4
Mankubus
25.10.17
✎
11:50
|
(3) делай дерево значений на форме и выводи в него
|
|||
5
antihacker
25.10.17
✎
12:13
|
Вот так
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЧИтоговыеЗатраты.ВидыЗатрат, | ТЧИтоговыеЗатраты.Сумма |ИЗ | Документ.Проекты.ТЧИтоговыеЗатраты КАК ТЧИтоговыеЗатраты | ГДЕ | ТЧИтоговыеЗатраты.Ссылка = &ТекДок | СГРУППИРОВАТЬ ПО | ТЧИтоговыеЗатраты.ВидыЗатрат, | ТЧИтоговыеЗатраты.Сумма | ИТОГИ ПО ТЧИтоговыеЗатраты.Сумма "; Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка); ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ДЗИтоговыеЗатраты"); Но он своричивает каждую строку отдельно, а мне надо по совпадению по классике. |
|||
6
h-sp
25.10.17
✎
12:18
|
(5) с утра не проснулся? всё перепутал
ИТОГИ ТЧИтоговыеЗатраты.Сумма ПО ТЧИтоговыеЗатраты.ВидыЗатрат |
|||
7
antihacker
25.10.17
✎
12:28
|
Вот так
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЧИтоговыеЗатраты.ВидыЗатрат, | ТЧИтоговыеЗатраты.Сумма |ИЗ | Документ.Проекты.ТЧИтоговыеЗатраты КАК ТЧИтоговыеЗатраты | ГДЕ | ТЧИтоговыеЗатраты.Ссылка = &ТекДок | ИТОГИ ПО ВидыЗатрат ИЕРАРХИЯ"; Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка); ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ДЗИтоговыеЗатраты"); Все правильно, но нет итога на самых верхних узлах |
|||
8
chelentano
25.10.17
✎
12:30
|
ИТОГИ
СУММА(Сумма) ПО ВидыЗатрат ИЕРАРХИЯ |
|||
9
antihacker
25.10.17
✎
12:34
|
Ага, все верно. Как бы теперь выделить жирным самые верхние уровни ?
|
|||
10
chelentano
25.10.17
✎
12:46
|
(9) Ты программист или кто?
|
|||
11
antihacker
25.10.17
✎
12:50
|
Только начинаю изучать дерево
|
|||
12
chelentano
25.10.17
✎
12:53
|
(9)
Если обычные формы: ПриПолученииДанных(), ПриВыводеСтроки() Если управляемые, то через условное оформление |
|||
13
antihacker
25.10.17
✎
12:57
|
Да, но там как разбирать что только верхний узел ?
|
|||
14
chelentano
25.10.17
✎
13:00
|
Где "там"?
|
|||
15
antihacker
25.10.17
✎
13:04
|
Если управляемые, то через условное оформление. Вот здесь. Просто здесь в условиях форматирование нельзя как указать что тольок верхние узлы надо выделять
|
|||
16
chelentano
25.10.17
✎
13:48
|
(15) Ёлки-палки, ну добавь служебную колонку в дерево, заполняй её при обходе, потом условное оформление по этому признаку вешай
|
|||
17
antihacker
25.10.17
✎
14:18
|
Вот так обхожу
&НаКлиенте Процедура ПриОткрытии(Отказ) ПриОткрытииНаСервере(); ЭлементыДерева = ДЗИтоговыеЗатраты.ПолучитьЭлементы(); Для Каждого ЭлементДерева Из ЭлементыДерева Цикл Элементы.ДЗИтоговыеЗатраты.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина); если ЭлементДерева.ПолучитьРодителя()=неопределено Тогда //сообщить("123456789"); //ЭлементДерева.ВидыЗатрат.ЦветТекста = WEBЦвета.Васильковый конецесли; КонецЦикла; КонецПроцедуры Ну и как ? |
|||
18
Бычье сердце
25.10.17
✎
14:23
|
(17)
Четко! |
|||
19
antihacker
25.10.17
✎
14:33
|
Бычье сердце, что туту четкого ?
Как мне там изменить цвет фона ? ЭлементДерева.ВидыЗатрат.ЦветТекста = WEBЦвета.Васильковый |
|||
20
antihacker
25.10.17
✎
14:33
|
Вызывает ошибку
|
|||
21
Юрий Лазаренко
25.10.17
✎
14:34
|
Мы в некоторых документах табличные части заменили на поле табличного документа. Можно иерархию добавлять, раскрашивать как угодно, копировать/вставлять областями.
https://s8.hostingkartinok.com/uploads/images/2017/10/b897128fdb014c28a452568a071979d6.png |
|||
22
antihacker
25.10.17
✎
14:34
|
Но это дерево значении
|
|||
23
chelentano
25.10.17
✎
14:37
|
Стаж: 3 года 11 месяцев 4 дня
|
|||
24
Serg_1960
25.10.17
✎
14:39
|
Чётко - это вот так :)
&НаКлиенте Функция ПолучитьУровень(СтрокаДерева) Родитель = СтрокаДерева.ПолучитьРодителя(); Возврат ?(Родитель = Неопределено, 0, 1 + ПолучитьУровень(Родитель)); КонецФункции Для Каждого ЭлементДерева Из ЭлементыДерева Цикл УровеньЭлемента = ПолучитьУровень(ЭлементДерева) ... |
|||
25
antihacker
25.10.17
✎
14:49
|
Ну выяснил я какая трока являаеться родительским. Но как теперь раскарсить эту строку ?
|
|||
26
sitex
naïve
25.10.17
✎
14:54
|
(25) УсловноеОформление не ?
|
|||
27
antihacker
25.10.17
✎
14:56
|
УсловноеОформление, НЕТ ! Выше читай.
|
|||
28
Serg_1960
25.10.17
✎
15:33
|
Тебе нужно не дерево раскрашивать, а элемент формы на котором дерево. Если судить по (7), то "ДЗИтоговыеЗатраты"
|
|||
29
sitex
naïve
25.10.17
✎
15:43
|
(28) в (16) ему уже намекнул про это, он не понял.
|
|||
30
antihacker
26.10.17
✎
05:54
|
Serg_1960, но как ? Можешь пример показать ? Как получить элементы дерево, что бы покрасить ?
|
|||
31
antihacker
26.10.17
✎
06:30
|
ПО идее вот этот должен был сработать.
Но не работает. ПОЧЕМУ ? &НаКлиенте Процедура ПриОткрытии(Отказ) ПриОткрытииНаСервере(); КонецПроцедуры &НаСервере Процедура ПриОткрытииНаСервере() ЭлементОУ = УсловноеОформление.Элементы.Добавить(); ЭлементОУ.Использование = Истина; ЭлементОУ.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255,0,0)); ЭлементУсловия = ЭлементОУ.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДЗИтоговыеЗатраты.Родитель"); ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементУсловия.ПравоеЗначение = Истина; ЭлементУсловия.Использование = Истина; ОформляемоеПоле = ЭлементОУ.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДЗИтоговыеЗатраты"); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЧИтоговыеЗатраты.ВидыЗатрат, | ТЧИтоговыеЗатраты.Сумма, | ТЧИтоговыеЗатраты.ЦветПол |ИЗ | Документ.Проекты.ТЧИтоговыеЗатраты КАК ТЧИтоговыеЗатраты | ГДЕ | ТЧИтоговыеЗатраты.Ссылка = &ТекДок | ИТОГИ СУММА(Сумма) ПО ВидыЗатрат ИЕРАРХИЯ"; Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка); ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ДЗИтоговыеЗатраты"); КонецПроцедуры |
|||
32
antihacker
26.10.17
✎
12:15
|
Тема закрыта. Может кому пригодиться. Как из табличной части выводить в дерево и обратно записать изменения в ТЧ.
&НаКлиенте Процедура ПриОткрытии(Отказ) Элементы.ДЗИтоговыеЗатраты.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЧИтоговыеЗатраты.ВидыЗатрат, | ТЧИтоговыеЗатраты.Сумма, | ТЧИтоговыеЗатраты.ВУровень |ИЗ | Документ.Проекты.ТЧИтоговыеЗатраты КАК ТЧИтоговыеЗатраты | ГДЕ | ТЧИтоговыеЗатраты.Ссылка = &ТекДок | ИТОГИ СУММА(Сумма) ПО ВидыЗатрат ИЕРАРХИЯ"; Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка); Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); ДЗИтоговыеЗатратыРФВЗ = РеквизитФормыВЗначение("ДЗИтоговыеЗатраты"); Пока Выборка.Следующий() Цикл НоваяСтрока = ДЗИтоговыеЗатратыРФВЗ.Строки.Добавить(); НоваяСтрока.ВидыЗатрат = Выборка.ВидыЗатрат; НоваяСтрока.Сумма = Выборка.Сумма; НоваяСтрока.ВУровень = 1; ВыборкаНижнийУровен = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока ВыборкаНижнийУровен.Следующий() Цикл НоваяСтрока1 = НоваяСтрока.Строки.Добавить(); НоваяСтрока1.ВидыЗатрат = ВыборкаНижнийУровен.ВидыЗатрат; НоваяСтрока1.Сумма = ВыборкаНижнийУровен.Сумма; КонецЦикла; КонецЦикла; ЗначениеВРеквизитФормы(ДЗИтоговыеЗатратыРФВЗ, "ДЗИтоговыеЗатраты"); КонецПроцедуры &НаСервере Процедура ДЗИтоговыеЗатратыПриИзмененииНаСервере() //Вставить содержимое обработчика ДЗИтоговыеЗатратыРФВЗ = РеквизитФормыВЗначение("ДЗИтоговыеЗатраты"); Объект.ТЧИтоговыеЗатраты.Очистить(); Для Каждого ДочерныеЭлементы Из ДЗИтоговыеЗатратыРФВЗ.Строки Цикл Для Каждого ТекДочернойЭлемент Из ДочерныеЭлементы.Строки Цикл НоваяСтрока = Объект.ТЧИтоговыеЗатраты.Добавить(); НоваяСтрока.ВидыЗатрат = ТекДочернойЭлемент.ВидыЗатрат; НоваяСтрока.Сумма = ТекДочернойЭлемент.Сумма; КонецЦикла; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ДЗИтоговыеЗатратыПриИзменении(Элемент) ДЗИтоговыеЗатратыПриИзмененииНаСервере(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |