Таблица Persons и "профессия"

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

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

lerich
Постоянный гость
Сообщения: 51
Зарегистрирован: 03 ноя 2006, 16:44
Откуда: Ukraine
Контактная информация:

Таблица Persons и "профессия"

Сообщение lerich »

Подскажите, плз, как выбрать запросом табельные номера сотрудников по номеру и названию профессии.
Например, выбрать всех "Токарей", код профессии 8211.2
В таблице Persons есть ссылка на профессию, а дальше я никак не могу разобраться.
Please help 8-)
"Все проходит и это пройдет - Omnia transeunt et id qouque/etiam transeat"
varvara
Постоянный обитатель
Сообщения: 130
Зарегистрирован: 21 дек 2005, 19:12

Сообщение varvara »

В таблице Persons есть ссылка на профессию?Интересно, какая?
Насколько я понимаю, в Рersons есть ссылка на текущее назначение
Appointcur, а уже в таблице Appointments есть ссылка на проффессию
Post.
lerich
Постоянный гость
Сообщения: 51
Зарегистрирован: 03 ноя 2006, 16:44
Откуда: Ukraine
Контактная информация:

Сообщение lerich »

Там есть такое поле CBASEPROF, написано, что это ссылка на профессию
"Все проходит и это пройдет - Omnia transeunt et id qouque/etiam transeat"
varvara
Постоянный обитатель
Сообщения: 130
Зарегистрирован: 21 дек 2005, 19:12

Сообщение varvara »

Да, но в нашей базе оно почему-то пустое(версия 7.12).
lerich
Постоянный гость
Сообщения: 51
Зарегистрирован: 03 ноя 2006, 16:44
Откуда: Ukraine
Контактная информация:

Сообщение lerich »

Разобралась, наконец-то!
В таблице Appointments есть поле POST (профессия), но это ссылка, но только не указано на какую таблицу.
А вот используя поле-ссылку CBASEPROF из таблицы PERSON, можно в перейти в таблицу CATALOGS, где как раз и находятся профессии (должности) с кодами и т.п.
"Все проходит и это пройдет - Omnia transeunt et id qouque/etiam transeat"
varvara
Постоянный обитатель
Сообщения: 130
Зарегистрирован: 21 дек 2005, 19:12

Сообщение varvara »

Ссылка Post это тоже на таблицу Catalogs.А в вашей базе поле CBASEPROF заполняется?
k_vit
Постоянный обитатель
Сообщения: 143
Зарегистрирован: 09 авг 2006, 16:40
Откуда: Россия, Тюмень, ОАО "Сибирский Научно-Аналитический Центр"

Сообщение k_vit »

select
CATALOGS.NAME,
PERSONS.FIO
from
CATALOGS,
persons
where
((
COMP(x) == CATALOGS.NREC AND
CATALOGS.NREC == APPOINTMENTS.POST(NOINDEX) AND
APPOINTMENTS.NREC /== PERSONS.APPOINTCUR(noindex)
));
lerich
Постоянный гость
Сообщения: 51
Зарегистрирован: 03 ноя 2006, 16:44
Откуда: Ukraine
Контактная информация:

Сообщение lerich »

