Страница 1 из 1

Синтаксис установки фильтра на представление

Добавлено: 09 янв 2003, 14:15
Alla
В лицевых карточках (форма т54а)не выводится подразделение, должность...
Пыталась дописать присоединенную форму запросом по недастающим данным.
Само представление формируется, а как дальше его использовать, чтобы на него наложить фильтр типа:
если t1.tabnom=tabn(а TABN-это тн выбранного работника, которому и надо распечатать лиц счет).

Если б для одного человека, то это ограничение можно бы было включить в запрос, но так как может быть помечено несколько человек, то куда и как наложить этот фильтр.

.LinkForm 'Tob_ls' Prototype is 'T54aNew'
.NameInList 'Тоб Лицевой счет N Т-54а'
.create view t1 as
select persons.tabnmb(fieldname=tabnom),appointments.orderdate(fieldname=or1),
appointments.ordernmb(fieldname=or2),
catalogs.name(fieldname=cat1),a.name(fieldname=cat2),b.name(fieldname=cat3),
appointments.category,lschet.tarif
from persons,catalogs a,catalogs b
where ((lschet.tperson/==persons.nrec
and persons.appointcur/==appointments.nrec
and appointments.department==catalogs.nrec
and appointments.post==a.nrec
and appointments.workcond==b.nrec
));

.fields
....
Podr1
Dolg1
....
e':'s'
.endfields

Начинается цикл по выводу полей, сюда бы по идее и надо включить фильтр, но не представляю синтаксис установки фильтра на представление.
.begin
Фильтр t1.tabnom=tabn
if Podr1='' then Podr1:=t1.cat1;
end.

Re: Синтаксис установки фильтра на представление

Добавлено: 09 янв 2003, 16:03
Vitas
попробуй использовать модификаторы типа GetNext

Re: Синтаксис установки фильтра на представление

Добавлено: 09 янв 2003, 16:49
Саша Г.
Где-то я слышал, что GEtNext работает очень медлено на больших таблах (оно и понятно).
Легче переформировывать логич. таблицу по кажому таб.номеру, т.е. использовать фильт на лог. таблицу.
Примерно так

.var tabel : string;
.endvar
.Create view t1 ...
.....
and (tabel=lschet.tabn);
.....
.{ Цикл по лицевым счетам в форме
.begin
tabel:=переменная табельный номер из формы
(В результате формируется лог таблица по одному табельному номеру)
if t1.getnext=0 then {};
(встаешь на первую запись таблы...)
......
end.
.....
.}

Re: Синтаксис установки фильтра на представление

Добавлено: 10 янв 2003, 12:31
sth
я так понял, что tabn это табельный номер из потока? тогда так:
.create view t1 as
select persons.tabnmb(fieldname=tabnom),appointments.orderdate(fieldname=or1),
appointments.ordernmb(fieldname=or2),
catalogs.name(fieldname=cat1),a.name(fieldname=cat2),b.name(fieldname=cat3),
appointments.category,lschet.tarif
from persons,catalogs a,catalogs b
where
((

tabn == lschet.tabn and


lschet.tperson/==persons.nrec
and persons.appointcur/==appointments.nrec
and appointments.department==catalogs.nrec
and appointments.post==a.nrec
and appointments.workcond==b.nrec
));

при этом надо обязательно, чтобы tabn был уникальным...конечно лучше бы из потока взять nrec, если он там есть.
ну и я не знаю как там в lschetе с индексами, может и ругнется на отсутствие ключа

а потом надо сделать что-то типа
if t1.getfirst = 0 {}
и выводить нужные поля ну или делать с ними что там надо.

Re: Синтаксис установки фильтра на представление

Добавлено: 10 янв 2003, 13:03
Vitas
Модификатор работает нормально, лучше даже использовать для начала GetNext, а если боишься, что будет тормозить из за объема, то используй модификатор на твой View в котором будут только те данные, которые тебе вообще необходимо использовать в отчете.

Re: Синтаксис установки фильтра на представление

Добавлено: 10 янв 2003, 14:19
Alla
Я все же не допоняла...

tabn == lschet.tabn
Для случая, когда в потоке только один табельный номер TABN, это подходит.

А если помечены и переданы в форму несколько таб.номеров TABN, как тогда ограничить представление?

Re: Синтаксис установки фильтра на представление

Добавлено: 10 янв 2003, 14:48
Alla
Нет, кажется, поняла.

Re: Синтаксис установки фильтра на представление

Добавлено: 10 янв 2003, 16:57
Alla
Всем огромное спасибо.