{ ------------------------------------------------------------------------------- PROGRAMA : VEPRCS103 OBJETIVO : Consulta Ventas de Productos por Tipo de Venta, Zona o Pais, y Fechas PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Mayo 17, 1993 ------------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" FUNCTION veprcs103() DEFINE primera_vez CHAR(1) DEFINE zona_control CHAR(3) DEFINE total_und DECIMAL(12,3) DEFINE total_gral DECIMAL(12,2) # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM vefmcs103 FROM "vefmcs103" DISPLAY FORM vefmcs103 CALL PANTALLA() DISPLAY "veprcs103" AT 4,3 DISPLAY "Ventas Por Tipo de Venta y Zona/Pais" AT 6,21 DISPLAY " Continua Consultando " AT 8,5 ATTRIBUTE (YELLOW,REVERSE) DISPLAY " Cancela Operacion " AT 8,50 ATTRIBUTE (YELLOW,REVERSE) LABEL volver: LET selec = NULL LET selec2= NULL LET criterio = NULL CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.zona FROM cod_n,cod_grupo,cod_tipo,cod_sec,zona IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET fact_gral.ventas = null LET fact_gral.zona = null LET rango.fech_in = null LET rango.fech_fi = null INPUT BY NAME fact_gral.ventas, rango.* AFTER FIELD ventas IF fact_gral.ventas IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ventas END IF BEFORE FIELD fech_in LET rango.fech_in = today AFTER FIELD fech_in IF rango.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF BEFORE FIELD fech_fi LET rango.fech_fi = today AFTER FIELD fech_fi IF rango.fech_fi IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fi END IF IF rango.fech_in > rango.fech_fi THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD fech_fi END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF fact_gral.ventas IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ventas END IF IF rango.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF IF rango.fech_fi IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fi END IF IF rango.fech_in > rango.fech_fi THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD fech_fi 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 ## Seleccion de los campos que el usuario debe ver en la pantalla LET selec = "SELECT b.zona,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,c.descrip_esp, ", " SUM(a.cantidad),SUM(a.cantidad*a.precio) ", "FROM vetb00003 a, vetb00002 b, iptb00002 c ", "WHERE (a.factura = b.factura) and (b.fecha_factura between ? and ? ) and ", " b.ventas = ? AND a.cod_n=c.cod_n and a.cod_grupo=c.cod_grupo and ", " a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec and ( ", criterio clipped," ) and a.status_t is null and c.status_t is null ", "GROUP BY 1,2,3,4,5,6 ORDER BY 1,2,3,4,5" DISPLAY "Buscando Informacion... Espere Por Favor" AT 21,1 ATTRIBUTE(YELLOW) PREPARE busca FROM selec DECLARE accion CURSOR FOR busca OPEN accion using rango.fech_in, rango.fech_fi,fact_gral.ventas LET idx = 1 LET unidades = 0 LET valor_orig = 0 LET total_und = 0 LET total_gral = 0 LET identifica = "N" LET primera_vez = "S" LET zona_control = NULL WHILE STATUS != NOTFOUND FETCH accion INTO reg_ventas2.* IF STATUS = NOTFOUND THEN IF idx = 1 THEN LET numero_msg = 3 CALL msg(numero_msg) LET int_flag = FALSE GOTO volver END IF LET identifica = "S" END IF IF identifica = "N" THEN IF primera_vez = "S" THEN LET primera_vez = "N" LET zona_control = reg_ventas2.zona2 IF fact_gral.ventas = "1" THEN SELECT i.descrip INTO descrip1 FROM vetb00008 i WHERE i.cod_zona = reg_ventas2.zona2 AND i.status_t is null IF status = NOTFOUND THEN LET descrip1 = "ZONA NO EXISTE" END IF LET arr_ventas2[idx].codigo1 = " ZONA ",reg_ventas2.zona2 LET arr_ventas2[idx].descrip1 = descrip1 clipped LET arr_ventas2[idx].unidades1 = null LET arr_ventas[idx].valor1 = null LET idx = idx + 1 END IF IF fact_gral.ventas = "2" THEN LET opcion = reg_ventas2.zona2[2,3] SELECT i.nom_pais INTO descrip1 FROM cotb00018 i WHERE i.cod_pais = opcion AND i.status_t is null IF status = NOTFOUND THEN LET descrip1 = "PAIS NO EXISTE" END IF LET arr_ventas2[idx].codigo1 = " PAIS ",reg_ventas2.zona2 LET arr_ventas2[idx].descrip1 = descrip1 clipped LET arr_ventas2[idx].unidades1 = null LET arr_ventas2[idx].valor1 = null LET idx = idx + 1 END IF END IF END IF IF identifica = "N" THEN IF reg_ventas2.zona2 != zona_control THEN LET zona_control = reg_ventas2.zona2 LET arr_ventas2[idx].codigo1 = null IF fact_gral.ventas = "1" THEN LET arr_ventas2[idx].descrip1 = " Total Zona" ELSE LET arr_ventas2[idx].descrip1 = " Total Pais" END IF #LET arr_ventas2[idx].unidades1 =unidades using "###,###,##.###" LET arr_ventas2[idx].valor1 = valor_orig using "###,###,##&.&&" LET idx = idx + 1 LET total_und = total_und + unidades LET total_gral = total_gral + valor_orig LET unidades = 0 LET valor_orig = 0 LET arr_ventas2[idx].codigo1 = null LET arr_ventas2[idx].descrip1 = null LET arr_ventas2[idx].unidades1 = null LET arr_ventas2[idx].valor1 = null LET idx = idx + 1 IF fact_gral.ventas = "1" THEN SELECT i.descrip INTO descrip1 FROM vetb00008 i WHERE i.cod_zona = reg_ventas2.zona2 AND i.status_t is null IF status >= 0 THEN IF status = NOTFOUND THEN LET descrip1 = "ZONA NO EXISTE" END IF LET arr_ventas2[idx].codigo1 = " ZONA ",reg_ventas2.zona2 LET arr_ventas2[idx].descrip1 = descrip1 clipped LET arr_ventas2[idx].unidades1 = null LET arr_ventas2[idx].valor1 = null LET idx = idx + 1 ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END IF IF fact_gral.ventas = "2" THEN LET opcion = reg_ventas2.zona2[2,3] SELECT i.nom_pais INTO descrip1 FROM cotb00018 i WHERE i.cod_pais = opcion AND i.status_t is null IF status >= 0 THEN IF status = NOTFOUND THEN LET descrip1 = "PAIS NO EXISTE" END IF LET arr_ventas2[idx].codigo1 = " PAIS ",reg_ventas2.zona2 LET arr_ventas2[idx].descrip1 = descrip1 clipped LET arr_ventas2[idx].unidades1 = null LET arr_ventas2[idx].valor1 = null LET idx = idx + 1 ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END IF END IF END IF IF identifica = "N" THEN LET arr_ventas2[idx].codigo1 = reg_ventas2.cod_n2 using "&","-", reg_ventas2.cod_grupo2 using "&","-", reg_ventas2.cod_tipo2 using "&&","-", reg_ventas2.cod_sec2 using "&&&" LET arr_ventas2[idx].descrip1 = reg_ventas2.descrip2 LET arr_ventas2[idx].unidades1 = reg_ventas2.unidades2 using "##,###,###.###" LET arr_ventas2[idx].valor1 = reg_ventas2.valor2 using "###,###,##&.&&" LET unidades = unidades + reg_ventas2.unidades2 LET valor_orig = valor_orig + reg_ventas2.valor2 LET idx = idx + 1 END IF IF identifica = "S" THEN LET arr_ventas2[idx].codigo1 = null IF fact_gral.ventas = "1" THEN LET arr_ventas2[idx].descrip1 = " Total Zona" ELSE LET arr_ventas2[idx].descrip1 = " Total Pais" END IF LET arr_ventas2[idx].unidades1 = unidades using "##,###,###.###" LET arr_ventas2[idx].valor1 = valor_orig using "###,###,##&.&&" LET idx = idx + 1 LET arr_ventas2[idx].codigo1 = null LET arr_ventas2[idx].descrip1 = null LET arr_ventas2[idx].unidades1 = null LET arr_ventas2[idx].valor1 = null LET total_und = total_und + unidades LET total_gral = total_gral + valor_orig LET unidades = 0 LET valor_orig = 0 LET idx = idx + 1 LET arr_ventas2[idx].codigo1 = null LET arr_ventas2[idx].descrip1 = " Total General" LET arr_ventas2[idx].unidades1 = total_und using "##,###,###.###" LET arr_ventas2[idx].valor1 = total_gral using "###,###,##&.&&" LET idx = idx + 1 # Se incrementa el idx en uno para que cuando se llame la funcion set_count # traiga exactamente el total de elementos del array y no todos menos uno. END IF IF identifica = "S" THEN EXIT WHILE END IF END WHILE DISPLAY " " AT 21,1 CALL set_count (idx-1) DISPLAY ARRAY arr_ventas2 TO cs_103.* ## Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN ELSE CLEAR FORM GOTO volver END IF END FUNCTION