Вход | Регистрация



Группировка табличной части документа.

Группировка табличной части документа.
Я
   antihacker
 
25.10.17 - 11:09
Всем привет ! Можно как то сгруппировать строки табличной части ? Не просто группировать и выводить сумму, а по уровням. Как в дерево значение ? Ну самый верхний уровен показывает итоговую сумму, при этом нажимая на плюсик. можно развернуть строки.
 
 
   asady
 
1 - 25.10.17 - 11:20
(0) например запросом ключевое слово ИТОГИ ПО
   antihacker
 
2 - 25.10.17 - 11:25
Мне не надо группировать и потом выводить куда то. А там же на форме надо делать.
   antihacker
 
3 - 25.10.17 - 11:26
Делаю так


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
ОбъектЗначение = РеквизитФормыВЗначение ("Объект");

ОбъектЗначение.ТЧИтоговыеЗатраты.Свернуть("ВидыЗатрат","Сумма");

ЗначениеВРеквизитФормы (ОбъектЗначение,"Объект");
    
КонецПроцедуры

Но он не показывает иерархию.
   Mankubus
 
4 - 25.10.17 - 11:50
(3) делай дерево значений на форме и выводи в него
   antihacker
 
5 - 25.10.17 - 12:13
Вот так

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ТЧИтоговыеЗатраты.ВидыЗатрат,
    |    ТЧИтоговыеЗатраты.Сумма
    |ИЗ
    |    Документ.Проекты.ТЧИтоговыеЗатраты КАК ТЧИтоговыеЗатраты
    
    |    ГДЕ
    
    |    ТЧИтоговыеЗатраты.Ссылка = &ТекДок    
 
    |    СГРУППИРОВАТЬ ПО    
    |    ТЧИтоговыеЗатраты.ВидыЗатрат,
    |    ТЧИтоговыеЗатраты.Сумма
    |    ИТОГИ ПО   ТЧИтоговыеЗатраты.Сумма ";

    
  
    Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка);
    
    ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ДЗИтоговыеЗатраты");    


Но он своричивает каждую строку отдельно, а мне надо по совпадению по классике.
   h-sp
 
6 - 25.10.17 - 12:18
(5) с утра не проснулся? всё перепутал

ИТОГИ ТЧИтоговыеЗатраты.Сумма ПО ТЧИтоговыеЗатраты.ВидыЗатрат
   antihacker
 
7 - 25.10.17 - 12:28
Вот так

    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ТЧИтоговыеЗатраты.ВидыЗатрат,
    |    ТЧИтоговыеЗатраты.Сумма    
    |ИЗ
    |    Документ.Проекты.ТЧИтоговыеЗатраты КАК ТЧИтоговыеЗатраты
    
    |    ГДЕ
    
    |    ТЧИтоговыеЗатраты.Ссылка = &ТекДок    
 
    |    ИТОГИ ПО ВидыЗатрат ИЕРАРХИЯ";

    
  
    Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка);
    
    ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ДЗИтоговыеЗатраты");    


Все правильно, но нет итога на самых верхних узлах
   chelentano
 
8 - 25.10.17 - 12:30
ИТОГИ
    СУММА(Сумма)
ПО
    ВидыЗатрат ИЕРАРХИЯ
   antihacker
 
9 - 25.10.17 - 12:34
Ага, все верно. Как бы теперь выделить жирным самые верхние уровни ?
   chelentano
 
10 - 25.10.17 - 12:46
(9) Ты программист или кто?
 
 Рекламное место пустует
   antihacker
 
11 - 25.10.17 - 12:50
Только начинаю изучать дерево
   chelentano
 
12 - 25.10.17 - 12:53
(9)
Если обычные формы: ПриПолученииДанных(), ПриВыводеСтроки()
Если управляемые, то через условное оформление
   antihacker
 
13 - 25.10.17 - 12:57
Да, но там как разбирать что только верхний узел ?
   chelentano
 
14 - 25.10.17 - 13:00
Где "там"?
   antihacker
 
15 - 25.10.17 - 13:04
Если управляемые, то через условное оформление. Вот здесь. Просто здесь в условиях форматирование нельзя как указать что тольок верхние узлы надо выделять
   chelentano
 
16 - 25.10.17 - 13:48
(15) Ёлки-палки, ну добавь служебную колонку в дерево, заполняй её при обходе, потом условное оформление по этому признаку вешай
   antihacker
 
17 - 25.10.17 - 14:18
Вот так обхожу

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
          ПриОткрытииНаСервере();
        
          ЭлементыДерева = ДЗИтоговыеЗатраты.ПолучитьЭлементы();
          
          Для Каждого ЭлементДерева Из ЭлементыДерева Цикл
              
              Элементы.ДЗИтоговыеЗатраты.Развернуть(ЭлементДерева.ПолучитьИдентификатор(), Истина);
              
              если  ЭлементДерева.ПолучитьРодителя()=неопределено Тогда
                  
                    //сообщить("123456789");

                    
                    //ЭлементДерева.ВидыЗатрат.ЦветТекста = WEBЦвета.Васильковый


             конецесли;
                
          КонецЦикла;
          

    
КонецПроцедуры


Ну и как  ?
   Бычье сердце
 
18 - 25.10.17 - 14:23
(17)
Четко!
   antihacker
 
19 - 25.10.17 - 14:33
Бычье сердце, что туту четкого ?

Как мне там изменить цвет фона ?

ЭлементДерева.ВидыЗатрат.ЦветТекста = WEBЦвета.Васильковый
   antihacker
 
20 - 25.10.17 - 14:33
Вызывает ошибку
   Юрий Лазаренко
 
