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

Функция пустого поля

Добавлено: 15 дек 2002, 15:34
Alla
Подскажите, пожалуйста, как отфильтровать sql-запросом людей, у которых дата увольнения стоит.
Не могу установить фильтр типа, если поле пустое, то эти записи и брать.

Re: Функция пустого поля

Добавлено: 15 дек 2002, 15:52
m0p3e
If ( xxxx.yyyy = date ( 0, 0, 0) )

Re: Функция пустого поля

Добавлено: 16 дек 2002, 09:14
Alla
Мне этот фильтр надо наложить на таблицу persons.disdate. Но ругается, по этому полю нет индекса, хотя и ставлю (noindex).

Чтобы в ARD-отчете не выводить уволенных.
Но все же не получается никак. Печать по условию if ... , тоже не работает
.form 'Rep01'
.ARD
.var
sert:date;
lert:word;
kollet:double;
kolms:double;
d1:date;
vid:byte;
aqq:double;
.endvar
.NameInList 'Расчет по выплате 13 зарплаты'
.create view t1 as
select persons.tabnmb(fieldname=tabn),persons.fio(fieldname=fio1),persons.appdate(fieldname=dpos),persons.disdate(fieldname=duv),
catalogs.name(fieldname=dolg),a.name(fieldname=st13),
Servlen.yearsb(fieldname=dye),Servlen.monthsb(fieldname=dmo),Servlen.daysb(fieldname=dda),Servlen.fromdate(fieldname=dfr), b.name(fieldname=podr)
from persons,appointments,catalogs, catalogs a, catalogs b
where ((persons.appointcur==appointments.nrec
and appointments.post==catalogs.nrec
and persons.nrec/==servlen.person
and servlen.position/==a.nrec
and appointments.department==b.nrec
and 'Дата начала расчета для начисления 13 зарплаты'/==a.name (noindex)
)) order by tabn;
.fields
AQQ tabn fio1 dpos duv dolg st13 dye dmo dda dfr podr sert lert kollet kolms
.endfields
.begin RUNDIALOG('Do_lpar',d1,vid) end.
.begin aqq:=0 end.



.{ table t1
.begin sert:=datesub(Servlen.fromdate,Servlen.daysb,Servlen.monthsb,Servlen.yearsb);
lert:=months_between(sert,d1);
kollet:=trunc(lert/12,0);
kolms:=lert-kollet*12;
aqq:=aqq+1;
end.
Форматы для полей....
.}

.endform

Re: Функция пустого поля

Добавлено: 16 дек 2002, 10:04
Den
А так :

where ((Root==persons.disdate
and (persons.disdate=date(0,0,0))
and persons.appointcur==appointments.nrec
and appointments.post==catalogs.nrec
and persons.nrec/==servlen.person
and servlen.position/==a.nrec
and appointments.department==b.nrec
and 'Дата начала расчета для начисления 13 зарплаты'/==a.name (noindex)
)) order by tabn;

Re: Функция пустого поля

Добавлено: 16 дек 2002, 12:17
m0p3e
Если нет индекса, то при выводе в отчете можно использовать блок .{?INTERNAL;(условие)

Re: Функция пустого поля

Добавлено: 16 дек 2002, 12:39
sth
если есть noindex, то вряд ли ругается именно на эту подцепку....возможно дело в других подцепках или сортировке.
как сообщение об ошибке-то звучит?

Re: Функция пустого поля

Добавлено: 16 дек 2002, 19:01
dozent
Алла, не мучайся, послушайся МОРЗЕ! :)

Re: Функция пустого поля

Добавлено: 17 дек 2002, 09:50
Alla
Спасибо всем.
Послушалась МОРЗЕ.
Den, не поняла Root==persons.disdate, что значит Root? Что за связка?

Re: Функция пустого поля

Добавлено: 17 дек 2002, 10:00
Den
Нет Root - это фильтр на корневую таблу.
Т.е. отбор нужных записей persons происходит на первом узле логической таблицы (persons).
ТОлько после этого проверяются другие условия по подцепкам.Приведенный ниже пример наоборот будет включать в логическую таблицу все записи и только потом фильтровать :

where ((
persons.appointcur==appointments.nrec
and appointments.post==catalogs.nrec
and persons.nrec/==servlen.person
and servlen.position/==a.nrec
and appointments.department==b.nrec
and 'Дата начала расчета для начисления 13 зарплаты'/==a.name (noindex)
)) and persons.disdate=date(0,0,0)
order by tabn;

Во всяком случае я вижу такой в Root-е у Галактистов...

Re: Функция пустого поля

Добавлено: 17 дек 2002, 11:16
Alla
Den, очень-очень извини, но все равно не поняла.
Root-это ключевое слово? Но в доке ничего не нашла о нем.
Root-значит взять все записи ?
И "вижу такой в Root-е у Галактистов".
Значение слова Root(корень?) никак не догадываюсь.
Или это значит- назначенить такую-то таблицу корневой?

Re: Функция пустого поля

Добавлено: 17 дек 2002, 12:11
Den
Root в книжке по SQL описан.Да, это ключевое слово.
Нет это не взять все записи, наоборот, взять записи, удовлетворяеще условию задонному (в данном случае persons.disdate=date(0,0,0).
Корневой таблицу он тоже не назначает.Алгоритм выполнения (опять же как мне кажется) при формировании логической таблицы следующий :
1- при использовании Root(говорю от имени vip).
Встал на первую запись persons.Сразу проверяю не уволен ли работник.Если нет, то еду дальше проверять остальные связи все по порядку.Таким образом может существенно сужатся выборка уже на превом узле во where.

2- использую простой фильтр.
Встал на первую запись persons.Проверил связь на appointments, проверил связь на catalogs ну и т.д. по цепочке..и ТОЛЬКО ПО СЛЕ ПРОБЕГА ПО ВСЕМУ WHERE проверил условие на вхождение записи в лог. таблу.

Вообще-то это редко используемая вещь при написании на fcom или VIP/

Вот так поняла ? ДА еще -помогло это в решение проблемы?

Re: Функция пустого поля

Добавлено: 17 дек 2002, 13:38
Vitas
а попробуй
date(0,0,0)/==persons.disdate
;)

Re: Функция пустого поля

Добавлено: 17 дек 2002, 13:53
Alla
Да-да, поняла, наконец-то :)
Пока сделала вывод по условию с исп-ем internal, как сказал МОРЗЕ.
А вообще, попробую сделать так, как бы логически будет более правильно и выборка похоже должна быть быстрее.

Всем, всем спасибо.