Страница 1 из 1
может кто реализовывал?
Добавлено: 09 янв 2010, 00:48
AndrewVL
Здравствуйте.
такой вот вопрос возник.
Есть таблицы, где имеются приказы (например) по контингенту сотрудников.
В шапке номер приказа, идентификатор подразделения.
В теле - ид сотрудника и с какой он даты числится в пожразделении.
далее идут приказы изменения статусов.
Например в первом приказе в подразделении №1 на 01.01.2009 имеется сотрудник №1
Далее идет приказ об увольнении из подразделения №1 с 10.01.2009
потом идет приказ о приеме в подразделение №1 от 20.01.2009.
потом увольнение.
потом идет приказ о приеме в подразделение №2 от 30.01.2009.
Каждый тип приказа имеет свой идентификатор.
хотелось бы как можно проще получать информацию в каком подразделении какой сотрудник находится на определенную дату .
допустим за определенный период сотрудник был уволен и принят 2-4 раза . как получить где он находтся и его статус на определенную дату.
Спасибо
Re: может кто реализовывал?
Добавлено: 09 янв 2010, 13:27
Dimitry Sibiryakov
AndrewVL писал(а):хотелось бы как можно проще получать информацию в каком подразделении какой сотрудник находится на определенную дату .
STFW "Периодические атрибуты".
Заводишь таблицу истории сотрудничества с полями:
ссылка на сотрудника
ссылка на подразделение
дата приёма
ссылка на приказ приёма
дата увольнения (default 9999 год)
ссылка на приказ увольнения
Эта таблица ведётся триггерами на таблице приказов.
Как результат запрос получается очень простым: select подразделение from эта таблица where нужная дата between дата приёма and дата увольнения.
Re: может кто реализовывал?
Добавлено: 11 янв 2010, 18:13
AndrewVL
нарисовал такие триггера
Код: Выделить всё
CREATE OR ALTER trigger table_ai0 for table
active before insert position 1
as
declare variable table_id integer;
declare variable from_date date;
begin
select c from table where table.thing_id = new.thing_id
and new.from_date between table.from_date and table.to_date into :table_id;
update table set table.to_date = new.from_date-1 ,table.next_id = new.c
where c = :table_id;
if (exists (select c from table where table.thing_id = new.reating_orders_all_id
and table.to_date <= new.from_date-1 )) then
end
Код: Выделить всё
CREATE OR ALTER trigger table_bu0 for table
active before update position 0
AS
declare variable table_id integer;
begin
if (new.to_date <> old.to_date) then
begin
select c from table where table.thing_id = new.thing_id
and new.to_date+1 between table.from_date and table.to_date into :table_id;
update table set table.to_date =
(select from_date-1 from table where from_date < new.to_date)
where c = :table_id;
end
end
на удаление пока еще не придумал
Что скажете? Мож где косяк?
Re: может кто реализовывал?
Добавлено: 12 янв 2010, 13:36
Dimitry Sibiryakov
На мой взгляд эти триггеры вообще никак с первым постом не стыкуются. И даже компилироваться откажутся из-за отсутствия имени таблицы.
Re: может кто реализовывал?
Добавлено: 16 янв 2010, 16:45
AndrewVL
вроде разобрался.
но другой вопрос возникает.
есть таблица движений.
дата начала - дата окончания нахождения человека в определенном подразделении.
но на основании этой таблицы каждый день формируются списки.
т.е.
ИД_ПОДРАЗДЕЛЕНИЯ, ИД_СОТРУДНИКА и прочие атрибуты
вопрос. Как быть если сотрудник был в подразделении №1 на 01.01.2010. списки сформировались.
потом его перевели 10.01.2010 в другое подразделение (№2). но ввели приказ только 01.02.2010. естественно с датой начала действия 10.01.2010
а списки формировались в период с 10.01.2010 по 01.02.2010. т.е. получается на момент формирования списков он числится в подразделении №1.
и на 31.01.2010 он числится в подразделении №1. пока не ввели задним числом приказ.
В общем - как в таком случае списки синхронизируются?
Хотелось бы в таблицах списков в шапке указывать только дату. а в теле - ссылки на таблицы движения.
По если документы вводятся задним числом - так не получится.
Re: может кто реализовывал?
Добавлено: 17 янв 2010, 13:19
Dimitry Sibiryakov
Пару раз лишить премии отдел кадров и ввод приказов задним числом прекратится как по волшебству.
Re: может кто реализовывал?
Добавлено: 17 янв 2010, 13:40
AndrewVL
это то понятно
Но все же.

Re: может кто реализовывал?
Добавлено: 17 янв 2010, 14:17
kdv
попытка автоматизировать хаос? зачем тогда автоматизация...