{ ------------------------------------------------------------------------------- PROGRAMA : VEPRCS104 OBJETIVO : Consulta Frecuencia de Ventas por Clientes PROGRAMADOR : Lic. Abner Montalvo Zapata FECHA REALIZACION : Febrero 5, 1993 ------------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" FUNCTION veprcs104() # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM vefmcs104 FROM "vefmcs104" DISPLAY FORM vefmcs104 CALL PANTALLA() DISPLAY "veprcs104" AT 4,3 DISPLAY "Frecuencia de Ventas por Clientes" AT 6,23 DISPLAY " Continua Consultando " AT 8,5 ATTRIBUTE (YELLOW,REVERSE) DISPLAY " Cancela Operacion " AT 8,50 ATTRIBUTE (YELLOW,REVERSE) LABEL volver: LET selec = NULL LET criterio = NULL CONSTRUCT criterio ON c.tipo_cliente, c.sec_cliente FROM tipo_cliente, sec_cliente IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET rango.fech_in = null LET rango.fech_fi = null INPUT BY NAME rango.* 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 rango.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF IF rango.fech_in 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 ## Seleccion de los campos que el usuario debe ver en la pantalla LET selec = "SELECT c.tipo_cliente, c.sec_cliente, c.nombre, ", " SUM(a.cantidad-a.cantidad_2) ", "FROM vetb00003 a, vetb00002 b, vetb00004 c ", "WHERE a.factura = b.factura and ", "b.fecha_factura between ? and ? and ", "b.tipo_cliente = c.tipo_cliente and ", "b.sec_cliente = c.sec_cliente and ", "a.status_t is null and ", "b.status_t is null and ", "c.status_t is null and ", criterio clipped, " GROUP BY 1,2,3 ", " ORDER BY 1,2" 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 LET idx = 1 LET unidades = 0 LET identifica = "N" WHILE STATUS != NOTFOUND FETCH accion INTO reg_clientes.* 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 LET arr_ventas3[idx].codigo1 = reg_clientes.tipo1 using "&&","-", reg_clientes.sec1 using "&&&&" LET arr_ventas3[idx].descrip1 = reg_clientes.descrip1 LET arr_ventas3[idx].unidades1 = reg_clientes.unidades1 using "###,###,##&" LET unidades = unidades + reg_clientes.unidades1 LET idx = idx + 1 END IF IF identifica = "S" THEN LET arr_ventas3[idx].codigo1 = null LET arr_ventas3[idx].descrip1 = null LET arr_ventas3[idx].unidades1 = null LET idx = idx + 1 LET arr_ventas3[idx].codigo1 = null LET arr_ventas3[idx].descrip1 = " Total General" LET arr_ventas3[idx].unidades1 = unidades 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_ventas3 TO cs_104.* ## 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