188 lines
5.4 KiB
Plaintext
188 lines
5.4 KiB
Plaintext
{
|
|
-------------------------------------------------------------------------------
|
|
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 " <Esc> Continua Consultando " AT 8,5 ATTRIBUTE (YELLOW,REVERSE)
|
|
DISPLAY " <Supr> 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 <Supr>
|
|
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
|
|
|