Files
MBS/PROYECTO/vedir/veprcs104.4gl
T

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