Files
MBS/PROYECTO/vedir/veprmt304.4gl
T

586 lines
17 KiB
Plaintext

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