varvara писал(а):Ссылка Post это тоже на таблицу Catalogs.А в вашей базе поле CBASEPROF заполняется?
да, как оказалось это поле имеет нулевое значение :(
"Все проходит и это пройдет - Omnia transeunt et id qouque/etiam transeat"
lerich
Постоянный гость
Сообщения: 51
Зарегистрирован: 03 ноя 2006, 16:44
Откуда: Ukraine
Контактная информация:

Сообщение lerich »

k_vit писал(а):select
CATALOGS.NAME,
PERSONS.FIO
from
CATALOGS,
persons
where
((
COMP(x) == CATALOGS.NREC AND
CATALOGS.NREC == APPOINTMENTS.POST(NOINDEX) AND
APPOINTMENTS.NREC /== PERSONS.APPOINTCUR(noindex)
));
А что за функция COMP(x) и что означает (noindex)
"Все проходит и это пройдет - Omnia transeunt et id qouque/etiam transeat"
k_vit
Постоянный обитатель
Сообщения: 143
Зарегистрирован: 09 авг 2006, 16:40
Откуда: Россия, Тюмень, ОАО "Сибирский Научно-Аналитический Центр"

Сообщение k_vit »

COMP(x)
COMP - функция преобразования любого типа к типу Comp
x - nRec должности, впринципе можно использовать и код должности, но вряд ли в таблице будет такой индекс.

NOINDEX - привязка без индекса, так как в таблице Appointments
нет такого индекса (с полем POST), а втаблице PERSONS нет индеска с полем APPOINTCUR.
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение Ged »

COMP(x) - преобразование типов.
соответственно x - переменная.

(noindex)
В двойных скобках (( ... )) обычно указываются подцепки с учетом индексов, но если по некоторому полю нет индекса, то можно указать и так.
или так
-----------------------------
select
CATALOGS.NAME,
PERSONS.FIO
from
CATALOGS,
persons
where
((
COMP(x) == CATALOGS.NREC AND
(
CATALOGS.NREC = APPOINTMENTS.POST AND
APPOINTMENTS.NREC = PERSONS.APPOINTCUR
)
));

---------------------------------------------------
А вот так ограничение будет учитываться на всю вьюху
---------------------------------------------------
select
CATALOGS.NAME,
PERSONS.FIO
from
CATALOGS,
persons
where
((
COMP(x) == CATALOGS.NREC
))
And
(
CATALOGS.NREC = APPOINTMENTS.POST AND
APPOINTMENTS.NREC = PERSONS.APPOINTCUR
)
;

И вообще безиндексные запросы на больших БД будут тормозить.
И лучше правильно построить запрос.
lerich
Постоянный гость
Сообщения: 51
Зарегистрирован: 03 ноя 2006, 16:44
Откуда: Ukraine
Контактная информация:

Сообщение lerich »

А у вас случайно нет документации или краткого справочника по всем функциям, которые можно использовать в SQL для Галактики?
"Все проходит и это пройдет - Omnia transeunt et id qouque/etiam transeat"
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение Ged »

vipprog.chm входит в стандартную документацию.
lerich
Постоянный гость
Сообщения: 51
Зарегистрирован: 03 ноя 2006, 16:44
Откуда: Ukraine
Контактная информация:

Сообщение lerich »

Делаю запрос

select persons.tabnmb,persons.fio,persons.galdep,catalogs.code,catalogs.name
from persons,catalogs,katpodr
where ((CATALOGS.NREC /== APPOINTMENTS.POST(NOINDEX) AND APPOINTMENTS.NREC /== PERSONS.APPOINTCUR(noindex))) and catalogs.name='Слесарь-ремонтник'
order by persons.tabnmb;

Получаю: вывелись сведения для 3-х сотрудников, у одного табельный номер 0. Но при этом каждая запись продублирована раз по 10 :(

Через модуль "Управление персоналом", иерархические отчеты по картотеке формирую отчет, где выводятся сотрудники с данной должностью.
В результате получаю 3 человека, причем в этом списке есть сотрудник, который уже уволен.

Как-то получается неочень, потому что я хочу на основе этого запроса еще получить более расширенную информацию по сотрудникам (начисленную зп, фактически отработанное время).
"Все проходит и это пройдет - Omnia transeunt et id qouque/etiam transeat"
varvara
Постоянный обитатель
Сообщения: 130
Зарегистрирован: 21 дек 2005, 19:12

Сообщение varvara »

А зачем вам в запросе Katpodr?Уберите ее и будет все нормально.
Чтобы в запрос не поподали уволенные, добавьте еще одно оганичение сомр(persons.disdate)=0
Ответить