Вывод в отчет двух аналитик по табл. spkau и stzatr

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

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

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

Вывод в отчет двух аналитик по табл. spkau и stzatr

Сообщение Larisa »

Здрвствуйте!
Есть вьюшка m которая связывается с табл. stzatr и spkau.
.Create View m //
As Select//
tab25.scheto,
tab25.subossch,
tab25.schetk,
tab25.subschk,
tab25.sumob,
tab25.sodprr,
tab25.txo,
spkau.code,
spkau.name,
spkau.nrec,
spkau.kodgrkau
from tab25, spkau
where ((
10013<<=spkau.kodgrkau
and 10036>>=spkau.kodgrkau
and spkau.nrec/==tab25.ckau
and tab25.kauos4==stzatr.nrec
))
order by spkau.kodgrkau,spkau.code, stzatr.kod
;

Как правильно организовать цикл по табл. spkau и stzatr чтобы вывод в отчет был по статьям табл. spkau и stzatr.
Раньше у меня была выгрузка только по аналитике spkau
.{table 'm.spkau'
.{table 'm.tab25'
.{?internal;(m.tab25.scheto='820Н');// для 20 сч
......................
.}
.} // table m
.fields
spkau.code spkau.name sumob
^ ^ ^
.endfields
.} // table spkau
.endform//

А сейчас мне надо вывод полей
spkau.code spkau.name stzatr.kod stzatr.name sumob
^ ^ ^ ^ ^
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

