Фильтр глючит? Или я? :-)
Добавлено: 25 дек 2008, 08:55
Здравствуйте! Ничего не понимаю. Есть вьюхи:
В теле формы код:
Месседж выдаёт пару разных значений, соответственно, во вьюхи vydpl и polpl попадает много лишних записей. Почему? По условиям вьюхи в месседже должны быть равные значения!
А если во вьюху sf поставить фильтр по организации (например, katorg.nrec=1000000000047h), то всё нормально - в отчёт выходит только то, что нужно.
Код: Выделить всё
.create view sf as
select schfact.nrec, schfact.dfact, schfact.direct, schfact.dreg, schfact.num, schfact.nazn, katorg.nrec, katorg.cstate, katorg.unn, katorg.name,
katorg.indexk, katorg.addr, katorg.tel, katorg.okonh, katorg.okpo, region.name, otnosh.nrec, katstate.kod, katstate.nrec, katstate.name, katcity.name,
dogovor.nodoc, dogovor.ddoc, katsopr.nrec, katsopr.dopr, katpodr.kod
from schfact, katorg, katorgdescr, katorgdescr katorgdescr2, katorgdescr region, katorgdescr otnosh, katstate, katcity, katsopr, dogovor, katpodr
where
((
begper <<= schfact.dfact and
endper >>= schfact.dfact and
katorg.nrec /== schfact.corg and
schfact.nrec /== katsopr.cschfact and
katsopr.cdogovor == dogovor.nrec and
katsopr.cpodrfrom == katpodr.nrec and
katorg.nrec == katorgdescr.crec and
katorgdescr.cgroup /== region.nrec and (region.nrec<>1000000000BE8h and region.nrec<>1000000000BE9h and region.nrec<>1000000000BEAh) and
katorg.nrec == katorgdescr2.crec and
katorgdescr2.cgroup /== otnosh.nrec and (otnosh.nrec=1000000000BE8h or otnosh.nrec=1000000000BE9h or otnosh.nrec=1000000000BEAh) and
katorg.cstate /== katstate.nrec and
katorg.ccity /== katcity.nrec
))
and schfact.direct>0
order by katorg.nrec, schfact.nrec;
.create view vydpl as
select plpor.nrec, plpor.datob, plpor.nodok, dogovor.nodoc, dogovor.ddoc, oborot.nrec, oborot.dbscheto, oborot.krschetk, oborot.sumob, oborot.datob,
basedoc.nodoc, basedoc.ddoc
from plpor, stepdoc, basedoc, dogovor, oborot
where
((
begper <<= plpor.datob and
endper >>= plpor.datob and
orgnrec == plpor.cpol (noindex) and (plpor.direct = 0) and
plpor.cstepdoc == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
basedoc.cdogovor == dogovor.nrec and
plpor.nrec == oborot.csoprdoc and
plpor.tidk == oborot.tidk
))
and isvalidall(tnplpor)
order by plpor.nrec, oborot.nrec;
.create view polpl as
select plpor.nrec, plpor.datob, plpor.nodok, plpor.sumplat, plpor.cplat, dogovor.nodoc, dogovor.ddoc, oborot.nrec, oborot.dbscheto, oborot.krschetk, oborot.sumob, oborot.datob,
basedoc.nodoc, basedoc.ddoc
from plpor, stepdoc, basedoc, dogovor, oborot
where
((
begper <<= plpor.datob and
endper >>= plpor.datob and
orgnrec == plpor.cplat (noindex) and (plpor.direct = 1) and
plpor.cstepdoc == stepdoc.nrec and
stepdoc.cbasedoc == basedoc.nrec and
basedoc.cdogovor == dogovor.nrec and
plpor.nrec == oborot.csoprdoc and
plpor.tidk == oborot.tidk
))
and isvalidall(tnplpor)
order by plpor.nrec, oborot.nrec;
Код: Выделить всё
.begin
RunDialog('C_COMMON::GetIntervalDates', begper, endper);
end.
.{table 'sf' by sf.katorg.nrec
.begin
orgnrec:=sf.katorg.nrec;
end.
.{table 'vydpl' by vydpl.plpor.nrec
.begin
...;
end.
.{by vydpl.oborot.nrec
.begin
...;
end.
.}
.}
.{table 'polpl' by polpl.plpor.nrec
.begin
...;
end.
.{by polpl.oborot.nrec
.begin
...;
message(orgnrec+' '+polpl.plpor.cplat);
end.
.}
.}
.{by sf.schfact.nrec
.begin
...;
end.
.}
.}
А если во вьюху sf поставить фильтр по организации (например, katorg.nrec=1000000000047h), то всё нормально - в отчёт выходит только то, что нужно.