481 lines
16 KiB
Plaintext
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
|