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

617 lines
22 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : VEPRMT017
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Precio
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Febrero 19, 1993
DIRECTOR PROYECTO : JOSE ALFREDO PAULINO
------------------------------------------------------------------
}
GLOBALS "veprgb000.4gl"
FUNCTION veprmt017()
# WHENEVER ERROR CONTINUE
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
HELP FILE "vepray000.exe",
HELP KEY CONTROL-W,
COMMENT LINE 21
OPEN FORM vefmmt017 FROM "vefmmt017"
DISPLAY FORM vefmmt017
CALL pantalla()
CALL ayuda()
DISPLAY "veprmt017" AT 4,3
DISPLAY " Mantenimientos de los Precios " AT 6,19
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Delete> Cancela Operacion"
HELP 5
LET int_flag = FALSE
CLEAR FORM
CALL vepcad017()
COMMAND "Consultar-modificar"
"<Esc> Realiza Busqueda <Delete> Cancela Operacion"
HELP 6
LET int_flag = FALSE
CLEAR FORM
CALL vepcmf017()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION vepcad017()
## Captura los datos que va a contener el registro
# WHENEVER ERROR CONTINUE
MESSAGE ""
LET int_flag = false
INPUT BY NAME pre_pila.*
ON KEY (CONTROL-W)
CASE
WHEN INFIELD (cod_n)
CALL busca_pt()
LET pre_pila.cod_n = pterminado.cod_n
LET pre_pila.cod_grupo = pterminado.cod_grupo
LET pre_pila.cod_tipo = pterminado.cod_tipo
LET pre_pila.cod_sec = pterminado.cod_sec
SELECT descrip_esp INTO descrip1 FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
DISPLAY BY NAME pre_pila.cod_n,pre_pila.cod_grupo,pre_pila.cod_tipo,
pre_pila.cod_sec,descrip1
NEXT FIELD tipo_cliente
WHEN INFIELD (cod_grupo)
CALL busca_pt()
LET pre_pila.cod_n = pterminado.cod_n
LET pre_pila.cod_grupo = pterminado.cod_grupo
LET pre_pila.cod_tipo = pterminado.cod_tipo
LET pre_pila.cod_sec = pterminado.cod_sec
SELECT descrip_esp INTO descrip1 FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
DISPLAY BY NAME pre_pila.cod_n,pre_pila.cod_grupo,pre_pila.cod_tipo,
pre_pila.cod_sec,descrip1
NEXT FIELD tipo_cliente
WHEN INFIELD (cod_tipo)
CALL busca_pt()
LET pre_pila.cod_n = pterminado.cod_n
LET pre_pila.cod_grupo = pterminado.cod_grupo
LET pre_pila.cod_tipo = pterminado.cod_tipo
LET pre_pila.cod_sec = pterminado.cod_sec
SELECT descrip_esp INTO descrip1 FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
DISPLAY BY NAME pre_pila.cod_n,pre_pila.cod_grupo,pre_pila.cod_tipo,
pre_pila.cod_sec,descrip1
NEXT FIELD tipo_cliente
WHEN INFIELD (cod_sec)
CALL busca_pt()
LET pre_pila.cod_n = pterminado.cod_n
LET pre_pila.cod_grupo = pterminado.cod_grupo
LET pre_pila.cod_tipo = pterminado.cod_tipo
LET pre_pila.cod_sec = pterminado.cod_sec
SELECT descrip_esp INTO descrip1 FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
DISPLAY BY NAME pre_pila.cod_n,pre_pila.cod_grupo,pre_pila.cod_tipo,
pre_pila.cod_sec,descrip1
NEXT FIELD tipo_cliente
WHEN INFIELD(tipo_cliente)
CALL consulta_clientes()
LET pre_pila.tipo_cliente = cliente_dir.tipo_cliente
LET pre_pila.sec_cliente = cliente_dir.sec_cliente
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente AND
status_t IS NULL
DISPLAY BY NAME pre_pila.tipo_cliente,pre_pila.sec_cliente,nom_cliente
NEXT FIELD precio
WHEN INFIELD(sec_cliente)
CALL consulta_clientes()
LET pre_pila.tipo_cliente = cliente_dir.tipo_cliente
LET pre_pila.sec_cliente = cliente_dir.sec_cliente
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente AND
status_t IS NULL
DISPLAY BY NAME pre_pila.tipo_cliente,pre_pila.sec_cliente,nom_cliente
NEXT FIELD precio
END CASE
## Verifica que el precio para una pila no exista en el catalogo de precios.
## Si existe, entonces despliega los datos del registro existente.
AFTER FIELD ventas
IF pre_pila.ventas IS NOT NULL THEN
IF pre_pila.ventas = "1" THEN
LET descventa = "LOCAL"
DISPLAY BY NAME descventa
ELSE
LET descventa = "EXPORTACION"
DISPLAY BY NAME descventa
END IF
END IF
IF pre_pila.ventas IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
AFTER FIELD cod_n
IF pre_pila.cod_n IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
AFTER FIELD cod_grupo
IF pre_pila.cod_grupo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_grupo
END IF
AFTER FIELD cod_tipo
IF pre_pila.cod_tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_tipo
END IF
AFTER FIELD cod_sec
IF (pre_pila.cod_n is null AND pre_pila.cod_grupo is null AND
pre_pila.cod_tipo is null) THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_n
ELSE
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.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 descrip1,medida
END IF
# Verifica si el registro existe. Si existe despliega los datos.
AFTER FIELD tipo_cliente
IF pre_pila.tipo_cliente IS NULL THEN
NEXT FIELD sec_cliente
END IF
AFTER FIELD sec_cliente
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente and
status_t is null
DISPLAY BY NAME nom_cliente
IF pre_pila.tipo_cliente is null and
pre_pila.sec_cliente is null THEN
SELECT * INTO pre_pila.* FROM vetb00025
WHERE ventas = pre_pila.ventas and
cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec and
tipo_cliente is null and
sec_cliente is null
ELSE
SELECT * INTO pre_pila.* FROM vetb00025
WHERE ventas = pre_pila.ventas and
cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec and
tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente
END IF
IF status >= 0 THEN
IF STATUS != NOTFOUND THEN
IF pre_pila.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
DISPLAY BY NAME pre_pila.*
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD ventas
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
AFTER FIELD precio
IF pre_pila.precio IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD precio
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF pre_pila.ventas is not null and
pre_pila.cod_n is not null and
pre_pila.cod_grupo is not null and
pre_pila.cod_tipo is not null and
pre_pila.cod_sec is not null and
pre_pila.precio is not null THEN
INSERT INTO vetb00025 VALUES (pre_pila.ventas,pre_pila.cod_n,
pre_pila.cod_grupo,pre_pila.cod_tipo,pre_pila.cod_sec,
pre_pila.tipo_cliente,pre_pila.sec_cliente,pre_pila.precio,
null,USER, CURRENT, null, null)
# Verifica el Status que retorna luego de insertar el registro en la tabla.
# Si el Status es diferente de cero quiere decir que hubo problemas durante
# la creacion del registro, entonces despliega un mensaje .
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
INITIALIZE pre_pila.* TO NULL
NEXT FIELD ventas
END IF
AFTER FIELD fech_mod
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION vepcmf017()
# WHENEVER ERROR CONTINUE
MESSAGE ""
LET int_flag = false
## Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT criterio ON vetb00025.* FROM vetb00025.*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
LET SELEC = " SELECT UNIQUE * FROM vetb00025 where ",
" status_t is null and ",
criterio clipped,
" ORDER BY 1,2"
PREPARE busca FROM selec
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO pre_pila.*
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
IF pre_pila.ventas = "1" THEN
LET descventa = "LOCAL"
ELSE
LET descventa = "EXPORTACION"
END IF
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente AND
status_t IS NULL
DISPLAY BY NAME pre_pila.*,descventa,descrip1,medida,nom_cliente
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO pre_pila.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
IF pre_pila.ventas = "1" THEN
LET descventa = "LOCAL"
ELSE
LET descventa = "EXPORTACION"
END IF
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente AND
status_t IS NULL
DISPLAY BY NAME pre_pila.*,descventa,descrip1,medida,nom_cliente
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO pre_pila.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
IF pre_pila.ventas = "1" THEN
LET descventa = "LOCAL"
ELSE
LET descventa = "EXPORTACION"
END IF
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente AND
status_t IS NULL
DISPLAY BY NAME pre_pila.*,descventa,descrip1,medida,nom_cliente
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO pre_pila.*
IF pre_pila.ventas = "1" THEN
LET descventa = "LOCAL"
ELSE
LET descventa = "EXPORTACION"
END IF
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente AND
status_t IS NULL
DISPLAY BY NAME pre_pila.*,descventa,descrip1,medida,nom_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO pre_pila.*
IF pre_pila.ventas = "1" THEN
LET descventa = "LOCAL"
ELSE
LET descventa = "EXPORTACION"
END IF
SELECT descrip_esp,unidad_med INTO descrip1,medida
FROM iptb00002
WHERE cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec
LET nom_cliente = null
SELECT nombre INTO nom_cliente FROM vetb00004
WHERE tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente AND
status_t IS NULL
DISPLAY BY NAME pre_pila.*,descventa,descrip1,medida,nom_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
COMMAND "Escoger"
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
IF pre_pila.status_t= "E" THEN
LET numero_msg= 36
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME pre_pila.precio WITHOUT DEFAULTS
AFTER FIELD precio
IF pre_pila.precio IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD precio
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF pre_pila.precio IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD precio
END IF
EXIT INPUT
END INPUT
#### Verifica si el usuario presiono la tecla <Delete>
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF pre_pila.tipo_cliente is null AND
pre_pila.sec_cliente is null THEN
UPDATE vetb00025 SET precio = pre_pila.precio,
us_mod = USER,
fech_mod = CURRENT
WHERE ventas = pre_pila.ventas and
cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec and
tipo_cliente is null and
sec_cliente is null
ELSE
UPDATE vetb00025 SET precio = pre_pila.precio,
us_mod = USER,
fech_mod = CURRENT
WHERE ventas = pre_pila.ventas and
cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec and
tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente
END IF
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar"
"Elimina registro que esta en la pantalla"
UPDATE vetb00025 SET status_t ="E"
WHERE ventas = pre_pila.ventas and
cod_n = pre_pila.cod_n and
cod_grupo = pre_pila.cod_grupo and
cod_tipo = pre_pila.cod_tipo and
cod_sec = pre_pila.cod_sec and
tipo_cliente = pre_pila.tipo_cliente and
sec_cliente = pre_pila.sec_cliente
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION