Files

1244 lines
41 KiB
Plaintext

{
--------------------------------------------------------------------------
PROGRAMA : VEPRMT303
OBJETIVO : Este programa guarda los porcientos de los productos en
cada provincia.
REALIZADO POR : Ing. Juan Fco. Soto.
FECHA : Febrero 10, 1993.
--------------------------------------------------------------------------
}
GLOBALS
"veprgb000.4gl"
FUNCTION veprmt303()
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 22
CALL pantalla()
OPEN FORM vefmmt303 FROM "vefmmt303"
DISPLAY FORM vefmmt303
DISPLAY "Presupuesto Por Provincia" AT 6,27
DISPLAY "veprmt303 " AT 4,2 ATTRIBUTE (BOLD)
MENU "OPCION"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Delete> Cancela Operacion"
CALL veadd1()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Delete> Cancela Operacion"
CALL vemod1()
COMMAND "Salir"
EXIT MENU
END MENU
END FUNCTION
FUNCTION veadd1()
#WHENEVER ERROR CONTINUE
LABEL vuelve:
LET ano1 = year(today)
INPUT BY NAME ano1 WITHOUT DEFAULTS
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
SELECT UNIQUE ano FROM vetb00021 WHERE @ano = ano1
IF status < 0 THEN
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
ELSE
IF status != notfound THEN
LET numero_msg = 12
CALL msg(numero_msg)
GOTO vuelve
END IF
END IF
FOR idx = 1 to 7
LET porc_prov[idx].ventas = null
LET porc_prov[idx].zona = null
LET porc_prov[idx].provincia = null
LET porc_prov[idx].descrip = null
LET porc_prov[idx].cod_n = null
LET porc_prov[idx].cod_grupo = null
LET porc_prov[idx].cod_tipo = null
LET porc_prov[idx].cod_sec = null
LET porc_prov[idx].porciento = null
LET porc_prov[idx].mes = null
LET porc_prov[idx].desc_mes = null
DISPLAY porc_prov[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_prov[idx].zona to scr_zona[idx].zona
DISPLAY porc_prov[idx].provincia to scr_zona[idx].provincia
DISPLAY porc_prov[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_prov[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_prov[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_prov[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_prov[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_prov[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_prov[idx].mes to scr_zona[idx].mes
DISPLAY porc_prov[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
INPUT ARRAY porc_prov FROM scr_zona.*
ON KEY (CONTROL-W)
LET curr2 = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (provincia)
LET transportista.cod_zona = porc_prov[curr2].zona
CALL consulta_provincias()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD provincia
END IF
LET porc_prov[curr2].provincia = zonap.cod_provincia
LET descrip4 = descrip1
LET descrip1 = null
DISPLAY porc_prov[curr2].provincia to scr_zona[scr_l].provincia
DISPLAY BY NAME descrip4
NEXT FIELD cod_n
WHEN INFIELD (zona)
IF porc_prov[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_prov[curr2].ventas != "1" and porc_prov[curr2].ventas != "2" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_prov[curr2].ventas = "1" THEN
CALL busca_zona1()
ELSE
CALL busca_pais()
LET descrip4 = null
DISPLAY BY NAME descrip4
LET fact_gral.zona = "0",fact_gral.zona clipped
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD zona
END IF
IF existe = "N" THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD zona
ELSE
LET porc_prov[curr2].zona = fact_gral.zona
LET descrip6 = descrip1
END IF
DISPLAY porc_prov[curr2].zona TO scr_zona[scr_l].zona
DISPLAY BY NAME descrip6 ATTRIBUTE (BOLD)
NEXT FIELD cod_n
WHEN INFIELD (cod_n)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_prov[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
WHEN INFIELD (cod_grupo)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_prov[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
WHEN INFIELD (cod_tipo)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_prov[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
WHEN INFIELD (cod_sec)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_prov[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
END CASE
AFTER FIELD ventas
LET curr2 = arr_curr()
LET scr_l = scr_line()
IF porc_prov[curr2].ventas IS NOT NULL THEN
IF porc_prov[curr2].ventas = "1" THEN
LET descrip1 = "L O C A L "
DISPLAY BY NAME descrip1 ATTRIBUTE(BOLD)
ELSE
LET descrip1 = "E X P O R T A C I O N"
DISPLAY BY NAME descrip1 ATTRIBUTE(BOLD)
END IF
END IF
AFTER FIELD zona
IF porc_prov[curr2].zona is not null THEN
IF porc_prov[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_prov[curr2].ventas != "1" and porc_prov[curr2].ventas != "2" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
LET verdad = "N"
CALL repetir()
IF verdad = "S" THEN
NEXT FIELD cod_n
END IF
LET longitud = LENGTH(porc_prov[curr2].zona)
IF longitud < 3 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD zona
END IF
IF porc_prov[curr2].ventas = "1" THEN
LET tipo1 = porc_prov[curr2].zona
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD zona
END IF
SELECT UNIQUE descrip INTO descrip6 FROM vetb00008
WHERE cod_zona = tipo1
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD zona
END IF
DISPLAY BY NAME descrip6 ATTRIBUTE (BOLD)
ELSE
LET descrip4 = null
DISPLAY BY NAME descrip4
LET tipo2 = porc_prov[curr2].zona[2,3]
SELECT UNIQUE nom_pais INTO descrip6 FROM cotb00018
WHERE cod_pais = tipo2
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD zona
END IF
DISPLAY BY NAME descrip6 ATTRIBUTE (BOLD)
NEXT FIELD cod_n
END IF
END IF
IF porc_prov[curr2].zona is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD zona
END IF
IF porc_prov[curr2].ventas is not null and
porc_prov[curr2].zona is not null THEN
IF porc_prov[curr2].ventas = "2" THEN
NEXT FIELD cod_n
END IF
END IF
AFTER FIELD provincia
IF porc_prov[curr2].ventas is not null and
porc_prov[curr2].zona is not null THEN
IF porc_prov[curr2].provincia is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD provincia
END IF
SELECT c.nombre_provincia INTO descrip4 FROM vetb00009 a,vetb00020 c
WHERE a.cod_zona = porc_prov[curr2].zona and
a.cod_provincia = porc_prov[curr2].provincia and
c.cod_provincia = a.cod_provincia and
c.status_t is null
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 95
CALL msg(numero_msg)
NEXT FIELD provincia
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME descrip4 ATTRIBUTE (BOLD)
ELSE
NEXT FIELD ventas
END IF
AFTER FIELD cod_sec
IF porc_prov[curr2].cod_n is not null and
porc_prov[curr2].cod_grupo is not null and
porc_prov[curr2].cod_tipo is not null and
porc_prov[curr2].cod_sec is not null THEN
SELECT descrip_esp INTO descrip6 FROM iptb00002
WHERE cod_n = porc_prov[curr2].cod_n and
cod_grupo = porc_prov[curr2].cod_grupo and
cod_tipo = porc_prov[curr2].cod_tipo and
cod_sec = porc_prov[curr2].cod_sec and
status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].descrip = descrip6
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
ATTRIBUTE(BOLD)
ELSE
LET porc_prov[curr2].ventas = null
LET porc_prov[curr2].zona = null
LET porc_prov[curr2].provincia = null
LET porc_prov[curr2].descrip = null
LET porc_prov[curr2].cod_n = null
LET porc_prov[curr2].cod_grupo = null
LET porc_prov[curr2].cod_tipo = null
LET porc_prov[curr2].cod_sec = null
DISPLAY porc_prov[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_prov[curr2].zona to scr_zona[scr_l].zona
DISPLAY porc_prov[curr2].provincia to scr_zona[scr_l].provincia
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
AFTER FIELD porciento
IF porc_prov[curr2].cod_n is not null and
porc_prov[curr2].cod_grupo is not null and
porc_prov[curr2].cod_tipo is not null and
porc_prov[curr2].cod_sec is not null THEN
IF porc_prov[curr2].porciento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD porciento
END IF
# No permite que se digite un porcentaje mayor que el 100 % para cada codigo
LET p_cantidad = 0
FOR idx = 1 TO arr_count()
IF porc_prov[idx].cod_n is not null and
porc_prov[idx].cod_grupo is not null and
porc_prov[idx].cod_tipo is not null and
porc_prov[idx].cod_sec is not null THEN
IF porc_prov[idx].cod_n = porc_prov[curr2].cod_n and
porc_prov[idx].cod_grupo = porc_prov[curr2].cod_grupo and
porc_prov[idx].cod_tipo = porc_prov[curr2].cod_tipo and
porc_prov[idx].cod_sec = porc_prov[curr2].cod_sec and
porc_prov[idx].ventas = porc_prov[curr2].ventas and
porc_prov[idx].zona = porc_prov[curr2].zona and
porc_prov[idx].mes = porc_prov[curr2].mes THEN
LET p_cantidad = p_cantidad + porc_prov[idx].porciento
END IF
END IF
END FOR
IF p_cantidad > 100 THEN
LET numero_msg = 89
CALL msg(numero_msg)
NEXT FIELD porciento
END IF
END IF
AFTER FIELD mes
IF porc_prov[curr2].mes is not null THEN
IF porc_prov[curr2].mes > 12 THEN
LET numero_msg = 75
CALL msg(numero_msg)
NEXT FIELD mes
END IF
IF porc_prov[curr2].mes < 1 THEN
LET numero_msg = 75
CALL msg(numero_msg)
NEXT FIELD mes
END IF
SELECT a.descrip INTO porc_prov[curr2].desc_mes FROM mestable a
WHERE a.mes = porc_prov[curr2].mes
DISPLAY porc_prov[curr2].desc_mes to scr_zona[scr_l].desc_mes
LET verdad = "N"
CALL repite2()
IF verdad = "S" THEN
NEXT FIELD ventas
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF porc_prov[curr2].cod_n is null or
porc_prov[curr2].cod_grupo is null or
porc_prov[curr2].cod_tipo is null or
porc_prov[curr2].cod_sec is null or
porc_prov[curr2].ventas is null or
porc_prov[curr2].mes is null THEN
LET porc_prov[curr2].cod_n = null
LET porc_prov[curr2].cod_grupo = null
LET porc_prov[curr2].cod_tipo = null
LET porc_prov[curr2].cod_sec = null
LET porc_prov[curr2].ventas = null
LET porc_prov[curr2].mes = null
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_prov[curr2].mes to scr_zona[scr_l].mes
END IF
EXIT INPUT
END INPUT
FOR idx = 1 to arr_count()
IF porc_prov[idx].cod_n is not null and
porc_prov[idx].cod_grupo is not null and
porc_prov[idx].cod_tipo is not null and
porc_prov[idx].cod_sec is not null AND
porc_prov[idx].ventas is not null AND
porc_prov[idx].mes is not null THEN
INSERT INTO vetb00021 values
(ano1,porc_prov[idx].ventas,porc_prov[idx].zona,porc_prov[idx].provincia,
porc_prov[idx].cod_n, porc_prov[idx].cod_grupo,
porc_prov[idx].cod_tipo,porc_prov[idx].cod_sec,porc_prov[idx].porciento,
porc_prov[idx].mes,null,user,current,null,null)
END IF
END FOR
IF status > 0 THEN
LET numero_msg = 1
CALL msg(numero_msg)
ELSE
CALL integridad()
END IF
FOR idx = 1 to 7
LET porc_prov[idx].ventas = null
LET porc_prov[idx].zona = null
LET porc_prov[idx].provincia = null
LET porc_prov[idx].descrip = null
LET porc_prov[idx].cod_n = null
LET porc_prov[idx].cod_grupo = null
LET porc_prov[idx].cod_tipo = null
LET porc_prov[idx].cod_sec = null
LET porc_prov[idx].porciento = null
LET porc_prov[idx].mes = null
LET porc_prov[idx].desc_mes = null
DISPLAY porc_prov[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_prov[idx].zona to scr_zona[idx].zona
DISPLAY porc_prov[idx].provincia to scr_zona[idx].provincia
DISPLAY porc_prov[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_prov[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_prov[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_prov[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_prov[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_prov[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_prov[idx].mes to scr_zona[idx].mes
DISPLAY porc_prov[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
CLEAR FORM
GOTO vuelve
END FUNCTION
FUNCTION vemod1()
DEFINE usuarios RECORD
us_crea CHAR(9),
fech_crea LIKE vetb00021.fech_crea
END RECORD
#WHENEVER ERROR CONTINUE
CONSTRUCT criterio ON ano FROM ano1
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET selec = "SELECT unique ano FROM vetb00021 ",
"WHERE ",criterio clipped," and status_t is null ",
"ORDER BY 1 "
PREPARE busca_porc FROM selec
DECLARE porc SCROLL CURSOR FOR busca_porc
OPEN porc
FETCH FIRST porc INTO ano1
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
DISPLAY BY NAME ano1
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT porc INTO ano1
IF status = notfound THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME ano1
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS porc INTO ano1
IF status = notfound THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME ano1
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST porc INTO ano1
IF status = notfound THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME ano1
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST porc INTO ano1
IF status = notfound THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME ano1
COMMAND "Escoger"
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
FOR idx = 1 to 7
LET porc_prov[idx].ventas = null
LET porc_prov[idx].zona = null
LET porc_prov[idx].provincia = null
LET porc_prov[idx].descrip = null
LET porc_prov[idx].cod_n = null
LET porc_prov[idx].cod_grupo = null
LET porc_prov[idx].cod_tipo = null
LET porc_prov[idx].cod_sec = null
LET porc_prov[idx].porciento = null
LET porc_prov[idx].mes = null
LET porc_prov[idx].desc_mes = null
DISPLAY porc_prov[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_prov[idx].zona to scr_zona[idx].zona
DISPLAY porc_prov[idx].provincia to scr_zona[idx].provincia
DISPLAY porc_prov[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_prov[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_prov[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_prov[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_prov[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_prov[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_prov[idx].mes to scr_zona[idx].mes
DISPLAY porc_prov[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
DECLARE buscate CURSOR FOR
SELECT x.ventas,x.zona,x.provincia,x.cod_n,x.cod_grupo,x.cod_tipo,
x.cod_sec,a.descrip_esp,x.mes,c.descrip,x.porciento
FROM vetb00021 x,iptb00002 a, mestable c
WHERE x.ano = ano1 and x.cod_n = a.cod_n and x.cod_grupo = a.cod_grupo and
x.cod_tipo = a.cod_tipo and x.cod_sec = a.cod_sec and
x.mes = c.mes AND a.status_t is null
LET idx = 1
FOREACH buscate INTO porc_prov[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
INPUT ARRAY porc_prov WITHOUT DEFAULTS FROM scr_zona.*
ON KEY (CONTROL-W)
LET curr2 = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (provincia)
LET transportista.cod_zona = porc_prov[curr2].zona
CALL consulta_provincias()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD provincia
END IF
LET porc_prov[curr2].provincia = zonap.cod_provincia
LET descrip4 = descrip1
LET descrip1 = null
DISPLAY porc_prov[curr2].provincia to scr_zona[scr_l].provincia
DISPLAY BY NAME descrip4
NEXT FIELD cod_n
WHEN INFIELD (zona)
IF porc_prov[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_prov[curr2].ventas != "1" and porc_prov[curr2].ventas != "2" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_prov[curr2].ventas = "1" THEN
CALL busca_zona1()
ELSE
CALL busca_pais()
LET descrip4 = null
DISPLAY BY NAME descrip4
LET fact_gral.zona = "0",fact_gral.zona clipped
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD zona
END IF
IF existe = "N" THEN
LET numero_msg = 3
CALL msg(numero_msg)
LET existe = null
NEXT FIELD zona
ELSE
LET porc_prov[curr2].zona = fact_gral.zona
LET descrip6 = descrip1
END IF
DISPLAY porc_prov[curr2].zona TO scr_zona[scr_l].zona
DISPLAY BY NAME descrip6 ATTRIBUTE (BOLD)
WHEN INFIELD (cod_n)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
WHEN INFIELD (cod_grupo)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
WHEN INFIELD (cod_tipo)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
WHEN INFIELD (cod_sec)
CALL busca_pt()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].cod_n = pterminado.cod_n
LET porc_prov[curr2].cod_grupo = pterminado.cod_grupo
LET porc_prov[curr2].cod_tipo = pterminado.cod_tipo
LET porc_prov[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
NEXT FIELD mes
END CASE
AFTER FIELD ventas
LET curr2 = arr_curr()
LET scr_l = scr_line()
IF porc_prov[curr2].ventas IS NOT NULL THEN
IF porc_prov[curr2].ventas = "1" THEN
LET descrip1 = "L O C A L "
DISPLAY BY NAME descrip1 ATTRIBUTE(BOLD)
ELSE
LET descrip1 = "E X P O R T A C I O N"
DISPLAY BY NAME descrip1 ATTRIBUTE(BOLD)
END IF
END IF
AFTER FIELD zona
IF porc_prov[curr2].zona is not null THEN
IF porc_prov[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_prov[curr2].ventas != "1" and porc_prov[curr2].ventas != "2" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
LET verdad = "N"
CALL repetir()
IF verdad = "S" THEN
NEXT FIELD cod_n
END IF
LET longitud = LENGTH(porc_prov[curr2].zona)
IF longitud < 3 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD zona
END IF
IF porc_prov[curr2].ventas = "1" THEN
LET tipo1 = porc_prov[curr2].zona
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD zona
END IF
SELECT UNIQUE descrip INTO descrip6 FROM vetb00008
WHERE cod_zona = tipo1
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD zona
END IF
DISPLAY BY NAME descrip6 ATTRIBUTE (BOLD)
ELSE
LET descrip4 = null
DISPLAY BY NAME descrip4
LET tipo2 = porc_prov[curr2].zona[2,3]
SELECT UNIQUE nom_pais INTO descrip6 FROM cotb00018
WHERE cod_pais = tipo2
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD zona
END IF
DISPLAY BY NAME descrip6 ATTRIBUTE (BOLD)
END IF
END IF
IF porc_prov[curr2].zona is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD zona
END IF
IF porc_prov[curr2].ventas is not null and
porc_prov[curr2].zona is not null THEN
IF porc_prov[curr2].ventas = "2" THEN
NEXT FIELD cod_n
END IF
END IF
AFTER FIELD provincia
IF porc_prov[curr2].ventas is not null and
porc_prov[curr2].zona is not null THEN
IF porc_prov[curr2].provincia is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD provincia
END IF
SELECT c.nombre_provincia INTO descrip4 FROM vetb00009 a,vetb00020 c
WHERE a.cod_zona = porc_prov[curr2].zona and
c.cod_provincia = a.cod_provincia and
c.cod_provincia = porc_prov[curr2].provincia and
c.status_t is null
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 95
CALL msg(numero_msg)
NEXT FIELD provincia
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME descrip4
ELSE
NEXT FIELD ventas
END IF
AFTER FIELD cod_sec
IF porc_prov[curr2].cod_n is not null and
porc_prov[curr2].cod_grupo is not null and
porc_prov[curr2].cod_tipo is not null and
porc_prov[curr2].cod_sec is not null THEN
SELECT descrip_esp INTO descrip6 FROM iptb00002
WHERE cod_n = porc_prov[curr2].cod_n and
cod_grupo = porc_prov[curr2].cod_grupo and
cod_tipo = porc_prov[curr2].cod_tipo and
cod_sec = porc_prov[curr2].cod_sec and
status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
LET porc_prov[curr2].descrip = descrip6
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
ATTRIBUTE(BOLD)
ELSE
LET porc_prov[curr2].ventas = null
LET porc_prov[curr2].zona = null
LET porc_prov[curr2].provincia = null
LET porc_prov[curr2].descrip = null
LET porc_prov[curr2].cod_n = null
LET porc_prov[curr2].cod_grupo = null
LET porc_prov[curr2].cod_tipo = null
LET porc_prov[curr2].cod_sec = null
DISPLAY porc_prov[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_prov[curr2].zona to scr_zona[scr_l].zona
DISPLAY porc_prov[curr2].provincia to scr_zona[scr_l].provincia
DISPLAY porc_prov[curr2].descrip to scr_zona[scr_l].descrip
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD zona
END IF
AFTER FIELD porciento
IF porc_prov[curr2].cod_n is not null and
porc_prov[curr2].cod_grupo is not null and
porc_prov[curr2].cod_tipo is not null and
porc_prov[curr2].cod_sec is not null THEN
IF porc_prov[curr2].porciento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD porciento
END IF
# No permite que se digite un porcentaje mayor que el 100 % para cada codigo
LET p_cantidad = 0
FOR idx = 1 TO arr_count()
IF porc_prov[idx].cod_n is not null and
porc_prov[idx].cod_grupo is not null and
porc_prov[idx].cod_tipo is not null and
porc_prov[idx].cod_sec is not null THEN
IF porc_prov[idx].cod_n = porc_prov[curr2].cod_n and
porc_prov[idx].cod_grupo = porc_prov[curr2].cod_grupo and
porc_prov[idx].cod_tipo = porc_prov[curr2].cod_tipo and
porc_prov[idx].cod_sec = porc_prov[curr2].cod_sec and
porc_prov[idx].ventas = porc_prov[curr2].ventas and
porc_prov[idx].zona = porc_prov[curr2].zona and
porc_prov[idx].mes = porc_prov[curr2].mes THEN
LET p_cantidad = p_cantidad + porc_prov[idx].porciento
END IF
END IF
END FOR
IF p_cantidad > 100 THEN
LET numero_msg = 89
CALL msg(numero_msg)
NEXT FIELD porciento
END IF
END IF
AFTER FIELD mes
IF porc_prov[curr2].mes is not null THEN
IF porc_prov[curr2].mes > 12 THEN
LET numero_msg = 75
CALL msg(numero_msg)
NEXT FIELD mes
END IF
IF porc_prov[curr2].mes < 1 THEN
LET numero_msg = 75
CALL msg(numero_msg)
NEXT FIELD mes
END IF
SELECT a.descrip INTO porc_prov[curr2].desc_mes FROM mestable a
WHERE a.mes = porc_prov[curr2].mes
DISPLAY porc_prov[curr2].desc_mes to scr_zona[scr_l].desc_mes
DISPLAY porc_prov[curr2].desc_mes to scr_zona[scr_l].desc_mes
LET verdad = "N"
CALL repite2()
IF verdad = "S" THEN
NEXT FIELD ventas
END IF
ELSE
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD mes
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF porc_prov[curr2].cod_n is null or
porc_prov[curr2].cod_grupo is null or
porc_prov[curr2].cod_tipo is null or
porc_prov[curr2].cod_sec is null or
porc_prov[curr2].ventas is null or
porc_prov[curr2].mes is null THEN
LET porc_prov[curr2].cod_n = null
LET porc_prov[curr2].cod_grupo = null
LET porc_prov[curr2].cod_tipo = null
LET porc_prov[curr2].cod_sec = null
LET porc_prov[curr2].ventas = null
LET porc_prov[curr2].mes = null
DISPLAY porc_prov[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_prov[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_prov[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_prov[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_prov[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_prov[curr2].mes to scr_zona[scr_l].mes
END IF
EXIT INPUT
END INPUT
DELETE FROM vetb00021 WHERE ano = ano1
FOR idx = 1 to arr_count()
IF porc_prov[idx].cod_n is not null and
porc_prov[idx].cod_grupo is not null and
porc_prov[idx].cod_tipo is not null and
porc_prov[idx].cod_sec is not null AND
porc_prov[idx].ventas is not null AND
porc_prov[idx].mes is not null THEN
INSERT INTO vetb00021
VALUES (ano1,porc_prov[idx].ventas,porc_prov[idx].zona,
porc_prov[idx].provincia,porc_prov[idx].cod_n,
porc_prov[idx].cod_grupo,porc_prov[idx].cod_tipo,
porc_prov[idx].cod_sec,porc_prov[idx].porciento,
porc_prov[idx].mes,null,user,current,user,current)
END IF
END FOR
IF status > 0 THEN
LET numero_msg = 1
CALL msg(numero_msg)
ELSE
CALL integridad()
END IF
FOR idx = 1 to 7
LET porc_prov[idx].ventas = null
LET porc_prov[idx].zona = null
LET porc_prov[idx].provincia = null
LET porc_prov[idx].descrip = null
LET porc_prov[idx].cod_n = null
LET porc_prov[idx].cod_grupo = null
LET porc_prov[idx].cod_tipo = null
LET porc_prov[idx].cod_sec = null
LET porc_prov[idx].porciento = null
LET porc_prov[idx].mes = null
LET porc_prov[idx].desc_mes = null
DISPLAY porc_prov[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_prov[idx].zona to scr_zona[idx].zona
DISPLAY porc_prov[idx].provincia to scr_zona[idx].provincia
DISPLAY porc_prov[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_prov[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_prov[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_prov[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_prov[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_prov[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_prov[idx].mes to scr_zona[idx].mes
DISPLAY porc_prov[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
COMMAND KEY ("L") "eLiminar"
DELETE FROM vetb00021
WHERE ano = ano1
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
CLEAR FORM
FOR idx = 1 to 7
LET porc_prov[idx].ventas = null
LET porc_prov[idx].zona = null
LET porc_prov[idx].provincia = null
LET porc_prov[idx].descrip = null
LET porc_prov[idx].cod_n = null
LET porc_prov[idx].cod_grupo = null
LET porc_prov[idx].cod_tipo = null
LET porc_prov[idx].cod_sec = null
LET porc_prov[idx].porciento = null
LET porc_prov[idx].mes = null
LET porc_prov[idx].desc_mes = null
DISPLAY porc_prov[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_prov[idx].zona to scr_zona[idx].zona
DISPLAY porc_prov[idx].provincia to scr_zona[idx].provincia
DISPLAY porc_prov[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_prov[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_prov[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_prov[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_prov[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_prov[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_prov[idx].mes to scr_zona[idx].mes
DISPLAY porc_prov[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
EXIT MENU
END MENU
END FUNCTION
FUNCTION repite2()
DEFINE ant_art RECORD
ventas CHAR(1),
zona CHAR(3),
provincia SMALLINT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
mes SMALLINT
END RECORD
LET ant_art.ventas = porc_prov[curr2].ventas
LET ant_art.zona = porc_prov[curr2].zona
LET ant_art.provincia = porc_prov[curr2].provincia
LET ant_art.cod_n = porc_prov[curr2].cod_n
LET ant_art.cod_grupo = porc_prov[curr2].cod_grupo
LET ant_art.cod_tipo = porc_prov[curr2].cod_tipo
LET ant_art.cod_sec = porc_prov[curr2].cod_sec
LET ant_art.mes = porc_prov[curr2].mes
FOR idx = 1 TO arr_count()
IF idx != curr2 THEN
IF porc_prov[idx].cod_n IS NOT NULL AND
porc_prov[idx].cod_grupo IS NOT NULL AND
porc_prov[idx].cod_tipo IS NOT NULL AND
porc_prov[idx].cod_sec IS NOT NULL THEN
IF porc_prov[idx].cod_n = ant_art.cod_n AND
porc_prov[idx].cod_grupo = ant_art.cod_grupo AND
porc_prov[idx].cod_tipo = ant_art.cod_tipo AND
porc_prov[idx].cod_sec = ant_art.cod_sec AND
porc_prov[idx].ventas = ant_art.ventas AND
porc_prov[idx].zona = ant_art.zona AND
porc_prov[idx].provincia = ant_art.provincia AND
porc_prov[idx].mes = ant_art.mes THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET verdad = "S"
ELSE
IF verdad != "S" THEN
LET verdad = "N"
END IF
END IF
END IF
END IF
END FOR
END FUNCTION