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

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