Files
MBS/PROYECTO/acdir/acprmt005.4gl
T

178 lines
5.1 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : ACPRMT005
OBJETIVO : Realizar Proceso de Depreciacion Automatica de
Activos Fijos
PROGRAMADOR : Tadeo A. Ferreras.
FECHA REALIZACION : Sept. 27, 1993.
MODIFICADO POR : JUAN F. SOTO
MODIFICACION : SE CAMBIO CONDICION IGUALABA A CERO LA DEP. DEL MES
CUANDO EL VALOR ORIGINAL ERA MAYOR QUE EL ACUMULADO.
FECHA : JUNIO 14, 1996.
------------------------------------------------------------------
}
GLOBALS "acprgb000.4gl"
DEFINE fecha_ant,fecha6 DATE
DEFINE p_trx,mes,mes2,ano,ano2,reg_ant INTEGER
DEFINE dep_mes,dep_acum,valor_l DECIMAL(12,2)
DEFINE trans1 RECORD
codigo LIKE actb00004.codigo,
vida_util LIKE actb00001.duracion,
valor DECIMAL(12,2)
END RECORD
DEFINE descripcion1,descripcion2,descripcion3,descripcion4,descripcion5 CHAR(30)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" user usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL acprmt005()
END MAIN
FUNCTION acprmt005()
# WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM acfmmt005 FROM "acfmmt005"
DISPLAY FORM acfmmt005
# CALL pantalla()
DISPLAY "acprmt005" AT 4,3
DISPLAY "Depreciacion Automatica de Activos" AT 6,23
MENU "OPCIONES"
COMMAND "Actualizar"
"<Esc> Actualiza Registro <Supr> Cancela Operacion"
CLEAR FORM
CALL acpcad005()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
CLEAR FORM
END MENU
END FUNCTION
FUNCTION acpcad005()
## Captura los datos que va a contener el registro
INPUT BY NAME p_ano1,p_mes1
BEFORE FIELD p_ano1
LET p_ano1 = YEAR(TODAY)
DISPLAY BY NAME p_ano1
AFTER FIELD p_ano1
IF p_ano1 is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_ano1
END IF
AFTER FIELD p_mes1
IF p_mes1 is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_mes1
END IF
SELECT UNIQUE CONVERT(VARCHAR(10),a.fecha_corte,103) INTO trans.fecha FROM prdtable a
WHERE a.ano = p_ano1 AND a.mes = p_mes1
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD p_ano1
END IF
SELECT MAX(CONVERT(VARCHAR(10),a.fecha,103)) INTO fecha_ant FROM actb00004 a
WHERE a.status_t IS NULL AND a.cod_mov = 5
IF fecha_ant >= trans.fecha THEN
LET numero_msg = 64
CALL msg(numero_msg)
NEXT FIELD p_ano1
END IF
{
IF trans.fecha >= TODAY THEN
LET numero_msg = 189
CALL msg(numero_msg)
NEXT FIELD p_ano1
END IF
}
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
#### Proceso para insertar la informacion en las tablas necesarias
DECLARE busca CURSOR FOR
SELECT a.codigo,c.duracion,SUM(a.monto)
INTO trans1.codigo,trans1.vida_util,trans1.valor
FROM actb00004 a, actb00002 b, actb00001 c
WHERE a.codigo = c.codigo AND
a.status_t IS NULL AND
a.fecha <= trans.fecha AND
a.cod_mov = b.cod_mov AND
b.uso = "1" AND
b.status_t IS NULL
GROUP BY a.codigo,c.duracion
DISPLAY "Ejecutando Proceso ... Espere Por Favor" AT 17,14
FOREACH busca
SELECT SUM(a.monto)*-1 INTO dep_acum
FROM actb00004 a, actb00002 b
WHERE a.cod_mov = b.cod_mov AND
b.uso = "2" AND
a.status_t IS NULL AND
a.fecha <= trans.fecha AND
a.codigo = trans1.codigo
IF dep_acum IS NULL THEN
LET dep_acum = 0
END IF
IF trans1.vida_util IS NULL OR trans1.vida_util = 0 THEN
LET dep_mes = 0
ELSE
IF trans1.vida_util != 0 THEN
LET dep_mes = (trans1.valor/trans1.vida_util)/12
ELSE
LET dep_mes = 0
END IF
END IF
# Cuando el activo este totalmente depreciado entonces la depreciacion del mes
# es cero(0).
IF (dep_acum+dep_mes) >= (trans1.valor-1) THEN
LET dep_mes = 0
ELSE
IF trans1.vida_util != 0 THEN
LET dep_mes = (trans1.valor/trans1.vida_util)/12
END IF
END IF
LET dep_mes = dep_mes * -1
INSERT INTO actb00004 (codigo,fecha,cod_mov,monto,us_crea,fech_crea)
VALUES (trans1.codigo,trans.fecha,5,dep_mes,usuarios,getdate())
END FOREACH
LET numero_msg = 1
CALL msg(numero_msg)
END FUNCTION