Имя: Пароль:
1C
1С v8
Метод таблицы значений Свернуть() вычисляет Суммы, а нужно вычислить и Максимум
0 Vladal
 
16.12.15
15:54
Привет.
У таблицы значений есть метод Свернуть(), который суммирует показатели по указанным колонкам.
Замечательно работает и прекрасно себя чувствует.
НО как бы мне свернуть таблицу, вычисляя по одной из сворачиваемой колонке не сумму, а, например, Максимум?

Самый первый вариант решения - запрос. В запрос поместить ТЗ и указать моей колонке МАКСИМУМ, а остальным СУММА.
Так как у меня таблица значений формируется динамически и имеет различные имена колонок, то и такой запрос надо бы формировать динамически. Сейчас я так же динамически формирую список колонок, по которым сворачивать и список колонок, которые сворачиваются.

В этой связи у меня вопрос: не имеет ли кто уже такое решение? Или есть какой другой способ, метод. Предложите идею.
1 cw014
 
16.12.15
15:56
Не использовать метод таблицы значений Свернуть()
2 cw014
 
16.12.15
15:56
Как вариант. Сортировка по МАКСИМУМУ УБЫВ, брать первый элемент, заполнить эту колонку первым элементом, свернуть по СУММА
3 cw014
 
16.12.15
15:58
А, вон оно как. Ну тогда только собирать строки с группировками и через Скопировать(Новый Структура())
4 Garykom
 
гуру
16.12.15
15:58
(0) а математически то никак решить? два прохода (сначала находим максимум, потом во все пишем или максимум или максимум/колстрок)
5 Garykom
 
гуру
16.12.15
15:59
(4) хотя не, сначала все равно нужно сворачивать
6 cw014
 
16.12.15
16:00
(4) Долговато может быть.
Решение:
1) Создать копию (коп) и свернуть по колонкам-группировкам (КГ)
2) Пройтись по [коп] и покопировать по [КГ] строки из основной таблицы, сортировать по убыванию, максимальное значение пихать в [коп]
7 Garykom
 
гуру
16.12.15
16:01
(6) да, даж свой ответ аналогичный стер
8 Garykom
 
гуру
16.12.15
16:01
(7)+ ну или запросами
9 Vladal
 
16.12.15
16:02
Я вот и думал - в первый раз просто свернуть по колонкам, я получу список группировок и отобрав по выбранным колонкам группировок значения и найти их максимум для каждой строки.\

Тогда как отобрать строки сразу по несколькоми колонкам? Группировка по одной просто - метод НайтиСтроки.
В типовых есть ОтобратьСтрокиПоКритериям с помощью построителя.
10 Vladal
 
16.12.15
16:02
(8) Да вот незадача - тогда формировать запросы динамически.
11 Garykom
 
гуру
16.12.15
16:05
(9) не надо отбирать, простой перебор (цикл по строкам всем) и условие внутри (составное)
12 Garykom
 
гуру
16.12.15
16:05
(11) хотя можно интереснее чтобы без полного перебора, сначала сортирнуть по нужному(ым) полям
13 Vladal
 
16.12.15
16:08
(12) После Свернуть я с теми же параметрами:

СтрокаГруппировок = Сред(СтрокаГруппировок, 1, СтрДлина(СтрокаГруппировок)-1) + "док_Претензия_Представление";

Выборка.Свернуть(СтрокаГруппировок, СтрокаПоказателей);
Выборка.Сортировать(СтрокаГруппировок);
14 Vladal
 
16.12.15
16:13
+(13) я с теми же параметрами и сортирую.

Я вот что подумал: если я делаю так

Для каждого Показатель Из МассивПоказателей Цикл
    ИмяПоказателя = Показатель.Идентификатор;
    Если ИмяПоказателя = "МаксимальноеКвоСтрок" Тогда
        ИсточникДанныхПостроителя.Колонки[Показатель.Идентификатор].Итог = "Максимум(" + Показатель.Идентификатор + ")";
    ИначеЕсли ИмяПоказателя = "СреднееКвоСтрок" Тогда
        ИсточникДанныхПостроителя.Колонки[Показатель.Идентификатор].Итог = "Среднее(" + Показатель.Идентификатор + ")";
    Иначе
        ИсточникДанныхПостроителя.Колонки[Показатель.Идентификатор].Итог = "Сумма(" + Показатель.Идентификатор + ")";
    КонецЕсли;
КонецЦикла;

Наверно этим способом и свернуть в нужный мне момент.
15 palpetrovich
 
16.12.15
16:15
"как бы мне свернуть таблицу, вычисляя по одной из сворачиваемой колонке не сумму, а, например, Максимум?" - завис :)
... всю колонку "МаксимумМом" заполнить, что-ли?
16 Vladal
 
16.12.15
16:16
(15) Но этот Максимум будет для всей таблицы, а мне нать максимум по группировкам. Ведь Свернуть() даёт Сумма() не для все колонки, а в разрезе группировок? Так же поступить и с Максимумом.
17 palpetrovich
 
16.12.15
16:17
(16) а, понял
18 Vladal
 
16.12.15
16:17
палпетрович, тут тоже надо Максимум сделать для группировки.
Поэтому ща попробую способ из (14)
19 palpetrovich
 
16.12.15
16:22
(18) на вскидку - создать допТЗ, перекинуть туда измерение и параметрДлямаксимума, сортировать по "измерение,параметрДлямаксимума"
потом свернуть отсноную ТЗ и в выборке по ней, установить значение параметрДлямаксимума - хнгачением из допТЗ
20 palpetrovich
 
16.12.15
16:23
*
отсноную = основную
хнгачением  = значением
:)
21 Vladal
 
16.12.15
16:25
(20) намана, я понял
22 Кирпич
 
16.12.15
17:08
Добавить колонку Максимум
Отсортировать по показателю
Пройти по таблице и в последней строке показателя поставить Максимум.
Свернуть.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший