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

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

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

Ответить
Alla
Постоянный обитатель
Сообщения: 109
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

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

Сообщение Alla »

Подскажите, пожалуйста, как отфильтровать sql-запросом людей, у которых дата увольнения стоит.
Не могу установить фильтр типа, если поле пустое, то эти записи и брать.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение m0p3e »

If ( xxxx.yyyy = date ( 0, 0, 0) )
Alla
Постоянный обитатель
Сообщения: 109
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

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

Сообщение 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
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение 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;
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение m0p3e »

Если нет индекса, то при выводе в отчете можно использовать блок .{?INTERNAL;(условие)
sth
Постоянный обитатель
Сообщения: 148
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение sth »

если есть noindex, то вряд ли ругается именно на эту подцепку....возможно дело в других подцепках или сортировке.
как сообщение об ошибке-то звучит?
dozent
Местный житель
Сообщения: 226
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Урал
Контактная информация:

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

Сообщение dozent »

Алла, не мучайся, послушайся МОРЗЕ! :)
Alla
Постоянный обитатель
Сообщения: 109
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

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

Сообщение Alla »

Спасибо всем.
Послушалась МОРЗЕ.
Den, не поняла Root==persons.disdate, что значит Root? Что за связка?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение 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-е у Галактистов...
Alla
Постоянный обитатель
Сообщения: 109
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

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

Сообщение Alla »

Den, очень-очень извини, но все равно не поняла.
Root-это ключевое слово? Но в доке ничего не нашла о нем.
Root-значит взять все записи ?
И "вижу такой в Root-е у Галактистов".
Значение слова Root(корень?) никак не догадываюсь.
Или это значит- назначенить такую-то таблицу корневой?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

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

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

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

Вот так поняла ? ДА еще -помогло это в решение проблемы?
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

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

Сообщение Vitas »

а попробуй
date(0,0,0)/==persons.disdate
;)
Ищу возможности довести и так отличный продукт до еще большего блеска
Alla
Постоянный обитатель
Сообщения: 109
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

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

Сообщение Alla »

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

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