Files
MBS/PROYECTO/cgdir/cgprrp009.4gl
T

561 lines
19 KiB
Plaintext

{
==============================================================================
PROGRAMA : CGPRRP009
SISTEMA : Sistema de Contabilidad General
OBJETIVO : Imprimir Analisis de Gastos por Departamento
PROGRAMADOR : Tadeo A. Ferreras
FECHA : Oct. 05, 1993
==============================================================================
}
GLOBALS
"cgprgb000.4gl"
DEFINE p_mes,ano_ant,p_ano SMALLINT
DEFINE ch_nombre DYNAMIC ARRAY OF CHAR(20),
ent_diario CHAR(14),
ch_ano CHAR(4)
DEFINE fecha4,fecha5 DATE
DEFINE total_anterior,actividades,total_actual,realizado DECIMAL(12,2)
DEFINE resumen DYNAMIC ARRAY OF RECORD
depto CHAR(1),
nombre CHAR(30),
acum_ant DECIMAL(12,2),
val_per DECIMAL(12,2),
acum_act DECIMAL(12,2),
ano_ante DECIMAL(12,2)
END RECORD
DEFINE gastos RECORD
cuenta_no CHAR(8),
descripcion CHAR(30),
control CHAR(1),
departamento SMALLINT,
nom_dpto CHAR(30),
estado_a VARCHAR(10),
estado_m VArchar(10),
estado_a_c VARCHAR(10),
cuenta_no_d VARCHAR(10),
valor DECIMAL(12,2),
valor_ant DECIMAL(12,2),
acum_act DECIMAL(12,2),
ano_ante DECIMAL(12,2)
END RECORD
DEFINE idx1 INTEGER
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_compania.* FROM companias a
CALL cgprrp009()
END MAIN
FUNCTION cgprrp009()
LET int_flag = FALSE
OPTIONS
FORM LINE 8
OPEN FORM cgfmrp009 FROM "cgfmrp009"
DISPLAY FORM cgfmrp009
DISPLAY "cgprrp009" AT 4,3
DISPLAY "Analisis de Gastos por Departamento" AT 6,22
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
LET idx = 1
INPUT BY NAME p_ano,p_mes
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
SELECT fecha_inicio,fecha_corte INTO fecha_inicial,fecha_final
FROM prdtable WHERE ano = p_ano and
mes = p_mes
LET ano_ant = p_ano - 1
SELECT fecha_corte INTO fecha5
FROM prdtable WHERE ano = ano_ant and mes = p_mes
SELECT fecha_inicio INTO fecha4
FROM prdtable WHERE ano = ano_ant and mes = 1
LET ch_ano = p_ano using "&&&&"
LET ch_ano = ch_ano[3,4]
LET ent_diario = "ED.99-999/12",ch_ano clipped
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
CONSTRUCT criterio ON a.departamento,a.cuenta_no
FROM departamento,cuenta_no
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DISPLAY "<<<Actualizando Informacion Espere Por Favor >" AT 19,14
ATTRIBUTE(blue)
# Actualiza los registros contables poniendo el departamento en cero para
# que asi la busqueda pueda reflejar las cuentas que estan identificadas como
# (7) y tienen el departamento nulo.
# Este UPDATE se reversa al momento de acabar el reporte
UPDATE cgtb00004 set departamento = 0
WHERE departamento is null and cuenta_no[1] = "7"
DELETE FROM cgtb00016 WHERE ano =p_ano AND mes = p_mes AND programa='cgprrp013.4rp' AND
estado_a <> '275'
LET selec =
"SELECT distinct a.cuenta_no,b.descripcion,d.dpto,a.departamento,c.nom_dpto ",
"FROM cgtb00001 b, cgtb00004 a, chequeo d,adtb00001 c ",
"WHERE (a.cuenta_no = b.cuenta_no) AND (SUBSTRING(b.cuenta_no,1,1) = '7') AND ",
" (a.departamento = d.departamento) AND a.status_t IS NULL AND ",
" (a.departamento = c.departamento) AND ",
" (a.fecha <= ?) AND b.status_t is null AND ",criterio CLIPPED,
"ORDER BY d.dpto,a.departamento,a.cuenta_no"
DISPLAY "<<<Buscando Informacion... Espere por Favor>>>" AT 19,14
ATTRIBUTE(blue)
CALL seleccionarsalida() RETURNING r_output
PREPARE comando FROM selec
DECLARE busco CURSOR FOR comando
OPEN busco USING fecha_final
DISPLAY "<<<Reporte Generandose... Espere por Favor>>>" AT 19,14
ATTRIBUTE(blue)
LET idx1=1
FOREACH busco INTO gastos.*
IF gastos.departamento IS NULL THEN
LET gastos.nom_dpto = "SIN DESCRIPCION"
LET gastos.departamento = 0
END IF
LET gastos.valor = 0
LET gastos.valor_ant = 0
LET gastos.acum_act = 0
LET gastos.ano_ante = 0
IF idx1=1 THEN
CALL configureoutput(r_output) RETURNING HANDLER
START REPORT gastos_gral TO XML HANDLER handler
END IF
LET gastos.cuenta_no_d =NULL
LET gastos.estado_a=NULL
# BUSCA CUENTAS PARTICULARES PARA LA GENERACION DEL ESTADO DE RESULTADO
SELECT a.estado_a,a.cuenta_no INTO gastos.estado_a,gastos.cuenta_no_d
FROM adtb00029 a
WHERE a.departamento = gastos.departamento AND
a.cuenta_no = gastos.cuenta_no
IF STATUS = NOTFOUND THEN
SELECT UNIQUE a.estado_m INTO gastos.estado_m
FROM adtb00029 a
WHERE a.departamento = gastos.departamento AND a.estado_m IS NOT NULL
END IF
OUTPUT TO REPORT gastos_gral(gastos.*,fecha_inicial,fecha_final,p_ano,
ano_ant)
LET idx1 = idx+1
END FOREACH
IF idx1 > 1 THEN
FINISH REPORT gastos_gral
UPDATE cgtb00004 set departamento = NULL
WHERE departamento = 0 and cuenta_no[1] = "7"
ELSE
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS","INFO")
END IF
END FUNCTION
REPORT gastos_gral(x,fecha1,fecha2,p_ano1,ano_ant1)
DEFINE x RECORD
cuenta_no CHAR(8),
descripcion CHAR(30),
control CHAR(1),
departamento SMALLINT,
nom_dpto CHAR(30),
estado_a VARCHAR(10),
estado_m VArchar(10),
estado_a_c VARCHAR(10),
cuenta_no_d VARCHAR(10),
valor DECIMAL(12,2),
# estado_a CHAR(4),
# estado_m CHAR(4),
valor_ant DECIMAL(12,2),
acum_act DECIMAL(12,2),
ano_ante DECIMAL(12,2)
END RECORD
DEFINE estado_a,estado_m CHAR(4)
DEFINE p_ano1,ano_ant1 SMALLINT
DEFINE encabezado CHAR(1)
DEFINE fecha1,fecha2 DATE
DEFINE total,total1,total2,total3,total4,total5,total6,total7,total8,
p_total
DECIMAL(12,2)
DEFINE hora CHAR(5)
OUTPUT
## DEFINICION DE LOS MARGENES DE IMPRESION
TOP MARGIN 0
LEFT MARGIN 0
PAGE LENGTH 100
FORMAT
PAGE HEADER
LET hora = time
LET l = (88 - LENGTH(p_compania.nombre CLIPPED))/2
## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS
PRINT COLUMN 2, "cgprrp009",
COLUMN l, p_compania.nombre CLIPPED,
COLUMN 78, "Pag. ",pageno using "###"
LET l = (135 - LENGTH("SISTEMA DE CONTABILIDAD GENERAL"))/2
PRINT COLUMN l, "SISTEMA DE CONTABILIDAD GENERAL",
COLUMN 124, today using "dd/mm/yy"
LET l = (135 - LENGTH("ANALISIS DE GASTOS POR DEPARTAMENTO"))/2
PRINT COLUMN l, "ANALISIS DE GASTOS POR DEPARTAMENTO",
COLUMN 127, hora
LET l = (135 - LENGTH("ffffffffffffffffffffffff"))/2
PRINT COLUMN l, "DEL ",fecha1 USING "dd/mm/yyyy"," Al ",
fecha2 USING "dd/mm/yyyy"
PRINT COLUMN 1, "---------------------------------------------------",
"---------------------------------------------------",
"-----------------------------"
PRINT COLUMN 1, "CENTRO",
COLUMN 8, "CUENTA",
COLUMN 55, "ACUMULADO",
COLUMN 75, "GASTOS EN EL",
COLUMN 100,"ACUMULADO",
COLUMN 119, "REALIZADO"
PRINT COLUMN 1, "COSTO",
COLUMN 8, "CONTABLE",
COLUMN 20, "DESCRIPCION",
COLUMN 55, "ANTERIOR",
COLUMN 75, "RANGO DE FECHA",
COLUMN 100,"A LA FECHA",
COLUMN 119, "ANO ANTERIOR"
PRINT COLUMN 1, "----------------------------------------------------",
"----------------------------------------------------",
"-------------------------"
BEFORE GROUP OF x.control
LET total4 = 0
LET total6 = 0
LET total8 = 0
LET total5 = 0
BEFORE GROUP OF x.departamento
LET encabezado = "S"
IF x.departamento IS NULL THEN
LET x.nom_dpto = "SIN DEPARTAMENTO"
END IF
PRINT COLUMN 1,x.departamento USING "####"," ",x.nom_dpto CLIPPED,
"(","ESTADO: ",x.estado_m,")"
LET total1 = 0
LET total2 = 0
LET total = 0
LET total7 = 0
ON EVERY ROW
IF x.valor is null THEN
LET x.valor = 0
END IF
# Realizado Ano Anterior
SELECT SUM(a.debito-a.credito) INTO x.ano_ante
FROM cgtb00004 a
WHERE (a.ref NOT MATCHES "ED.99-999/12*") and
(a.cuenta_no = x.cuenta_no) and (a.fecha BETWEEN fecha4 AND fecha5) and
(a.departamento = x.departamento) and a.status_t is null
SELECT SUM(a.debito-a.credito) INTO x.valor
FROM cgtb00004 a
WHERE (a.cuenta_no = x.cuenta_no) and
(a.fecha BETWEEN fecha_inicial AND fecha_final) and
(a.departamento = x.departamento) and a.status_t is null
SELECT SUM(a.debito-a.credito) INTO x.valor_ant FROM cgtb00004 a
WHERE (a.ref != ent_diario) and
(a.cuenta_no = x.cuenta_no) and (a.fecha < fecha_inicial) and
(a.departamento = x.departamento) and a.status_t is null
IF x.ano_ante is null THEN
LET x.ano_ante = 0
END IF
IF x.valor is null THEN
LET x.valor = 0
END IF
IF x.valor_ant is null THEN
LET x.valor_ant = 0
END IF
LET x.acum_act = 0
LET x.acum_act = x.valor_ant + x.valor
LET total1 = total1+ x.valor_ant
LET total2 = total2+ x.valor
LET total = total + x.acum_act
LET total7 = total7 + x.ano_ante
LET total4 = total4 + x.valor_ant
LET total5 = total5 + x.valor
LET total6 = total6 + x.acum_act
LET total8 = total8 + x.ano_ante
IF x.valor_ant != 0 OR x.acum_act != 0 THEN
PRINT COLUMN 8, x.cuenta_no CLIPPED," ",x.estado_a_c,
COLUMN 20, x.descripcion CLIPPED,
COLUMN 55, x.valor_ant USING "(((,(((,(((.##)",
COLUMN 75, x.valor USING "(((,(((,(((.##)",
COLUMN 100, x.acum_act USING "(((,(((,(((.##)",
COLUMN 119, x.ano_ante USING "(((,(((,(((.##)"
IF x.cuenta_no_d = x.cuenta_no THEN
INSERT INTO cgtb00016 (ano,mes,cuenta_no,departamento,estado_a,balance_ant,actividad,balance_act,programa)
VALUES (p_ano,p_mes,x.cuenta_no,x.departamento, x.estado_a,x.valor_ant,x.valor,x.acum_act,'cgprrp013.4rp')
END IF
END IF
AFTER GROUP OF x.departamento
PRINT COLUMN 55,"--------------",
COLUMN 75,"--------------",
COLUMN 100,"--------------",
COLUMN 119,"--------------"
PRINT COLUMN 55,total1 USING "(((,(((,(((.##)",
COLUMN 75,total2 USING "(((,(((,(((.##)",
COLUMN 100,total USING "(((,(((,(((.##)",
COLUMN 119,total7 USING "(((,(((,(((.##)"
LET p_total = total
IF x.estado_m IS NOT NULL THEN
INSERT INTO cgtb00016 (ano,mes,departamento,estado_m,balance_ant,actividad,balance_act,programa)
VALUES (p_ano,p_mes,x.departamento, x.estado_m,total1,total2,p_total,'cgprrp013.4rp')
END IF
AFTER GROUP OF x.control
# Esta parte del reporte llena un arreglo para imprimir centros
# sumarizados por la primera parte del codigo del departamento
# estas infomaciones se imprimen en tiempo de totales generales
# esta funcion contiene los nombre generales de los departamentos
# sumarizados
CALL tabla_nom()
IF idx IS NULL OR idx = 0 THEN
LET idx = 0
END IF
LET i = x.control
IF i = 0 THEN
LET i = 8
END IF
LET idx = idx + 1
LET resumen[idx].nombre = ch_nombre[i]
LET resumen[idx].depto = x.control
LET resumen[idx].acum_ant = total4
LET resumen[idx].val_per = total5
LET resumen[idx].acum_act = total6
LET resumen[idx].ano_ante = total8
ON LAST ROW
PRINT COLUMN 55,"--------------",
COLUMN 75,"--------------",
COLUMN 100,"--------------",
COLUMN 119,"--------------"
SKIP TO TOP OF PAGE
LET total1 = 0
LET total2 = 0
LET total3 = 0
LET total4 = 0
LET total5 = 0
LET total7 = 0
FOR i = 1 TO idx
PRINT COLUMN 1,resumen[i].depto,
COLUMN 20,resumen[i].nombre,
COLUMN 55,resumen[i].acum_ant USING "((,(((,(((,(((.##)",
COLUMN 75,resumen[i].val_per USING "((,(((,(((,(((.##)",
COLUMN 100,resumen[i].acum_act USING "((,(((,(((,(((.##)",
COLUMN 119,resumen[i].ano_ante USING "((,(((,(((,(((.##)"
IF resumen[i].acum_ant is not null THEN
LET total1 = total1 + resumen[i].acum_ant
LET total2 = total2 + resumen[i].val_per
LET total4 = total4 + resumen[i].acum_act
LET total7 = total7 + resumen[i].ano_ante
END IF
END FOR
PRINT COLUMN 55,"--------------",
COLUMN 75,"--------------",
COLUMN 100,"--------------"
PRINT COLUMN 55,total1 USING "((,(((,(((,(((.##)",
COLUMN 75,total2 USING "((,(((,(((,(((.##)",
COLUMN 100, total4 USING "((,(((,(((,(((.##)",
COLUMN 119, total7 USING "((,(((,(((,(((.##)"
PRINT COLUMN 55,"==============",
COLUMN 75,"==============",
COLUMN 100,"==============",
COLUMN 119,"=============="
#PRINT COLUMN 1,comp_off
SKIP TO TOP OF PAGE
LET total1 = 0
LET total2 = 0
LET total3 = 0
LET total4 = 0
LET total5 = 0
LET total6 = 0
LET total7 = 0
LET total8 = 0
# Solo se imprimiran los departamentos 4 y 6
# se sumarizaran los departamentos 1,2,3,5,7 en una variable y
# luego se imprimira
FOR i = 1 TO idx
IF resumen[i].depto=4 or resumen[i].depto=0 or resumen[i].depto=6 THEN
PRINT COLUMN 1,resumen[i].depto,
COLUMN 20,resumen[i].nombre,
COLUMN 55,resumen[i].acum_ant USING "((,(((,(((,(((.##)",
COLUMN 75,resumen[i].val_per USING "((,(((,(((,(((.##)",
COLUMN 100,resumen[i].acum_act USING "((,(((,(((,(((.##)",
COLUMN 119,resumen[i].ano_ante USING "((,(((,(((,(((.##)"
LET total1 = total1 + resumen[i].acum_ant
LET total2 = total2 + resumen[i].val_per
LET total4 = total4 + resumen[i].acum_act
LET total8 = total8 + resumen[i].ano_ante
END IF
IF resumen[i].val_per is null THEN
LET resumen[i].val_per = 0
END IF
IF resumen[i].acum_ant is null THEN
LET resumen[i].acum_ant = 0
END IF
IF resumen[i].acum_act is null THEN
LET resumen[i].acum_act = 0
END IF
IF resumen[i].depto = 1 or
resumen[i].depto = 2 or
resumen[i].depto = 3 or
resumen[i].depto = 5 or
resumen[i].depto = 7 THEN
LET total5 = total5 + resumen[i].acum_ant
LET total3 = total3 + resumen[i].val_per
LET total6 = total6 + resumen[i].acum_act
LET total7 = total7 + resumen[i].ano_ante
END IF
END FOR
PRINT
COLUMN 20,"ADMINISTRACION GRAL.",
COLUMN 55,total5 USING "((,(((,(((,(((.##)",
COLUMN 75,total3 USING "((,(((,(((,(((.##)",
COLUMN 100,total6 USING "((,(((,(((,(((.##)",
COLUMN 119,total7 USING "((,(((,(((,(((.##)"
PRINT COLUMN 55,"--------------",
COLUMN 75,"--------------",
COLUMN 100,"--------------",
COLUMN 119,"--------------"
LET total1 = total1 + total5
LET total2 = total2 + total3
LET total4 = total4 + total6
LET total8 = total8 + total7
PRINT COLUMN 55,total1 USING "((,(((,(((,(((.##)",
COLUMN 75,total2 USING "((,(((,(((,(((.##)",
COLUMN 100, total4 USING "((,(((,(((,(((.##)",
COLUMN 119, total8 USING "((,(((,(((,(((.##)"
PRINT COLUMN 55,"==============",
COLUMN 75,"==============",
COLUMN 100,"==============",
COLUMN 119,"=============="
LET total_anterior = total1
LET actividades = total2
LET total_actual = total4
LET realizado = total8
LET total1 = 0
LET total2 = 0
LET total4 = 0
LET total8 = 0
PRINT COLUMN 1,comp_off
END REPORT
FUNCTION tabla_nom()
LET ch_nombre[1] = "GERENCIA GENERAL"
LET ch_nombre[2] = "GERENCIA FINANCIERA"
LET ch_nombre[3] = "GERENCIA PERSONAL"
LET ch_nombre[4] = "GERENCIA VENTAS"
LET ch_nombre[5] = "GERENCIA MATERIALES"
LET ch_nombre[6] = "GERENCIA PLANTA"
LET ch_nombre[7] = "GERENCIA INFORMATICA"
LET ch_nombre[8] = "SIN DESCRIPCION"
LET ch_nombre[9] = "LA MALENA"
END FUNCTION