Con un IbQuery, lo que sucede es que los datos no los muestro, solo me interesea obtener el progreso, para mostrar una barrita de estado, para mostrar el progreso de la operacion, ademas si no utilizo un valor de retorno, el procedimiento se demora casi el doble, lo que pasa es que ese procedimiento inserta registro en una tabla temporal...
Código Delphi [-]
create procedure sp_ctrl_periodo_tarnscurrido
returns (INSERTADOS integer, CONTRATO_ACTUAL integer,
CODIGO_PARTICULAR varchar(20), DESCEQUIPO varchar(150))
as
Declare Variable DiasPaso Integer;
Declare Variable PasoVig Date;
Declare Variable Contador Integer;
Declare Variable Contrato Integer;
Declare Variable FecIni Date;
Declare Variable FecTer Date;
Declare Variable DiasArr Integer;
Declare Variable DiasContrato Integer;
Declare Variable Finqui Varchar(1);
Declare Variable TIPO_FAMILIA integer;
Declare Variable DESCFAMILIA varchar(1);
Declare Variable CODIGO_MANTENCION integer;
Declare Variable DIAS_MANTENCION integer;
Declare Variable TOTAL_DIAS_ARR integer;
Declare Variable FEC_VIGENCIA date;
/*Declare Variable CONTRATO_ACTUAL integer;
Declare Variable CODIGO_PARTICULAR varchar(20);
Declare Variable DESCEQUIPO varchar(150);*/
begin
Insertados=0;
DELETE FROM control_tiempo_transcurrido;
FOR SELECT DISTINCT A.CODIGO_MAQUINA,B.DESCRIPCION
FROM DETALLE_CONTRATOS_DE_ARR A, MAQUINAS B
WHERE A.CODIGO_MAQUINA=B.CODIGO_MAQUINA
INTO :Codigo_Particular,DescEquipo
</SPAN>DO BEGIN
/*FOR SELECT DISTINCT CODIGO_MAQUINA,DESCRIPCION
FROM MAQUINAS
INTO :Codigo_Particular,DescEquipo
</SPAN>DO BEGIN*/
DescFamilia='M';
Tipo_Familia=1;
DIASARR=0;
Contador=0;
DIASCONTRATO=0;
TOTAL_DIAS_ARR=0;
CONTRATO_ACTUAL=0;
FOR SELECT DISTINCT A.Codigo_Contrato,A.Fecha_Vigencia,B.Fecha_Inicio,B.Fecha_Termino,B.Dias_Arrendado,A.Finiquitado
FROM Contratos_de_Arriendo A,Detalle_Contratos_De_Arr B
WHERE B.Codigo_Maquina =:CODIGO_PARTICULAR
AND A.Codigo_Contrato=B.Codigo_Contrato
AND A.Contrato_Anulado='N'
ORDER BY A.Fecha_Contrato Desc
INTO :Contrato,:PasoVig,:FecIni,:FecTer,DiasArr,:Finqui
</SPAN>DO BEGIN
IF( (:Finqui='N')AND(Contador=0) )THEN
BEGIN
SELECT COUNT(*) AS TOTAL
FROM CONTRATOS_DE_ARRIENDO
WHERE CODIGO_CONTRATO =:Contrato
AND Codigo_Maquina =:CODIGO_PARTICULAR
INTO :Contador;
IF(:CONTADOR > 0)THEN
BEGIN
/*SELECT Fecha_Vigencia
FROM CONTRATOS_DE_ARRIENDO
WHERE CODIGO_CONTRATO =:Contrato
AND Codigo_Maquina =:CODIGO_PARTICULAR
INTO :PasoVig; */
FEC_VIGENCIA=:PasoVig;
DIASCONTRATO=('NOW' - FEC_VIGENCIA);
CONTRATO_ACTUAL=:Contrato;
END
END
IF(CONTRATO_ACTUAL <> Contrato)THEN
BEGIN
IF(FecTer >= FecIni)THEN
TOTAL_DIAS_ARR=TOTAL_DIAS_ARR + DiasArr;/* (FecTer - FecIni);*/
ELSE
TOTAL_DIAS_ARR=TOTAL_DIAS_ARR + 0;
END
END
IF(TOTAL_DIAS_ARR > 0 ) THEN
BEGIN
FOR SELECT DISTINCT CODIGO_MANTENCION,DIAS_PARA_LA_MANTENCION
FROM PERIODO_MANTENCIONES
WHERE TIPO_FAMILIA=1
AND CODIGO_PARTICULAR = :CODIGO_PARTICULAR
INTO :CODIGO_MANTENCION, IASPASO
DO BEGIN
IF(:CONTRATO_ACTUAL > 0)THEN
DIAS_MANTENCION= IASPASO - ('NOW' - FEC_VIGENCIA);
ELSE
DIAS_MANTENCION= IASPASO;
Insertados=Insertados + 1;
INSERT INTO control_tiempo_transcurrido(CODIGO_PARTICULAR,TIPO_FAMILIA,DESC_FAMILIA,
DESCRIPCION_PARTICULAR,CONTRATO_ACTUAL,DIAS_CONTRO_ACTUAL,DIAS_ARRENDADO,
CODIGO_MANTENCION,DIAS_MANTENCION)
VALUES(:CODIGO_PARTICULAR,:TIPO_FAMILIA, ESCFAMILIA, escEquipo,:CONTRATO_ACTUAL,
IASCONTRATO,:TOTAL_DIAS_ARR,:CODIGO_MANTENCION, IAS_MANTENCION);
SUSPEND;
END
END
IF(TOTAL_DIAS_ARR > 0 ) THEN
BEGIN
/*SELECT COUNT(*)
FROM RL_MAQUINAS_COMPONENTES
WHERE CODIGO_MAQUINA=:Codigo_Particular
INTO :Contador;
IF(Contador > 0)THEN
BEGIN */
FOR SELECT DISTINCT A.CODIGO_COMPONENTE,B.DESCRIPCION
FROM RL_MAQUINAS_COMPONENTES A, COMPONENTES B
WHERE A.CODIGO_MAQUINA=:Codigo_Particular
AND A.CODIGO_COMPONENTE=B.CODIGO_COMPONENTE
INTO :Codigo_Particular,DescEquipo
</SPAN>DO BEGIN
DescFamilia='C';
Tipo_Familia=2;
FOR SELECT DISTINCT CODIGO_MANTENCION,DIAS_PARA_LA_MANTENCION
FROM PERIODO_MANTENCIONES
WHERE TIPO_FAMILIA=2
AND CODIGO_PARTICULAR = :CODIGO_PARTICULAR
INTO :CODIGO_MANTENCION,DIASPASO
</SPAN>DO BEGIN
IF(:CONTRATO_ACTUAL > 0)THEN
DIAS_MANTENCION=DIASPASO - ('NOW' - FEC_VIGENCIA);
</SPAN>ELSE
DIAS_MANTENCION=DIASPASO;
</SPAN>
Insertados=Insertados + 1;
INSERT INTO control_tiempo_transcurrido(CODIGO_PARTICULAR,TIPO_FAMILIA,DESC_FAMILIA,
DESCRIPCION_PARTICULAR,CONTRATO_ACTUAL,DIAS_CONTRO_ACTUAL,DIAS_ARRENDADO,
CODIGO_MANTENCION,DIAS_MANTENCION)
VALUES(:CODIGO_PARTICULAR,:TIPO_FAMILIA,DESCFAMILIA, escEquipo,:CONTRATO_ACTUAL,
</SPAN>DIASCONTRATO,:TOTAL_DIAS_ARR,:CODIGO_MANTENCION, IAS_MANTENCION);
</SPAN>SUSPEND;
END
END
/* END*/
END
END
end
|