-- ---> DECLARACION VARIABLES DEL CURSOR -- DECLARE v_localidad varchar(2); v_cuenta varchar(17); v_ano_mes varchar(6); v_descripcion varchar(2); v_cod_ciclo varchar(2); v_id_uso varchar(2); v_EstSuscriptor varchar(1); -- ---> DECLARACION VARIABLES DE TRABAJO -- v_mNumPreFac NUMERIC; v_mNumTotPreFac NUMERIC; v_mNumPreFacIni NUMERIC; v_mNumPreFacFin NUMERIC; v_est_ubicacion varchar(1); SWV_err INTEGER; -- ---> DECLARACION DEL CURSOR -- DECLARE mCurSuscriptores Cursor FOR SELECT SUSCRIPTOR.LOCALIDAD, SUSCRIPTOR.CUENTA, SUSCRIPTOR.FORMATO_COBRO, SUSCRIPTOR.TIPO_USO, SUSCRIPTOR.STATUS FROM SUSCRIPTOR WHERE (SUSCRIPTOR.STATUS = '0' or SUSCRIPTOR.STATUS = '3') AND SUSCRIPTOR.COD_CICLO = v_pcodciclo AND SUSCRIPTOR.SUSCRIPTOR = '1' AND LOCALIDAD || CUENTA NOT IN (SELECT LOCALIDAD || CUENTA AS XCUENTA FROM PREFACTURACION WHERE ANO_MES = v_pperprefacact AND(DESCRIPCION = '01' OR DESCRIPCION = '05') AND FACTURADO <> '2') ORDER BY SUSCRIPTOR.LOCALIDAD, SUSCRIPTOR.CUENTA; -- ---> PROGRAMA PRINCIPAL -- BEGIN -- ---> Inicializa las Variables de Trabajo -- v_mNumPreFac := 0; v_mNumTotPreFac := 0; v_mNumPreFacIni := 0; v_mNumPreFacFin := 0; v_est_ubicacion := 0; SWV_err := 0; OPEN mCurSuscriptores; FETCH mCurSuscriptores INTO v_localidad, v_cuenta, v_descripcion, v_id_uso, v_EstSuscriptor; IF NOT FOUND then RAISE EXCEPTION 'No Existen Suscriptores Activos para el Ciclo Seleccionado...'; CLOSE mCurSuscriptores; Return 0; END IF; RAISE NOTICE 'ABRIO CURSOR mCurSuscriptores'; -- ---> INICIA LA CARGA DE REGISTROS EN LA TABLA PREFACTURACION -- while FOUND loop -- ---> Incrementa en uno el Número Total de Prefacturas Generadas -- v_mNumTotPreFac := v_mNumTotPreFac + 1; -- ---> Busca el numero de prefactura inicial -- begin SELECT NRO_PREFACTURACION INTO v_mNumPreFac FROM OFICINA WHERE COD_OFICINA = v_pcodoficina; EXCEPTION WHEN OTHERS THEN SWV_err := -1; end; if SWV_err <> 0 then RAISE EXCEPTION 'Error tratando de asignar el Número de la Prefactura, Reintente otra vez y si el error persiste consulte Administrador de la Aplicación....'; Return 0; END IF; SWV_err := 0; -- ---> Si es la Primera Prefactura Guardo el Número -- IF v_mNumTotPreFac = 1 THEN v_mNumPreFacIni := v_mNumPreFac; ELSE v_mNumPreFacFin := v_mNumPreFac; END IF; -- ---> Busca el ubicación de la Localidad -- begin SELECT est_ubicacion INTO v_est_ubicacion FROM LOCALIDAD WHERE COD_LOCALIDAD = v_localidad; EXCEPTION WHEN OTHERS THEN SWV_err := -1; end; if SWV_err <> 0 then RAISE EXCEPTION 'Error tratando de Obtener la Ubicacón de la Localidad, Reintente otra vez y si el error persiste consulte Administrador de la Aplicación....'; Return 0; END IF; SWV_err := 0; -- ---> Inserta en Prefacturación -- begin INSERT INTO prefacturacion( nro_prefactura, localidad, cuenta, ano_mes, descripcion, lectura, fecha_lectura, consumo, fecha_facturacion, total_conceptos, total_iva, total_pagar, facturado, cod_ciclo, id_uso, est_ubicacion) VALUES (v_mNumPreFac, v_localidad, v_cuenta, v_pperprefacact, v_descripcion, '0', '01/01/1900', 0, '01/01/1900', 0, 0, 0, '0', v_pcodciclo, v_id_uso, v_est_ubicacion); EXCEPTION WHEN OTHERS THEN SWV_err := -1; end; IF SWV_err <> 0 then RAISE EXCEPTION 'Error tratando de Insertar en Prefacturación, Reintente otra vez y si el error persiste consulte Administrador de la Aplicación....'; CLOSE mCurSuscriptores; Return 0; END IF; SWV_err := 0; -- ---> Actualiza en Oficina -- begin UPDATE OFICINA SET NRO_PREFACTURACION = v_mNumPreFac + 1 WHERE COD_OFICINA = v_pcodoficina; EXCEPTION WHEN OTHERS THEN SWV_err := -1; end; IF SWV_err <> 0 then RAISE EXCEPTION 'Error tratando de Actualizar Nro. Prefacturacion en OFICINA, Reintente otra vez y si el error persiste consulte Administrador de la Aplicación....'; CLOSE mCurSuscriptores; Return 0; END IF; SWV_err := 0; -- ---> Lee el Proximo Registro del Cursor -- FETCH mCurSuscriptores INTO v_localidad, v_cuenta, v_descripcion, v_id_uso, v_EstSuscriptor; IF SWV_err <> 0 then RAISE EXCEPTION 'Error al leer el cursor mCurSuscriptores, Reintente otra vez y si el error persiste consulte Administrador de la Aplicación....'; CLOSE mCurSuscriptores; Return 0; END IF; SWV_err := 0; END LOOP; -- ---> Actualización Registro en Proceso de Prefacturación -- begin UPDATE PRO_FACT_CICLO SET nro_prefactura_inicial = CAST(v_mNumPreFacIni AS VARCHAR(20)), nro_prefactura_final = CAST(v_mNumPreFacFin AS VARCHAR(20)) WHERE PER_PREFACTURA = v_pperprefacact AND COD_CICLO = v_pcodciclo; EXCEPTION WHEN OTHERS THEN SWV_err := -1; end; IF SWV_err <> 0 then RAISE EXCEPTION 'Error tratando de Actualizar el Proceso de Prefacturación, Reintente otra vez y si el error persiste consulte Administrador de la Aplicación....'; Return 0; END IF; SWV_err := 0; -- ---> Elimina el Cursor de Suscriptores -- CLOSE mCurSuscriptores; IF SWV_err <> 0 then RAISE EXCEPTION 'Error tratando de eliminar el cursor de Suscriptores, Reintente otra vez y si el error persiste consulte Administrador de la Aplicación....'; Return 0; END IF; SWV_err := 0; Return v_mNumTotPreFac; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE;