Controlar Estado de Sección Los Usuarios que han ingresado al Sistema

327 views
Skip to first unread message

Pool

unread,
Nov 30, 2016, 11:59:32 AM11/30/16
to Comunidad de Visual Foxpro en Español
Que tal Buen dia Foxeros tengo un inconvenientes quiero controlar el estado de los usuarios que estan en sección del sistema  osea si estan activos o no 
yo he agregado a mi tabla usuarios un campo llamado estado con tipo de datos logico  T o F  todos los usuarios el estado es F cuando no estan en seccion

cuando ingresa un usuario yo lo cambio su registro del campo Estado T  pero  cuando el usuario sale del sistema quiero volver a restablecerlos a F lo intentado al final del 
CLEAR EVENTS  de mi Prg principal no se si sera correcto hacerlo de e sta manera ,pero me sale error .
ademas quisiera saber por ejemplo cuando el sistema de cuelga por diferentes razones y voy a control de procesos y lo cierro de manera forzada mi pregunta es  en que parte foxpro controla o que comandos controla el cierre inesperado del sistema para yo poder restablecer el registro del campo estado  del usuario que estubo en sección por favor alguien pueda ayudarme muchas gracias de ante mano.. 

Germán Fabricio Valdez

unread,
Nov 30, 2016, 3:35:37 PM11/30/16
to Comunidad de Visual Foxpro en Español
tenes que usar rlock() en el registro del usuario que entro al comienzo del programa y cuando se cierra el programa se desbloquea solo o cuando pones finalizar tarea

por otro lado para saber quien esta bloqueando el registro tenes que hace otra aplicacion

poner SET REPROCESS TO 1

 recorrer la tabla de usuarios  haciendo un rlock() si no podes bloquear significa que esta conectado despues haces unlock all ,rlock retorna .t. cuando bloquea y .f. cuando no puede bloquear

mapner

