{ ======================================================================= 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