Files
DECOMARMOL/PROYECTO/cgdir/cgprrp008_1.4gl
T
2026-09-22 20:38:51 -04:00

365 lines
11 KiB
Plaintext

{
==============================================================================
PROGRAMA : CGPRRP008
SISTEMA : Sistema de Contabilidad General
Objetivo : Imprimir el mayor general Analitico
PROGRAMADOR : Tadeo A. Ferreras
FECHA : Oct. 05, 1993
MODIFICADO : Juan F. Soto
FECHA : Diciembre 20, 1993.
==============================================================================
}
GLOBALS
"cgprgb000.4gl"
DEFINE k_balance,k_debito,k_credito,k_actividad,k_balan_act DECIMAL(12,2)
DEFINE p_ano CHAR(4),
handler om.SaxDocumentHandler
DEFINE p_mes,p SMALLINT
DEFINE otras ARRAY[10] OF RECORD
cuenta_no CHAR(8),
descripcion CHAR(30),
balan_ant DECIMAL(12,2),
debito DECIMAL(12,2),
credito DECIMAL(12,2),
actividad DECIMAL(12,2),
balance_act DECIMAL(12,2)
END RECORD
DEFINE estado ARRAY[10] OF RECORD
cuenta_no CHAR(8),
descripcion CHAR(30),
balan_ant DECIMAL(12,2),
debito DECIMAL(12,2),
credito DECIMAL(12,2),
actividad DECIMAL(12,2),
balance_act DECIMAL(12,2)
END RECORD
DEFINE mayor_anal1 RECORD
cuenta_no CHAR(8),
descripcion CHAR(30),
estado_a CHAR(4),
estado_m CHAR(4),
debito DECIMAL(12,2),
credito DECIMAL(12,2),
nivel SMALLINT,
analitico CHAR(1),
aplica_a CHAR(8),
primern CHAR(8),
clave CHAR(16)
END RECORD
DEFINE fecha_inicial,fecha_final DATE
MAIN
DEFER INTERRUPT
CALL STARTLOG("CGPRRP08.TXT")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "decomarmol" USER usuarios USING clave
SELECT a.* INTO p_compania.* FROM companias a
CALL cgprrp008()
END MAIN
FUNCTION cgprrp008()
DEFINE cgtb83 RECORD LIKE cgtb00083.*
LET int_flag = FALSE
OPTIONS
FORM LINE 8
OPEN FORM cgfmrp008 FROM "cgfmrp008"
DISPLAY FORM cgfmrp008
DISPLAY "cgprrp008" AT 4,3
DISPLAY "Mayor General Analitico" AT 6,28
INPUT BY NAME p_ano,p_mes
ON KEY(F2)
RUN "copy pantalla.bat impresion.bat"
DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED)
AFTER FIELD p_ano
IF p_ano IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_ano
END IF
AFTER FIELD p_mes
IF p_mes IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD p_mes
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
SELECT fecha_inicio,fecha_corte INTO fecha_inicial,fecha_final
FROM prdtable WHERE ano = p_ano and mes = p_mes
CONSTRUCT BY NAME criterio ON b.cuenta_no
AFTER CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT CONSTRUCT
END CONSTRUCT
DELETE FROM cgtb00016 WHERE cuenta_no IS NOT NULL
LET progreso = 20
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
DECLARE primerB CURSOR FOR
SELECT a.* FROM cgtb00083 a
FOREACH primerB INTO cgtb83.*
#BALANCE ANTERIOR
LET k_balance= 0
SELECT SUM(c.debito-c.credito) INTO k_balance
FROM cgtb00001 a,cgtb00083 b,cgtb00004 c
WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND
b.aplica_a = cgtb83.aplica_a AND c.fecha < fecha_inicial AND
c.status_t IS NULL
SELECT SUM(c.debito),SUM(c.credito) INTO k_debito,k_credito
FROM cgtb00001 a,cgtb00083 b,cgtb00004 c
WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND
b.aplica_a = cgtb83.aplica_a AND c.fecha between fecha_inicial AND
fecha_final AND
c.status_t IS NULL
IF k_debito IS NULL THEN
LET k_debito = 0
END IF
IF k_credito IS NULL THEN
LET k_credito = 0
END IF
IF k_balance IS NULL THEN
LET k_balance = 0
END IF
LET k_actividad = k_debito - k_credito
LET k_balan_act = k_balance + k_actividad
SELECT a.descripcion,a.estado_m,a.estado_a
INTO mayor_anal1.descripcion,mayor_anal1.estado_m,mayor_anal1.estado_a
FROM cgtb00001 a
WHERE a.cuenta_no = cgtb83.aplica_a
INSERT INTO cgtb00016 VALUES (cgtb83.aplica_a,mayor_anal1.estado_a,mayor_anal1.estado_m,
mayor_anal1.descripcion,k_debito,k_credito,k_balance,k_actividad,k_balan_act,cgtb83.primern)
END FOREACH
LET progreso = 40
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
# PRIMER NIVEL
DECLARE segundoN CURSOR FOR
SELECT DISTINCT a.primern FROM cgtb00083 a
FOREACH segundoN INTO cgtb83.primern
SELECT SUM(c.debito-c.credito) INTO k_balance
FROM cgtb00001 a,cgtb00083 b,cgtb00004 c
WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND
b.primern = cgtb83.primern AND c.fecha < fecha_inicial AND
c.status_t IS NULL
SELECT SUM(c.debito),SUM(c.credito) INTO k_debito,k_credito
FROM cgtb00001 a,cgtb00083 b,cgtb00004 c
WHERE c.cuenta_no = a.cuenta_no and b.aplica_a = a.aplica_a AND
b.primern = cgtb83.primern AND c.fecha between fecha_inicial AND
fecha_final AND
c.status_t IS NULL
IF k_debito IS NULL THEN
LET k_debito = 0
END IF
IF k_credito IS NULL THEN
LET k_credito = 0
END IF
IF k_balance IS NULL THEN
LET k_balance = 0
END IF
LET k_actividad = k_debito - k_credito
LET k_balan_act = k_balance + k_actividad
SELECT a.descripcion,a.estado_m,a.estado_a
INTO mayor_anal1.descripcion,mayor_anal1.estado_m,mayor_anal1.estado_a
FROM cgtb00001 a
WHERE a.cuenta_no = cgtb83.primern
SELECT a.cuenta_no FROM cgtb00016 a
WHERE a.cuenta_no = cgtb83.primern
IF STATUS = NOTFOUND THEN
INSERT INTO cgtb00016 VALUES (cgtb83.primern,mayor_anal1.estado_a,mayor_anal1.estado_m,
mayor_anal1.descripcion,k_balance,k_debito,k_credito,k_actividad,k_balan_act,cgtb83.primern)
ELSE
UPDATE cgtb00016 SET debito = k_debito,
credito = k_credito,
actividad = k_actividad,
balance_act = k_balan_act,
balance_ant = k_balance
WHERE cuenta_no = cgtb83.primern
END IF
END FOREACH
LET progreso = 60
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET p = 1
LET selec =
"SELECT DISTINCT b.cuenta_no,b.descripcion,b.estado_a,b.estado_m, ",
" SUM(a.debito),SUM(a.credito),b.nivel,b.analitico,b.aplica_a ",
"FROM cgtb00001 b ",
"LEFT OUTER JOIN cgtb00004 a ON (a.cuenta_no = b.cuenta_no) AND (a.fecha BETWEEN ? AND ?) ",
"WHERE (a.status_t IS NULL) AND ",
" (b.status_t is null) AND b.nivel > 2 AND ",
criterio clipped," GROUP BY b.cuenta_no,b.descripcion,b.estado_a,b.estado_m,b.nivel,b.analitico,b.aplica_a ",
" ORDER BY b.cuenta_no"
DISPLAY "<<<Buscando Informacion... Espere por Favor>>>" AT 19,14
ATTRIBUTE(blue)
PREPARE comando FROM selec
DECLARE busco CURSOR FOR comando
OPEN busco USING fecha_inicial,fecha_final
START REPORT mayor_anal_gral TO XML HANDLER handler
WHILE status != NOTFOUND
FETCH busco INTO mayor_anal1.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
FINISH REPORT mayor_anal_gral
EXIT WHILE
END IF
LET mayor_anal1.clave = mayor_anal1.cuenta_no clipped,
mayor_anal1.aplica_a clipped
OUTPUT TO REPORT
mayor_anal_gral(mayor_anal1.*,fecha_inicial,fecha_final)
END WHILE
LET progreso = 80
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
FINISH REPORT mayor_anal_gral
CALL cgprrp008r(fecha_inicial,fecha_final)
LET progreso = 100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
DISPLAY BY NAME k_balance,k_debito,k_credito,k_actividad,k_balan_act
END FUNCTION
REPORT mayor_anal_gral(x,fecha1,fecha2)
DEFINE x RECORD
cuenta_no CHAR(8),
descripcion CHAR(30),
estado_a CHAR(4),
estado_m CHAR(4),
debito DECIMAL(12,2),
credito DECIMAL(12,2),
nivel SMALLINT,
analitico CHAR(1),
aplica_a CHAR(8),
primern CHAR(8),
clave CHAR(16)
END RECORD
DEFINE t_debito,t_credito,t_balan_ant,t_actividad,t_balan_act DECIMAL(12,2)
DEFINE fecha1,fecha2 DATE
DEFINE actividad,balan_ant,balance,debito1,debito2,
credito1,credito2 DECIMAL(12,2)
DEFINE balan_act DECIMAL(12,2)
## DEFINICION DE LAS VARIABLES DE IMPRESION
ORDER BY x.aplica_a,x.cuenta_no,x.nivel
FORMAT
BEFORE GROUP OF x.cuenta_no
LET balan_act=0
LET debito1 = 0
LET credito1 = 0
LET debito2 = 0
LET credito2 = 0
ON EVERY ROW
IF x.nivel > 2 THEN
# Balance Inicial
SELECT SUM(b.debito - b.credito) INTO balan_ant FROM cgtb00004 b
WHERE b.cuenta_no=x.cuenta_no AND b.status_t IS NULL AND b.fecha < fecha1
SELECT SUM(b.debito - b.credito) INTO balance FROM cgtb00004 b
WHERE b.cuenta_no=x.cuenta_no AND b.status_t IS NULL AND b.fecha < fecha2
IF x.debito IS NULL THEN
LET x.debito = 0
END IF
IF x.credito IS NULL THEN
LET x.credito = 0
END IF
IF balan_ant IS NULL THEN
LET balan_ant = 0
END IF
IF balance IS NULL THEN
LET balance = 0
END IF
LET actividad = x.debito - x.credito
IF x.primern IS NULL THEN
LET x.primern=x.aplica_a
END IF
INSERT INTO cgtb00016 VALUES (x.cuenta_no,x.estado_a,x.estado_m,
x.descripcion,x.debito,x.credito,balan_ant,actividad,balance,x.primern)
END IF
END REPORT