{ ------------------------------------------------------------------ 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" " Actualiza Registro 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