{ ------------------------------------------------------------------ PROGRAMA : VEPRMT005 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Zonas - Provincias. PROGRAMADOR : Lic. Abner Montalvo Z. FECHA REALIZACION : Febrero 9, 1993. ------------------------------------------------------------------ } GLOBALS "veprgb000.4gl" DEFINE opc1 VARCHAR(3), nombre_provincia VARCHAR(100), codigo VARCHAR(3) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave CALL veprmt005() END MAIN FUNCTION veprmt005() # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, HELP FILE "vepray000.exe", HELP KEY CONTROL-W, MESSAGE LINE 24, COMMENT LINE 21 OPEN FORM vefmmt005 FROM "vefmmt005" DISPLAY FORM vefmmt005 # CALL ayuda() DISPLAY "veprmt005" AT 4,3 DISPLAY "Zonas - Provincias" AT 6,30 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" HELP 5 LET int_flag = FALSE CLEAR FORM CALL vepcad005() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" HELP 6 LET int_flag = FALSE CALL vepcmf005() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION vepcad005() ## Captura los datos que va a contener el registro # WHENEVER ERROR CONTINUE MESSAGE "" LET int_flag = false INPUT BY NAME zonap.*,codigo { ON KEY (CONTROL-W) CASE WHEN INFIELD (cod_zona) CALL consulta_zonas() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_zona END IF IF NOT int_flag THEN LET zonap.cod_zona = zona.cod_zona DISPLAY zona.cod_zona TO cod_zona DISPLAY descrip1 TO descrip NEXT FIELD cod_provincia END IF LET int_flag = FALSE WHEN INFIELD (cod_provincia) CALL consulta_provincias2() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF IF NOT int_flag THEN DISPLAY zonap.cod_provincia TO cod_provincia DISPLAY descrip1 TO nombre_provincia NEXT FIELD cod_provincia END IF LET int_flag = FALSE END CASE } BEFORE INPUT CALL paises() AFTER FIELD cod_zona IF zonap.cod_zona is null or zonap.cod_zona = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_zona ELSE SELECT * INTO zona.* FROM vetb00008 WHERE cod_zona = zonap.cod_zona IF status >= 0 THEN IF status != NOTFOUND THEN IF zona.status_t = "E" THEN LET numero_msg = 43 CALL msg(numero_msg) NEXT FIELD cod_zona END IF DISPLAY BY NAME zona.descrip ELSE LET numero_msg = 42 CALL msg(numero_msg) DISPLAY BY NAME zona.descrip NEXT FIELD cod_zona END IF END IF END IF AFTER FIELD cod_provincia IF zonap.cod_provincia is null or zonap.cod_provincia = 0 then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_provincia ELSE SELECT * INTO provincia.* FROM vetb00020 WHERE cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF provincia.status_t = "E" THEN LET numero_msg = 66 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME provincia.nombre_provincia ELSE LET numero_msg = 65 CALL msg(numero_msg) DISPLAY BY NAME provincia.nombre_provincia NEXT FIELD cod_provincia END IF ELSE END IF SELECT * INTO zonap.* FROM vetb00009 WHERE cod_zona = zonap.cod_zona AND cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF zonap.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME zonap.* CALL busca_zona() LET transportista.cod_zona = zonap.cod_zona LET transportista.cod_provincia = zonap.cod_provincia CALL busca_provincia() LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF ELSE END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE INITIALIZE zona.* TO NULL DISPLAY BY NAME zona.descrip # CALL ayuda() RETURN END IF IF zonap.cod_zona is null or zonap.cod_zona = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_zona ELSE SELECT * INTO zona.* FROM vetb00008 WHERE cod_zona = zonap.cod_zona IF status >= 0 THEN IF status != NOTFOUND THEN IF zona.status_t = "E" THEN LET numero_msg = 43 CALL msg(numero_msg) NEXT FIELD cod_zona END IF DISPLAY BY NAME zona.descrip ELSE LET numero_msg = 42 CALL msg(numero_msg) DISPLAY BY NAME zona.descrip NEXT FIELD cod_zona END IF ELSE END IF END IF IF zonap.cod_provincia is null or zonap.cod_provincia = 0 then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_provincia ELSE SELECT * INTO provincia.* FROM vetb00020 WHERE cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF provincia.status_t = "E" THEN LET numero_msg = 66 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME provincia.nombre_provincia ELSE LET numero_msg = 65 CALL msg(numero_msg) DISPLAY BY NAME provincia.nombre_provincia NEXT FIELD cod_provincia END IF END IF SELECT * INTO zonap.* FROM vetb00009 WHERE cod_zona = zonap.cod_zona AND cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF zonap.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME zonap.* CALL busca_zona() LET transportista.cod_zona = zonap.cod_zona LET transportista.cod_provincia = zonap.cod_provincia CALL busca_provincia() LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF END IF END IF # Valida que el codigo de la zonap.no sea cero. Si no es cero, adiciona el # registro en la tabla, de lo contrario, presenta mensaje de error y acepta # el codigo de nuevo. IF zonap.cod_zona is null OR zonap.cod_provincia is null OR zonap.cod_zona = 0 OR zonap.cod_provincia = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) ELSE INSERT INTO vetb00009 VALUES (zonap.cod_zona, zonap.cod_provincia, null,SUSER_SNAME(), GETDATE(), 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 . LET numero_msg = 1 CALL msg(numero_msg) NEXT FIELD cod_zona END IF AFTER FIELD fech_mod EXIT INPUT END INPUT END FUNCTION FUNCTION vepcmf005() # WHENEVER ERROR CONTINUE MESSAGE "" LET int_flag = false ## Aqui se prepara para la captura del criterio de seleccion INITIALIZE zona.* TO NULL DISPLAY BY NAME zona.descrip CONSTRUCT criterio ON a.cod_zona,a.cod_provincia,b.codigo FROM cod_zona,cod_provincia,codigo BEFORE CONSTRUCT CALL paises() AFTER CONSTRUCT EXIT CONSTRUCT END CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE # CALL ayuda() RETURN END IF LET SELEC = " SELECT a.*,b.nombre_provincia,b.codigo FROM vetb00009 a left outer join vetb00020 b on b.cod_provincia = a.cod_provincia ", " where a.status_t is null and ", criterio clipped, " ORDER BY a.cod_zona,a.cod_provincia" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO zonap.*,nombre_provincia,codigo IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF END IF DISPLAY BY NAME zonap.*,nombre_provincia,codigo CALL busca_zona() LET transportista.cod_zona = zonap.cod_zona LET transportista.cod_provincia = zonap.cod_provincia CALL busca_provincia() MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO zonap.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME zonap.* CALL busca_zona() LET transportista.cod_zona = zonap.cod_zona LET transportista.cod_provincia = zonap.cod_provincia CALL busca_provincia() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO zonap.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME zonap.* CALL busca_zona() LET transportista.cod_zona = zonap.cod_zona LET transportista.cod_provincia = zonap.cod_provincia CALL busca_provincia() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO zonap.* DISPLAY BY NAME zonap.* LET numero_msg = 5 CALL msg(numero_msg) CALL busca_zona() LET transportista.cod_zona = zonap.cod_zona LET transportista.cod_provincia = zonap.cod_provincia CALL busca_provincia() COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO zonap.* DISPLAY BY NAME zonap.* LET numero_msg = 4 CALL msg(numero_msg) CALL busca_zona() LET transportista.cod_zona = zonap.cod_zona LET transportista.cod_provincia = zonap.cod_provincia CALL busca_provincia() COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF zonap.status_t= "E" THEN LET numero_msg= 36 CALL msg(numero_msg) RETURN END IF LET fila = zonap.cod_provincia INPUT BY NAME zonap.cod_provincia, zonap.us_crea, zonap.fech_crea, zonap.us_mod, zonap.fech_mod WITHOUT DEFAULTS { ON KEY (CONTROL-W) CASE WHEN INFIELD (cod_provincia) CALL consulta_provincias2() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF IF NOT int_flag THEN DISPLAY zonap.cod_provincia TO cod_provincia DISPLAY descrip1 TO nombre_provincia END IF LET int_flag = FALSE END CASE } AFTER FIELD cod_provincia IF zonap.cod_provincia is null or zonap.cod_provincia = 0 then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_provincia ELSE SELECT * INTO provincia.* FROM vetb00020 WHERE cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF provincia.status_t = "E" THEN LET numero_msg = 66 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME provincia.nombre_provincia ELSE LET numero_msg = 65 CALL msg(numero_msg) DISPLAY BY NAME provincia.nombre_provincia NEXT FIELD cod_provincia END IF END IF SELECT status_t INTO status_reg FROM vetb00009 WHERE cod_zona = zonap.cod_zona AND cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF END IF END IF END IF AFTER INPUT #### Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE # CALL ayuda() RETURN END IF IF zonap.cod_provincia is null or zonap.cod_provincia = 0 then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_provincia ELSE SELECT * INTO provincia.* FROM vetb00020 WHERE cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF provincia.status_t = "E" THEN LET numero_msg = 66 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF DISPLAY BY NAME provincia.nombre_provincia ELSE LET numero_msg = 65 CALL msg(numero_msg) DISPLAY BY NAME provincia.nombre_provincia NEXT FIELD cod_provincia END IF END IF SELECT status_t INTO status_reg FROM vetb00009 WHERE cod_zona = zonap.cod_zona AND cod_provincia = zonap.cod_provincia IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_provincia END IF END IF END IF 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 # CALL ayuda() RETURN END IF IF zonap.cod_provincia != fila THEN UPDATE vetb00009 SET cod_provincia = zonap.cod_provincia, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE cod_zona = zonap.cod_zona AND cod_provincia = fila LET numero_msg = 13 CALL msg(numero_msg) END IF COMMAND KEY ("L") "eLiminar" "Elimina registro que esta en la pantalla" LET opc1 = fgl_winquestion("ELIMINAR","DESEA ELIMINAR ESTA RELACION?","NO","YES|NO","QUESTION",0) IF opc1 = "YES" THEN UPDATE vetb00009 SET status_t ="E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE cod_zona = zonap.cod_zona AND cod_provincia = zonap.cod_provincia LET numero_msg = 39 CALL msg(numero_msg) END IF COMMAND "Retornar" "Retorna al menu anterior" # CALL ayuda() EXIT MENU END MENU END FUNCTION FUNCTION busca_zona() # Esta funcion busca el nombre de la zona y lo despliega en pantalla # Esta funcion es valida solamente para la consulta-modificacion. SELECT * INTO zona.* FROM vetb00008 WHERE cod_zona = zonap.cod_zona IF status >= 0 THEN IF status != NOTFOUND THEN IF zona.status_t = "E" THEN LET numero_msg = 43 CALL msg(numero_msg) END IF DISPLAY BY NAME zona.descrip ELSE LET numero_msg = 42 CALL msg(numero_msg) DISPLAY BY NAME zona.descrip END IF END IF END FUNCTION FUNCTION consulta_provincias2() DEFINE seleccion STRING OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd073" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON b.nombre_provincia FROM nombre_provincia IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_p END IF LET seleccion = "SELECT b.cod_provincia, b.nombre_provincia ", "FROM vetb00020 b ", "WHERE b.status_t is null AND ", criterio clipped, "ORDER BY 1 " PREPARE buscar FROM seleccion DECLARE buscar_provincias CURSOR FOR buscar OPEN buscar_provincias IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_p END IF IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF END IF LET idx = 1 WHILE status != NOTFOUND FETCH buscar_provincias INTO provincias[idx].* IF status = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT WHILE END IF LET idx = idx + 1 END WHILE CALL set_count(idx-1) MESSAGE " Selecciona Provincia donde esta el cursor" DISPLAY ARRAY provincias TO s_provincias.* LET curr1 = arr_curr() LET zonap.cod_provincia = provincias[curr1].cod_provincia LET transportista.cod_provincia = provincias[curr1].cod_provincia LET descrip1 = provincias[curr1].nombre_provincia LABEL salir_consulta_p: CLOSE WINDOW busqueda END FUNCTION