{ -------------------------------------------------------------------------- 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" " Adiciona Registro Cancela Operacion" CALL veadd1() COMMAND "Consultar-modificar" " Realiza Busqueda 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" " Actualiza Registro 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