.{table 'm.tab25'
.{?internal;(m.tab25.scheto='820Н');// для 20 сч
.begin
if m.getfirst strzatr=0 {}
end.
или
.{table 'm.tab25'
.{table 'm.strzatr'
.{?internal;(m.tab25.scheto='820Н');// для 20 сч
да и так прокатит
.{table 'm.strzatr'
.{?internal;(m.tab25.scheto='820Н');// для 20 сч
.{table 'm.strzatr'
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Написала
.Create View m //
As Select//
tab25.scheto,
tab25.subossch,
tab25.schetk,
tab25.subschk,
tab25.sumob,
tab25.sodprr,
tab25.txo,
spkau.code,
spkau.name,
spkau.nrec,
spkau.kodgrkau
from tab25, spkau
where ((
10013<<=spkau.kodgrkau
and 10036>>=spkau.kodgrkau
and spkau.nrec/==tab25.ckau
and tab25.kauos4==stzatr.nrec
))
order by spkau.kodgrkau,spkau.code, stzatr.kod
;


.{table 'm.spkau'
.{table 'm.tab25'
.{?internal;(m.tab25.scheto='820Н');// для 20 сч
.begin
if m.getfirst stzatr=0 {}
end.
Вторая запись по табл stzatr выгружается нормально.
Почему проподает первая запись из табл stzatr при выгрузке?

У меня так было с spkau пока я не написала spkau.kodgrkau, может быть у stzatr тоже есть вышестоящий код?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

order by spkau.kodgrkau,spkau.code
напишите и все заработает
не сваливайтесь во внешнюю выгрузку.
вообще кто вам мешает заранее набить свою времянку, так чтобы потом использовать только ее?
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Написала
order by spkau.kodgrkau,spkau.code
все равно первую запись из stzatr не выгружает

времянки у меня уже есть
сначало я выгружаю две вьюшки v1, v2
Затем записываю их во временные таблицы
insert tab25 set //
sumob = v1.oborot.sumob, //
ckau = v1.spkau.nrec, //
datob = v1.oborot.datob, //
scheto = v1.oborot.scheto,//
subossch = v1.oborot.subossch,//
schetk = v1.oborot.schetk,//
subschk = v1.oborot.subschk,
kau3 = v1.oborot.kauks[1],
kauos4=v1.stzatr.nrec,
txo = v1.hozoper.code;
} //
end.
.begin
if v2.getfirst oborot = tsok
v2._loop oborot
{
insert tab26 set
sumob = v2.oborot.sumob,
ckau = v2.spkau.nrec, //
datob = v2.oborot.datob, //
scheto = v2.oborot.scheto,//
subossch = v2.oborot.subossch,//
schetk = v2.oborot.schetk,//
subschk = v2.oborot.subschk,
sodpr = v2.oborot.sodpr,
kau3 = v2.oborot.kauks[1];
} //
end.
Затем делаю update tab26 и переписываю tab26 в tab25
.begin
{
update tab26
set da = date(day(dfor1),(substr(sodpr,8,2)),substr(sodpr,3,4)),
sodprr = substr(sodpr,1,2);
} //
end.
.begin
if getfirst tab26 = tsok message('Есть данные в таблице tab26')
{
insert tab25 (sumob,ckau,datob,scheto,subossch,schetk,subschk,sodprr,kau3)
select tab26.sumob, tab26.ckau, tab26.datob, tab26.scheto, tab26.subossch, tab26.schetk, tab26.subschk, tab26.sodprr, tab26.kau3 from tab26
where (( dfor1 == tab26.da))
;
}
end.
Создаю вьюшку m по временной табл tab25
.Create View m //
As Select//
tab25.scheto,
tab25.subossch,
tab25.schetk,
tab25.subschk,
tab25.sumob,
tab25.sodprr,
tab25.txo,
spkau.code,
spkau.name,
spkau.nrec,
spkau.kodgrkau
from tab25, spkau
where ((
10013<<=spkau.kodgrkau
and 10036>>=spkau.kodgrkau
and spkau.nrec/==tab25.ckau
and tab25.kauos4==stzatr.nrec
))
order by spkau.kodgrkau,spkau.code
;

которую затем и выгружаю в отчет

.{table 'm.spkau'
.{table 'm.tab25'
.{?internal;(m.tab25.scheto='820Н');// для 20 сч
.begin
if m.getfirst stzatr=0 {}
end.
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Я не пойму почему не выгружается первая запись из табл stzatr в отчет.?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

а поля по strzatr в .{?internal;(m.tab25.scheto='820Н');// для 20 сч
выводятся? если нет, то надо begin end переставить вне его. И в цикл по tab25 попадаете?
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Сообщение Larisa »

Да в цикл по tab25 я попадаю, все суммы и статьи по табл spkau выгружаются правильно.
Перенесла
.{table 'm.spkau'
.{table 'm.tab25'
.begin
if m.getfirst stzatr=0 {}
end.

Все равно не работает

Вот сам вывод в отчет
.{table 'm.spkau'
.{table 'm.tab25'
.begin
if m.getfirst stzatr=0 {}
end.
.{?internal;(m.tab25.scheto='820Н');// для 20 сч
.begin
if spkau.code='020101' and m.tab25.schetk='810Н' and (m.tab25.kau3=281474976710883 or m.tab25.kau3=281474976710695) and m.tab25.txo='100120' and pos('ИП',m.tab25.sodprr)=0 then sum20_1:=sum20_1+m.tab25.sumob;// Прямые
if spkau.code='020101' and m.tab25.schetk='810Н' and (m.tab25.kau3=281474976710883 or m.tab25.kau3=281474976710695) and m.tab25.txo='100120' and pos('ИП',m.tab25.sodprr)>0 then sum20_3:=sum20_3+m.tab25.sumob;// Прямые
end.
.}
.{?internal;(m.tab25.scheto='820Н' or m.tab25.scheto='823Н' or m.tab25.scheto='825Н' or m.tab25.scheto='826Н' or m.tab25.scheto='891Н')
.begin//
if spkau.code='020101' and m.tab25.scheto='820Н' and m.tab25.schetk='810Н' and m.tab25.kau3<>281474976710883 and m.tab25.kau3<>281474976710695 and pos('ИП',m.tab25.sodprr)=0 then sum20_2:=sum20_2+m.tab25.sumob;
if spkau.code='020101' and m.tab25.scheto='820Н' and m.tab25.schetk='810Н' and m.tab25.kau3<>281474976710883 and m.tab25.kau3<>281474976710695 and m.tab25.txo<>'100120' and pos('ИП',m.tab25.sodprr)>0 then sum20_4:=sum20_4+m.tab25.sumob;
end.
.}
.} // table m
.fields
dfor1 dfor2
spkau.code spkau.name stzatr.kod stzatr.name
DoubleToStr(sum20_1, '\2p[|-]3666666666666666666.88') DoubleToStr(sum20_2, '\2p[|-]3666666666666666666.88')
DoubleToStr(sum20_3, '\2p[|-]3666666666666666666.88') DoubleToStr(sum20_4, '\2p[|-]3666666666666666666.88')
.endfields
@@@@@@@@@@ ^ @@@@@@@@@@ ^
.begin//
sum_1:=sum_1+sum20_1; sum_2:=sum_2+sum20_2; sum_3:=sum_3+sum20_3; sum_4:=sum_4+sum20_4;
end.
.begin//
sum20_1:=0;
sum20_2:=0;
sum20_3:=0;
sum20_4:=0;
end.
.} // table spkau
.fields
DoubleToStr(sum_1, '\2p[|-]3666666666666666666.88') DoubleToStr(sum_2, '\2p[|-]3666666666666666666.88')
DoubleToStr(sum_3, '\2p[|-]3666666666666666666.88') DoubleToStr(sum_4, '\2p[|-]3666666666666666666.88')
.endfields
Итого ^ ^ ^ ^
.endform//

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

Сообщение Larisa »

Подскажите в чем может быть проблема?
Ответить