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