USE [MIIFDB]
GO
/****** Object: StoredProcedure [dbo].[spMII_RegistraProductosBuenos] Script Date: 06/22/2015 15:04:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spMII_RegistraProductosBuenos]
AS
------------------------------------------------------------
-- DECLARE
------------------------------------------------------------
DECLARE @ERR_LINE INT
DECLARE @ERR_DESC VARCHAR(1000)
DECLARE @vPLN_ID VARCHAR(100)
DECLARE @vLIN_ID VARCHAR(100)
DECLARE @vEQU_ID VARCHAR(100)
DECLARE @vEQU_TEORICO NUMERIC(6,4)
DECLARE @vEQU_NOTIF_AUTOM VARCHAR(1)
DECLARE @vTAG_ID VARCHAR(100)
DECLARE @vCOM_AUFNR VARCHAR(12)
DECLARE @vMINUTOS_ES_MICROPARADA INT
DECLARE @vEQU_ID_ONOFF VARCHAR(100)
DECLARE @vTIEMPO_MICROPARADA INT
DECLARE @vES_LABORABLE VARCHAR(2)
DECLARE @vBUF_FECHA_SYS_MII datetime
DECLARE @vBUF_VALOR VARCHAR(100)
DECLARE @vFECHA_CORTE VARCHAR(100)
DECLARE @vFECHA_CORTE_DATE DATETIME
DECLARE @vTURNO_ACTUAL INT
DECLARE @vMINUTOS_EVENTO INT
DECLARE @vMINUTOS_EVENTO_ACTUAL INT
DECLARE @vCANTIDAD_REGISTROS_PERIODO INT
DECLARE @vULTIMA_FECHA_JOB VARCHAR(100)
DECLARE @vULT_TDE_ID VARCHAR(100)
DECLARE @vULT_OPR_FEC_INI_OCURRENCIA datetime
DECLARE @vULT_OPR_FEC_FIN_OCURRENCIA datetime
DECLARE @vULT_OPR_FEC_FIN_OCURRENCIA_PLUS_1_SEC datetime
DECLARE @vULT_TUR_ID INT
DECLARE @vULT_TDE_ID_TRADUCIDO VARCHAR(100)
DECLARE @vULT_OPR_ID NUMERIC(18,0)
DECLARE @vJOB_FEC_LECT_INI datetime
DECLARE @vJOB_FEC_LECT_FIN datetime
DECLARE @vJOB_FEC_LECT_INI_STR VARCHAR(100)
DECLARE @vJOB_FEC_LECT_FIN_STR VARCHAR(100)
DECLARE @vULT_NOBUFFER_TDE_ID VARCHAR(100)
DECLARE @vULT_NOBUFFER_OPR_FEC_INI_OCURRENCIA datetime
DECLARE @vULT_NOBUFFER_OPR_FEC_FIN_OCURRENCIA datetime
DECLARE @vULT_NOBUFFER_TUR_ID INT
DECLARE @vULT_NOBUFFER_TDE_ID_TRADUCIDO VARCHAR(100)
DECLARE @vULT_NOBUFFER_OPR_ID NUMERIC(18,0)
DECLARE @vULT_NOBUFFER_TURNO_ACTUAL INT
DECLARE @vULT_NOBUFFER_MINUTOS_EVENTO INT
DECLARE @vTURNO_ACTUAL_FECHA_INICIO datetime
DECLARE @vCORRELATIVO_LOTE NUMERIC(30,0)
-----------------------------------------------------------
--> CURSOR ULTIMA EJECUCION JOB
------------------------------------------------------------
DECLARE @cursorULTIMA_EJECUCION_JOB cursor
SET @cursorULTIMA_EJECUCION_JOB = CURSOR FOR
SELECT JOB_FEC_LECT_INI,
JOB_FEC_LECT_FIN
FROM MII_000_JOB_EXECUTION
WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS'
OPEN @cursorULTIMA_EJECUCION_JOB
FETCH NEXT FROM @cursorULTIMA_EJECUCION_JOB INTO @vJOB_FEC_LECT_INI, @vJOB_FEC_LECT_FIN
WHILE (@@FETCH_STATUS = 0)
BEGIN
--> Avanza a proximo registro del cursor
FETCH NEXT FROM @cursorULTIMA_EJECUCION_JOB INTO @vJOB_FEC_LECT_INI, @vJOB_FEC_LECT_FIN
END
CLOSE @cursorULTIMA_EJECUCION_JOB
DEALLOCATE @cursorULTIMA_EJECUCION_JOB
--> Cierra y Libera Los cursores
--> Convierte y asigna fechas en formato varchar
SET @vJOB_FEC_LECT_INI_STR = TO_CHAR(@vJOB_FEC_LECT_INI, 'DD/MM/YYYY HH24:MI:SS')
SET @vJOB_FEC_LECT_FIN_STR = TO_CHAR(@vJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS')
PRINT N'Fecha Proceso: ' + @vJOB_FEC_LECT_INI_STR + ' ' + @vJOB_FEC_LECT_FIN_STR
------------------------------------------------------------
-- CURSOR LINEAS
------------------------------------------------------------
DECLARE @cursorPLN_LIN cursor
SET @cursorPLN_LIN = CURSOR FOR
SELECT p.PLN_ID,
l.LIN_ID,
e.EQU_ID,
e.EQU_TEORICO,
e.EQU_NOTIF_AUTOM,
v.TAG_ID
FROM MII_PLANTA p,
MII_LINEA l,
MII_VARIABLE_PLC v,
MII_EQUIPO e
WHERE p.PLN_ID = l.PLN_ID
AND p.PLN_ID = v.PLN_ID
AND l.LIN_ID = v.LIN_ID
AND v.EQU_ID = e.EQU_ID
AND v.PLN_ID = p.PLN_ID
AND v.LIN_ID = l.LIN_ID
AND p.PLN_VIGENTE = 1
AND l.LIN_VIGENTE = 1
AND v.TVA_ID = 'CAN'
AND EQU_NOTIF = 1
------------------------------------------------------------
-- BEGIN
------------------------------------------------------------
SET @ERR_LINE = 10
SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Abre cursor Planta - Linea'
PRINT @ERR_DESC
---------------------------------------------------------------------------------------------
-- Transforma Fecha sys en Formato Fecha '01/07/2013 16:00:02' --> '07/01/2013 16:00:02'
---------------------------------------------------------------------------------------------
SET @vFECHA_CORTE = TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS')
SET @vFECHA_CORTE_DATE = TO_DATE(@vFECHA_CORTE, 'DD/MM/YYYY HH24:MI:SS')
BEGIN TRY
OPEN @cursorPLN_LIN
--> Avanza a proximo registro del cursor
FETCH NEXT FROM @cursorPLN_LIN INTO @vPLN_ID, @vLIN_ID, @vEQU_ID, @vEQU_TEORICO, @vEQU_NOTIF_AUTOM, @vTAG_ID
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @ERR_LINE = 20
SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Planta: ' + TO_CHAR(@vPLN_ID) + ' Linea: ' + TO_CHAR(@vLIN_ID)+ ' Equipo: ' + TO_CHAR(@vEQU_ID)+ ' Teórico: ' + TO_CHAR(@vEQU_TEORICO)+ ' TAG_ID: ' + TO_CHAR(@vTAG_ID)
PRINT @ERR_DESC
--> OBTIENE LA CANTIDAD DE REGISTROS
SELECT @vCANTIDAD_REGISTROS_PERIODO = COUNT(*)
FROM MII_BUFFER_PLC b
WHERE b.TAG_ID = @vTAG_ID
AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') > TO_DATE(@vJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS') AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') <= TO_DATE(@vFECHA_CORTE_DATE, 'DD/MM/YYYY HH24:MI:SS')
IF @vCANTIDAD_REGISTROS_PERIODO <= 0
BEGIN
SET @ERR_LINE = 1000
SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Registros (TAG_ID): ' + TO_CHAR(@vCANTIDAD_REGISTROS_PERIODO)
PRINT @ERR_DESC
END
ELSE
BEGIN
SET @ERR_LINE = 2000
SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] Registros (TAG_ID): ' + TO_CHAR(@vCANTIDAD_REGISTROS_PERIODO)
PRINT @ERR_DESC
--> Reserva Proximo Correlativo de Proceso / Lote
SELECT @vCORRELATIVO_LOTE = dbo.fnObtieneCorrelativo('LOTE_CONTEO_BUENOS_BUFFER')
UPDATE MII_000_CORRELATIVO_MANUAL
SET CORRELATIVO_ID = @vCORRELATIVO_LOTE
WHERE CORRELATIVO_NAME = 'LOTE_CONTEO_BUENOS_BUFFER'
-- Reserva Proximo Correlativo de Proceso / Lote <--
--> Asigna Numero de Lote a registros de Buffer
UPDATE MII_BUFFER_PLC
SET BUF_LOTE_ID = @vCORRELATIVO_LOTE
WHERE TAG_ID = @vTAG_ID
AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') > TO_DATE(@vJOB_FEC_LECT_FIN, 'DD/MM/YYYY HH24:MI:SS') AND TO_DATE(BUF_FECHA_SYS_MII, 'DD/MM/YYYY HH24:MI:SS') <= TO_DATE(@vFECHA_CORTE_DATE, 'DD/MM/YYYY HH24:MI:SS')
SELECT @vCANTIDAD_REGISTROS_PERIODO = COUNT(*)
FROM MII_BUFFER_PLC
WHERE BUF_LOTE_ID = @vCORRELATIVO_LOTE
AND TAG_ID = @vTAG_ID
--> Obtiene Orden Activa del Equipo
SELECT @vCOM_AUFNR = NVL(COM_AUFNR,NULL)
FROM MII_PROD_ORDEN_ACTIVA
WHERE EQU_ID = @vEQU_ID
--> Persiste la cantidad de Registros
EXECUTE dbo.spMII_PUT_ProductosBuenos @vPLN_ID, @vLIN_ID, @vEQU_ID, @vCANTIDAD_REGISTROS_PERIODO, @vCOM_AUFNR, @vCANTIDAD_REGISTROS_PERIODO
END
PRINT N'------------------------ CORTE PLN_LIN_EQU_TAG ---------------------------------------'
--> Avanza a proximo registro del cursor
FETCH NEXT FROM @cursorPLN_LIN INTO @vPLN_ID, @vLIN_ID, @vEQU_ID, @vEQU_TEORICO, @vEQU_NOTIF_AUTOM, @vTAG_ID
END
--------------------------------------------------------------------
-- FIN Recorre Planta Linea (a)
--------------------------------------------------------------------
SET @ERR_LINE = 90000
SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Actualizacion Fechas Ejecucion JOB REGISTRA_TIEMPO_OPERACION '
PRINT @ERR_DESC
UPDATE MII_000_JOB_EXECUTION
SET JOB_FEC_UPD = sysdate,
JOB_FEC_LECT_INI = @vJOB_FEC_LECT_FIN,
JOB_FEC_LECT_FIN = @vFECHA_CORTE_DATE
WHERE JOB_NAME = 'REGISTRA_PRODUCTOS_BUENOS'
SET @ERR_LINE = 1000000
SET @ERR_DESC = '[' + TO_CHAR(@ERR_LINE) + '] ' + 'Proceso Finalizado con Exito'
PRINT @ERR_DESC
SELECT @ERR_LINE LINEA, @ERR_DESC DESCRIPCION, NVL(ERROR_NUMBER(),0) ERR_NUMBER, NVL(ERROR_MESSAGE(),'Exito') ERR_MESSAGE, NVL(ERROR_LINE(),0) ERR_LINE
END TRY
BEGIN CATCH
SELECT @ERR_LINE LINEA, @ERR_DESC DESCRIPCION, NVL(ERROR_NUMBER(),0) ERR_NUMBER, NVL(ERROR_MESSAGE(),'Exito') ERR_MESSAGE, NVL(ERROR_LINE(),0) ERR_LINE
END CATCH;
------------------------------------------------------------
-- END
------------------------------------------------------------
--> Cierra y Libera Los cursores
CLOSE @cursorPLN_LIN
DEALLOCATE @cursorPLN_LIN