unread,
Nov 30, 2016, 3:39:16 PM11/30/16
to Comunidad de Visual Foxpro en Español
Un buen método es un timer que actualice un campo DateTime en la ficha del usuario cada N segundos (por ejemplo 30") luego si quieres saber los activos haces un query de todos los usuarios cuya marca se actualizó en los últimos N segundos.

Saludos

Fidel Charny

unread,
Nov 30, 2016, 4:05:19 PM11/30/16
to Comunidad de Visual Foxpro en Español
Antes del READ EVENTS puedes poner un comando
ON SHUTDOWN DO Miprocedure_de_cierre
Y en PROCEDURE miprocedure_de_cierre pones todo lo que necesites que haga (cierre de formularios, cierre de tablas, registro de cierre de usuario, etc.)
Eso no se ejecutará si se corta la energía en la terminal de que se trate.
Para este caso, u otro tipo de voladura, puedes ver lo dicho por Mapner, dependiendo un poco de cuál es tu necesidad.



El miércoles, 30 de noviembre de 2016, 13:59:32 (UTC-3), Pool escribió:

Edwin Duran

unread,
Dec 1, 2016, 1:14:17 PM12/1/16
to Comunidad de Visual Foxpro en Español

exl260708 .

unread,
Dec 1, 2016, 3:43:19 PM12/1/16
to publice...@googlegroups.com
Muchas Gracias a todos pero no entendi bien como funcionaria cuando hay un corte de luz o porque se colgo la maquina y cerraron los programa con el administrador de procesos ... y Link de Victor  Espina no funciona

Antonio Meza

unread,
Dec 1, 2016, 4:56:50 PM12/1/16
to Comunidad de Visual Foxpro en Español
Pool!!

Y cual seria el beneficio de hacer algo así?

saludos
Antonio Meza

exl260708 .

unread,
Dec 1, 2016, 5:49:51 PM12/1/16
to publice...@googlegroups.com
Solo quiero controlar la seccion del usuario que ingreso al sistema por ejemplo si un usuario x ingreso al sistema en su pc y la dejo activa   y derepente sucede que por apuro intenta abrir seccion en otra pc de su compañero  que me salga  un mensaje que ele usuario ya tiene una seccion activa.. Amigo Antonio se que el beneficio no es tan importante pero quiero lograr que el sistema controle la seccion de cada usuario ..

Antonio Meza

unread,
Dec 1, 2016, 6:22:04 PM12/1/16
to Comunidad de Visual Foxpro en Español
ok!!

Te pregunto porque se de programas que hacen eso para cuestiones de licenciamiento y por ejemplo en México Contpaqi hace eso, pero si por alguna razón se bloquea el equipo entonces tienen que apagar el servidor para que pueda entrar nuevamente el usuario.

En mi caso si el usuario inicia 100 veces al sistema en la misma o diferente maquina no afecta la aplicación, afecta el rendimiento, pero hay otras formas de control mejores que restringiendo el sistema y luego tendrás nuevos problemas que no tenias! ahh como capacitación en el uso del sistema es la primera forma formal jejej

saludos
Antonio Meza

Edwin Duran

unread,
Dec 2, 2016, 3:35:28 PM12/2/16
to Comunidad de Visual Foxpro en Español
Entra nuevamente el link funciona

exl260708 .

unread,
Dec 2, 2016, 4:26:55 PM12/2/16
to publice...@googlegroups.com
Gracias Edwin estoy revisando ... y tambien gracias Antonio Meza

Edwin Duran

unread,
Dec 5, 2016, 8:16:47 AM12/5/16
to Comunidad de Visual Foxpro en Español
Buen dia

Mire si esto te sirve
VerificarUsuarios1.ra_

exl260708 .

unread,
Dec 5, 2016, 10:36:08 AM12/5/16
to publice...@googlegroups.com
Muy Bueno Edwin lo que no entiendo es se debe crear un archivo tipo txt para guardar la seccion del usuario activo...

Víctor Hugo Espínola Domínguez

unread,
Dec 5, 2016, 11:16:24 AM12/5/16
to publice...@googlegroups.com
> para guardar la seccion del usuario activo...

Lo mejor es usar un freezer o enviarla a la morgue.

P.D.: Si te atrapa la poli, yo no te conozco!

Saludos,
Víctor.
Lambaré - Paraguay.

exl260708 .

unread,
Dec 5, 2016, 11:28:44 AM12/5/16
to publice...@googlegroups.com
jaja .. no hay otra manera que nosea freezer o la morge  Victor Hugo..

Carlos Hidalgo

unread,
Dec 5, 2016, 11:43:48 AM12/5/16
to publice...@googlegroups.com
No se si estos es lo que buscas... ayer justamente estaba leyendo un documento de Fox.

Saber los usuarios que están usando la Aplicación

 

Te contaré como controlo yo este tema de los usuarios en aplicaciones en red, quizás te pueda servir.

Añado una tabla adicional con los siguientes campos: Puesto, Fecha, Hora, Usuario
En esta tabla, al configurar el puesto de red para que pueda operar con la aplicación, el proceso agrega un registro a dicha tabla y deja en el campo "Puesto" el valor de sys(0) que devuelve como ya sabrás (la máquina de red cuando se utiliza VFP en un entorno de red.)

Cuando una máquina, arranca la aplicación lo primero que hace es buscar en dicha tabla su sys(0)

SELE "loquesea"
LOCATE FOR sys(0) $ "loquesea".puesto

*** y si no lo encuentra está claro que no se le permite seguir ....

IF eof() && no se encontró
***(mensaje de: terminal no autorizado y a la P. calle)
QUIT
ENDIF

si lo encuentra, BLOQUEA EL REGISTRO Y pone en los campos fecha, hora, usuario los respectivos valores

SET REPROCESS TO 1
IF .not. lock() && ya esta bloqueado la aplicación esta arrancada en este puesto
quit && salida
ENDIF
REPLACE "loquesea".Fecha WITH date(), "loquesea".Hora with time(),
"loquesea".Usuario with m.user
SET REPROCESS TO "lo que uses habitualmente"

Este bloqueo, lo mantengo hasta que salga de la aplicación como se debe salir y entonces deja en blanco los campos fecha, hora, usuario a la vez que desbloquea el registro.
REPLACE "loquesea".Fecha WITH {" "}, "loquesea".Hora with "",
"loquesea".Usuario with ""
unlock

La ventaj que esto tiene, es que al salir de la aplicación "de forma incorrecta, por error, apagon etc" se desbloquea el registro si bien quedan anotados los datos del puesto, usuario, fecha y hora; los que borro si sale como es debido.
Si al entrar en la aplicación, el registro está bloqueado, es señal de que ya tiene abierta la aplicación y seguramente la tiene minimizada por lo que puedes procedo a levantarsela y no seguir en esta nueva apertura.
Si al entrar en la aplicación, no esta bloqueado el registro pero resulta que se encuentra los valores de fecha, hora, usuario; es señal de que la vez anterior que entró, no salido de forma correcta; en tal caso procedo a lanzarle un mensaje de SEVERO Y PELIGROSO AVISO ( ...tal usuario, entro en fecha y hora a la aplicación y no salio como debía, "es la XXXX vez que se apaga de forma ilegal" operación muy peligrosa, posible perdida de datos ...avise al servicio tecnico...)
¡ No te puedes hacer idea, de lo bien que queda uno cuando hay problemas y puedes mirar y decirles que ya se ha salido de la aplicación 23 veces de forma incorrecta, que ¿que es lo que quieren que hagas?, merece la pena guardar estos incidentes ya que seguramente, acabarán por mostrarte que puestos tienen problemas, bien sea de operador o de máquina o quizás de
windows, reinstalar nuevamente el windows en algunas máquinas suele ser el final de muchos problemas.

Para saber si un terminal, esta conectado, o cuantos hay conectados solamente habrá que repasar la tabla en cuestión y contar el numero de registro bloqueados.

SET REPROCESS TO 1
SELE "loquesea"
GO TOP
m.contador=0
DO WHIL .not. eof()
m.contador=m.contador+IIF(lock(),0,1)
unclock
SKIP
ENDD
SET REPROCESS TO "lo que uses habitualmente"
?
"Hay "+str(m.contador)+" terminales conectados"

Espero que todo lo anterior, te pueda servir de algo; En cualquier caso, un saludo a Todos

jesse



Saludos

Víctor Hugo Espínola Domínguez

unread,
Dec 5, 2016, 11:58:18 AM12/5/16
to publice...@googlegroups.com
A continuación 2 secciones de http://dle.rae.es/?w=diccionario

--------------------------------------------------------------------------------------------------------------------------------
sección

Del lat. sectio, -ōnis.

1. f. Separación que se hace en un cuerpo sólido con un instrumento o algo cortante.

--------------------------------------------------------------------------------------------------------------------------------
sesión

Del lat. tardío sessio, -ōnis 'audiencia, conferencia'.

1. f. Espacio de tiempo ocupado por una actividad. Sesión de trabajo, de quimioterapia.

Saludos,
Víctor.
Lambaré - Paraguay.


Edwin Duran

unread,
Dec 5, 2016, 11:59:04 AM12/5/16
to Comunidad de Visual Foxpro en Español
Con el archivo es que controla los que estén conectados, si hay un corte eléctrico o cierra el programa el archivo automáticamente desaparece. no lo he utilizado en producción, estoy desarrollando una nueva aplicación y pienso implementar. quiero combinar los dos ejemplo que te pase.

Saludos 

El lunes, 5 de diciembre de 2016, 11:36:08 (UTC-4), Pool escribió:
Muy Bueno Edwin lo que no entiendo es se debe crear un archivo tipo txt para guardar la sesión del usuario activo...

exl260708 .

unread,
Dec 5, 2016, 12:10:09 PM12/5/16
to publice...@googlegroups.com
Muchas Gracias Carlos Hidalgo  Muy Buena Idea ....la aplicación solo deben correr en las maquinas que están registradas en la tabla de Usuarios conectados .. y también Edwin Duran tomare las dos ideas y ejemplos  y lo  pondré a prueba a gracias por la corrección de la ortografía Victor  Hugo ....
Saludos a Todos
EryPool -Peru  

Alfonso Arias Lemas

unread,
Dec 5, 2016, 1:31:38 PM12/5/16
to publice...@googlegroups.com

Antonio, te explico el sentido de este control en mi caso, yo comercializo programas desarrollados por mi y lo controlo por puestos, no me interesa tanto la cantidad de veces que se “Loguea” un usuario como los puestos activos. Si la empresa cliente compro licencia para 20 puestos puede entrar en los 20 con el mismo usuario, ahora, sólo puede usar 20 computadores no 21. Para mi ese es el sentido de controlar el número de puesto. También tengo otra modalidad de Licencia que es libre, o sea, sólo controlo el nombre y número de identificación fical de la empresa, no me interesa el número de puestos.

Alfonso

Alfonso Arias Lemas

unread,
Dec 5, 2016, 1:31:46 PM12/5/16
to publice...@googlegroups.com

Buenas tarde colegas.

Últimamente reviso poco el foro pero me llamo la atención este hilo y cuando voy al Link sugerido por Edwin me llamó la atención porque resulta que es mio ese Email o comentario. Si desea colega “exl260708” puedo explicarte con detalles como trabaja este tipo de control de licencia puesto que todavía lo uso en varias aplicaciones.

Alfonso

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] Em nome de exl260708 .
Enviada: 2 de dezembro de 2016 20:27
Para: publice...@googlegroups.com
Assunto: Re: [vfp] Re: Controlar Estado de Sección Los Usuarios que han ingresado al Sistema

 

