{ ------------------------------------------------------------------------------- PROGRAMA : VEPRRP009 OBJETIVO : Control de ventas mensual por vendedor PROGRAMADOR : Ing. Juan Soto (Johnny) FECHA REALIZACION : Enero 08, 1993 ------------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" FUNCTION veprrp009() DEFINE mes_ini_p,mes_fin_p,mes_ini,mes_fin CHAR(2) DEFINE select_zona,select_cliente,select_pilas CHAR(1500) DEFINE idx_o,idx_e,idx_p,idx_m SMALLINT DEFINE esta,encontre,salir2,salir1,salir CHAR(1) DEFINE vendedor RECORD meses SMALLINT, zona SMALLINT, sec_vend SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad_Pres DECIMAL(12,3), descrip_esp CHAR(30), unidad_med CHAR(4) , porciento DECIMAL(8,4), nom_emp CHAR(30), apell_emp CHAR(30), ventas_acum DECIMAL(12,3), cantidad_vend DECIMAL(12,3) END RECORD #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21, PROMPT LINE 14 OPEN FORM vefmrp009 FROM "vefmrp009" DISPLAY FORM vefmrp009 CALL pantalla() DISPLAY "veprrp009" AT 4,3 DISPLAY "Control de Ventas Mensual" AT 6,27 ## TIPO DE PAPEL NECESARIO PARA IMPRIMIR EL REPORTE LET tipo_papel = 1 CALL msgrp000(tipo_papel) ## CRITERIO PARA LA IMPRESION DEL REPORTE INPUT BY NAME fact_gral.cod_cia,fact_gral.ventas AFTER FIELD ventas IF fact_gral.ventas is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ventas END IF AFTER FIELD cod_cia IF fact_gral.cod_cia is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_cia END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF EXIT INPUT END INPUT LET mes_ini = MONTH(rango.fech_in) using "&&" LET mes_fin = MONTH(rango.fech_fi) using "&&" LET ano_c = YEAR(today) CONSTRUCT criterio ON c.mes,c.zona,f.sec_vend FROM mes,zona,sec_vend IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF # Busca Los Movimientos de las Facturas LET select_cliente = "SELECT UNIQUE c.mes,c.zona,f.sec_vend,d.cod_n,d.cod_grupo,d.cod_tipo, ", " d.cod_sec,e.cantidad,d.descrip_esp, d.unidad_med,c.porciento ", "FROM iptb00002 d,vetb00017 e,vetb00010 f,vetb00016 c ", "WHERE ",criterio clipped," and f.cod_zona = c.zona and e.mes = c.mes and ", " c.ventas = ? and c.ventas = e.ventas and c.cod_n = e.cod_n and ", " c.cod_grupo = e.cod_grupo and c.cod_tipo = e.cod_tipo and ", " c.cod_sec = e.cod_sec and d.cod_n = e.cod_n and ", " d.cod_grupo = e.cod_grupo and d.cod_tipo = e.cod_tipo and ", " d.cod_sec = e.cod_sec and e.ano = ? ", "ORDER BY 1,2,3,4,5,6,7" DISPLAY " " AT 19,14 DISPLAY "<< Buscando Informacion ... Espere Por Favor >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE busca_movi FROM select_cliente DECLARE movi_curs SCROLL CURSOR FOR busca_movi OPEN movi_curs USING fact_gral.ventas,ano_c START REPORT control TO "C:\\archivo" DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere >>" AT 19,14 ATTRIBUTE (REVERSE) LET idx_p = 1 LET salir1 = "N" WHILE salir1 != "S" FETCH movi_curs INTO vendedor.* IF STATUS = NOTFOUND THEN LET salir1 = "S" EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF vendedor.cantidad_vend is null THEN LET vendedor.cantidad_vend = 0 END IF OUTPUT TO REPORT control(vendedor.*) END WHILE FINISH REPORT control CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT control(x) DEFINE x RECORD meses SMALLINT, zona SMALLINT, sec_vend SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad_Pres DECIMAL(12,3), descrip_esp CHAR(30), unidad_med CHAR(4) , porciento DECIMAL(8,4), nom_emp CHAR(30), apell_emp CHAR(30), ventas_acum DECIMAL(12,3), cantidad_vend DECIMAL(12,3) END RECORD DEFINE vendedor,imp,imp1 CHAR (1) DEFINE nombre_mes CHAR(11) DEFINE descrip_zone CHAR(30) DEFINE doble_on CHAR(3) DEFINE pais,doble_off CHAR(3) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) DEFINE comp_on CHAR(3) DEFINE comp_off CHAR(3) DEFINE doce CHAR(6) DEFINE normal CHAR(6) DEFINE hora CHAR(5) DEFINE variacion,monto DECIMAL(12,2) DEFINE i SMALLINT DEFINE periodo1,periodo2 DATE OUTPUT TOP MARGIN 0 LEFT MARGIN 7 BOTTOM MARGIN 2 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 = (122 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT comp_on PRINT COLUMN 1,negrillas_on PRINT COLUMN 1, "veprrp009", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 115, "Pag. ", pageno using "###" PRINT COLUMN 52, "Sistema de Ventas ", COLUMN 113, today using "dd/mm/yyyy" PRINT COLUMN 41, "Control de Ventas Mensual Por Vendedor", COLUMN 118, hora SKIP 1 LINES PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "------------------------" PRINT COLUMN 69, "Ventas", COLUMN 84, "Presupuesto", COLUMN 115, "Porciento" PRINT COLUMN 4, "P r o d u c t o", COLUMN 58, "Ventas", COLUMN 69, "Acumuladas", COLUMN 84, "Mes", COLUMN 99, "Presupuestado", COLUMN 115, "Variacion" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "------------------------", negrillas_off BEFORE GROUP OF x.meses CALL meses() LET i = x.meses LET nombre_mes = mes1[i] PRINT COLUMN 18,doble_on,"Mes de: ", nombre_mes SKIP 1 LINE # BEFORE GROUP OF x.cod_vend # LET vendedor = "S" BEFORE GROUP OF x.sec_vend LET vendedor = "S" BEFORE GROUP OF x.zona IF fact_gral.ventas = "1" THEN SELECT descrip INTO descrip_zone FROM vetb00008 WHERE cod_zona = x.zona IF status = notfound THEN LET status = 0 END IF END IF IF fact_gral.ventas = "2" THEN SELECT nom_pais INTO descrip_zone FROM cotb00018 WHERE cod_pais = x.zona IF status = notfound THEN LET status = 0 END IF END IF PRINT COLUMN 1, negrillas_on, COLUMN 2, "Zona: ","(",x.zona using "<<<",")", COLUMN 14, descrip_zone,negrillas_off; IF vendedor = "S" THEN SELECT nom1_emp,apell1_emp INTO descrip1,descrip2 FROM adtb00003 WHERE num_emp = x.sec_vend PRINT COLUMN 40, negrillas_on,"Vendedor: ", x.sec_vend using "&&&&"," ", descrip1 clipped," ",descrip2 clipped,negrillas_off LET vendedor = "N" END IF SKIP 1 LINE ON EVERY ROW # Busca La Venta del Vendedor en el mes correspondiente SELECT fecha_inicio,fecha_corte INTO periodo1,periodo2 FROM prdtable WHERE ano = ano_c and mes = i SELECT sum(b.cantidad-b.cantidad_2) INTO x.cantidad_vend FROM vetb00002 a,vetb00003 b WHERE a.zona=x.zona and a.ventas=fact_gral.ventas and a.factura=b.factura and a.status_t is null and a.sec_vend=x.sec_vend and a.fecha_factura between periodo1 and periodo2 and b.cod_n=x.cod_n and b.cod_grupo=x.cod_grupo and b.cod_tipo=x.cod_tipo and b.cod_sec = x.cod_sec # Busca Las ventas acumuladas del vendedor para el mes correspondiente SELECT sum(b.cantidad-b.cantidad_2) INTO x.ventas_acum FROM vetb00002 a,vetb00003 b WHERE a.zona=x.zona and a.ventas=fact_gral.ventas and a.factura=b.factura and b.cod_n=x.cod_n and b.cod_grupo=x.cod_grupo and b.cod_tipo=x.cod_tipo and b.cod_sec=x.cod_sec and a.status_t is null and a.sec_vend=x.sec_vend and a.fecha_factura <= periodo2 IF x.cantidad_vend is null THEN LET x.cantidad_vend = 0 END IF IF x.ventas_acum is null THEN LET x.ventas_acum = 0 END IF # Calculo del sub-total del monto y monto IF x.porciento != 0 THEN LET monto = x.cantidad_pres * (x.porciento / 100) END IF IF x.cantidad_vend != 0 THEN LET variacion = x.cantidad_vend / monto END IF IF monto > x.cantidad_vend THEN LET variacion = variacion * -1 END IF PRINT COLUMN 1, x.cod_n using "&","-", COLUMN 3, x.cod_grupo using "&","-", COLUMN 5, x.cod_tipo using "&&","-", COLUMN 8, x.cod_sec using "&&&", COLUMN 14, x.descrip_esp," ",x.unidad_med, COLUMN 52, x.cantidad_vend using "#,###,###.##", COLUMN 65, x.ventas_acum using "###,###,###.##", COLUMN 80, monto using "##,###,###.##", "(",x.porciento using "<<<.####","%",")", COLUMN 95, x.cantidad_pres using "#,###,###.##", COLUMN 117, variacion USING "((&.&&)" LET imp = "N" LET imp1 = "N" # Salida de Sub-totales por zona AFTER GROUP OF x.meses SKIP TO TOP OF PAGE END REPORT