Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Индексированная таблица - Группировать. (число прочтений - 6071 )
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Индексированная таблица - Группировать.
07. Декабря 2007 :: 20:07
Печать  
Нужно мне построить отчет.
Отчет по справочнику товаров, так что нужно считать итоги по группам.
И нужно построить отчет по месяцам.
И месяцы должны группироваться в вертикальных столбцах.

Поскольку моксель мы выводим по строкам - логично группировать ИТЗ так:

Код
Выбрать все
Данные.Группировать("Товар: *&Товар; Месяц: Месяц", "Количество"); 



Однако в таком случае я не могу увидеть итогов по группе товаров за конкретный месяц. Группы разворачиваются в подгруппы/элементы. А хотелось бы, чтобы они сначала разворачивались в месяцы, а только потом - в подгруппы/элементы.

Если сгруппировать в другом порядке, вот так:
Код
Выбрать все
Данные.Группировать("Месяц: Месяц; Товар: *&Товар", "Количество"); 


то итоги по группе за конкретный месяц получить можно, то моксель тогда придется выводить по столбцам. Или парится с Таблица.Область(), чего мне совсем не хочется.

Есть идеи?
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #1 - 07. Декабря 2007 :: 20:10
Печать  
Да, ну и как обычно: "первый раз решил попробовать использовать ИТЗ - помогите разобраться" Улыбка
  
Наверх
www  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #2 - 07. Декабря 2007 :: 21:44
Печать  
Можешь выложить mxl с конкретным примером как должен выглядеть отчет?
думается лучше, когда наглядно перед глазами  Улыбка
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #3 - 07. Декабря 2007 :: 21:57
Печать  
Если я правильно понял то Товар Гр1   М1 M2 M3 M4
                                               Товар эл1  М1 M2 M3 M4
                                               Товар эл2  М1 M2 M3 M4
                                               Товар Гр2  М1 M2 M3 M4
                                               Товар эл1  М1 M2 M3 M4
                                               Товар эл2  М1 M2 M3 M4

То подходит 1 вариант: Данные.Группировать("Товар: *&Товар; Месяц: Месяц", "Количество");

Выводим первую Группировку (Товар), затем цикл по второй (Месяцы).
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #4 - 09. Декабря 2007 :: 09:05
Печать  
PVR писал(а) 07. Декабря 2007 :: 21:57:
Если я правильно понял

Правильно понял.


PVR писал(а) 07. Декабря 2007 :: 21:57:
То подходит 1 вариант: Данные.Группировать("Товар: *&Товар; Месяц: Месяц", "Количество");
Выводим первую Группировку (Товар), затем цикл по второй (Месяцы).

Проблема в том, что мне нужны данные по группе товаров для каждого месяца. А в таком варианте я их и не получаю.

В понедельник подготовлю тестовую конфу с данными, там все будет видно.
« Последняя редакция: 10. Декабря 2007 :: 11:16 - fez »  
Наверх
www  
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #5 - 09. Декабря 2007 :: 12:24
Печать  
fez писал(а) 09. Декабря 2007 :: 09:05:
PVR писал(а) 07. Декабря 2007 :: 21:57:
То подходит 1 вариант: Данные.Группировать("Товар: *&Товар; Месяц: Месяц", "Количество");
Выводим первую Группировку (Товар), затем цикл по второй (Месяцы).

Проблема в том, что мне нужны данные по группе товаров для каждого месяца.


Для простоты, может запрос возвращать: Товар, М1,М2,М3 и тд.,Количество.
Данные.Группировать("Товар: *&Товар", "М1,М2,М3 и тд.,Количество");

Подождем тестовую конфу с данными и запросом.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #6 - 24. Декабря 2007 :: 15:17
Печать  
В общем решил проблему обходным маневром. Создал плоскую таблицу, нужным образом проиндексировал ее, после чего просто накладывал нужный фильтр и запрашивал Итог() по индексу.

Не уверен, что получилось быстро, но зато код простой и незамысловатый.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Индексированная таблица - Группировать.
Ответ #7 - 24. Декабря 2007 :: 15:50
Печать  
fez

При правильном подходе на плоских таблицах удается строить более быстрые и менее требовательные по памяти решения.
Убеждался в этом неоднократно.

Так что все ОК. Улыбка

fez писал(а) 24. Декабря 2007 :: 15:17:
Не уверен, что получилось быстро, но зато код простой и незамысловатый.

Это вообще без комментариев.
С учетом того, что вычислительная мощность растет, а удельная производительность труда человека падает. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #8 - 24. Декабря 2007 :: 17:07
Печать  
А тогда к тебе вопрос, как к большому любителю плоских таблиц.

Мне хочется считать итоги по группам иерархического справочника (номенклатура).
Я в ИТЗ добавляю колонки по числу возможных родителей (глубина вложенности - 1).
Эти колонки заполняю при составлении таблицы фактов.
Добавляю для каждой колонки составной индекс (добавляю колонку группировки верхнего уровня).
Потом, обходя справочник номенклатуры, получаю Итог() с фильтром по соответствующему индексу.

Насколько мой подход правилен, и насколько мое решение быстро и нетребовательно к памяти?

P.S. Активно используется Уровень()
P.P.S. dbf
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #9 - 24. Декабря 2007 :: 17:09
Печать  
Вообще я понял, что хочу метод Группировать(), но который всего лишь добавляет в табличку строки с группами.

СТОП! Это же решение. Все группы ведь можно засунуть в одну колонку!!!

(ушел, щасвирнус)
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #10 - 24. Декабря 2007 :: 17:18
Печать  
Уровень() больше не используется.

На тестовой базе, 0.2 сек. против 0.07 сек.



ушел тестировать на живой базе
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Индексированная таблица - Группировать.
Ответ #11 - 24. Декабря 2007 :: 17:27
Печать  
fez писал(а) 24. Декабря 2007 :: 17:18:
ушел тестировать на живой базе

Первый вариант съел 1.8 гига памяти, после чего закономерно упал. Улыбка Вычеркиваю
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать