{ ------------------------------------------------------------------ PROGRAMA : VEPRMT016 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Itinerario de Visitas a Clientes PROGRAMADOR : Lic. Abner Montalvo Z. FECHA REALIZACION : Diciembre 7, 1992. ------------------------------------------------------------------ } GLOBALS "veprgb000.4gl" FUNCTION veprmt016() # 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 vefmmt016 FROM "vefmmt016" DISPLAY FORM vefmmt016 CALL pantalla() CALL ayuda() DISPLAY "veprmt016" AT 4,3 DISPLAY "Itinerario de Visitas" AT 6,29 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" HELP 5 LET int_flag = FALSE CLEAR FORM CALL vepcad016() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" HELP 6 LET int_flag = FALSE CALL vepcmf016() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION vepcad016() ## Captura los datos que va a contener el registro # WHENEVER ERROR CONTINUE MESSAGE "" LET int_flag = false INPUT BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem,visitas.sec_vend, visitas.tipo_cliente,visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra,visitas.persona_contacto, visitas.observacion ON KEY (CONTROL-W) CASE {WHEN INFIELD (cod_vend) CALL consulta_empleados() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_vend END IF IF NOT int_flag THEN LET visitas.sec_vend = transportista.sec_transp DISPLAY transportista.cod_transp TO cod_vend DISPLAY transportista.sec_transp TO sec_vend DISPLAY descrip6 TO descrip6 NEXT FIELD tipo_cliente END IF LET int_flag = FALSE} WHEN INFIELD (sec_vend) CALL consulta_empleados() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD sec_vend END IF IF NOT int_flag THEN LET visitas.sec_vend = transportista.sec_transp DISPLAY transportista.sec_transp TO sec_vend DISPLAY descrip6 TO descrip6 NEXT FIELD tipo_cliente END IF LET int_flag = FALSE WHEN INFIELD (tipo_cliente) CALL consulta_clientes() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF IF NOT int_flag THEN LET visitas.tipo_cliente = cliente_dir.tipo_cliente LET visitas.sec_cliente = cliente_dir.sec_cliente INITIALIZE visitas.fecha_visita, visitas.hora_visita, visitas.compra TO NULL DISPLAY BY NAME visitas.fecha_visita,visitas.hora_visita,visitas.compra DISPLAY BY NAME cliente_dir.tipo_cliente,cliente_dir.sec_cliente DISPLAY descrip1 TO nombre NEXT FIELD fecha_visita END IF LET int_flag = FALSE WHEN INFIELD (sec_cliente) CALL consulta_clientes() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF IF NOT int_flag THEN LET visitas.tipo_cliente = cliente_dir.tipo_cliente LET visitas.sec_cliente = cliente_dir.sec_cliente DISPLAY BY NAME cliente_dir.tipo_cliente, cliente_dir.sec_cliente DISPLAY descrip1 TO nombre INITIALIZE visitas.fecha_visita,visitas.hora_visita,visitas.compra TO NULL DISPLAY BY NAME visitas.fecha_visita,visitas.hora_visita,visitas.compra NEXT FIELD fecha_visita END IF LET int_flag = FALSE END CASE LET visitas.fecha_ini_sem = NULL LET visitas.fecha_fin_sem = NULL AFTER FIELD fecha_ini_sem IF visitas.fecha_ini_sem IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_ini_sem END IF AFTER FIELD fecha_fin_sem IF visitas.fecha_fin_sem IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_fin_sem END IF LET p_cantidad = 0 LET p_cantidad = visitas.fecha_fin_sem - visitas.fecha_ini_sem LET p_cantidad = p_cantidad + 1 IF p_cantidad < 5 THEN LET numero_msg = 98 CALL msg(numero_msg) NEXT FIELD fecha_fin_sem END IF IF p_cantidad > 6 THEN LET numero_msg = 97 CALL msg(numero_msg) NEXT FIELD fecha_fin_sem END IF AFTER FIELD sec_vend IF visitas.sec_vend = 0 or visitas.sec_vend is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_vend ELSE SELECT i.nom1_emp, i.apell1_emp, i.status_t INTO descrip1, descrip2, status_reg FROM adtb00003 i WHERE i.num_emp = visitas.sec_vend AND i.status_t is null IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 67 CALL msg(numero_msg) NEXT FIELD sec_vend END IF LET descrip6 = descrip1 clipped," ",descrip2 clipped DISPLAY descrip6 TO descrip6 ELSE LET numero_msg = 68 CALL msg(numero_msg) NEXT FIELD sec_vend END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END IF AFTER FIELD tipo_cliente IF visitas.tipo_cliente is null or visitas.tipo_cliente = 0 then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF AFTER FIELD sec_cliente IF visitas.sec_cliente is null or visitas.sec_cliente = 0 then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD sec_cliente END IF SELECT nombre, status_t INTO descrip1, status_reg FROM vetb00004 WHERE tipo_cliente = visitas.tipo_cliente AND sec_cliente = visitas.sec_cliente AND status_t IS NULL IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 69 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF DISPLAY descrip1 TO nombre INITIALIZE visitas.fecha_visita,visitas.hora_visita, visitas.compra TO NULL DISPLAY BY NAME visitas.fecha_visita,visitas.hora_visita, visitas.compra ELSE LET numero_msg = 70 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF AFTER FIELD fecha_visita IF visitas.fecha_visita < visitas.fecha_ini_sem or visitas.fecha_visita > visitas.fecha_fin_sem THEN LET numero_msg = 99 CALL msg(numero_msg) NEXT FIELD fecha_visita END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INSERT INTO vetb00024 VALUES (visitas.fecha_ini_sem,visitas.fecha_fin_sem,null, visitas.sec_vend,visitas.tipo_cliente,visitas.sec_cliente, visitas.fecha_visita,visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion, 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 . LET numero_msg = 1 CALL msg(numero_msg) INITIALIZE visitas.fecha_visita,visitas.hora_visita, visitas.compra TO NULL DISPLAY BY NAME visitas.fecha_visita, visitas.hora_visita, visitas.compra END FUNCTION FUNCTION vepcmf016() # WHENEVER ERROR CONTINUE MESSAGE "" LET int_flag = false ## Aqui se prepara para la captura del criterio de seleccion LET descrip1 = NULL LET descrip6 = NULL DISPLAY descrip1 TO nombre DISPLAY descrip6 TO descrip6 CONSTRUCT criterio ON fecha_ini_sem,fecha_fin_sem,sec_vend,tipo_cliente, sec_cliente FROM fecha_ini_sem,fecha_fin_sem,sec_vend,tipo_cliente, sec_cliente IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CALL ayuda() RETURN END IF LET SELEC = "SELECT fecha_ini_sem,fecha_fin_sem,sec_vend,tipo_cliente, ", " sec_cliente,fecha_visita,hora_visita,compra, ", " persona_contacto,observacion ", "FROM vetb00024 WHERE status_t is null and ",criterio clipped, " ORDER BY 1,3,4,5" 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 visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente,visitas.sec_cliente, visitas.fecha_visita,visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion 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 DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion LET comisiones.sec_vend = visitas.sec_vend CALL busca_vendedor() LET cliente_dir.tipo_cliente = visitas.tipo_cliente LET cliente_dir.sec_cliente = visitas.sec_cliente CALL busca_nombre_cliente() MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion LET comisiones.sec_vend = visitas.sec_vend CALL busca_vendedor() LET cliente_dir.tipo_cliente = visitas.tipo_cliente LET cliente_dir.sec_cliente = visitas.sec_cliente CALL busca_nombre_cliente() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO visitas.fecha_ini_sem, visitas.fecha_fin_sem,visitas.sec_vend, visitas.tipo_cliente,visitas.sec_cliente, visitas.fecha_visita,visitas.hora_visita, visitas.compra,visitas.persona_contacto, visitas.observacion IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion LET comisiones.sec_vend = visitas.sec_vend CALL busca_vendedor() LET cliente_dir.tipo_cliente = visitas.tipo_cliente LET cliente_dir.sec_cliente = visitas.sec_cliente CALL busca_nombre_cliente() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion LET comisiones.sec_vend = visitas.sec_vend CALL busca_vendedor() LET cliente_dir.tipo_cliente = visitas.tipo_cliente LET cliente_dir.sec_cliente = visitas.sec_cliente CALL busca_nombre_cliente() LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion DISPLAY BY NAME visitas.fecha_ini_sem,visitas.fecha_fin_sem, visitas.sec_vend,visitas.tipo_cliente, visitas.sec_cliente,visitas.fecha_visita, visitas.hora_visita,visitas.compra, visitas.persona_contacto,visitas.observacion LET comisiones.sec_vend = visitas.sec_vend CALL busca_vendedor() LET cliente_dir.tipo_cliente = visitas.tipo_cliente LET cliente_dir.sec_cliente = visitas.sec_cliente CALL busca_nombre_cliente() LET numero_msg = 4 CALL msg(numero_msg) { COMMAND "Escoger" " Actualiza Registro Cancela Operacion" LET idx = visitas.tipo_desc IF visitas.status_t= "E" THEN LET numero_msg= 36 CALL msg(numero_msg) RETURN END IF INPUT BY NAME visitas.tipo_desc, visitas.persona_contacto, visitas.observacion, visitas.us_mod, visitas.fech_mod WITHOUT DEFAULTS ON KEY (CONTROL-W) CASE WHEN INFIELD (tipo_desc) CALL consulta_descuentos() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF IF NOT int_flag THEN SELECT status_t INTO status_reg FROM vetb00007 WHERE tipo_cliente = visitas.tipo_cliente AND sec_cliente = visitas.sec_cliente AND tipo_desc = visitas.tipo_desc IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF LET numero_msg = 92 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF DISPLAY descuento.tipo_desc TO tipo_desc DISPLAY descrip1 TO descrip END IF LET int_flag = FALSE END CASE AFTER FIELD tipo_desc IF visitas.tipo_desc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF SELECT status_t INTO status_reg FROM vetb00007 WHERE tipo_cliente = visitas.tipo_cliente AND sec_cliente = visitas.sec_cliente AND tipo_desc = visitas.tipo_desc IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF LET numero_msg = 92 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CALL ayuda() RETURN END IF IF visitas.tipo_desc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF SELECT status_t INTO status_reg FROM vetb00007 WHERE tipo_cliente = visitas.tipo_cliente AND sec_cliente = visitas.sec_cliente AND tipo_desc = visitas.tipo_desc IF status >= 0 THEN IF status != NOTFOUND THEN IF status_reg = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF LET numero_msg = 92 CALL msg(numero_msg) NEXT FIELD tipo_desc END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF AFTER FIELD fech_mod 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 idx != visitas.tipo_desc THEN UPDATE vetb00007 SET tipo_desc = visitas.tipo_desc, persona_contacto = visitas.persona_contacto, observacion = visitas.observacion, us_mod = USER, fech_mod = CURRENT WHERE tipo_cliente = visitas.tipo_cliente AND sec_cliente = visitas.sec_cliente AND tipo_desc = idx LET numero_msg = 13 CALL msg(numero_msg) END IF } COMMAND KEY ("L") "eLiminar" "Elimina registro que esta en la pantalla" UPDATE vetb00024 SET status_t ="E" WHERE fecha_ini_sem = visitas.fecha_ini_sem AND fecha_fin_sem = visitas.fecha_fin_sem AND sec_vend = visitas.sec_vend AND tipo_cliente = visitas.tipo_cliente AND sec_cliente = visitas.sec_cliente LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CALL ayuda() EXIT MENU END MENU END FUNCTION