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

Возможно ли упростить запрос

Добавлено: 15 апр 2005, 13:09
Juve
Interface f_TimeTable '123';
Var
nvCurDepPos: Comp;
Create view
Var
nvPodrID: Comp;
as select Persons.Fio from Persons,Catalogs,Appointments
where ((Persons.Nrec==Appointments.Person and Appointments.Department==Catalogs.Nrec))
and Catalogs.Nrec=nvCurDepPos and Appointments.DisMissDate=Date(0,0,0);
...
В Browse выводится Persons.Fio и переход по записям осуществляется очень медленно,как я понял из за того, что подгружаетя все содержимое таблиц подцепки, и только потом фильтруется по Catalogs.Nrec=nvCurDepPos. Само значение nvCurDepPos получается при вызове соответствующего диалога. Можно ли как нибудь загнать этот NRec (nvCurDepPos) в саму подцепку сразу, чтобы НД сразу попадали только "нужные" записи?

Если я пишу что-то типа
Interface f_TimeTable '123';
Create view
Var
nvPodrID: Comp;
nvCurDepPos: Comp;
as select Persons.Fio from Persons,Catalogs,Appointments
where ((Persons.Nrec==Appointments.Person and Appointments.Department==Catalogs.Nrec
and nvCurDepPos==Catalogs.Nrec)) and Appointments.DisMissDate=Date(0,0,0);
то "фиильтрация" вообще не осуществляется и в browse попадают вообще все сотрудники, вне зависимости от значения nvCurDepPos (выбранное подразделение)

Re: Возможно ли упростить запрос

Добавлено: 15 апр 2005, 14:45
Goblin
Фильтр по подцепке второго уровня - это круто !
Не делай так больше :)

Есть в Persons'е 3,4 индексы(не помню точно, то ли в Galdep, то ли в Department пишется ссылка на текущее подразделение) , вот по ним можно сделать данное - и никаких тормозов абсолютно не будет. И Persons желательно ограничивать по isemployee равное русской букве C - ведь в табле, кроме сотрудников , еще и родственники обитают.

Re: Возможно ли упростить запрос

Добавлено: 15 апр 2005, 14:48
Goblin
Interface f_TimeTable '123';
Var
nvCurDepPos: Comp;
Create view
Var
nvPodrID: Comp;
as select Persons.Fio from Persons,Catalogs,Appointments
where (('C'==persons.isemployee and
nvPodrID==persons.department and Persons.appointcur/==Appointments.nrec and Appointments.Department==Catalogs.Nrec));

1) Ограничили только сотрудников
2) Фильтр по подразделению
3) Исключительно текущее назначение используется, а не весь список

Re: Возможно ли упростить запрос

Добавлено: 15 апр 2005, 16:28
Juve
Спасибо большое, работет классно! :)
Вот только вопрос один родился. Если в Persons есть Department, который обновляется по мере назначения на новые должности, то зачем в данном случае Appoinеments? Насколько я понял, эта таблица нужна для истории?

Re: Возможно ли упростить запрос

Добавлено: 04 май 2005, 11:45
kdX
Juve писал(а):Спасибо большое, работет классно! :)
Вот только вопрос один родился. Если в Persons есть Department, который обновляется по мере назначения на новые должности, то зачем в данном случае Appoinеments? Насколько я понял, эта таблица нужна для истории?
ну там же в Personse всего лишь F$Nrec Appoinements'а :) да много всего:
1 NREC NREC
2 ATL_LASTDATE Дата последней модификации
3 ATL_LASTTIME Время последней модификации
4 ATL_LASTUSER Код пользователя
5 ATL_ORIGINOFFICE Номер оффиса в котором занесена запись
6 LASTUSER LASTUSER
7 LASTTIME LASTTIME
8 LASTDATE LASTDATE
9 FILIALNO FILIALNO
10 PERSON Сотрудник
11 ORDERDATE Назначения: дата приказа
12 ORDERNMB Назначения: номер приказа
13 CCONT Ссылка на содержание документа
14 CONTRACTNMB Номер контракта
15 CONTRACTDATE Дата контракта
16 DATEEND Назначен на срок по
17 APPOINTDATE Дата назначения на должность
18 DISMISSDATE Дата ухода с должности
19 DEPARTMENT Структурная единица ШР
20 POST Профессия, должность
21 TARIFF Код тарифа
22 CATEGORY Разряд
23 EMPCATEGORY Категория
24 PAYMODEL Форма оплаты труда
25 WORKCOND Условия труда
26 POSTACCORD Соответствие спец-ти занимаемой должн.
27 WORKREGIME Режим работы
28 TAXRATE Оклад, ставка, тариф
29 PAYCURRENCY Валюта оплаты
30 PRIVPENSION Льготная пенсия
31 EMPRATE Коэффициент для среднесписочной
32 VACATION Продолжительность отпуска (дней)
33 FOUNDATION Основание перевода
34 TYPEMOVE Вид перевода
35 STAFFSTR Ссылка на ШР
36 RATE Количество занятых рабочих мест
37 STATUSAPP Статус назначения
38 KINDAPP Характер назначения
39 CADDNREC1 Доп. информация: классность
40 CADDNREC2 NRec лицевого счета
41 DADDDATE1 Резерв
42 WADDWORD1 Резерв
43 APPTABNMB Табельный номер
44 LPRIZN Доп.признак
45 CDOG ссылка на тип договора
46 NMBDOG номер договора
47 WPRIZN признак работы по контракту
48 CDOPINF ссылка на доп.информацию
49 CREF1 CREF1
50 CREF2 CREF2
51 CREF3 CREF3

Re: Возможно ли упростить запрос

Добавлено: 04 май 2005, 12:09
Maverick
Juve писал(а):Спасибо большое, работет классно! :)
Вот только вопрос один родился. Если в Persons есть Department, который обновляется по мере назначения на новые должности, то зачем в данном случае Appoinеments? Насколько я понял, эта таблица нужна для истории?
Persons - таблица физических лиц (сотрудников в т.ч.)
Persons.department - это ссылка на текущее подразделение сотрудника, т.е. в текущий момент времени. Ориентация на это поле упрощает получение данных, в т.ч и отчетов на текущий момент, НО, не за период - ведь сотрудника в указанный период могли и переводить из подразделения в подразделение... А это как раз и отслеживает табличка Appointments - история назначений сотрудников - по факту трудовая биография сотрудника на предприятии - все его переводы и т.д.
Appointments.Department - как раз и означает подразделение сотрудника в указанный интервал (необходимо конечно Appointments по дате ограничивать)

Кстати, получить назначение сотрудника на указанную дату можно с помощью Obj-интерфейса IAppointmentsFunctions - в нем есть функция GetAppNrec_OnDate(PersNrec : comp; funcDate : date) : comp; - по факту - получение Appointments.NRec на указанную дату.

Добавлено: 04 май 2005, 14:35
Juve
Очень ценная информация, Maverick, спасибо! :)