Eingabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
SNID |
INTEGER |
ID der Sendung. |
STARTSEID |
INTEGER |
ID des Sendeelementes ab welchem die Berechnung durchgeführt wird. |
DO_ADD |
SMALLINT |
0: Den Zeiten (SeZeit, SeToleranz1 und SeToleranz2) wird 24h abgezogen, wenn die Werte > 23h sind. 1: Den Zeiten wird 24h dazugezählt, wenn die Werte < 0 sind. |
Ausgabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
DAWN |
INTEGER |
Die (angepasste) SeZeit des ersten Sendeelementes (SeId = STARTSEID) wird zurückgegeben. |
Beschreibung
Wird von SE_CALC_FROM_SEID aufgerufen, wenn die Berechnung in der 00-Uhr Stunde stattfindet. Spezialbehandlung, damit der Tageswechsel 23 nach 00 auch in der 00-Uhr Stunde richtig gerechnet wird.
Definition
CREATE PROCEDURE SE_CALC_00DAWN(
SNID INTEGER,
STARTSEID INTEGER,
DO_ADD SMALLINT)
RETURNS (
DAWN INTEGER)
AS
DECLARE VARIABLE AktSeGruppe CHAR(1);
DECLARE VARIABLE AktSeTyp CHAR(2);
DECLARE VARIABLE AktSeToleranz2 INTEGER;
DECLARE VARIABLE AktSeToleranz1 INTEGER;
DECLARE VARIABLE AktSeZeit INTEGER;
DECLARE VARIABLE AktSeId INTEGER;
DECLARE VARIABLE AktSeStatus INTEGER;
DECLARE VARIABLE AktSeIstZeit INTEGER;
DECLARE VARIABLE NewSeZeit INTEGER;
DECLARE VARIABLE NewTolerance1 INTEGER;
DECLARE VARIABLE NewTolerance2 INTEGER;
DECLARE VARIABLE Do_Calc INTEGER;
BEGIN
/*
Diese Prozedur ist ein Hack fuer die 0Uhr Stunde (Siehe auch [DABDB234]).
Wenn in der 0-Uhr Stunde ein Tageswechsel von 23Uhr auf 0Uhr Stunde erfolgt,
kann mit diese Procedure allen Werten > 23h, 24h abgezogen (DO_ADD=0) bzw.
allen Werten < 0h 24h dazugerechnet werden (DO_ADD=1). Damit der Tageswechsel
in der 0Uhr Stunde also richtig gerechnet wird, wird diese Procedure zu
Beginn der Procedure SE_CALC_FROM_SEID ausgefuehrt (DO_ADD=0) und am Schluss
nochmals, um die minus Zeiten wieder entsprechend zu korrigieren (DO_ADD=1).
*/
Do_Calc = 0;
FOR
SELECT
SEID,SEZEIT,SEGRUPPE,SETYP,SETOLERANZ1,SETOLERANZ2,
SESTATUS,SEISTZEIT
FROM SENDEELEMENTE
WHERE (SESNID = :SnId)
ORDER BY SEPOSITION ASCENDING
INTO
:AktSeId,:AktSeZeit,:AktSeGruppe,:AktSeTyp,:AktSeToleranz1,:AktSeToleranz2,
:AktSeStatus,:AktSeIstZeit
DO BEGIN
IF (AktSeId = STARTSEID) THEN BEGIN
Do_Calc = 1;
END
IF (Do_Calc = 1) THEN
BEGIN
IF (AktSeToleranz1 is NULL) THEN BEGIN
AktSeToleranz1 = 0;
END
IF (AktSeToleranz2 is NULL) THEN BEGIN
AktSeToleranz2 = 0;
END
NewSeZeit = AktSeZeit;
NewTolerance1 = AktSeToleranz1;
NewTolerance2 = AktSeToleranz2;
/* Wenn Zeit kleiner ist als 0h, dann 24h dazurechnen */
IF (DO_ADD = 1) THEN BEGIN
IF (AktSeZeit < 0) THEN BEGIN
NewSeZeit = AktSeZeit + 86400000; END
IF (AktSeToleranz1 < 0) THEN BEGIN
NewTolerance1 = AktSeToleranz1 + 86400000; END
IF (AktSeToleranz2 < 0) THEN BEGIN
NewTolerance2 = AktSeToleranz2 + 86400000; END
END ELSE BEGIN
/* Wenn Zeit groesser ist als 23h, dann 24h abziehen */
IF (AktSeZeit > 82800000) THEN BEGIN
NewSeZeit = AktSeZeit - 86400000; END
IF (AktSeToleranz1 > 82800000) THEN BEGIN
NewTolerance1 = AktSeToleranz1 - 86400000; END
IF (AktSeToleranz2 > 82800000) THEN BEGIN
NewTolerance2 = AktSeToleranz2 - 86400000; END
END
/* Update, nur wenn sich etwas geaendert hat */
IF ((NewSeZeit <> AktSeZeit) or (NewTolerance1 <> AktSeToleranz1)
OR (NewTolerance2 <> AktSeToleranz2)) THEN
BEGIN
UPDATE Sendeelemente SET SeZeit = :NewSeZeit, SeToleranz1 = :NewTolerance1,
SeToleranz2 = :NewTolerance2
WHERE SeId = :AktSeId;
END
/* Wurde die Zeit des ersten Elements angepasst, muss die SP
SE_CALC_FROM_SEID mit der aktualisierten Zeit als Startzeit rechnen */
IF (AktSeId = STARTSEID) THEN BEGIN
IF ((AktSeIstZeit > 0) AND (AktSeStatus > 2)) THEN BEGIN
Dawn = AktSeIstZeit;
END ELSE BEGIN
Dawn = NewSeZeit;
END
END
END /* do_calc */
END /* for */
END
![]() ![]() ![]() |