Есть мысль попытаться это автоматизировать таким образом:
Таблица водителей, ну пусть такая:
Код: Выделить всё
CREATE TABLE DRIVER(
DRIVERID INTEGER NOT NULL,
STATEID SMALLINT, /* ID состояния 0-не работает любое другое-работает */
WORKID INTEGER /* ID записи в логе */
);
Код: Выделить всё
CREATE TABLE DRVLOG(
WORKID INTEGER NOT NULL,
DRIVERID INTEGER,
INTIME TIMESTAMP, /* Время выхода на работу */
OUTTIME TIMESTAMP /* Время ухода с работы */
);
Код: Выделить всё
IF (OLD.STATEID=0 AND NEW.STATEID<>0) THEN
NEW.WORKID = GEN_ID(GEN_DRVWRK, 1);
Код: Выделить всё
BEGIN
IF (OLD.STATEID=0 AND NEW.STATEID<>0) THEN
BEGIN
/* Вызываем процедуру создания записи в логе с ID юзера и WorkID */
EXECUTE PROC(OLD.DRIVERID, NEW.WORKID, 1);
END
ELSE
BEGIN
/* Вызываем процедуру дописывания в лог времени выхода */
EXECUTE PROC(OLD.USERID, OLD.WORKID, 0);
END
END
Вопрос - как считаете такой механизм достаточно жизнеспособен, ли я чего-то не учёл? Вроде после изменения в BU значения WORKID оно должно быть доступно в AU именно в изменённом значении?