Files

1126 lines
36 KiB
Plaintext

{
--------------------------------------------------------------------------
PROGRAMA : VEPRMT302
OBJETIVO : Este programa guarda los porcientos de los productos en
cada zona.
REALIZADO POR : Ing. Juan Fco. Soto.
FECHA : Diciembre 5, 1993.
--------------------------------------------------------------------------
}
GLOBALS
"veprgb000.4gl"
FUNCTION veprmt302()
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 22
CALL pantalla()
OPEN FORM vefmmt302 FROM "vefmmt302"
DISPLAY FORM vefmmt302
DISPLAY "Presupuesto Por Zona" AT 6,30
DISPLAY "veprmt302 " AT 4,2 ATTRIBUTE (BOLD)
MENU "OPCION"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Supr> Cancela Operacion"
CALL veadd()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Supr> Cancela Operacion"
CALL vemod()
COMMAND "Salir"
EXIT MENU
END MENU
END FUNCTION
FUNCTION veadd()
#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 vetb00016 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
SELECT UNIQUE fecha_in,fecha_fi INTO controles.fecha_in,controles.fecha_fi
FROM vetb00018
WHERE anos = ano1 and status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
GOTO vuelve
END IF
DISPLAY BY NAME controles.fecha_in,controles.fecha_fi
FOR idx = 1 to 7
LET porc_zona[idx].ventas = null
LET porc_zona[idx].zona = null
LET porc_zona[idx].descrip = null
LET porc_zona[idx].cod_n = null
LET porc_zona[idx].cod_grupo = null
LET porc_zona[idx].cod_tipo = null
LET porc_zona[idx].cod_sec = null
LET porc_zona[idx].porciento = null
LET porc_zona[idx].mes = null
LET porc_zona[idx].desc_mes = null
DISPLAY porc_zona[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_zona[idx].zona to scr_zona[idx].zona
DISPLAY porc_zona[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_zona[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_zona[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_zona[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_zona[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_zona[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_zona[idx].mes to scr_zona[idx].mes
DISPLAY porc_zona[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
INPUT ARRAY porc_zona FROM scr_zona.*
ON KEY (CONTROL-W)
LET curr2 = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (zona)
IF porc_zona[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_zona[curr2].ventas != "1" and porc_zona[curr2].ventas != "2" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_zona[curr2].ventas = "1" THEN
CALL busca_zona1()
ELSE
CALL busca_pais()
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_zona[curr2].zona = fact_gral.zona
LET descrip1 = null
DISPLAY BY NAME descrip1
END IF
LET descrip6 = descrip1
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
display "del wind" at 4,2
display curr2 at 4,11
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].ventas IS NOT NULL THEN
IF porc_zona[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_zona[curr2].zona is not null THEN
IF porc_zona[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_zona[curr2].ventas != "1" and porc_zona[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_zona[curr2].zona)
IF longitud < 3 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD zona
END IF
IF porc_zona[curr2].ventas = "1" THEN
LET tipo1 = porc_zona[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 tipo2 = porc_zona[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_zona[curr2].zona is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD zona
END IF
AFTER FIELD cod_sec
IF porc_zona[curr2].cod_n is not null and
porc_zona[curr2].cod_grupo is not null and
porc_zona[curr2].cod_tipo is not null and
porc_zona[curr2].cod_sec is not null THEN
SELECT descrip_esp INTO descrip6 FROM iptb00002
WHERE cod_n = porc_zona[curr2].cod_n and
cod_grupo = porc_zona[curr2].cod_grupo and
cod_tipo = porc_zona[curr2].cod_tipo and
cod_sec = porc_zona[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_zona[curr2].descrip = descrip6
DISPLAY porc_zona[curr2].descrip to scr_zona[scr_l].descrip
ATTRIBUTE(BOLD)
ELSE
LET porc_zona[curr2].ventas = null
LET porc_zona[curr2].descrip = null
LET porc_zona[curr2].cod_n = null
LET porc_zona[curr2].cod_grupo = null
LET porc_zona[curr2].cod_tipo = null
LET porc_zona[curr2].cod_sec = null
DISPLAY porc_zona[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_zona[curr2].descrip to scr_zona[scr_l].descrip
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
NEXT FIELD zona
END IF
AFTER FIELD porciento
IF porc_zona[curr2].cod_n is not null and
porc_zona[curr2].cod_grupo is not null and
porc_zona[curr2].cod_tipo is not null and
porc_zona[curr2].cod_sec is not null THEN
display "del " at 4,2
display curr2 at 4,11
IF porc_zona[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_zona[idx].cod_n is not null and
porc_zona[idx].cod_grupo is not null and
porc_zona[idx].cod_tipo is not null and
porc_zona[idx].cod_sec is not null THEN
IF porc_zona[idx].cod_n = porc_zona[curr2].cod_n and
porc_zona[idx].cod_grupo = porc_zona[curr2].cod_grupo and
porc_zona[idx].cod_tipo = porc_zona[curr2].cod_tipo and
porc_zona[idx].cod_sec = porc_zona[curr2].cod_sec THEN
LET p_cantidad = p_cantidad + porc_zona[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_zona[curr2].mes is not null THEN
IF porc_zona[curr2].mes > 12 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD mes
END IF
IF porc_zona[curr2].mes < 1 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD mes
END IF
SELECT descrip INTO porc_zona[curr2].desc_mes from mestable
WHERE mes = porc_zona[curr2].mes
DISPLAY porc_zona[curr2].desc_mes to scr_zona[scr_l].desc_mes
LET verdad = "N"
CALL repite1()
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_zona[curr2].cod_n is null or
porc_zona[curr2].cod_grupo is null or
porc_zona[curr2].cod_tipo is null or
porc_zona[curr2].cod_sec is null or
porc_zona[curr2].ventas is null or
porc_zona[curr2].mes is null THEN
LET porc_zona[curr2].cod_n = null
LET porc_zona[curr2].cod_grupo = null
LET porc_zona[curr2].cod_tipo = null
LET porc_zona[curr2].cod_sec = null
LET porc_zona[curr2].ventas = null
LET porc_zona[curr2].mes = null
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_zona[curr2].mes to scr_zona[scr_l].mes
END IF
EXIT INPUT
END INPUT
FOR idx = 1 to arr_count()
IF porc_zona[idx].cod_n is not null and
porc_zona[idx].cod_grupo is not null and
porc_zona[idx].cod_tipo is not null and
porc_zona[idx].cod_sec is not null AND
porc_zona[idx].ventas is not null AND
porc_zona[idx].mes is not null THEN
INSERT INTO vetb00016 values
(ano1,porc_zona[idx].mes,porc_zona[idx].zona,porc_zona[idx].ventas,
porc_zona[idx].cod_n,porc_zona[idx].cod_grupo,porc_zona[idx].cod_tipo,
porc_zona[idx].cod_sec,porc_zona[idx].porciento,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_zona[idx].ventas = null
LET porc_zona[idx].zona = null
LET porc_zona[idx].descrip = null
LET porc_zona[idx].cod_n = null
LET porc_zona[idx].cod_grupo = null
LET porc_zona[idx].cod_tipo = null
LET porc_zona[idx].cod_sec = null
LET porc_zona[idx].porciento = null
LET porc_zona[idx].mes = null
LET porc_zona[idx].desc_mes = null
DISPLAY porc_zona[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_zona[idx].zona to scr_zona[idx].zona
DISPLAY porc_zona[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_zona[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_zona[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_zona[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_zona[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_zona[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_zona[idx].mes to scr_zona[idx].mes
DISPLAY porc_zona[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
GOTO vuelve
END FUNCTION
FUNCTION vemod()
DEFINE usuarios RECORD
us_crea CHAR(9),
fech_crea LIKE vetb00016.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 vetb00016 ",
"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
SELECT UNIQUE fecha_in,fecha_fi INTO controles.fecha_in,controles.fecha_fi
FROM vetb00018
WHERE anos = ano1 and status_t is null
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 <Supr> Cancela Operacion"
FOR idx = 1 to 7
LET porc_zona[idx].ventas = null
LET porc_zona[idx].zona = null
LET porc_zona[idx].descrip = null
LET porc_zona[idx].cod_n = null
LET porc_zona[idx].cod_grupo = null
LET porc_zona[idx].cod_tipo = null
LET porc_zona[idx].cod_sec = null
LET porc_zona[idx].porciento = null
LET porc_zona[idx].mes = null
LET porc_zona[idx].desc_mes = null
dISPLAY porc_zona[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_zona[idx].zona to scr_zona[idx].zona
DISPLAY porc_zona[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_zona[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_zona[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_zona[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_zona[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_zona[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_zona[idx].mes to scr_zona[idx].mes
DISPLAY porc_zona[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
DECLARE buscate CURSOR FOR
SELECT x.ventas,x.zona,a.descrip_esp,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,
x.mes,c.descrip,x.porciento
FROM vetb00016 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_zona[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
INPUT ARRAY porc_zona WITHOUT DEFAULTS FROM scr_zona.*
ON KEY (CONTROL-W)
LET curr2 = arr_curr()
LET scr_l = scr_line()
CASE
WHEN INFIELD (zona)
IF porc_zona[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_zona[curr2].ventas != "1" and porc_zona[curr2].ventas != "2" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_zona[curr2].ventas = "1" THEN
CALL busca_zona1()
ELSE
CALL busca_pais()
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_zona[curr2].zona = fact_gral.zona
END IF
LET descrip6 = descrip1
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].cod_n = pterminado.cod_n
LET porc_zona[curr2].cod_grupo = pterminado.cod_grupo
LET porc_zona[curr2].cod_tipo = pterminado.cod_tipo
LET porc_zona[curr2].cod_sec = pterminado.cod_sec
LET porc_zona[curr2].descrip = descrip1
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[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_zona[curr2].ventas IS NOT NULL THEN
IF porc_zona[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_zona[curr2].zona is not null THEN
IF porc_zona[curr2].ventas is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
IF porc_zona[curr2].ventas != "1" and porc_zona[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_zona[curr2].zona)
IF longitud < 3 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD zona
END IF
IF porc_zona[curr2].ventas = "1" THEN
LET tipo1 = porc_zona[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 tipo2 = porc_zona[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_zona[curr2].zona is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD zona
END IF
AFTER FIELD cod_sec
IF porc_zona[curr2].cod_n is not null and
porc_zona[curr2].cod_grupo is not null and
porc_zona[curr2].cod_tipo is not null and
porc_zona[curr2].cod_sec is not null THEN
SELECT descrip_esp INTO descrip6 FROM iptb00002
WHERE cod_n = porc_zona[curr2].cod_n and
cod_grupo = porc_zona[curr2].cod_grupo and
cod_tipo = porc_zona[curr2].cod_tipo and
cod_sec = porc_zona[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_zona[curr2].descrip = descrip6
DISPLAY porc_zona[curr2].descrip to scr_zona[scr_l].descrip
ATTRIBUTE(BOLD)
ELSE
LET porc_zona[curr2].ventas = null
LET porc_zona[curr2].descrip = null
LET porc_zona[curr2].cod_n = null
LET porc_zona[curr2].cod_grupo = null
LET porc_zona[curr2].cod_tipo = null
LET porc_zona[curr2].cod_sec = null
DISPLAY porc_zona[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_zona[curr2].descrip to scr_zona[scr_l].descrip
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
NEXT FIELD zona
END IF
AFTER FIELD porciento
IF porc_zona[curr2].cod_n is not null and
porc_zona[curr2].cod_grupo is not null and
porc_zona[curr2].cod_tipo is not null and
porc_zona[curr2].cod_sec is not null THEN
IF porc_zona[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_zona[idx].cod_n is not null and
porc_zona[idx].cod_grupo is not null and
porc_zona[idx].cod_tipo is not null and
porc_zona[idx].cod_sec is not null THEN
IF porc_zona[idx].cod_n = porc_zona[curr2].cod_n and
porc_zona[idx].cod_grupo = porc_zona[curr2].cod_grupo and
porc_zona[idx].cod_tipo = porc_zona[curr2].cod_tipo and
porc_zona[idx].cod_sec = porc_zona[curr2].cod_sec THEN
LET p_cantidad = p_cantidad + porc_zona[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_zona[curr2].mes is not null THEN
IF porc_zona[curr2].mes > 12 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD mes
END IF
IF porc_zona[curr2].mes < 1 THEN
LET numero_msg = 77
CALL msg(numero_msg)
NEXT FIELD mes
END IF
SELECT descrip INTO porc_zona[curr2].desc_mes from mestable
WHERE mes = porc_zona[curr2].mes
DISPLAY porc_zona[curr2].desc_mes to scr_zona[scr_l].desc_mes
LET verdad = "N"
CALL repite1()
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_zona[curr2].cod_n is null or
porc_zona[curr2].cod_grupo is null or
porc_zona[curr2].cod_tipo is null or
porc_zona[curr2].cod_sec is null or
porc_zona[curr2].ventas is null or
porc_zona[curr2].mes is null THEN
LET porc_zona[curr2].cod_n = null
LET porc_zona[curr2].cod_grupo = null
LET porc_zona[curr2].cod_tipo = null
LET porc_zona[curr2].cod_sec = null
LET porc_zona[curr2].ventas = null
LET porc_zona[curr2].mes = null
DISPLAY porc_zona[curr2].cod_n to scr_zona[scr_l].cod_n
DISPLAY porc_zona[curr2].cod_grupo to scr_zona[scr_l].cod_grupo
DISPLAY porc_zona[curr2].cod_tipo to scr_zona[scr_l].cod_tipo
DISPLAY porc_zona[curr2].cod_sec to scr_zona[scr_l].cod_sec
DISPLAY porc_zona[curr2].ventas to scr_zona[scr_l].ventas
DISPLAY porc_zona[curr2].mes to scr_zona[scr_l].mes
END IF
EXIT INPUT
END INPUT
DELETE FROM vetb00016 WHERE ano = ano1
FOR idx = 1 to arr_count()
IF porc_zona[idx].cod_n is not null and
porc_zona[idx].cod_grupo is not null and
porc_zona[idx].cod_tipo is not null and
porc_zona[idx].cod_sec is not null AND
porc_zona[idx].ventas is not null AND
porc_zona[idx].mes is not null THEN
INSERT INTO vetb00016 values
(ano1,porc_zona[idx].mes,porc_zona[idx].zona,porc_zona[idx].ventas,
porc_zona[idx].cod_n,porc_zona[idx].cod_grupo,porc_zona[idx].cod_tipo,
porc_zona[idx].cod_sec,porc_zona[idx].porciento,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_zona[idx].ventas = null
LET porc_zona[idx].descrip = null
LET porc_zona[idx].cod_n = null
LET porc_zona[idx].cod_grupo = null
LET porc_zona[idx].cod_tipo = null
LET porc_zona[idx].cod_sec = null
LET porc_zona[idx].porciento = null
LET porc_zona[idx].mes = null
LET porc_zona[idx].desc_mes = null
DISPLAY porc_zona[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_zona[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_zona[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_zona[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_zona[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_zona[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_zona[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_zona[idx].mes to scr_zona[idx].mes
DISPLAY porc_zona[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
COMMAND KEY ("L") "eLiminar"
DELETE FROM vetb00016
WHERE ano = ano1
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
CLEAR FORM
FOR idx = 1 to 7
LET porc_zona[idx].ventas = null
LET porc_zona[idx].descrip = null
LET porc_zona[idx].cod_n = null
LET porc_zona[idx].cod_grupo = null
LET porc_zona[idx].cod_tipo = null
LET porc_zona[idx].cod_sec = null
LET porc_zona[idx].porciento = null
LET porc_zona[idx].mes = null
LET porc_zona[idx].desc_mes = null
DISPLAY porc_zona[idx].ventas to scr_zona[idx].ventas
DISPLAY porc_zona[idx].descrip to scr_zona[idx].descrip
DISPLAY porc_zona[idx].cod_n to scr_zona[idx].cod_n
DISPLAY porc_zona[idx].cod_grupo to scr_zona[idx].cod_grupo
DISPLAY porc_zona[idx].cod_tipo to scr_zona[idx].cod_tipo
DISPLAY porc_zona[idx].cod_sec to scr_zona[idx].cod_sec
DISPLAY porc_zona[idx].porciento to scr_zona[idx].porciento
DISPLAY porc_zona[idx].mes to scr_zona[idx].mes
DISPLAY porc_zona[idx].desc_mes to scr_zona[idx].desc_mes
END FOR
EXIT MENU
END MENU
END FUNCTION
FUNCTION repite1()
DEFINE ant_art RECORD
ventas CHAR(1),
zona CHAR(3),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
mes SMALLINT
END RECORD
LET ant_art.ventas = porc_zona[curr2].ventas
LET ant_art.zona = porc_zona[curr2].zona
LET ant_art.cod_n = porc_zona[curr2].cod_n
LET ant_art.cod_grupo = porc_zona[curr2].cod_grupo
LET ant_art.cod_tipo = porc_zona[curr2].cod_tipo
LET ant_art.cod_sec = porc_zona[curr2].cod_sec
LET ant_art.mes = porc_zona[curr2].mes
FOR idx = 1 TO arr_count()
IF idx != curr2 THEN
IF porc_zona[idx].cod_n IS NOT NULL AND
porc_zona[idx].cod_grupo IS NOT NULL AND
porc_zona[idx].cod_tipo IS NOT NULL AND
porc_zona[idx].mes IS NOT NULL AND
porc_zona[idx].cod_sec IS NOT NULL THEN
IF porc_zona[idx].cod_n = ant_art.cod_n AND
porc_zona[idx].cod_grupo = ant_art.cod_grupo AND
porc_zona[idx].cod_tipo = ant_art.cod_tipo AND
porc_zona[idx].cod_sec = ant_art.cod_sec AND
porc_zona[idx].ventas = ant_art.ventas AND
porc_zona[idx].zona = ant_art.zona AND
porc_zona[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
FUNCTION meses()
LET mes1[1] = "Enero"
LET mes1[2] = "Febrero"
LET mes1[3] = "Marzo"
LET mes1[4] = "Abril"
LET mes1[5] = "Mayo"
LET mes1[6] = "Junio"
LET mes1[7] = "Julio"
LET mes1[8] = "Agosto"
LET mes1[9] = "Septiembre"
LET mes1[10] = "Octubre"
LET mes1[11] = "Noviembre"
LET mes1[12] = "Diciembre"
END FUNCTION