{ -------------------------------------------------------------------------- PROGRAMA : VEPRMT304 OBJETIVO : Realizar presupuesto de ventas por vendedor. REALIZADO POR : Ing. Juan Fco. Soto. FECHA : Febrero 10, 1993. -------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" DEFINE apellido CHAR(15) DEFINE desc_mes CHAR(10) DEFINE mes304 INTEGER FUNCTION veprmt304() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22 CALL pantalla() OPEN FORM vefmmt304 FROM "vefmmt304" DISPLAY FORM vefmmt304 DISPLAY "Presupuesto Por Vendedor" AT 6,28 DISPLAY "veprmt304" AT 4,3 ATTRIBUTE (BOLD) MENU "OPCION" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CALL veadd2() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" CALL vemod2() COMMAND "Salir" EXIT MENU END MENU END FUNCTION FUNCTION veadd2() #WHENEVER ERROR CONTINUE LABEL vuelve: LET ano1 = year(today) LET mes304 = MONTH(today) INPUT BY NAME ano1,mes304 WITHOUT DEFAULTS AFTER FIELD ano1 IF ano1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano1 END IF AFTER FIELD mes304 IF mes304 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes304 END IF IF mes304 > 12 THEN LET numero_msg = 75 CALL msg(numero_msg) NEXT FIELD mes END IF IF mes304 < 1 THEN LET numero_msg = 75 CALL msg(numero_msg) NEXT FIELD mes END IF SELECT a.descrip INTO desc_mes FROM mestable a WHERE a.mes = mes304 DISPLAY BY NAME desc_mes END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF SELECT UNIQUE ano FROM vetb00022 WHERE @ano = ano1 AND @mes = mes304 IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) GOTO vuelve END IF FOR idx = 1 to 6 LET porc_vend[idx].sec_vend = null LET porc_vend[idx].cod_n = null LET porc_vend[idx].cod_grupo = null LET porc_vend[idx].cod_tipo = null LET porc_vend[idx].cod_sec = null LET porc_vend[idx].porciento = null DISPLAY porc_vend[idx].sec_vend to scr_zona[idx].sec_vend DISPLAY porc_vend[idx].cod_n to scr_zona[idx].cod_n DISPLAY porc_vend[idx].cod_grupo to scr_zona[idx].cod_grupo DISPLAY porc_vend[idx].cod_tipo to scr_zona[idx].cod_tipo DISPLAY porc_vend[idx].cod_sec to scr_zona[idx].cod_sec DISPLAY porc_vend[idx].porciento to scr_zona[idx].porciento END FOR INPUT ARRAY porc_vend FROM scr_zona.* BEFORE ROW LET curr2 = arr_curr() LET scr_l = scr_line() AFTER FIELD sec_vend IF porc_vend[curr2].sec_vend IS NOT NULL THEN SELECT nom1_emp,apell1_emp INTO nombre,apellido FROM adtb00003 WHERE num_emp = porc_vend[curr2].sec_vend and status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_vend END IF LET fact_gral.nombre = nombre CLIPPED," ",apellido CLIPPED DISPLAY BY NAME fact_gral.nombre END IF AFTER FIELD cod_sec IF porc_vend[curr2].cod_n is not null and porc_vend[curr2].cod_grupo is not null and porc_vend[curr2].cod_tipo is not null and porc_vend[curr2].cod_sec is not null THEN SELECT descrip_esp INTO nombre_pt FROM iptb00002 WHERE cod_n = porc_vend[curr2].cod_n and cod_grupo = porc_vend[curr2].cod_grupo and cod_tipo = porc_vend[curr2].cod_tipo and cod_sec = porc_vend[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 DISPLAY BY NAME nombre_pt ELSE LET porc_vend[curr2].cod_n = null LET porc_vend[curr2].cod_grupo = null LET porc_vend[curr2].cod_tipo = null LET porc_vend[curr2].cod_sec = null DISPLAY porc_vend[curr2].cod_n to scr_zona[scr_l].cod_n DISPLAY porc_vend[curr2].cod_grupo to scr_zona[scr_l].cod_grupo DISPLAY porc_vend[curr2].cod_tipo to scr_zona[scr_l].cod_tipo DISPLAY porc_vend[curr2].cod_sec to scr_zona[scr_l].cod_sec NEXT FIELD sec_vend END IF AFTER FIELD porciento IF porc_vend[curr2].cod_n is not null and porc_vend[curr2].cod_grupo is not null and porc_vend[curr2].cod_tipo is not null and porc_vend[curr2].cod_sec is not null THEN IF porc_vend[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_vend[idx].cod_n is not null and porc_vend[idx].cod_grupo is not null and porc_vend[idx].cod_tipo is not null and porc_vend[idx].cod_sec is not null THEN IF porc_vend[idx].cod_n = porc_vend[curr2].cod_n and porc_vend[idx].cod_grupo = porc_vend[curr2].cod_grupo and porc_vend[idx].cod_tipo = porc_vend[curr2].cod_tipo and porc_vend[idx].cod_sec = porc_vend[curr2].cod_sec THEN LET p_cantidad = p_cantidad + porc_vend[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 LET verdad = "N" CALL repite3() IF verdad = "S" THEN NEXT FIELD sec_vend END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF EXIT INPUT END INPUT FOR idx = 1 to arr_count() IF porc_vend[idx].cod_n is not null and porc_vend[idx].cod_grupo is not null and porc_vend[idx].cod_tipo is not null and porc_vend[idx].cod_sec is not null THEN INSERT INTO vetb00022 VALUES (ano1,mes304,porc_vend[idx].sec_vend, porc_vend[idx].cod_n,porc_vend[idx].cod_grupo, porc_vend[idx].cod_tipo,porc_vend[idx].cod_sec, porc_vend[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 6 LET porc_vend[idx].sec_vend = null LET porc_vend[idx].cod_n = null LET porc_vend[idx].cod_grupo = null LET porc_vend[idx].cod_tipo = null LET porc_vend[idx].cod_sec = null LET porc_vend[idx].porciento = null DISPLAY porc_vend[idx].sec_vend to scr_zona[idx].sec_vend DISPLAY porc_vend[idx].cod_n to scr_zona[idx].cod_n DISPLAY porc_vend[idx].cod_grupo to scr_zona[idx].cod_grupo DISPLAY porc_vend[idx].cod_tipo to scr_zona[idx].cod_tipo DISPLAY porc_vend[idx].cod_sec to scr_zona[idx].cod_sec DISPLAY porc_vend[idx].porciento to scr_zona[idx].porciento END FOR GOTO vuelve END FUNCTION FUNCTION vemod2() DEFINE usuarios RECORD us_crea CHAR(9), fech_crea LIKE vetb00016.fech_crea END RECORD #WHENEVER ERROR CONTINUE CONSTRUCT criterio ON ano,mes FROM ano1,mes304 IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET selec = "SELECT unique ano,mes FROM vetb00022 ", "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,mes304 IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF DISPLAY BY NAME ano1,mes304 MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT porc INTO ano1,mes304 IF status = notfound THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME ano1,mes304 COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS porc INTO ano1,mes304 IF status = notfound THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME ano1,mes304 COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST porc INTO ano1,mes304 IF status = notfound THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME ano1,mes304 COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST porc INTO ano1,mes304 IF status = notfound THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME ano1,mes304 COMMAND "Escoger" " Actualiza Registro Cancela Operacion" FOR idx = 1 to 6 LET porc_vend[idx].sec_vend = null LET porc_vend[idx].cod_n = null LET porc_vend[idx].cod_grupo = null LET porc_vend[idx].cod_tipo = null LET porc_vend[idx].cod_sec = null LET porc_vend[idx].porciento = null DISPLAY porc_vend[idx].sec_vend to scr_zona[idx].sec_vend DISPLAY porc_vend[idx].cod_n to scr_zona[idx].cod_n DISPLAY porc_vend[idx].cod_grupo to scr_zona[idx].cod_grupo DISPLAY porc_vend[idx].cod_tipo to scr_zona[idx].cod_tipo DISPLAY porc_vend[idx].cod_sec to scr_zona[idx].cod_sec DISPLAY porc_vend[idx].porciento to scr_zona[idx].porciento END FOR DECLARE buscate CURSOR FOR SELECT x.sec_vend,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,x.porciento FROM vetb00022 x,iptb00002 a WHERE x.ano = ano1 and x.mes <=12 AND x.mes = mes304 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 a.status_t is null LET idx = 1 FOREACH buscate INTO porc_vend[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) INPUT ARRAY porc_vend WITHOUT DEFAULTS FROM scr_zona.* BEFORE ROW LET curr2 = arr_curr() LET scr_l = scr_line() AFTER FIELD cod_sec IF porc_vend[curr2].cod_n is not null and porc_vend[curr2].cod_grupo is not null and porc_vend[curr2].cod_tipo is not null and porc_vend[curr2].cod_sec is not null THEN SELECT descrip_esp INTO nombre_pt FROM iptb00002 WHERE cod_n = porc_vend[curr2].cod_n and cod_grupo = porc_vend[curr2].cod_grupo and cod_tipo = porc_vend[curr2].cod_tipo and cod_sec = porc_vend[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 DISPLAY BY NAME nombre_pt END IF AFTER FIELD porciento IF porc_vend[curr2].cod_n is not null and porc_vend[curr2].cod_grupo is not null and porc_vend[curr2].cod_tipo is not null and porc_vend[curr2].cod_sec is not null THEN IF porc_vend[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_vend[idx].cod_n is not null and porc_vend[idx].cod_grupo is not null and porc_vend[idx].cod_tipo is not null and porc_vend[idx].cod_sec is not null THEN IF porc_vend[idx].cod_n = porc_vend[curr2].cod_n and porc_vend[idx].cod_grupo = porc_vend[curr2].cod_grupo and porc_vend[idx].cod_tipo = porc_vend[curr2].cod_tipo and porc_vend[idx].cod_sec = porc_vend[curr2].cod_sec THEN LET p_cantidad = p_cantidad + porc_vend[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 LET verdad = "N" CALL repite3() IF verdad = "S" THEN NEXT FIELD sec_vend 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_vend[curr2].cod_n is null or porc_vend[curr2].cod_grupo is null or porc_vend[curr2].cod_tipo is null or porc_vend[curr2].cod_sec is null THEN LET porc_vend[curr2].cod_n = null LET porc_vend[curr2].cod_grupo = null LET porc_vend[curr2].cod_tipo = null LET porc_vend[curr2].cod_sec = null DISPLAY porc_vend[curr2].cod_n to scr_zona[scr_l].cod_n DISPLAY porc_vend[curr2].cod_grupo to scr_zona[scr_l].cod_grupo DISPLAY porc_vend[curr2].cod_tipo to scr_zona[scr_l].cod_tipo DISPLAY porc_vend[curr2].cod_sec to scr_zona[scr_l].cod_sec END IF EXIT INPUT END INPUT DELETE FROM vetb00022 WHERE ano = ano1 AND mes = mes304 FOR idx = 1 to arr_count() IF porc_vend[idx].cod_n is not null and porc_vend[idx].cod_grupo is not null and porc_vend[idx].cod_tipo is not null and porc_vend[idx].cod_sec is not null THEN INSERT INTO vetb00022 VALUES (ano1,mes304,porc_vend[idx].sec_vend, porc_vend[idx].cod_n,porc_vend[idx].cod_grupo, porc_vend[idx].cod_tipo,porc_vend[idx].cod_sec, porc_vend[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 6 LET porc_vend[idx].sec_vend = null LET porc_vend[idx].cod_n = null LET porc_vend[idx].cod_grupo = null LET porc_vend[idx].cod_tipo = null LET porc_vend[idx].cod_sec = null LET porc_vend[idx].porciento = null DISPLAY porc_vend[idx].sec_vend to scr_zona[idx].sec_vend DISPLAY porc_vend[idx].cod_n to scr_zona[idx].cod_n DISPLAY porc_vend[idx].cod_grupo to scr_zona[idx].cod_grupo DISPLAY porc_vend[idx].cod_tipo to scr_zona[idx].cod_tipo DISPLAY porc_vend[idx].cod_sec to scr_zona[idx].cod_sec DISPLAY porc_vend[idx].porciento to scr_zona[idx].porciento END FOR COMMAND KEY ("L") "eLiminar" DELETE FROM vetb00022 WHERE ano = ano1 AND mes = mes304 LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM FOR idx = 1 to 6 LET porc_vend[idx].sec_vend = null LET porc_vend[idx].cod_n = null LET porc_vend[idx].cod_grupo = null LET porc_vend[idx].cod_tipo = null LET porc_vend[idx].cod_sec = null LET porc_vend[idx].porciento = null DISPLAY porc_vend[idx].sec_vend to scr_zona[idx].sec_vend DISPLAY porc_vend[idx].cod_n to scr_zona[idx].cod_n DISPLAY porc_vend[idx].cod_grupo to scr_zona[idx].cod_grupo DISPLAY porc_vend[idx].cod_tipo to scr_zona[idx].cod_tipo DISPLAY porc_vend[idx].cod_sec to scr_zona[idx].cod_sec DISPLAY porc_vend[idx].porciento to scr_zona[idx].porciento END FOR EXIT MENU END MENU END FUNCTION FUNCTION repite3() DEFINE ant_art RECORD ventas CHAR(1), zona CHAR(3), provincia SMALLINT, tipo_cliente SMALLINT, sec_vend SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, mes SMALLINT END RECORD LET ant_art.sec_vend = porc_vend[curr2].sec_vend LET ant_art.cod_n = porc_vend[curr2].cod_n LET ant_art.cod_grupo = porc_vend[curr2].cod_grupo LET ant_art.cod_tipo = porc_vend[curr2].cod_tipo LET ant_art.cod_sec = porc_vend[curr2].cod_sec FOR idx = 1 TO arr_count() IF idx != curr2 THEN IF porc_vend[idx].cod_n IS NOT NULL AND porc_vend[idx].cod_grupo IS NOT NULL AND porc_vend[idx].cod_tipo IS NOT NULL AND porc_vend[idx].cod_sec IS NOT NULL THEN IF porc_vend[idx].cod_n = ant_art.cod_n AND porc_vend[idx].cod_grupo = ant_art.cod_grupo AND porc_vend[idx].cod_tipo = ant_art.cod_tipo AND porc_vend[idx].cod_sec = ant_art.cod_sec AND porc_vend[idx].sec_vend = ant_art.sec_vend 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