Страница 1 из 1
Отчетик с помесячной разбивкой
Добавлено: 10 ноя 2003, 12:42
GTHack
Интересуют идеи наибыстрейшего формирования отчета с использованием горизонтальных циклов с целью помесячной группировкой результатов.
что то типа того:
Отчет по продажам за период
с дата1 по дата2.
-------------------------------------------
месяц1 месяц2 ... месяцN Итог
1. Мц1 100 0 ... 100 ИтогМЦ1
........
2. МцN 500 0 ... 0 ИтогМЦN
кто нибудь подобное делал ?
Re: Отчетик с помесячной разбивкой
Добавлено: 10 ноя 2003, 12:43
GTHack
на данный момент делаю накоплением с использованием таблы памяти, что то типа следующего
Если в табле есть такая запись где Месяц(дата (перебираемый документ)) = Месяц (таблы памяти)
то
накаливаемая_сумма (табла памяти) := накаливаемая_сумма (табла памяти) + сумма (перебираемый документ)
иначе
добавить в таблу памяти строку где
Месяц (таблы памяти) := Месяц(дата (перебираемый документ)),
накаливаемая_сумма (табла памяти) := сумма (перебираемый документ)
и потом соответственно кучей выводится
Re: Отчетик с помесячной разбивкой
Добавлено: 10 ноя 2003, 12:52
GTHack
работает - но медленно,
раньше подобный отчет работал под акцессом
(так же с помесячной горизонтальной разбивкой) ощутимо быстрее, чем мой на ВИПе.
Re: Отчетик с помесячной разбивкой
Добавлено: 10 ноя 2003, 15:10
Goblin
таблы в памяти - самое быстрое ...
в данном случае 3 таблы - группировка МЦ/Месяц(для ячеек),МЦ(строки и итоги по ним),Месяца(столбцы и итоги по ним) ...
прошарился по нужным таблицам , таблы забил ...
потом в форме
1) горизонтальный цикл с названиями месяцев для шапки
2) вертикальный по МЦ
3) внутри вертикального еще раз горизонтальный по месяцу - если есть такая комбинашка МЦ/месяц - из таблы группировки МЦ/месяц число , нет - нолик .в конце горизонтального - итог по МЦ из таблы по МЦ
4) еще один горизонтальный по месяцу - итоги месяцам ...
с чего вдруг тормозить должно ?
или поди скидывал в Акцесс уже готовую группировку МЦ/месяц ?
Re: Отчетик с помесячной разбивкой
Добавлено: 10 ноя 2003, 16:55
Den
Я нечто подобное делал месяц назад, но без всяких горизонтальных циклов. Все периоды хранил в массиве. Т.е. в начале, когда юзверь задает диапозон дат, наполняется массив :
var
databeg :array [1..24] of date ;
dataend :array [1..24] of date ;
Rundialog(getinterval,d_beg,d_end);
beg_mes_point :=month(d_beg);
beg_year_point:=year(d_beg);
end_mes_point :=month(d_end);
end_year_point:=year(d_end);
while (word(beg_mes_point)+(beg_year_point*12))<=(word(end_mes_point)+(end_year_point*12))
do
{
s:=s+1;
databeg[s]:=date(if(s=1,day(d_beg),1),beg_mes_point,beg_year_point);
dataend[s]:=date(if(word(beg_mes_point)+(beg_year_point)=
(word(end_mes_point)+end_year_point),day(d_end),
last_day(date(1,beg_mes_point,beg_year_point))),
beg_mes_point,beg_year_point);
beg_mes_point :=beg_mes_point+1;
if (beg_mes_point mod 13)=0
{
beg_mes_point :=1;
beg_year_point:=beg_year_point+1;
}
}
Далее последовательно выгребаю все это дело в таблу в памяти. И также потом последовательно обрабатывая периоды вывожу в XLS - отчет.
В общем все работает удовлетворительно. Кол-во спецификации к отгрузке - около 10000 записей.Начальный этап выборки данных (просмотр всех записей и накопление итогов по каждой МЦ (их около 2000 шт.) и заполнение таблы в памяти) в районе 45 секунд выполяется...
Re: Отчетик с помесячной разбивкой
Добавлено: 11 ноя 2003, 08:09
GTHack
>Туманов О.В.
я впринципе так и делаю, единственно не 3 а 2 таблы памяти использую, а в общем один к одному - с 3мя таблами идея понравилась - перепишу + подумаю над оптимизацией кода, т.к. думаю даже теоретически в акцессе быстрее быть не может чем на ВИПе.
>DEN
с использованием массивов идея ясна, но думаю таблами будет гибче, заинтересовал момент вывода в XLS
ты выводиш xl-функциями или в SLK ?
если xl-функциями, то наверняка матричными функциями - если так, то мог бы кусок кода на мыло бросить ?