Группировка в отчете

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Группировка в отчете

Сообщение Larisa »

Есть view

.Create View m //
As Select//
tab25.scheto,
tab25.subossch,
tab25.schetk,
tab25.subschk,
tab25.sumob,
tab25.sodprr,
spkau.code,
spkau.name
from tab25, spkau
where ((
spkau.nrec == tab25.ckau
))
order by spkau.code
;

Вывожу в отчет записи.
.{table 'm' by spkau.nrec;// цикл по кау
.{ by tab25.ckau;
.{?internal;(m.tab25.scheto='420' or m.tab25.scheto='423' or m.tab25.scheto='425' or m.tab25.scheto='426')// для 20 сч
.begin
sum20_1:=sum20_1+m.tab25.sumob;//
end.
.}
.{?internal;((m.tab25.scheto='468' and m.tab25.subossch='50') and (m.tab25.schetk='499' and m.tab25.subschk='02'))//
.begin
if pos('ИП',m.tab25.sodprr)=0 then sum20_2:=sum20_2+m.tab25.sumob;//
if pos('ИП',m.tab25.sodprr)>0 then sum20_3:=sum20_3+m.tab25.sumob;//
end.
.}
.}// table 'm.tab25'
.fields
dfor1 dfor2
m.code m.name
DoubleToStr(sum20_1, '\2p[|-]3666666666666666666.88') DoubleToStr(sum20_2, '\2p[|-]3666666666666666666.88') DoubleToStr(sum20_3, '\2p[|-]3666666666666666666.88')
.endfields
.{?internal;(m.code<>K3)
@@@@@@@@@@ ^ ^ ^
.}
.begin//
K3:=m.code;//
end.
.} // table m
.endform//
Выгружает только последнюю запись.
Необходимо чтобы записи группировались по spkau.code, суммы брались из tab25 .{ by tab25.ckau;
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

сделай все руками ..
_loop spkau
{

_loop tab25 where ((spkau.nrec == tab25.ckau))
{

}

}
Время ведет!
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Руками это как? Непонялаб объясните пожалуйста.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

т.е постройте группировку сами ..
Время ведет!
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Объясните пожалуйста что означает этот код. Просто я так никогда не писала.
_loop spkau
{

_loop tab25 where ((spkau.nrec == tab25.ckau))
{

}

}
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

При выводе в отчет пропадает первая строка, суммы записываются на вторую строку табл. table 'm' by spkau.nrec. Подскажите в чем может быть причина?
.{table 'm' by spkau.nrec;// цикл по кау
.{ by tab25.ckau;
.{?internal;(m.tab25.scheto='420');// для 20 сч
.begin
sum20_1:=sum20_1+m.tab25.sumob;//
end.
.}
.{?internal;((m.tab25.scheto='468' and m.tab25.subossch='50') and (m.tab25.schetk='499' and m.tab25.subschk='02'));//
.begin
if pos('ИП',m.tab25.sodprr)=0 then sum20_2:=sum20_2+m.tab25.sumob;//
if pos('ИП',m.tab25.sodprr)>0 then sum20_3:=sum20_3+m.tab25.sumob;//
end.
.}
.}// table 'm.tab25'
.fields
dfor1 dfor2
m.code m.name
DoubleToStr(sum20_1, '\2p[|-]3666666666666666666.88') DoubleToStr(sum20_2, '\2p[|-]3666666666666666666.88') DoubleToStr(sum20_3, '\2p[|-]3666666666666666666.88')
.endfields
@@@@@@@@@@
.begin//
sum20_1:=0;
sum20_2:=0;
sum20_3:=0;
end.
.} // table m
.endform//
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

1.для начала
.{ by tab25.ckau;
замените на
.{table 'm.tab25'

.{table 'm' by spkau.nrec;//
на
.{table 'm.spkau
2. В запросе у вас видимо не хватает фильтрп по spkau.kodgrkau
да и сортировкой нужно определится - неправильно задали
получили же сообщение о внешней выгрузке.
напишите
order by spkau.kodgrkau,spkau.code
3. когда отладите замените
spkau.nrec == tab25.ckau
на
spkau.nrec /== tab25.ckau
я вообще склоняюсь что ваше order by виновато. Ну а group by мне никогда не нравилось надежностью(особливо на внешней выгрузке), мож сщас лучше - давно уже не пользовался.
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Да действительно причина была в этом.
Спасибо большое за помощь.
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Извините ещё вопрос. Если мне надо ещё указать код группы кау по табл. spkau, я вписываю
where ((
10013==spkau.kodgrkau
and 10036==spkau.kodgrkau
and spkau.nrec/==tab25.ckau
))
order by spkau.kodgrkau,spkau.code
;
В отчет ничего не попадает.
Как правильно подцепить из spkau два кода группы кау?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

((
10013<<=spkau.kodgrkau
and 10036>>=spkau.kodgrkau
....
)) and (spkau.kodgrkau=10013 or spkau.kodgrkau=10036)
только так
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

спасибо
Ответить