Синтаксис установки фильтра на представление
Модераторы: m0p3e, edward_K, Модераторы
Синтаксис установки фильтра на представление
В лицевых карточках (форма т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.
Пыталась дописать присоединенную форму запросом по недастающим данным.
Само представление формируется, а как дальше его использовать, чтобы на него наложить фильтр типа:
если 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: Синтаксис установки фильтра на представление
попробуй использовать модификаторы типа GetNext
Ищу возможности довести и так отличный продукт до еще большего блеска
Re: Синтаксис установки фильтра на представление
Где-то я слышал, что GEtNext работает очень медлено на больших таблах (оно и понятно).
Легче переформировывать логич. таблицу по кажому таб.номеру, т.е. использовать фильт на лог. таблицу.
Примерно так
.var tabel : string;
.endvar
.Create view t1 ...
.....
and (tabel=lschet.tabn);
.....
.{ Цикл по лицевым счетам в форме
.begin
tabel:=переменная табельный номер из формы
(В результате формируется лог таблица по одному табельному номеру)
if t1.getnext=0 then {};
(встаешь на первую запись таблы...)
......
end.
.....
.}
Легче переформировывать логич. таблицу по кажому таб.номеру, т.е. использовать фильт на лог. таблицу.
Примерно так
.var tabel : string;
.endvar
.Create view t1 ...
.....
and (tabel=lschet.tabn);
.....
.{ Цикл по лицевым счетам в форме
.begin
tabel:=переменная табельный номер из формы
(В результате формируется лог таблица по одному табельному номеру)
if t1.getnext=0 then {};
(встаешь на первую запись таблы...)
......
end.
.....
.}
Re: Синтаксис установки фильтра на представление
я так понял, что 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 {}
и выводить нужные поля ну или делать с ними что там надо.
.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: Синтаксис установки фильтра на представление
Модификатор работает нормально, лучше даже использовать для начала GetNext, а если боишься, что будет тормозить из за объема, то используй модификатор на твой View в котором будут только те данные, которые тебе вообще необходимо использовать в отчете.
Ищу возможности довести и так отличный продукт до еще большего блеска
Re: Синтаксис установки фильтра на представление
Я все же не допоняла...
tabn == lschet.tabn
Для случая, когда в потоке только один табельный номер TABN, это подходит.
А если помечены и переданы в форму несколько таб.номеров TABN, как тогда ограничить представление?
tabn == lschet.tabn
Для случая, когда в потоке только один табельный номер TABN, это подходит.
А если помечены и переданы в форму несколько таб.номеров TABN, как тогда ограничить представление?
Re: Синтаксис установки фильтра на представление
Нет, кажется, поняла.
Re: Синтаксис установки фильтра на представление
Всем огромное спасибо.