21 - 25.10.17 - 14:34
Мы в некоторых документах табличные части заменили на поле табличного документа. Можно иерархию добавлять, раскрашивать как угодно, копировать/вставлять областями.
https://s8.hostingkartinok.com/uploads/images/2017/10/b897128fdb014c28a452568a071979d6.png
   antihacker
 
22 - 25.10.17 - 14:34
Но это дерево значении
   chelentano
 
23 - 25.10.17 - 14:37
Стаж: 3 года 11 месяцев 4 дня
   Serg_1960
 
24 - 25.10.17 - 14:39
Чётко - это вот так :)

&НаКлиенте
Функция ПолучитьУровень(СтрокаДерева)
   Родитель = СтрокаДерева.ПолучитьРодителя();
   Возврат ?(Родитель = Неопределено, 0, 1 + ПолучитьУровень(Родитель));
КонецФункции


Для Каждого ЭлементДерева Из ЭлементыДерева Цикл
   УровеньЭлемента = ПолучитьУровень(ЭлементДерева)
...
   antihacker
 
25 - 25.10.17 - 14:49
Ну выяснил я какая трока являаеться родительским. Но как теперь раскарсить эту строку ?
   sitex
 
26 - 25.10.17 - 14:54
(25)  УсловноеОформление не ?
   antihacker
 
27 - 25.10.17 - 14:56
УсловноеОформление, НЕТ ! Выше читай.
   Serg_1960
 
28 - 25.10.17 - 15:33
Тебе нужно не дерево раскрашивать, а элемент формы на котором дерево. Если судить  по (7), то "ДЗИтоговыеЗатраты"
   sitex
 
29 - 25.10.17 - 15:43
(28) в (16) ему уже намекнул  про это, он не понял.
   antihacker
 
30 - 26.10.17 - 05:54
Serg_1960, но  как  ? Можешь пример показать ? Как получить элементы дерево, что бы покрасить ?
   antihacker
 
31 - 26.10.17 - 06:30
ПО идее вот этот должен был сработать.

Но не работает. ПОЧЕМУ ?


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
          ПриОткрытииНаСервере();

КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
    
 
   ЭлементОУ = УсловноеОформление.Элементы.Добавить();
   ЭлементОУ.Использование    = Истина;
   ЭлементОУ.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255,0,0));

   ЭлементУсловия                = ЭлементОУ.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ЭлементУсловия.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ДЗИтоговыеЗатраты.Родитель");
   ЭлементУсловия.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
   ЭлементУсловия.ПравоеЗначение = Истина;
   ЭлементУсловия.Использование  = Истина;

   ОформляемоеПоле      = ЭлементОУ.Поля.Элементы.Добавить();
   ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДЗИтоговыеЗатраты");  
   
КонецПроцедуры

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

    
  
    Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка);
    
    ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), "ДЗИтоговыеЗатраты");    


КонецПроцедуры
   antihacker
 
32 - 26.10.17 - 12:15
Тема закрыта. Может кому пригодиться. Как из табличной части выводить в дерево и обратно записать изменения в ТЧ.


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
         Элементы.ДЗИтоговыеЗатраты.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
      
КонецПроцедуры


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

    
  
    Запрос.УстановитьПараметр("ТекДок",Объект.Ссылка);
    
    Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); 
    
    
    ДЗИтоговыеЗатратыРФВЗ = РеквизитФормыВЗначение("ДЗИтоговыеЗатраты");

    
    Пока Выборка.Следующий() Цикл
        
         НоваяСтрока = ДЗИтоговыеЗатратыРФВЗ.Строки.Добавить();
              
         НоваяСтрока.ВидыЗатрат = Выборка.ВидыЗатрат;
         НоваяСтрока.Сумма = Выборка.Сумма;
         НоваяСтрока.ВУровень = 1;
         
         ВыборкаНижнийУровен = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
         
         Пока ВыборкаНижнийУровен.Следующий() Цикл
        
               НоваяСтрока1 = НоваяСтрока.Строки.Добавить();
               
               НоваяСтрока1.ВидыЗатрат = ВыборкаНижнийУровен.ВидыЗатрат;
               НоваяСтрока1.Сумма = ВыборкаНижнийУровен.Сумма;

         КонецЦикла;
         
    КонецЦикла;
    
    
   ЗначениеВРеквизитФормы(ДЗИтоговыеЗатратыРФВЗ, "ДЗИтоговыеЗатраты");

КонецПроцедуры

&НаСервере
Процедура ДЗИтоговыеЗатратыПриИзмененииНаСервере()
    
          //Вставить содержимое обработчика       

          ДЗИтоговыеЗатратыРФВЗ = РеквизитФормыВЗначение("ДЗИтоговыеЗатраты");
                                
          Объект.ТЧИтоговыеЗатраты.Очистить();
          
          Для Каждого ДочерныеЭлементы Из ДЗИтоговыеЗатратыРФВЗ.Строки Цикл
              
              
              Для Каждого ТекДочернойЭлемент Из ДочерныеЭлементы.Строки Цикл
                  
                  НоваяСтрока = Объект.ТЧИтоговыеЗатраты.Добавить();              
                                    
                  НоваяСтрока.ВидыЗатрат = ТекДочернойЭлемент.ВидыЗатрат;
              
                  НоваяСтрока.Сумма = ТекДочернойЭлемент.Сумма;
                  
              КонецЦикла;          
                                        
          КонецЦикла;

КонецПроцедуры


&НаКлиенте
Процедура ДЗИтоговыеЗатратыПриИзменении(Элемент)
    
    ДЗИтоговыеЗатратыПриИзмененииНаСервере();
         
КонецПроцедуры


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует