{ ------------------------------------------------------------------ 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" " Adiciona Registro Cancela Operacion" HELP 5 LET int_flag = FALSE CLEAR FORM CALL vepcad017() COMMAND "Consultar-modificar" " Realiza Busqueda 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" " Actualiza Registro 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 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