Имя: Пароль:
1C
 
Группировка табличной части документа.
,
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.Сумма = ВыборкаНижнийУровен.Сумма;

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

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

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

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


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