Produktive Stunden, Begründete Unterbrechungen, Unbegründete Unterbrechungen aus dem Betriebsmittel-Zeitkonto.
Berichtsname |
MDBMRK |
Voraussetzungen |
|
Tabelle(n) |
MDZLOG (Betriebsmittel-Zeitkonto) |
Prozedur-1 |
MDE_BenchmarkBetriebsmittelVonBisZeitraum |
Parameter |
Firmennummer Von Betriebsmittelnummer Bis Betriebsmittelnummer Von Datum Bis Datum |
Prozedur-2 |
MDE_BenchmarkBetriebsmittelListeZeitraum (wird nicht genutzt) |
Parameter |
Firmennummer Betriebsmittelnummern ('0101','0102','0103','0110','0120') Von Datum Bis Datum |
Ergebnistabelle |
Betriebsmittelnummer Bezeichnung des Betriebsmittels Stunden Produktiv Stunden Begründeter Unterbrechungen Stunden Unbegründeter Unterbrechungen |
Aufbereitung |
Keine |
Crystal-Reports |
MDBMRK.RPT |
Excel-Diagramme |
Zylindersäulen 100% Gestapelt |
CREATE PROCEDURE MDE_BenchmarkBetriebsmittelVonBisZeitraum ( @ZSFIRM AS VARCHAR(2), @ZSVGRP AS VARCHAR(6), @ZSBGRP AS VARCHAR(6), @ZSVDAT AS DATETIME, @ZSBDAT AS DATETIME )
AS
-- Meldungen des SQL-Servers abschalten
--
SET NOCOUNT ON
-- Variablen definieren
--
DECLARE @SQLString VARCHAR(2048)
DECLARE @TmpTableName VARCHAR( 128)
DECLARE @SQLVonDatum VARCHAR( 30)
DECLARE @SQLBisDatum VARCHAR( 30)
-- Prüfen ob der Abfragezeitraum hinter der aktuellen Zeit liegt
--
IF @ZSBDAT > GETDATE() SET @ZSBDAT = GETDATE()
-- Zeitraum in Stringvariablen übernehmen
--
SET @SQLVONDatum = CONVERT(VARCHAR,@ZSVDAT,104) + ' ' + CONVERT(VARCHAR,@ZSVDAT,108)
SET @SQLBisDatum = CONVERT(VARCHAR,@ZSBDAT,104) + ' ' + CONVERT(VARCHAR,@ZSBDAT,108)
-- Eindeutigen Tabellennamen vergeben
--
SET @TmpTableName = 'TEMPDB..MDZLOG_' + REPLACE( CONVERT(VARCHAR,GETDATE(),112) + CONVERT(VARCHAR,GETDATE(),114) ,':','')
-- Übernahme der Zeitkontodaten in eine temporäre Tabelle
--
SET @SQLString = 'SELECT
ZSLKEY
,ZSFIRM
,ZSAGRP
,ZSIOCH
,ZSVDAT
,ZSBDAT
,ZSISON
,ZSUART
,ZSNUMM
,ZSLUSR
,SBVDAT = ZSVDAT
,SBBDAT = ZSBDAT
,MINUTEN = 0
INTO ' + @TmpTableName + '
FROM GIPSY4MDE.DBO.MDZLOG AS MDZLOG
INNER JOIN GIPSY4MDE.DBO.PAMDEP AS PAMDEP ON
ZSAGRP = TPAGRP
WHERE
ZSFIRM = ''' + @ZSFIRM + '''
AND ZSAGRP >= ''' + @ZSVGRP + '''
AND ZSAGRP <= ''' + @ZSBGRP + '''
AND ZSIOCH = TPCCNT
AND (
( ZSBDAT BETWEEN ''' + @SQLVonDatum + ''' AND ''' + @SQLBisDatum + ''' )
OR ( ZSVDAT BETWEEN ''' + @SQLVonDatum + ''' AND ''' + @SQLBisDatum + ''' )
OR ( ZSVDAT <= ''' + @SQLVonDatum + ''' AND YEAR(ZSBDAT) <= 1900 )
OR ( ZSVDAT <= ''' + @SQLVonDatum + ''' AND ''' + @SQLBisDatum + ''' < ZSBDAT )
)
ORDER BY
ZSAGRP
,ZSVDAT'
-- Temporäre Tabelle mit allen relevanten Datensätzen erzeugen
--
EXEC (@SQLString)
-- Wenn der Zeitstrahl vor dem Abfragezeitpunkt liegt
--
SET @SQLString = 'UPDATE ' + @TmpTableName + '
SET
SBVDAT = ''' + @SQLVonDatum + '''
WHERE
ZSVDAT < ''' + @SQLVonDatum + ''''
-- SQL ausführen
--
EXEC (@SQLString)
-- Wenn der Zeitstrahl hinter dem Abfragezeitpunkt liegt oder unbeendet ist
--
SET @SQLString = 'UPDATE ' + @TmpTableName + '
SET
SBBDAT = ''' + @SQLBisDatum + '''
WHERE
YEAR(ZSBDAT) <= 1900 OR ZSBDAT > ''' + @SQLBisDatum + ''''
-- SQL ausführen
--
EXEC (@SQLString)
-- Berechne die Zeitspanne in Minuten
-- Dabei ungültige Zeiträume abfangen
SET @SQLString = 'UPDATE ' + @TmpTableName + 'SET MINUTEN = CASE WHEN SBBDAT < SBVDAT THEN 0 ELSE DATEDIFF(mi,SBVDAT,SBBDAT) END'
-- SQL ausführen
--
EXEC (@SQLString)
-- Zeige das Summenergebnis
--
SET @SQLString = 'SELECT
ZSAGRP
,TPNAME
,PRDSTD = ROUND( SUM( CASE WHEN ZSISON > 0 THEN MINUTEN ELSE 0 END ) / 60.00,1)
,UBGSTD = ROUND( SUM( CASE WHEN ZSISON = 0 AND ZSUART > 0 THEN MINUTEN ELSE 0 END ) / 60.00,1)
,UUBSTD = ROUND( SUM( CASE WHEN ZSISON = 0 AND ZSUART = 0 THEN MINUTEN ELSE 0 END ) / 60.00,1)
FROM ' + @TmpTableName + ' AS MDZLOG
INNER JOIN GIPSY4MDE.DBO.PAMDEP AS PAMDEP ON
ZSAGRP = TPAGRP
GROUP BY
ZSAGRP
,TPNAME
ORDER BY
ZSAGRP'
-- SQL ausführem
--
EXEC (@SQLString)