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