Files
MBS/PROYECTO/acdir/acprmt005.4gl
T
jsotoandClaude Opus 5.5 705fadfdb4 JSOTO QA G6 (.250): arreglos CG/Activos/Repuestos/Informatica, DBDATE, imagenes de reportes y cgprrp008
Programas (bugs encontrados en las pruebas funcionales en la .250):
- acprmt004/acprmt005: MIN/MAX sobre la fecha real (no sobre texto CONVERT 103); acprmt004 alinea rowid.
- cgprrp008: lee cgtb00004 (no la copia cgtb00004_tmp del 14-mar-2026) y solo regenera
  cgtb00016 cuando se corre sin filtro de cuenta.
- cgprrp014: CONSTRUCT con los nombres de campo del form (cod_sp_sc).
- cgfmrp013: defaultValue del combo = cgprrp012.4rp.
- cgprrp022/edprrp029: salida getPreviewDevice() en lugar de SVG fijo.
- edprrp080: no consume numero ED con afecta = NO.
- cgprmt004/022/037, segprmt0001: sin CONNECT "IFMX" (-6366); EXTERIOR via cross-DB.
- irprcs001: agrega CONNECT; irprmt021: columna idestado; irprmt066: la anulacion sin
  MaintainX ya no se deshace (-255); otrodir/bodegas: rama '2' llena origen y destino.
- teprmt001: ajustes G6.

Despliegue G6:
- DBDATE=dmy4 en config/Application.xcf, config/Main_prg.xcf, resources/Application.xcf
  y en el grupo MODULOS del .4pw (los programas lanzados por el menu heredan el entorno).
- 31 .4rp: IMAGEBOX con rutas absolutas file:///E:|F:|C: -> relativas IMAGENES/...;
  se agregan IMAGENES/LOGO.JPG y genero_logo.png.
- Paquete mbs: incluye bin/*.4rp y bin/IMAGENES (antes el GAR no llevaba los reportes).
- resources/TopMenu.4st (irprcs008 daba -8014); bin/cgprcs024.4rp.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 15:30:24 -04:00

179 lines
5.2 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
-- G6: MAX sobre texto dd/mm/yyyy devolvia 31/12 y no la ultima depreciacion (permitia duplicar el mes)
SELECT MAX(a.fecha) 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