Gracias Edwin estoy revisando ... y tambien gracias Antonio Meza

 

exl260708 .

unread,
Dec 5, 2016, 2:32:20 PM12/5/16
to publice...@googlegroups.com
Claro Alfonso Arias me gustaría mucho saber como lo  trabajas tu  y de ahi aprender un poco mas  como trabaja el contol ...

Alfonso Arias Lemas

unread,
Dec 5, 2016, 3:42:56 PM12/5/16
to publice...@googlegroups.com

Hola,

Mira lo que esta descrito en el Link no va a diferir mucho en el comentario que yo te haga ahora pero me pueden preguntar más directamente después.

Yo resuelvo ese problema de la siguiente forma, en la base de datos mías (SQL server/PostgreSQL) tengo una tabla para los puestos con campo que tiene por nombre cualquier cosa que no indique que se refiere a la licencia como por ejemplo del tipo numérico con un número de varias cifras, que muda contantemente cada vez que entra el puesto, si es par es que el puesto está activo y si es impar es que no lo está por ejemplo, ahora bien con eso no es suficiente pues pudiera pasar lo que describes antes si el programa se bloquea o termina de forma anormal. Para solucionar esto entonces entra la otra parte, cada puesto lo determina un archivo de licencia encriptado que contienen entre otras cosas, la cadena de conexión al banco de datos, el número del puesto y el nombre, dirección y  número de identificación fiscal de la empresa y además una bandera o indicador que cada vez que entras al sistema se activa y cuando sales se desactiva.

Si cuando vas a entrar al sistema el banco de datos dice que está activo y la licencia también fue que hubo una terminación anormal o bloqueo de sistema, por el contrario si cuando vas a entrar el banco de datos está activo y la licencia no significa que el puesto esta duplicado en otro lugar pues está abierto el puesto según la tabla mas no en tu local (emite mensaje de puesto en uso o duplicado). Si por ventura quieres forzar la entrada independientemente del estado de las licencia para eso cree un generador de clave maestra que varía por día o por el ID del computador y con ella puedes violar este tipo de control, sólo que es válido por un día nada más.

 

Espero hayas entendido algo, sino me dices.

Alfonso

 

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] Em nome de exl260708 .
Enviada: 5 de dezembro de 2016 18:32
Para: publice...@googlegroups.com
Assunto: Re: [vfp] Re: Controlar Estado de Sección Los Usuarios que han ingresado al Sistema

 

Claro Alfonso Arias me gustaría mucho saber como lo  trabajas tu  y de ahi aprender un poco mas  como trabaja el contol ...

 

Reply all
Reply to author
Forward
0 new messages