Eingabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
SRCSNID |
INTEGER |
Ein Primary Key Wert von der SENDUNGEN Tabelle |
SRCSEPOSITION |
INTEGER |
Damit wird das Sendeelement, welches verschoben werden soll, angegeben. |
DESTSESNID |
INTEGER |
Ein Primary Key Wert von der SENDUNGEN Tabelle. |
DESTSEDATUM |
DATE |
Damit wird das Ziel Datum übergeben. |
DESTSEZEIT |
INTEGER |
Damit wird die Ziel Sendeelement Zeit übergeben. |
DESTSESPPOSITION |
INTEGER |
Damit wird die Ziel Sendeplan Position übergeben. |
DESTSESNPOSITION |
INTEGER |
Damit wird die Ziel Sendung Position übergeben. |
DESTSEPOSITION |
INTEGER |
Damit wird die Ziel Sendeelement Position übergeben. |
MOVEGROUP |
INTEGER |
Damit wird angegeben, ob nur ein Element oder eine ganze Gruppe verschoben werden soll. |
DIRECTION |
INTEGER |
Damit wird die Richtung bestimmt ab dem angegebenen Element. |
Ausgabeparameter
Parameter | Typ | Beschreibung |
---|---|---|
BLOCKSEID |
INTEGER |
Ein Primary Key Wert von der SENDEELEMENTE Tabelle wird zurückgegeben. |
BLOCKSEPOSITION |
INTEGER |
Gibt die SePosition vom Block zurück. |
Beschreibung
Verschiebt ein Sendeelement (mit Klammer) oder auch ganze Blöcke. (Wird von SE_MOVE aufgerufen)
Definition
CREATE PROCEDURE SE_MOVE_BLOCK(
SRCSNID INTEGER,
SRCSEPOSITION INTEGER,
DESTSESNID INTEGER,
DESTSEDATUM DATE,
DESTSEZEIT INTEGER,
DESTSESPPOSITION INTEGER,
DESTSESNPOSITION INTEGER,
DESTSEPOSITION INTEGER,
MOVEGROUP INTEGER,
DIRECTION INTEGER)
RETURNS (
BLOCKSEID INTEGER,
BLOCKSEPOSITION INTEGER)
AS
DECLARE VARIABLE FirstLoopFlag INTEGER;
DECLARE VARIABLE LastKlammer CHAR(1);
DECLARE VARIABLE LastGruppe CHAR(1);
DECLARE VARIABLE LastTyp CHAR(2);
DECLARE VARIABLE SeId INTEGER;
DECLARE VARIABLE SeSnId INTEGER;
DECLARE VARIABLE SeDatum DATE;
DECLARE VARIABLE SeZeit INTEGER;
DECLARE VARIABLE SeSpPosition INTEGER;
DECLARE VARIABLE SeSnPosition INTEGER;
DECLARE VARIABLE SePosition INTEGER;
DECLARE VARIABLE SeGruppe CHAR(1);
DECLARE VARIABLE SeKlammer CHAR(1);
DECLARE VARIABLE SeTyp CHAR(2);
DECLARE VARIABLE SeRFlag CHAR(1);
DECLARE VARIABLE SeSequenz CHAR(1);
DECLARE VARIABLE SeToleranz1 INTEGER;
DECLARE VARIABLE SeToleranz2 INTEGER;
DECLARE VARIABLE HourInMsDiff INTEGER;
DECLARE VARIABLE ATeId INTEGER;
DECLARE VARIABLE AFirstTeId INTEGER;
DECLARE VARIABLE SeBlockId INTEGER;
DECLARE VARIABLE LastSeBlockId INTEGER;
DECLARE VARIABLE ExitAfterKlammer SMALLINT;
BEGIN
LastSeBlockId = 0;
/* ****************************************************** */
/* Ab aktueller Position reuckwaerts Elemente verschieben */
/* Ende bei erster Vorwaerts-Klammer oder bei Header */
/* (Header wird mitverschoben). */
/* ****************************************************** */
IF (Direction = 1) THEN BEGIN
FirstLoopFlag = 1;
ExitAfterKlammer = 0;
FOR
SELECT
SEID,SESNID,SEDATUM,SEZEIT,SESPPOSITION,SESNPOSITION,SEPOSITION,SESEQUENZ,
SEGRUPPE,SEKLAMMER,SETYP,SETOLERANZ1,SETOLERANZ2,SEBLOCKID,SERFLAG
FROM SENDEELEMENTE
WHERE (SESNID = :SrcSnId) AND (SEPOSITION <= :SrcSePosition)
ORDER BY SEPOSITION DESCENDING
INTO
:SeId,:SeSnId,:SeDatum,:SeZeit,:SeSpPosition,:SeSnPosition,:SePosition,:SeSequenz,
:SeGruppe,:SeKlammer,:SeTyp,:SeToleranz1,:SeToleranz2,:SeBlockId,:SeRFlag
DO BEGIN
IF (FirstLoopFlag = 1) THEN BEGIN
FirstLoopFlag = 0;
AFirstTeId = NULL;
SELECT MIN(TEID)
FROM TRIGGEREDEVENTS
WHERE (TETYP < 100) AND
((TESEID = :SeId) OR
(TESEID IN (SELECT TESEID FROM TRIGGEREDEVENTS
WHERE (TETRIGGEREDSEID = :SeId))))
INTO :AFirstTeId;
END
ELSE BEGIN
IF (MoveGroup = 0) THEN BEGIN
IF ((LastKlammer <> 'R') AND (SeKlammer <> 'V')) THEN BEGIN
IF (AFirstTeId IS NULL) THEN BEGIN
EXIT;
END
ATeId = NULL;
SELECT MIN(TEID)
FROM TRIGGEREDEVENTS
WHERE (TETYP < 100) AND
((TESEID = :SeId) OR
(TESEID IN (SELECT TESEID FROM TRIGGEREDEVENTS
WHERE (TETRIGGEREDSEID = :SeId))))
INTO :ATeId;
IF (ATeId IS NULL) THEN BEGIN
EXIT; /* Exit Loop and Procedure */
END
END
END
ELSE IF ((SeBlockId <> LastSeBlockId) OR (LastGruppe <> SeGruppe)) THEN BEGIN
EXIT;
END
IF ((ExitAfterKlammer = 1) OR (LastTyp = 'H') OR (LastTyp = 'HR') OR (LastTyp = 'HB')) THEN BEGIN
IF ((SeKlammer <> 'V') OR (LastGruppe <> SeGruppe)) THEN BEGIN
EXIT; /* Exit Loop and Procedure */
END ELSE BEGIN
ExitAfterKlammer = 1;
END
END
END
LastKlammer = SeKlammer;
LastGruppe = SeGruppe;
LastTyp = SeTyp;
DestSePosition = DestSePosition - 1;
BlockSeId = SeId;
BlockSePosition = DestSePosition;
LastSeBlockId = SeBlockId;
/* Die Toleranz muss noch auf die Ziel-Stunde angepasst werden */
IF (SeTyp <> 'S') THEN BEGIN
HourInMsDiff = (CAST((DestSeSnPosition / 100) AS INTEGER) -
CAST((SeSnPosition / 100) AS INTEGER)) *
(60 * 60 * 1000);
IF (SeToleranz1 <> 0) THEN BEGIN
SeToleranz1 = SeToleranz1 + HourInMsDiff;
IF (SeToleranz1 > (24 * 60 * 60 * 1000)) THEN BEGIN
SeToleranz1 = SeToleranz1 - (24 * 60 * 60 * 1000);
END
END
IF (SeToleranz2 <> 0) THEN BEGIN
SeToleranz2 = SeToleranz2 + HourInMsDiff;
IF (SeToleranz2 > (24 * 60 * 60 * 1000)) THEN BEGIN
SeToleranz2 = SeToleranz2 - (24 * 60 * 60 * 1000);
END
END
END
/* SERFLAG darf nicht zurueckgesetzt werden, wenn es sich um ein X Flag handelt! */
IF (SeRFlag <> 'X') THEN BEGIN
SeRFlag = '-';
END
/* Die Zeit darf nicht geaendert werden, wenn es sich um ein Zeit-Element handelt! */
IF (SeSequenz in ('P','T','Z')) THEN BEGIN
DestSeZeit = SeZeit;
END
UPDATE SENDEELEMENTE SET
SESNID = :DestSeSnId,
SEDATUM = :DestSeDatum,
SEZEIT = :DestSeZeit,
SESPPOSITION = :DestSeSpPosition,
SESNPOSITION = :DestSeSnPosition,
SEPOSITION = :DestSePosition,
SESTATUS = 0,
SETOLERANZ1 = :SeToleranz1,
SETOLERANZ2 = :SeToleranz2,
SEBLOCKID = NULL,
SERFLAG = :SeRFlag
WHERE (SEID = :SeId);
END
END
/* ********************************************************* */
/* Ab aktueller Position vorwaerts Elemente verschieben. */
/* Ende bei letzter Rueckwaerts-Klammer oder vor naechstem . */
/* Header (Header wird NICHT mitverschoben). */
/* ********************************************************* */
ELSE BEGIN
FirstLoopFlag = 1;
FOR
SELECT
SEID,SESNID,SEDATUM,SEZEIT,SESPPOSITION,SESNPOSITION,SEPOSITION,SESEQUENZ,
SEGRUPPE,SEKLAMMER,SETYP,SETOLERANZ1,SETOLERANZ2,SEBLOCKID,SERFLAG
FROM SENDEELEMENTE
WHERE (SESNID = :SrcSnId) AND (SEPOSITION >= :SrcSePosition)
ORDER BY SEPOSITION ASCENDING
INTO
:SeId,:SeSnId,:SeDatum,:SeZeit,:SeSpPosition,:SeSnPosition,:SePosition,:SeSequenz,
:SeGruppe,:SeKlammer,:SeTyp,:SeToleranz1,:SeToleranz2,:SeBlockId,:SeRFlag
DO BEGIN
IF (FirstLoopFlag = 1) THEN BEGIN
LastKlammer = SeKlammer;
LastGruppe = SeGruppe;
BlockSeId = SeId;
BlockSePosition = DestSePosition;
LastSeBlockId = SeBlockId;
FirstLoopFlag = 0;
ATeId = NULL;
SELECT MIN(TEID)
FROM TRIGGEREDEVENTS
WHERE (TETYP < 100) AND
((TESEID = :SeId) OR
(TESEID IN (SELECT TESEID FROM TRIGGEREDEVENTS
WHERE (TETRIGGEREDSEID = :SeId))))
INTO :ATeId;
END
ELSE BEGIN
IF (MoveGroup = 0) THEN BEGIN
IF ((LastKlammer <> 'V') AND (SeKlammer <> 'R')) THEN BEGIN
IF (ATeId IS NULL) THEN BEGIN
EXIT;
END
ATeId = NULL;
SELECT MIN(TEID)
FROM TRIGGEREDEVENTS
WHERE (TETYP < 100) AND
((TESEID = :SeId) OR
(TESEID IN (SELECT TESEID FROM TRIGGEREDEVENTS
WHERE (TETRIGGEREDSEID = :SeId))))
INTO :ATeId;
IF (ATeId IS NULL) THEN BEGIN
EXIT; /* Exit Loop and Procedure */
END
END
END
ELSE IF ((SeBlockId <> LastSeBlockId) OR (LastGruppe <> SeGruppe)) THEN BEGIN
EXIT;
END
IF ((SeTyp = 'H') OR (SeTyp = 'HR') OR (SeTyp = 'HB')) THEN BEGIN
EXIT; /* Exit Loop and Procedure */
END
LastKlammer = SeKlammer;
LastGruppe = SeGruppe;
DestSePosition = DestSePosition + 1;
BlockSeId = SeId;
BlockSePosition = DestSePosition;
LastSeBlockId = SeBlockId;
/* Die Toleranz muss noch auf die Ziel-Stunde angepasst werden */
IF (SeTyp <> 'S') THEN BEGIN
HourInMsDiff = (CAST((DestSeSnPosition / 100) AS INTEGER) -
CAST((SeSnPosition / 100) AS INTEGER)) *
(60 * 60 * 1000);
IF (SeToleranz1 <> 0) THEN BEGIN
SeToleranz1 = SeToleranz1 + HourInMsDiff;
IF (SeToleranz1 > (24 * 60 * 60 * 1000)) THEN BEGIN
SeToleranz1 = SeToleranz1 - (24 * 60 * 60 * 1000);
END
END
IF (SeToleranz2 <> 0) THEN BEGIN
SeToleranz2 = SeToleranz2 + HourInMsDiff;
IF (SeToleranz2 > (24 * 60 * 60 * 1000)) THEN BEGIN
SeToleranz2 = SeToleranz2 - (24 * 60 * 60 * 1000);
END
END
END
/* SERFLAG darf nicht zurueckgesetzt werden, wenn es sich um ein X Flag handelt! */
IF (SeRFlag <> 'X') THEN BEGIN
SeRFlag = '-';
END
/* Die Zeit darf nicht geaendert werden, wenn es sich um ein Zeit-Element handelt! */
IF (SeSequenz in ('P','T','Z')) THEN BEGIN
DestSeZeit = SeZeit;
END
UPDATE SENDEELEMENTE SET
SESNID = :DestSeSnId,
SEDATUM = :DestSeDatum,
SEZEIT = :DestSeZeit,
SESPPOSITION = :DestSeSpPosition,
SESNPOSITION = :DestSeSnPosition,
SEPOSITION = :DestSePosition,
SESTATUS = 0,
SETOLERANZ1 = :SeToleranz1,
SETOLERANZ2 = :SeToleranz2,
SEBLOCKID = NULL,
SERFLAG = :SeRFlag
WHERE (SEID = :SeId);
END
END
END
END
![]() ![]() ![]() |