Una ayuda para un select
Hola, estoy trabajando en developper 6.0, resulta que tenemos una forma para la captura de las declaraciones, un proceso de esta forma es la liquidación de conceptos entre ellos intereses, para lo cual se tiene una unidades de programa donde se hacen los cálculos, dentro de esa unidad de programa se tiene lo siguiente.
secu código valor pagos
3830 13 294000 294000
3830 14 44000 44000
3830 15 0 0
3830 16 21000 21000
3830 17 12000 12000
3830 18 0 0
3830 19 0 0
3830 20 0 0
3830 48 0 0
El contenido de la unidad de programa es el siguiente:
PROCEDURE MORAS_INDUSTRIA_FISCALIZACION IS
V_TOTAL_TOTAL NUMBER:=0;
V_TOTAL NUMBER:=0;
V_MESES NUMBER:=0;
V_DIAS_TOTAL_MES NUMBER:=0;
V_DIAS_MES NUMBER:=0;
V_INTERESES_DIARIOS NUMBER:=0;
BEGIN
--CODIGO OBTENIDO DE MORAS_INDUSTRIA_DIARIO
--NUMERO TOTAL DE DIAS DEL MES DONDE SE VA A HACER EL ABONO
BEGIN
SELECT TO_NUMBER(TO_CHAR(LAST_DAY (:FECHA_PRESENTACION),'DD')) INTO V_DIAS_TOTAL_MES FROM DUAL;
EXCEPTION WHEN OTHERS THEN
MESSAGE('ERROR AL OBTENER #DE DIAS DEL MES');
END;
-NUMERO DE DIAS QUE HAN CORRIDO DEL MES
BEGIN
SELECT TO_NUMBER(TO_CHAR(:FECHA_PRESENTACION,'DD'))
INTO V_DIAS_MES
FROM DUAL;
EXCEPTION WHEN OTHERS THEN
MESSAGE('ERROR AL OBTENER EL DIA ACTUAL DEL MES');
END;
CALCULO DE INTERESES POR LOS DIAS QUE PASARON DEL MES
V_INTERESES_DIARIOS:=(:GLOBAL.INT / V_DIAS_TOTAL_MES) * V_DIAS_MES;
-DEUDA TOTAL
BEGIN
SELECT SUM(VALOR)
INTO V_TOTAL_TOTAL FROM RNT_CONCEPTOS_COBROS_NEGOCIOS
WHERE SECUENCIA_RADICACION=33773
AND COCO_CODIGO IN(17,13,14,15,16,18,19);
END;
BEGIN
SELECT FLOOR(MONTHS_BETWEEN(SYSDATE,
TO_DATE('3103'||(:PERI_IMP_VIG_VIGE_NUMERO + 1),'DDMMYYYY'))) INTO V_MESES
FROM DUAL;
END;
-TOTAL DE INTERESES DE MORA
V_TOTAL:=V_TOTAL + (V_MESES * V_TOTAL_TOTAL * :GLOBAL.INT / 100) + ( V_TOTAL_TOTAL * V_INTERESES_DIARIOS / 100);
V_TOTAL := ROUND(V_TOTAL,-3);
UPDATE RNT_CONCEPTOS_COBROS_NEGOCIOS SET VALOR=V_TOTAL,COBRA='S',
PAGOS=V_TOTAL
WHERE SECUENCIA_RADICACION=:SECUENCIA
AND COCO_CODIGO=20;
COMMIT;
END;
El problema radica en que no toma en la sumatoria el concepto con código 17
y por lo tanto el valor total queda inferior al que debe ser.
Lo extraño del asunto es que por Sql lo toma como debe ser, no se por que no funciona como unidad de programa.
Ademas de todo lo coloque en un botón y lo ejecute y el resultado fue que la cumatoria quedó correcta.
No se que pueda ser,
Muchas gracias por la atención.
secu código valor pagos
3830 13 294000 294000
3830 14 44000 44000
3830 15 0 0
3830 16 21000 21000
3830 17 12000 12000
3830 18 0 0
3830 19 0 0
3830 20 0 0
3830 48 0 0
El contenido de la unidad de programa es el siguiente:
PROCEDURE MORAS_INDUSTRIA_FISCALIZACION IS
V_TOTAL_TOTAL NUMBER:=0;
V_TOTAL NUMBER:=0;
V_MESES NUMBER:=0;
V_DIAS_TOTAL_MES NUMBER:=0;
V_DIAS_MES NUMBER:=0;
V_INTERESES_DIARIOS NUMBER:=0;
BEGIN
--CODIGO OBTENIDO DE MORAS_INDUSTRIA_DIARIO
--NUMERO TOTAL DE DIAS DEL MES DONDE SE VA A HACER EL ABONO
BEGIN
SELECT TO_NUMBER(TO_CHAR(LAST_DAY (:FECHA_PRESENTACION),'DD')) INTO V_DIAS_TOTAL_MES FROM DUAL;
EXCEPTION WHEN OTHERS THEN
MESSAGE('ERROR AL OBTENER #DE DIAS DEL MES');
END;
-NUMERO DE DIAS QUE HAN CORRIDO DEL MES
BEGIN
SELECT TO_NUMBER(TO_CHAR(:FECHA_PRESENTACION,'DD'))
INTO V_DIAS_MES
FROM DUAL;
EXCEPTION WHEN OTHERS THEN
MESSAGE('ERROR AL OBTENER EL DIA ACTUAL DEL MES');
END;
CALCULO DE INTERESES POR LOS DIAS QUE PASARON DEL MES
V_INTERESES_DIARIOS:=(:GLOBAL.INT / V_DIAS_TOTAL_MES) * V_DIAS_MES;
-DEUDA TOTAL
BEGIN
SELECT SUM(VALOR)
INTO V_TOTAL_TOTAL FROM RNT_CONCEPTOS_COBROS_NEGOCIOS
WHERE SECUENCIA_RADICACION=33773
AND COCO_CODIGO IN(17,13,14,15,16,18,19);
END;
BEGIN
SELECT FLOOR(MONTHS_BETWEEN(SYSDATE,
TO_DATE('3103'||(:PERI_IMP_VIG_VIGE_NUMERO + 1),'DDMMYYYY'))) INTO V_MESES
FROM DUAL;
END;
-TOTAL DE INTERESES DE MORA
V_TOTAL:=V_TOTAL + (V_MESES * V_TOTAL_TOTAL * :GLOBAL.INT / 100) + ( V_TOTAL_TOTAL * V_INTERESES_DIARIOS / 100);
V_TOTAL := ROUND(V_TOTAL,-3);
UPDATE RNT_CONCEPTOS_COBROS_NEGOCIOS SET VALOR=V_TOTAL,COBRA='S',
PAGOS=V_TOTAL
WHERE SECUENCIA_RADICACION=:SECUENCIA
AND COCO_CODIGO=20;
COMMIT;
END;
El problema radica en que no toma en la sumatoria el concepto con código 17
y por lo tanto el valor total queda inferior al que debe ser.
Lo extraño del asunto es que por Sql lo toma como debe ser, no se por que no funciona como unidad de programa.
Ademas de todo lo coloque en un botón y lo ejecute y el resultado fue que la cumatoria quedó correcta.
No se que pueda ser,
Muchas gracias por la atención.
1 respuesta
Respuesta de tauriton
1