{ ------------------------------------------------------------------------------- PROGRAMA : VEPRRP008 OBJETIVO : Estadisticas de Ventas por Mes y Ano PROGRAMADOR : Lic. Abner Montalvo Zapata FECHA REALIZACION : Enero 20, 1993 ------------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" DEFINE prima_us DECIMAL(8,2) DEFINE selec_v CHAR(1000) DEFINE ventas RECORD cantidad_vr DECIMAL(12,2), valor_vr DECIMAL(14,2), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes SMALLINT, ano SMALLINT, ventas CHAR(1), cantidad_pres DECIMAL(12,2), valor_pres DECIMAL(14,2), codigo CHAR(7) END RECORD DEFINE entrada RECORD ano SMALLINT, mes SMALLINT, ventas INTEGER END RECORD DEFINE ano_anterior, ano_tras_anterior SMALLINT DEFINE idx1,idx2 INTEGER FUNCTION veprrp008() DEFINE select_pt,select_vr,select_vp,select_vap,select_pres CHAR(1000) DEFINE idx_pt,idx_vr,idx_vp,idx_vap,idx_pres,mes_inicial,x,venta1,venta2 SMALLINT DEFINE salir_pt,salir_vr,salir_vp,salir_vap,salir_pres,doble_proceso CHAR(1) DEFINE mes_proceso, mes_vp, mes_vap CHAR(4) DEFINE pt RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30) END RECORD DEFINE vr RECORD cantidad DECIMAL(12,2), valor DECIMAL(14,2), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes SMALLINT, ano CHAR(4), ventas CHAR(1) END RECORD DEFINE vp RECORD cantidad DECIMAL(12,2), valor DECIMAL(14,2), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes SMALLINT, ventas CHAR(1) END RECORD DEFINE vap RECORD cantidad DECIMAL(12,2), valor DECIMAL(14,2), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes SMALLINT, ventas CHAR(1) END RECORD # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21, PROMPT LINE 14 OPEN FORM vefmrp008 FROM "vefmrp008" DISPLAY FORM vefmrp008 CALL pantalla() DISPLAY "veprrp008" AT 4,3 DISPLAY "Ventas Por Mes Y Ano" AT 6,30 LET tipo_papel = 1 CALL msgrp000(tipo_papel) INPUT BY NAME entrada.ano,entrada.mes ON KEY (F2) RUN "copy pantalla.bat impresion.bat" DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED) AFTER FIELD ano IF entrada.ano is null OR entrada.ano = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano END IF AFTER FIELD mes IF entrada.mes is null OR entrada.mes = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF entrada.ano is null OR entrada.ano = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano END IF IF entrada.mes is null OR entrada.mes = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes END IF EXIT INPUT END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET ano_anterior = entrada.ano - 1 LET ano_tras_anterior= entrada.ano - 2 CONSTRUCT criterio ON b.ventas,c.cod_n, c.cod_grupo, c.cod_tipo, c.cod_sec FROM ventas,cod_n, cod_grupo, cod_tipo, cod_sec ON KEY (F2) RUN "copy pantalla.bat impresion.bat" DISPLAY "ACTIVACION REPORTE POR WORDPAD" AT 20,15 ATTRIBUTE(RED) 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 # Busca los codigos de los productos terminados # Busca las ventas reales del ano actual hasta el mes indicado anteriormente LET select_vr = "SELECT sum(c.cantidad), sum(c.cantidad * c.precio),c.cod_n,c.cod_grupo, ", " c.cod_tipo,c.cod_sec, a.mes, a.ano, b.ventas ", "FROM vetb00002 b, vetb00003 c, prdtable a ", "WHERE (b.factura = c.factura) AND (b.sec_vend != 8888) AND ", " (b.fecha_factura between a.fecha_inicio and a.fecha_corte) and ", " b.status_t is null and a.ano BETWEEN ?-2 AND ? and a.mes <= ? and ( ", criterio clipped, " ) GROUP BY 9,3,4,5,6,7,8 " DISPLAY " " AT 19,14 DISPLAY "<< Buscando Informaciones del Ano Actual >>" AT 19,14 PREPARE busca_vr FROM select_vr DECLARE movi_vr CURSOR FOR busca_vr OPEN movi_vr USING entrada.ano,entrada.ano, entrada.mes START REPORT venta TO "C:\\archivo" DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) SELECT UNIQUE a.prima INTO prima_us FROM vetb00019 a WHERE a.disponible = "S" IF prima_us IS NULL THEN LET prima_us = 1 END IF LET idx_vr = 1 LET salir_vr = "N" WHILE salir_vr != "S" FETCH movi_vr INTO ventas.* IF STATUS = NOTFOUND THEN LET salir_vr = "S" LET idx_vr = 1 EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET ventas.cantidad_pres = 0 LET ventas.valor_pres = 0 IF ventas.ano = entrada.ano THEN SELECT sum(c.cantidad),sum(c.valor) INTO ventas.cantidad_pres,ventas.valor_pres FROM vetb00045 c WHERE c.ano = entrada.ano AND c.mes = ventas.mes AND c.ventas = ventas.ventas AND c.cod_n = ventas.cod_n AND c.cod_grupo=ventas.cod_grupo AND c.cod_tipo=ventas.cod_tipo AND c.cod_sec = ventas.cod_sec AND c.status_t is null END IF IF ventas.cantidad_pres IS NULL THEN LET ventas.cantidad_pres = 0 END IF IF ventas.valor_pres IS NULL THEN LET ventas.valor_pres = 0 END IF LET ventas.codigo = ventas.cod_n using "&", ventas.cod_grupo using "&", ventas.cod_tipo using "&&", ventas.cod_sec using "&&&" IF ventas.ventas = "2" THEN LET ventas.valor_vr = ventas.valor_vr * prima_us END IF DISPLAY " " AT 20,14 DISPLAY ventas.codigo CLIPPED," ",ventas.ventas, " ",ventas.mes USING "&&"," ",ventas.ano USING "&&&&" AT 20,14 OUTPUT TO REPORT venta(ventas.*) END WHILE FINISH REPORT venta RUN "impresion C:\\archivo" RUN "copy printer2.bat impresion.bat" END FUNCTION REPORT venta(x) DEFINE x RECORD cantidad_vr DECIMAL(12,2), valor_vr DECIMAL(14,2), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes CHAR(4), ano SMALLINT, ventas CHAR(1), cantidad_pres DECIMAL(12,2), valor_pres DECIMAL(14,2), codigo CHAR(7) END RECORD, medida CHAR(4), valor_actual,valor_ant1,valor_ant2, dif1,dif2 DECIMAL(12,2) DEFINE vendedor,imp,imp1 CHAR (1) DEFINE descrip_venta CHAR(22) DEFINE descrip1 CHAR(30) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(2) DEFINE negrillas_off CHAR(2) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE hora CHAR(5) DEFINE descrip_mes CHAR(15) DEFINE pt_impresos SMALLINT DEFINE total_cantidad_vr, total_valor_vr, total_cantidad_vp, total_valor_vp, total_cantidad_vap, total_valor_vap, total_cantidad_pres, total_valor_pres DECIMAL (14,2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ORDER BY x.ventas,x.codigo,x.mes,x.ano DESC FORMAT PAGE HEADER LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET hora = time LET lj = (152 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1,doce,comp_on PRINT COLUMN 1, "veprrp008", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 145, "Pag. ", pageno using "###" PRINT COLUMN 67, "Sistema de Ventas", COLUMN 145, today using "dd/mm/yy" PRINT COLUMN 66, "Ventas por Mes y Ano", COLUMN 148, hora PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------------------------------------", "---------------------------" PRINT COLUMN 38, "REAL ", entrada.ano using "&&&&", COLUMN 74, "PRESUPUESTO ", entrada.ano using "&&&&", COLUMN 112, "REAL ", entrada.ano-1 using "&&&&", COLUMN 156, "REAL ", entrada.ano-2 using "&&&&" PRINT COLUMN 30, "UNIDADES", COLUMN 46, "VALOR RD$", COLUMN 66, "UNIDADES", COLUMN 79, "VALOR RD$", COLUMN 94, "DIF", COLUMN 107, "UNIDADES", COLUMN 120, "VALOR RD$", COLUMN 137, "DIF", COLUMN 148, "UNIDADES", COLUMN 162, "VALOR RD$", COLUMN 176, "DIF" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "--------------------------------------------------" , "---------------------------" BEFORE GROUP OF x.ventas IF x.ventas = "1" THEN LET descrip_venta = " VENTAS LOCALES " END IF IF x.ventas = "2" THEN LET descrip_venta = "VENTAS DE EXPORTACION" END IF PRINT COLUMN 73,"******* ", descrip_venta," *******" SKIP 1 LINE BEFORE GROUP OF x.codigo IF pt_impresos is null THEN LET pt_impresos = 0 END IF LET pt_impresos = pt_impresos + 1 IF pt_impresos > 4 THEN LET pt_impresos = 1 SKIP TO TOP OF PAGE END IF IF pt_impresos > 1 THEN SKIP 1 LINE END IF SELECT a.descrip_esp,a.unidad_med INTO descrip1,medida FROM iptb00002 a WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec PRINT COLUMN 1, negrillas_on,x.cod_n using "&","-", x.cod_grupo using "&","-",x.cod_tipo using "&&","-", x.cod_sec using "&&&", " ",descrip1, " ", medida,negrillas_off LET total_cantidad_vr = 0 LET total_valor_vr = 0 LET total_cantidad_vp = 0 LET total_valor_vp = 0 LET total_cantidad_vap = 0 LET total_valor_vap = 0 LET total_cantidad_pres = 0 LET total_valor_pres = 0 AFTER GROUP OF x.mes LET descrip_mes = null SELECT a.descrip INTO descrip_mes FROM mestable a WHERE a.mes = x.mes IF x.cantidad_vr is null THEN LET x.cantidad_vr = 0 END IF IF x.valor_vr is null THEN LET x.valor_vr = 0 END IF IF x.cantidad_pres is null THEN LET x.cantidad_pres = 0 END IF IF x.valor_pres is null THEN LET x.valor_pres = 0 END IF LET valor_actual = GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano LET valor_ant1 = GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano -1 LET valor_ant2 = GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano -2 LET dif1 = valor_actual - valor_ant1 LET dif2 = valor_actual - valor_ant2 PRINT COLUMN 1, descrip_mes CLIPPED," ",entrada.ano USING "&&&&", COLUMN 24, GROUP SUM(x.cantidad_vr) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 41, GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 60, GROUP SUM(x.cantidad_pres) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 74, GROUP SUM(x.valor_pres) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 89, GROUP SUM(x.valor_pres -x.valor_vr) WHERE x.ano = entrada.ano using "((((,(((.##)", COLUMN 102, GROUP SUM(x.cantidad_vr) WHERE x.ano = entrada.ano-1 using "###,###,###.##", COLUMN 117, GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano-1 using "###,###,###.##", COLUMN 132, dif1 USING "((((,(((.##)", COLUMN 123, GROUP SUM(x.cantidad_vr) WHERE x.ano = entrada.ano-2 using "###,###,###.##", COLUMN 139, GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano-2 using "###,###,###.##", COLUMN 154, dif2 USING "((((,(((.##)" AFTER GROUP OF x.codigo LET valor_actual = GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano LET valor_ant1 = GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano -1 LET valor_ant2 = GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano -2 LET dif1 = valor_actual - valor_ant1 LET dif2 = valor_actual - valor_ant2 PRINT COLUMN 1, negrillas_on PRINT COLUMN 17, "TOTAL ", COLUMN 24, GROUP SUM(x.cantidad_vr) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 41, GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 60, GROUP SUM(x.cantidad_pres) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 74, GROUP SUM(x.valor_pres) WHERE x.ano = entrada.ano using "###,###,###.##", COLUMN 89, GROUP SUM(x.valor_pres -x.valor_vr) WHERE x.ano = entrada.ano using "((((,(((.##)", COLUMN 90, GROUP SUM(x.cantidad_vr) WHERE x.ano = entrada.ano-1 using "###,###,###.##", COLUMN 107, GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano-1 using "###,###,###.##", COLUMN 130, dif1 USING "((,(((,(((.##)", COLUMN 123, GROUP SUM(x.cantidad_vr) WHERE x.ano = entrada.ano-2 using "###,###,###.##", COLUMN 139, GROUP SUM(x.valor_vr) WHERE x.ano = entrada.ano-2 using "###,###,###.##", COLUMN 154, dif2 USING "((,(((,(((.##)" PRINT COLUMN 1, negrillas_off AFTER GROUP OF x.ventas SKIP TO TOP OF PAGE ON LAST ROW PRINT comp_off END REPORT