Files
MBS/PROYECTO/gedir/geprrp009.4gl
T

481 lines
16 KiB
Plaintext

{
=======================================================================
Programa : GEPRRP009
Sistema : Sistema de Informacion Gerencia
Proceso : Ventas Comparativas Ano Anterior
Autor : Tadeo A. Ferreras
Fecha : Junio 21,1993
=======================================================================
}
GLOBALS
"geprgb000.4gl"
DEFINE ger_comp9 RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
status_t CHAR(1),
cantidad2 DECIMAL(14,2),
cantidad1 DECIMAL(14,2),
cantidad3 DECIMAL(14,2),
posicion1 INTEGER,
posicion2 INTEGER,
posicion3 INTEGER,
codigo CHAR(6)
END RECORD,
ano11,cod1,cuenta_r SMALLINT
DEFINE selec9 CHAR(1000)
DEFINE salir,salir9,compa CHAR(1)
DEFINE idx9,idx1,j,m,p,s,s1 INTEGER
DEFINE ano19 CHAR(4)
DEFINE ano1,mes1 SMALLINT
DEFINE nom_mes CHAR(15),
detalle CHAR(20),
fecha_in10,fecha_fi10 DATE
DEFINE fecha_in,fecha_fi,fecha_in9,fecha_fi9 DATE,
cod_cli SMALLINT,
total2,cantidad1,cantidad2,cantidad3,cantidad4,cantidad5,cantidad6,
cantidad7,cantidad8,cantida9 DECIMAL(12,2)
FUNCTION geprrp009()
LET int_flag = FALSE
OPTIONS
FORM LINE 8
OPEN FORM gefmrp009 FROM "gefmrp009"
DISPLAY FORM gefmrp009
CALL pantalla()
DISPLAY "geprrp009" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Ranking de Ventas Comparativas Al Ano Anterior" AT 6,20
ATTRIBUTE(BLACK)
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
CALL defecto(impresor) RETURNING imprime, letras.*, archivo
INPUT BY NAME ano1,mes1,cantidad1,detalle
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime,letras.*, archivo
AFTER FIELD ano1
IF ano1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ano1
END IF
SELECT MIN(fecha_inicio) INTO fecha_in FROM prdtable
WHERE ano = ano1
SELECT MIN(fecha_inicio) INTO fecha_in9 FROM prdtable
WHERE ano = ano1 - 1
SELECT MIN(fecha_inicio) INTO fecha_in10 FROM prdtable
WHERE ano = ano1 - 2
LET ano19 = ano1 - 1 USING "&&&&"
BEFORE FIELD mes1
LET mes1 = MONTH(today) USING "&&"
DISPLAY BY NAME mes1
AFTER FIELD mes1
IF mes1 IS NULL THEN
LET mes1 = MONTH(today) USING "&&"
END IF
DISPLAY BY NAME mes1
SELECT fecha_corte INTO fecha_fi FROM prdtable
WHERE ano = ano1 AND mes = mes1
SELECT fecha_corte INTO fecha_fi9 FROM prdtable
WHERE ano = ano1 - 1 AND mes = mes1
SELECT fecha_corte INTO fecha_fi10 FROM prdtable
WHERE ano = ano1 - 2 AND mes = mes1
SELECT descrip INTO nom_mes FROM mestable
WHERE mes = mes1
AFTER FIELD cantidad1
IF cantidad1 IS NULL OR cantidad1 < 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cantidad1
END IF
END INPUT
IF int_flag tHEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
CONSTRUCT BY NAME criterio ON c.cod_cia,a.tipo_cliente,a.sec_cliente
ON KEY(CONTROL-P)
CALL busca_printer() RETURNING imprime,letras.*, archivo
AFTER CONSTRUCT
EXIT CONSTRUCT
END CONSTRUCT
IF int_flag tHEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET selec =
"SELECT a.tipo_cliente,a.sec_cliente,a.nombre,a.status_t,SUM(c.neto) ",
"FROM vetb00004 a, vetb00002 c ",
"WHERE (a.tipo_cliente=c.tipo_cliente AND a.sec_cliente=c.sec_cliente) ",
" AND (c.status_t IS NULL) AND (c.fecha_factura BETWEEN ? AND ?) AND ",
" (c.ventas = '1') AND ",criterio clipped,
"GROUP BY 1,2,3,4 HAVING SUM(c.neto) > ? ORDER BY 5 DESC "
LET ano11 = ano1 - 2
DISPLAY "Buscando Informacion Ano ",ano11 USING "&&&&",
"... Espere por Favor" AT 17,14 ATTRIBUTE(BOLD)
PREPARE comando2 FROM selec
DECLARE buscar2 CURSOR FOR comando2
OPEN buscar2 USING fecha_in10,fecha_fi10,cantidad1
LET selec =
"SELECT a.tipo_cliente,a.sec_cliente,a.nombre,a.status_t,SUM(c.neto) ",
"FROM vetb00004 a, vetb00002 c ",
"WHERE (a.tipo_cliente=c.tipo_cliente AND a.sec_cliente=c.sec_cliente) ",
" AND (c.status_t IS NULL) AND (c.fecha_factura BETWEEN ? AND ?) AND ",
" (c.ventas = '1') AND ",criterio clipped,
"GROUP BY 1,2,3,4 HAVING SUM(c.neto) > ? ORDER BY 5 DESC "
DISPLAY "Buscando Informacion Ano Anterior... Espere por Favor" AT 17,14
ATTRIBUTE(BOLD)
PREPARE comando1 FROM selec
DECLARE buscar1 CURSOR FOR comando1
OPEN buscar1 USING fecha_in9,fecha_fi9,cantidad1
LET selec =
"SELECT a.tipo_cliente,a.sec_cliente,a.nombre,a.status_t,SUM(c.neto) ",
"FROM vetb00004 a, vetb00002 c ",
"WHERE (a.tipo_cliente=c.tipo_cliente AND a.sec_cliente=c.sec_cliente) ",
" AND (c.status_t IS NULL) AND c.fecha_factura BETWEEN ? AND ? AND ",
" (c.ventas = '1') AND ",criterio clipped,
"GROUP BY 1,2,3,4 HAVING SUM(c.neto) > ? ORDER BY 5 DESC"
DISPLAY "Buscando Informacion Ano Actual ... Espere por Favor" AT 17,14
ATTRIBUTE(BOLD)
PREPARE comando FROM selec
DECLARE buscar CURSOR FOR comando
OPEN buscar USING fecha_in,fecha_fi,cantidad1
{
LET cuenta_r = 0
WHILE STATUS != NOTFOUND
FETCH buscar INTO ger_comp9.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
LET cuenta_r = cuenta_r + 1
END WHILE
WHILE STATUS != NOTFOUND
FETCH buscar1 INTO ger_comp9.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
LET cuenta_r = cuenta_r + 1
END WHILE
WHILE STATUS != NOTFOUND
FETCH buscar2 INTO ger_comp9.*
IF STATUS = NOTFOUND THEN
EXIT WHILE
END IF
LET cuenta_r = cuenta_r + 1
END WHILE
LET regi = cuenta_r
}
START REPORT gerencia9 TO archivo
DISPLAY "Impresion en Proceso..... Espere por Favor " AT 17,14
# Creacion Tabla Temporal
CREATE TEMP TABLE geprrp009
(tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
status_t CHAR(1),
cantidad2 DECIMAL(14,2),
cantidad1 DECIMAL(14,2),
cantidad3 DECIMAL(14,2),
posicion1 INTEGER,
posicion2 INTEGER,
posicion3 INTEGER,
codigo CHAR(6))
CREATE INDEX tempo_1 ON geprrp009(tipo_cliente,sec_cliente)
#-------------------------------------------------------------------------
LET idx = 0
LET idx1= 0
LET salir = "N"
LET p_param = "S"
WHILE salir != "S"
FETCH buscar INTO ger_comp9.*
IF STATUS = NOTFOUND THEN
LET salir = "S"
EXIT WHILE
END IF
CALL termometro(regi,p_param)
LET p_param = "N"
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET idx = idx + 1
LET ger_comp9.posicion2 = idx
IF ger_comp9.cantidad2 IS NULL THEN
LET ger_comp9.cantidad2 = 0
END IF
LET ger_comp9.codigo = ger_comp9.tipo_cliente USING "&&",
ger_comp9.sec_cliente USING "&&&&"
INSERT INTO geprrp009 VALUES (ger_comp9.*)
END WHILE
# Busqueda Ano Anterior
LET idx = 0
LET idx1= 0
LET salir = "N"
WHILE salir != "S"
FETCH buscar1 INTO ger_comp9.*
IF STATUS = NOTFOUND THEN
LET salir = "S"
EXIT WHILE
END IF
CALL termometro(regi,p_param)
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF ger_comp9.cantidad2 IS NOT NULL OR
ger_comp9.cantidad2 > 0 THEN
LET idx = idx + 1
LET ger_comp9.posicion1 = idx
END IF
LET ger_comp9.codigo = ger_comp9.tipo_cliente USING "&&",
ger_comp9.sec_cliente USING "&&&&"
LET ger_comp9.cantidad1 = ger_comp9.cantidad2
LET ger_comp9.posicion2 = 0
LET ger_comp9.cantidad2 = 0
SELECT unique tipo_cliente FROM geprrp009
WHERE tipo_cliente = ger_comp9.tipo_cliente AND
sec_cliente = ger_comp9.sec_cliente
IF STATUS = NOTFOUND THEN
SELECT MAX(posicion2) INTO ger_comp9.posicion2
FROM geprrp009
LET ger_comp9.posicion2 = ger_comp9.posicion2 + 1
INSERT INTO geprrp009 VALUES (ger_comp9.*)
ELSE
UPDATE geprrp009 SET posicion1 = ger_comp9.posicion1,
cantidad1 = ger_comp9.cantidad1
WHERE tipo_cliente = ger_comp9.tipo_cliente AND
sec_cliente = ger_comp9.sec_cliente
END IF
END WHILE
# Busqueda Ano Trasanterior
LET idx = 0
LET idx1= 0
LET salir = "N"
WHILE salir != "S"
FETCH buscar2 INTO ger_comp9.*
IF STATUS = NOTFOUND THEN
LET salir = "S"
EXIT WHILE
END IF
CALL termometro(regi,p_param)
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF ger_comp9.cantidad2 IS NOT NULL OR
ger_comp9.cantidad2 > 0 THEN
LET idx = idx + 1
LET ger_comp9.posicion3 = idx
END IF
LET ger_comp9.codigo = ger_comp9.tipo_cliente USING "&&",
ger_comp9.sec_cliente USING "&&&&"
LET ger_comp9.cantidad3 = ger_comp9.cantidad2
LET ger_comp9.posicion2 = 0
LET ger_comp9.cantidad2 = 0
LET ger_comp9.cantidad1 = 0
LET ger_comp9.posicion1 = 0
SELECT unique tipo_cliente FROM geprrp009
WHERE tipo_cliente = ger_comp9.tipo_cliente AND
sec_cliente = ger_comp9.sec_cliente
IF STATUS = NOTFOUND THEN
SELECT MAX(posicion2) INTO ger_comp9.posicion3
FROM geprrp009
LET ger_comp9.posicion3 = ger_comp9.posicion3 + 1
LET STATUS = 0
INSERT INTO geprrp009 VALUES (ger_comp9.*)
ELSE
UPDATE geprrp009 SET posicion3 = ger_comp9.posicion3,
cantidad3 = ger_comp9.cantidad3
WHERE tipo_cliente = ger_comp9.tipo_cliente AND
sec_cliente = ger_comp9.sec_cliente
END IF
END WHILE
# Busqueda Tabla Temporal
DECLARE temporal9 CURSOR FOR
SELECT * FROM geprrp009
WHERE posicion2 != 0
ORDER BY posicion2
FOREACH temporal9 INTO ger_comp9.*
OUTPUT TO REPORT gerencia9(ger_comp9.*)
END FOREACH
FINISH REPORT gerencia9
RUN imprime
END FUNCTION
REPORT gerencia9(x)
DEFINE x RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
status_t CHAR(1),
cantidad2 DECIMAL(14,2),
cantidad1 DECIMAL(14,2),
cantidad3 DECIMAL(14,2),
posicion1 INTEGER,
posicion2 INTEGER,
posicion3 INTEGER,
codigo CHAR(6)
END RECORD
DEFINE fecha1,fecha2,fecha3,fecha4 DATE,
diferencia,total2,total3,total1,proporcion,cant DECIMAL(12,2),
porciento DECIMAL(8,3)
DEFINE l,mes11 SMALLINT
DEFINE nom_mes1 CHAR(15)
DEFINE descrip,descrip1 CHAR(30)
DEFINE nombre_sal CHAR(20),
hora CHAR(5)
OUTPUT
LEFT MARGIN 2
TOP MARGIN 1
FORMAT
PAGE HEADER
LET hora = time
PRINT COLUMN 1, letras.comp_on,letras.negrillas_on
PRINT COLUMN 1, "geprrp009",
COLUMN 32, "R A Y . O . V A C D O M I N I C A N A, S. A.",
COLUMN 107, "Pag. ", pageno using "###"
PRINT COLUMN 38, "SISTEMA DE INFORMACION GERENCIAL",
COLUMN 107, today using "dd/mm/yyyy"
PRINT COLUMN 28, "Ranking de Ventas Comparativas Ano Anterior Mayor A ",
cantidad1 USING "#,###,###.##",
COLUMN 107, hora
LET l = LENGTH(detalle)
LET l = 100 - l
LET l = l / 2
PRINT COLUMN l,detalle clipped
SKIP 1 LINES
PRINT COLUMN 1, "ACUMULADO AL MES DE ",nom_mes CLIPPED
PRINT COLUMN 1, "-----------------------------------",
"-----------------------------------",
"------------------------------------------------"
PRINT COLUMN 2, "Posicion",
COLUMN 70, "Valor",
COLUMN 85, "Valor",
COLUMN 113, "Valor"
PRINT COLUMN 1, ano1 USING "&&&&",
COLUMN 6, ano1-1 USING "&&&&",
COLUMN 11, ano1-2 USING "&&&&",
COLUMN 17, "Cliente",
COLUMN 70, ano1 USING "&&&&",
COLUMN 85, ano1-1 USING "&&&&",
COLUMN 92, "Variacion",
COLUMN 113, ano1-2 USING "&&&&"
PRINT COLUMN 1, "-----------------------------------",
"-----------------------------------",
"------------------------------------------------"
PRINT COLUMN 1, letras.negrillas_off
ON EVERY ROW
LET porciento = 0
IF x.cantidad2 IS NULL THEN
LET x.cantidad2 = 0
END IF
IF x.cantidad1 IS NULL THEN
LET x.cantidad1 = 0
END IF
#LET diferencia = x.cantidad2 - x.cantidad1
IF x.cantidad1 != 0 THEN
LET porciento = (1- (x.cantidad2/x.cantidad1)) * 100
END IF
IF x.cantidad1 > x.cantidad2 AND porciento > 0 THEN
LET porciento = porciento * -1
END IF
IF x.cantidad2 > x.cantidad1 AND porciento < 0 THEN
LET porciento = porciento * -1
END IF
PRINT COLUMN 1, x.posicion2 USING "###&",
COLUMN 6, x.posicion1 USING "###&",
COLUMN 11, x.posicion3 USING "###&",
COLUMN 17, x.codigo," ",x.nombre CLIPPED,
COLUMN 60, x.cantidad2 USING "###,###,###.##",
COLUMN 75, x.cantidad1 USING "###,###,###.##",
COLUMN 92, porciento USING "(#,###.##)","%",
COLUMN 103, x.cantidad3 USING "###,###,###.##"," ",
x.status_t
ON LAST ROW
PRINT COLUMN 60, "--------------",
COLUMN 75, "--------------",
COLUMN 103, "--------------"
PRINT COLUMN 30, "TOTAL VENTAS....",
COLUMN 60, SUM(x.cantidad2) USING "###,###,###.##",
COLUMN 75, SUM(x.cantidad1) USING "###,###,###.##",
COLUMN 103, SUM(x.cantidad3) USING "###,###,###.##"
PRINT COLUMN 1, letras.comp_off,letras.negrillas_off
LET idx1 = 0
END REPORT