Hallo,
Ich habe folgendes Problem:
Bei der Zeiterfassung mit Hilfe eines Terminal-PC`s werden die erfassten Daten in Microsoft Navision gespeichert unter einer speziellen Sicht("viewNAV_BDE") auf der MSSQL Datenbank.
Daraufhin werden die Arbeitsbeginn/Ende Zeiten auf 15 Minuten hoch/runter gerundet.
Dies soll bei einer bestimmten Gruppe von Personen nicht mehr passieren! (Zeitmodell: Gleitzeit (ID:1 und 2))
(Es gibt ebenfalls eine Tabelle, in der das Zeitmodell mit PersonalNr. hinterlegt ist.)
Diese Rundung wird von dem Zeiterfassungsprogramm ausgeführt(Stored Procedure) und nennt sich spAutoSyncAnwesenheitRev.
Dabei wird in der SQL Tabelle: tAnwesenheit die Werte aus der Sicht("viewNAV_BDE") eingeschrieben mit der speziellen Rundung.
Wie lässt es sich nun am besten realisieren, dass diese Prozedur nur rundet, wenn die Personen nicht zur ZeitmodellID 1 oder 2 gehören?
Anbei die Prozedur:
CREATE PROCEDURE [spAutoSyncAnwesenheitRev]
AS
BEGIN
DECLARE @Round AS INT = ( SELECT [WertInt] FROM [tParameter] WHERE [Name] = 'RundungsInterval' );
INSERT INTO [tAnwesenheit]
( [BDE_ID], [PersonalNr], [Name], [Vorname], [Datum], [Zeit], [Meldeart], [MeldeartText] )
SELECT [ID],
[PersonalNR],
[Name],
[Vorname],
[Datum],
CASE [Meldungsart]
WHEN 6 THEN DATEADD ( MINUTE, ( DATEDIFF( MINUTE, 0,[Zeit] - '00:00:59' ) / @Round * @Round ) , 0 )
WHEN 7 THEN DATEADD ( MINUTE, ( DATEDIFF( MINUTE, 0,[Zeit] + '00:00:59' ) / @Round * @Round ) - ( CASE @Round WHEN 1 THEN 0 ELSE @ROUND END ), 0 )
WHEN 1 THEN [Zeit]
WHEN 2 THEN [Zeit]
END AS [Zeit],
[Meldungsart] AS [Meldeart],
CASE [Meldungsart]
WHEN 6 THEN 'Kommt'
WHEN 7 THEN 'Geht'
WHEN 1 THEN 'Pause'
WHEN 2 THEN 'PauseEnde'
END AS [MeldeartText]
FROM [viewNAV_BDE]
WHERE ( [Meldungsart] = 6 OR [Meldungsart] = 7 OR [Meldungsart] = 1 OR [Meldungsart] = 2 ) AND
[ID] NOT IN( SELECT [BDE_ID] FROM [tAnwesenheit] )
ORDER BY [ID];
END
Ich habe folgendes Problem:
Bei der Zeiterfassung mit Hilfe eines Terminal-PC`s werden die erfassten Daten in Microsoft Navision gespeichert unter einer speziellen Sicht("viewNAV_BDE") auf der MSSQL Datenbank.
Daraufhin werden die Arbeitsbeginn/Ende Zeiten auf 15 Minuten hoch/runter gerundet.
Dies soll bei einer bestimmten Gruppe von Personen nicht mehr passieren! (Zeitmodell: Gleitzeit (ID:1 und 2))
(Es gibt ebenfalls eine Tabelle, in der das Zeitmodell mit PersonalNr. hinterlegt ist.)
Diese Rundung wird von dem Zeiterfassungsprogramm ausgeführt(Stored Procedure) und nennt sich spAutoSyncAnwesenheitRev.
Dabei wird in der SQL Tabelle: tAnwesenheit die Werte aus der Sicht("viewNAV_BDE") eingeschrieben mit der speziellen Rundung.
Wie lässt es sich nun am besten realisieren, dass diese Prozedur nur rundet, wenn die Personen nicht zur ZeitmodellID 1 oder 2 gehören?
Anbei die Prozedur:
CREATE PROCEDURE [spAutoSyncAnwesenheitRev]
AS
BEGIN
DECLARE @Round AS INT = ( SELECT [WertInt] FROM [tParameter] WHERE [Name] = 'RundungsInterval' );
INSERT INTO [tAnwesenheit]
( [BDE_ID], [PersonalNr], [Name], [Vorname], [Datum], [Zeit], [Meldeart], [MeldeartText] )
SELECT [ID],
[PersonalNR],
[Name],
[Vorname],
[Datum],
CASE [Meldungsart]
WHEN 6 THEN DATEADD ( MINUTE, ( DATEDIFF( MINUTE, 0,[Zeit] - '00:00:59' ) / @Round * @Round ) , 0 )
WHEN 7 THEN DATEADD ( MINUTE, ( DATEDIFF( MINUTE, 0,[Zeit] + '00:00:59' ) / @Round * @Round ) - ( CASE @Round WHEN 1 THEN 0 ELSE @ROUND END ), 0 )
WHEN 1 THEN [Zeit]
WHEN 2 THEN [Zeit]
END AS [Zeit],
[Meldungsart] AS [Meldeart],
CASE [Meldungsart]
WHEN 6 THEN 'Kommt'
WHEN 7 THEN 'Geht'
WHEN 1 THEN 'Pause'
WHEN 2 THEN 'PauseEnde'
END AS [MeldeartText]
FROM [viewNAV_BDE]
WHERE ( [Meldungsart] = 6 OR [Meldungsart] = 7 OR [Meldungsart] = 1 OR [Meldungsart] = 2 ) AND
[ID] NOT IN( SELECT [BDE_ID] FROM [tAnwesenheit] )
ORDER BY [ID];
END