| 
    
            
         
         | 
    
  | 
Группировка табличной части документа. | ☑ | ||
|---|---|---|---|---|
| 
    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.Сумма = ВыборкаНижнийУровен.Сумма; КонецЦикла; КонецЦикла; ЗначениеВРеквизитФормы(ДЗИтоговыеЗатратыРФВЗ, "ДЗИтоговыеЗатраты"); КонецПроцедуры &НаСервере Процедура ДЗИтоговыеЗатратыПриИзмененииНаСервере() //Вставить содержимое обработчика ДЗИтоговыеЗатратыРФВЗ = РеквизитФормыВЗначение("ДЗИтоговыеЗатраты"); Объект.ТЧИтоговыеЗатраты.Очистить(); Для Каждого ДочерныеЭлементы Из ДЗИтоговыеЗатратыРФВЗ.Строки Цикл Для Каждого ТекДочернойЭлемент Из ДочерныеЭлементы.Строки Цикл НоваяСтрока = Объект.ТЧИтоговыеЗатраты.Добавить(); НоваяСтрока.ВидыЗатрат = ТекДочернойЭлемент.ВидыЗатрат; НоваяСтрока.Сумма = ТекДочернойЭлемент.Сумма; КонецЦикла; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ДЗИтоговыеЗатратыПриИзменении(Элемент) ДЗИтоговыеЗатратыПриИзмененииНаСервере(); КонецПроцедуры  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |