![]() |
Consejo para una aplicación ( paradox )
Hola a todos
primero saludo a todos :) soy nuevo aquí, espero poder conocer amigos y que sea de agrado a la comunidad. Bueno resulta que estoy en mi primer trabajo xD ya que nunca trabajé soy un chaval no mas, ahora mi jefe quiere que aprenda delphi y eso es lo que estoy haciendo y me gusta mucho :) el único lenguaje que se es python y algo de php pero ni al caso ahora al grano... estoy haciendo una aplicación para el "control de asistencia de usuarios ( empleados ). Bueno y decidí usar paradox para eso, ahora lo que no se muy bien es como hacerla cuantas tablas ocupar si van a tener relación unas con las otras. Bueno la aplicación lo unico que tendrá sera un panel principal donde pondrán un user y pass los empleados y picar en un boton y automaticamente se almacena la fecha y hora en que entro al trabajo y lo mismo para salir mete user y pass y la aplicación guardará la hora y fecha de salida.... bueno esa parte no se como hacerla, habia pensado en hacer una tabla para cada usuarios pero no creo que sea la solucion correcta. y otra es relación entre tablas ( cosa que no se pero puedo aprender ) ahora también tendrá un panel de administración y un panel de usuarios, en el panel de admin lo que podrá hacer es agregar usuarios borrarlos y modificarlos ahhh y ver el reporte de cada usuario ( reporte de las horas totales trabajadas ) esa parte de agregar eliminar modificar usuarios ya la tengo echa ( cosa que me costo mucho ) todo se conecta a una tabla (usuarios.db) y donde se almacenan - nombre, apellidos ... etc el user y pass del usuario y tambien del otro panel que mencioné (panel del usuario) donde tiene un login y que solo puedan ver las horas trabajadas, totales ( solo del user que se logeo ) Bueno creo que eso es todo... necesito consejos y ayudas para poder hacer esta aplicación, ya tengo algo avanzado puesto que recien tengo 1 semana con delphi bueno espero haber sido claro y que puedan darme una pequeña opinion sobre como hacerla puesto que es la primera que hago. saludos y gracias de antemano PD me tendrán mucho por aquí :confused: |
Bienvenido a ClubDelphi, el número de mensajes te delata ;).
Normalmente a cada usuario se le asigna un código, es decir un número entero, y a partir de ahí haces varias tablas con la información que quieras almacenar. De momento se me ocurren varias tablas: Código:
tabla usuarios:Personalmente no te recomiendo paradox, es un sistema muy antiguo, pero es tu elección, no la mía. Para actualizar las tablas al entrar un usuario en el sistema, puedes tener una TQuery preparada con la instrucción sql de esta forma: para ejecutarla le pasas los parámetros fecha y código.
Cuando quieras hacer un informe de entradas y salidas, puedes usar algo así: Así tienes un listado de las entradas y salidas del usuario 3. Seguro que otra gente te dará otros puntos de vista. Saludos y buena suerte con el sistema. |
hola lepe
primero muchisimas gracias por responder y tu consejo que me servirán de mucho en este nuevo mundo de delphi ;) Si, ya leí que eso de las tablas paradox esta pasado de moda y "creo" ademas no soporta mucho SQL pero bueno si es que quiero hacer algo bién tengo que hacer caso a los con mas experiencia como uds. Ahora quisiera mas consejos como los tuyos o si quieres aumentar algo mas te estaria muy agradecido, de que motor de base de datos usar, cuantas tablas crear que conección entre ellas deve haber y cosas así para que comiense de nuevo mi aplicación puesto que ya la tenia algo echa pero un 20 % creo, bueno espero mas comentarios y consejos y gracias de nuevo por adelantado ;) gracias y saludos PD si quieren subo mi proyecto en zip para que lo vean y así puedan tener una idea mas clara y así quedaria aquí el proyecto o por que no comensar uno desde el principio |
No sé si conoces "la cara oculta de delphi 4" (está desfasado, pero los principios de programación y los métodos que usa son actuales) una búsqueda en google te llevará sin duda al link de descarga.
Lo que más dolores de cabeza te dará es tener en red a paradox funcionando sin fallos, busca en el foro por NETFILEDIR cuando lo necesites. Si bien es cierto que el sql de paradox no es "actual" (porque se dejó de actualizar) tiene muchísimas características y siempre es más potente que las equivalentes instrucciones en delphi, es una opinión personal. Por ende, hazte de un manual de sql de internet. Usando otra tecnología, mira en este hilo y en este otro Para las horas totales, las fechas se guardan como un número flotante: - la parte entera son los días transcurridos desde el 01/01/1900 (fecha base del calendario del ordenador) - la parte decimal corresponde a la hora. Esto permite restar fechas tal que así:
Aquí he usado dos técnicas distintas: - En total tienes los milisegundos transcurridos entre las dos fechas, ahora solo es cuestión de ir dividiendo y restando hasta obtener un resultado del tipo : " 1 día 2 horas 3 minutos 44 segundos" - En horas, directamente ya tienes 26 horas "y pico" Depende de qué quieras usar. Para no tener que recalcular cada dos por tres las horas trabajadas, podrías añadir un campo en la tabla Entradas (que nombre más malo para esa tabla, quizás cambiando el nombre a "Horario" quedara más entendible), en fin, en esa tabla añades un campo "Horas" de tipo Double, de tal forma que al introducir la fecha de salida, también calculas la diferencia entre ambas y lo guardas, para solicitar listados te podría ayudar mucho. Edito: Siendo tu primer programa en Delphi y con pocos conocimientos como tú has dicho, para ser sincero y realista, podrías usar Paradox, te dará dolores de cabeza, pero no hace falta muchos conceptos para hacerlo funcionar, más que nada hace falta imaginación para resolver los problemas que te llegarán. Con Firebird u otro sistema, necesitarás entender los conceptos y algo más de pericia al volante. Existe mucha información sobre Interbase / Firebird, pero la mejor documentación, viene en inglés en www.ibphoenix.com Si dominas el inglés leído, no te lo pienses y cambia a Interbase / Firebird / Mysql / etc. Saludos |
Hola nuevamente Lepe te agradesco de nuevo por la respuesta clara y sin mas vueltas que dar ... mira yo yo tengo la biblia del delphi 4 en PDF y la verdad es que no le di una pasada :rolleyes: ( error mio ) ahh y también tengo varios tutos de SQL que por cierto entiendo mas o menos todo los queryes que me ponen. Pero bueno ahora la leeré un poco mas que todo eso de las bases de datos me interesa mucho, ahora estoy en el trabajo, disculpen por no responder antes por que estaba haciendo otras cosas y ademas esperando mas respuestas para asi dar otra de mis preguntas jejeje... bueno la cosa es que hablando con el jefe le comente lo del problema de paradox y me dijo que no hay problema por que solo será para un PC y no se trabajará en red con ese sistema de asistencia de empleados o usuarios bueno como pero par ami no es ningún problema pasarme a otro motor de base de datos.. y no conosco FIREBIRD y tampoco INTERBASE pero si MYSQL, pero repito yo no me hago problema de aprender lo que sea si para eso estoy pero por el momento creo que esta bién el uso de tablas PARADOX
Bueno quiero mostrarles mi avance hasta este momento, no se si álguien se molestará en mirarlo pero bueno ya hice la intención y cuando lo complete el que quiera aprender me puede pedir el source ( me refiero a newbies como yo :p ) Bueno espero mas comentarios o consejos para hacer mas que todo las tablas por que eso de tomar la decición que motor voy a usar me da igual y todos se "deben" manejar de una igual forma o parecida bueno eso es todo y muchas gracias por toda la colavoración del foro :) saludos gente Fichero Adjunto ( control de asistencia ) http://www.mytempdir.com/1095772 PD mi trabajo de 5 dias con delphi :p |
¿Seguro que cierras la tabla? jejeje para mí que el Code Insight de delphi te ha jugado una mala pasada, en lugar de Close estas usando Cancel ;) Saludos |
jejeje es verdad Lepe bueno tendré un poco mas de cuidado en esos aspectos.
Pero en fin uds como lo ven ??? le falta algo ? esta mal organizado ? una cosa mas... ta carpeta datos la ponen en c:\ y listo cosa que quede c:\datos y así no tendrán que compilarlo de nuevo.. bueno un saludo y gracias Lepe por haberte dado la molestia de mirarlo y revisarlo pero quisiera mas criticas para que me ayuden a observar en que esta el error o que tengo que hacer para ahorrarme lineas de codigo o memória o cosas así (tips) bueno saludos y gracias de new ;) |
Bueno.. resulta que me baje los componentes ZEOS y funcionaron sin problema alguno y tampoco tuve problemas para la conección :)
Bueno ahora tengo asi mi base de datos.
bueno espero que lo haya hecho bién ahora la duda que tengo es que como hago para que el ID_usuario de la tabla horarios sea el mismo de ID_usuarios de la tabla datos, para que al hacer el reporte utilize esa sentencia sql que me paso Lepe en el anterior post. BUeno para el que quiera ver la aplicación esta en mi anterior post todo será igual ahora lo que quiero hacer es esa parte principal donde se logean los usuarios para registrar su horario bueno saludos PD algun moderador creo que deberia mover este tema al subforo MYSQL gracias de antemano :) |
Hola
Baje el programa y esta simpatico, muy basico pero bien. Ahora ma queda la duda, Paradox o Mysql, cual va a ser la base de datos, veo que estas usando zeos, bueno esto me dice que te vas por mysql o no? Creo que siempre es bueno empezar con algo y terminar con lo mismo, si al final se necesita cambiar pues se hace. Sigue como vas, para mi vas muy bien, solo persistir. saludos |
Hola Caral
gracias por lo de simpatico jejeje bueno pero no es funcional y en si no sirve para nada xD, bueno me quedaré creo con paradox para esta pequeña aplicación y ya para las demás usaré mysql, ahora alguna idea de que el usuario al meter su user y pass se registre su horario con su ID y así al hacer el reporte me de solo las horas y fechas de ese usuario algo asi como la sentencia que puse Lepe en el segundo post, ahh una cosa mas Caral con respecto a lo que esta simple es verdad pues es mi primer programa en delphi, una cosa que mas podría implementarle ? La verdad no se me ocurrio nada mas que los reportes :) Bueno saludos PD lo de mysql solo era una opción y en si resulta lo mismo los mismos querys etc. saludos de new y gracias. |
Dado que es MySql ya dejaré de contestar porque no sé mucho, al menos en Firebird puedes poner:
NOW es una función que entiende, por tanto al crear un nuevo registro en la tabla usuarios (para que quede constancia de su entrada en el sistema), automáticamente se añade la fecha que tenga el servidor. Id_usuario no puede ser clave primaria, ya que no permitiría la entrada de un mismo usuario dos veces. En la tabla horarios, el id_usuario no puede ser un autoincrement, ya que se incrementaría automáticamente, y por tanto, no coincidiría con el verdadero código del usuario. Yo puse clave primaria dos campos a la vez, el id_usuario y la fecha de entrada (ambos a la vez forman la clave primaria), ya que las dos cosas a la misma vez es imposible que ocurra, salvando una posible violación de clave primaria en la tabla. Otra cosa: Si te fijas en esta línea: "User" aparece en negrita, lo que quiere decir que es una palabra reservada de SQL, por tanto, al intentar acceder por SQL a ese campo te dará errores. Cambia el nombre del campo añadiendo una letra más. Acabo de hacer la prueba y "UserName" no lo detecta como palabra reservada. Faltaría añadir los índices secundarios a los campos que vas a acceder constantemente, por ejemplo el nombre del usuario, que lo buscarás cada dos por tres en el login de tu sistema. Saludos |
Hola BlackDaemon
Me he tardado un poco en contestarte porque estaba tratando de hacer algo para que te sirviera de ejemplo. Por lo de simpatico, lo digo con la mejor de las intenciones, nunca en modo burlon, no se me ocurriria hacer eso nunca, menos como aprendiz que soy. Bueno aqui te envio un ejemplo sencillo, modificando tu programa. Hay usuarios autorizados y no autorizados, con esto evitas varias cosas, ya lo veras, si entras con usuario caral, clave caral, te aparece el menu principal, si entras con el usuario nada, el menu desaparece. Pruebalo, tal vez te sirva de guia. La entrada se registra como entrada o salida y se registra la fecha, la hora y el usuario, no he echo mas modificaciones para que las veas y si te gustan poder seguir tu mismo. Aqui esta: http://rapidshare.com/files/6215322/...encia.zip.html Saludos |
Hola Caral , jejej gracias por lo de simpatico en serio xD es que no puedo creer que este bién, aunque no me gusta mucho por que veo ejemplos de otros y lo hacen con un buen aspecto visual, yo creo que con el tiempo iré adquiriendo experiencia en eso, me gusta muchisimo delphi y espero manejarlo con el tiempo bien y poder usar como herramienta de trabajo en mi futuro.
Bueno ahora pasando al otro tema te doy muchas GRACIAS Caral por darte el tiempo de hacerme un ejemplo :D verdad que dan ganas de llorar ;) bueno lo miraré y luego te digo que tal y que cosas mas le quisiera agregar... para ser sincero no se que mas agregarle... a ver alguien con mas experiencia quisieran que me digan que cosas mas se le puede agregar al programa... me refiero a opciones... ya tiene reporte osea la planilla, Bueno espero mas ideas para que asi mi primer programa valga la pena :) bueno saludos y muchas gracias Caral y Lepe con gente como uds. si vale la pena aprender.. PD.- LEpe ya estoy leyendo La cara oculta de delphi 4 :cool: |
Bueno, me perdí un poco del foro por que he estado muy ocupado con el trabajo jiji ( sarcasmo ) Lo que pasa es que ya casi tengo lista la aplicación ahora tengo solo 2 problemas.. bueno vamos por el primero y el mas importante.
Resulta que tengo 1 tabla donde almaceno las horas, fechas de entrada y salida de cada usuario ( emleado ) .... Bueno ahora el problema es a la hora de sacar el reporte con el total de las horas y días trabajados por que el formato en el que se almacena en las tablas es este: Time : hh/mm/ss ej: -> 08:22:47 a.m. Date : dd/mm/aaaa ej: -> 11/12/2006 Ahora el problema es que tengo que hacer que me saque 2 reportes :confused: uno con el "total" de horas trabajadas al mes y el segundo reporte es que me saque un total de minutos/horas de retrazo desde la hora de entrada... por ej: Hora de entrada 7:30 --> por ej. esa es la hora de entrada a la empresa ahora un empleado llega a las 7:40 y ya sería 10 minutos de retrazo que tiene al día y tengo que sacar en el reporte eso mas... osea los minutos de retrazo que tenga cada empleado al día ... así para que al 3er retrazo que tenga tendrá una sanción o algo :eek: Bueno aqui les deja mis tablas de asistencia.db de fechas y horas. Field Name Type zise key --|--------------|-----|----|----| 1 | Id_asistencia | + | 2 | id_usuario | N | 3 | HoraEntrada | T | 4 | FechaEntrada | D | 5 | HoraSalida | T | 6 | FechaSalida | D | Bueno ahora para el reporte es lo que tengo problema.. :) saludos y gracias de antemano :) |
¿Cual es el horario de entrada / salida?
¿algún día de la semana cambia ese horario? ¿existe algún turno de noche de tal forma que se entre a las 23:45 y se salga de trabajar al día siguiente? Saludos |
Hola Lepe a tu primera pregunta.
La hora de entrada y salida es por ej en la mañana -> entrada y al medio dia -> salida... ahora cuando entra en la tarde lo cuenta como entrada y cuando sale en la tarde lo cuanta como salida :D No sé si lo hice bién pero creo que si, ahora a tu segunda pregunta.. NO ningún día cambia el horario. Todos los dias es una entrada a las 8:30 y salida a las 12:30 ;) y la tercera pregunta.. también NO.. no existe ese turno todo es en el día y se sale a las 7:00 pm Ahora regresando a lo que yo estoy haciendo.. es esto para sacar las horas totales en el reporte --- Lo saqué de un post de LEPE era cuestión de buscar un poco ----
Bueno ahora como dice en el otro post.. SI me da como resultado la resta de la hora de salida con la hora de entrada y me da un total de hotas trabajadas en un periodo.. podría ser de toda la mañana o tada la tarde y para convertir ese numero entero ( segundos ) en formato H M S estoy usando esto
Pero ahora mi duda es que ese HorasTrabajadas tiene que estar si o si en una columna ? creo que no, pero queria hacer que se almacene eso mas en una columna de mi tabla Field Name Type zise key --|--------------|-----|----|----| 1 | Id_asistencia | + | 2 | id_usuario | N | 3 | HoraEntrada | T | 4 | FechaEntrada | D | 5 | HoraSalida | T | 6 | FechaSalida | D | 7 | HorasTrabajadas |T| Bueno espero respuestas :) saludos y espero haber sido claro si no pregunten y yo con gusto les doy mas datos :p gracias por adelantado |
Ya veo que andas a pasos agigantados, me he quedado gratamente impresionado.
Las horas trabajadas no creo que pueda guardarlas en un formato Time, ya que si trabaja 24 horas, el formato Time cambia a cero la hora automáticamente (es lógico, solo acepta valores de 0-23 horas) Quizás fuera mejor dejarlo como un campo que se cree al vuelo dada 2 fechas, no sé si te gustará... ya me dirás. Para tu consulta: Sería armar un procedimiento almacenado (store procedure), con dos parámetros de fechas, así puedes saber las horas trabajadas. El procedimiento almacenado sería de selección, de tal forma que devuelva los datos del trabajador más una columna añadida (posiblemente de texto para facilitar las cosas) donde se indique esas horas trabajadas o incluso los minutos que ha llegado tarde cada día. (Los cálculos que haces en delphi, también los podrás hacer dentro del procedimiento almacenado) Si quieres añadir el campo horas trabajadas, lo mejor sería un trigger (disparador) en el afterUpdate de la tabla, de esa forma siempre que se guarde algún valor, la base de datos intentaría hacer el cálculo automáticamente. Saludos |
Hola Lepe jejej lo que pasa es que yo cuando me propongo algo siempre estoy sobre eso y pues asi uno avanza muy rápido mas con la ayuda de uds y de un amigo ( garcez ) xD
Bueno pero ahora si que no te entendí mucho lo que me dijiste. Vamos por partes... En eso de las horas trabajadas tienes toda la razón que no se podría guardar las horas trabajadas en formato TIME por el motivo que me dices, ahora seria de agurdarlo en un campo Numérico ??? O Alphanumérico ?? o guardaria el tiempo en segundos ?? y al momento de hacer el reporte lo transformo al formato H/M/S ?? Bueno solo eso faltaría para completar mi aplicación es que me de un reporte completo y hacer lo que mi jefe me pide y mas aún si es mi primer trabajo y será mi primer sueldo este 16 :D:D:D:D y lo que quiero es que no me pague por nada.. bueno aunque ya programé su página web xDD Pero quería terminar esta aplicación hasta el 16 por que luego pienso viajarme unas semanas al campo de vacaciones pues ya salí de la escuela :) bueno al final terminé hablando de mi vida personal como si álguien le interesaría :D saludos y suerte ;) |
Hola BlackDaemon
He seguido de cerca tu progreso y me parece, que dentro de poco te pido consejos. Para hacer lo que quieres, yo, haria que se interpretaran las horas como un simple float, donde los segundos fueran los decimales, ahunque creo que en verdad los segundos no deberian importar. Una vez hecho esto, haria una simple resta de los datos y los pasaria a la tabla empleados, donde se cambie continuamente el dato. Bueno son unas idea nada mas. Vas muy bien, ni me meto, por que lepe te esta ayudando mas. Saludos |
Hola Caral.. pues es que ahora si que estoy medio fregado a la hora de hacer eso.. aparte que no entiendo mucho las alicaciones con reportes osea no le entiendo mucho como hacer las sumas o restas en la aplicacion puesto que no hay algún boton o algo para hacer clic xDD creo que tendria que poner las sentencias SQL en oncreate del form verdad ?? o en el objec inspector SQL del componente TQuery ??
bueno espero respuestas que me estoy liando solo en algo que no creo que sea muy complicado.. saludos y gracias por responder rápido :) ya es hora de salida de mi trabajo responderé mañana ;) |
Creo que hay que ir pensando en 2 cosas:
- diseño de la BBDD - "Comodidad para los informes (reportes)" Un Store procedure es igual que un procedure de delphi, solo que está dentro de la Base de datos y escrito en SQL. Al igual que un procedure de delphi, te ayuda a simplificar o dividir un gran problema en problemitas mas pequeños y fáciles de digerir. Consulta la ayuda de MySql. Por supuesto que mediante un simple Query se podrá hacer, pero requerirá más pericia o malabarismos. En cuanto a guardar la hora, minutos y segundos en formato Float, yo difiero, porque cuando un decimal, por ejemplo 0.99 se le suma un decimal, se convierte en 1.00 es decir, el cambio en decimal ocurre cada 100 unidades, mientras que el cambio horario se efectúa cada 60 unidades. Por este hecho, quizás estemos complicando los cálculos al guardarlo en tipo Float. Si tu unidad mínima es "un Minuto", podrías guardar todo en un campo Int64 y convertir todas las diferencias a minutos. Mira en la ayuda de delphi la definición de Int64 y comprueba que jamás en tu aplicación vas a necesitar un número mayor. Volviendo al tema de informes, en casi todos los generadores de informes (QuickReport, ReportMan, etc) se tiene un evento que se dispara justo antes de imprimir una caja de texto, una banda, etc. En el caso de QuickReport es el evento OnPrint, donde puedes convertir el texto que llegue a tipo entero, realizar cálculos y después devolver el resultado a ese tipo texto. Saludos |
hola gente... les cuento que ahora fuí a una clínica acompañando a mi madre.. y cuando entro un lugar y sorpresa!!! una PC con la pantalla para el otro lado ( la otro lado de la secretaria ) y era un CONTROL DE ASISTENCIA DE USUARIOS :D :D :D :D caaaaaaaaaasi igual al mio ;) peroooooooo!! en ves de usar user y pass tenia un lector de huellas digitales :confused: era de la marca Microsoft, si esos mismos los quer ya los hackearon :D Bueno pero igual solo por CURIOSIDAD queria saber si alguien trabajó con uno de esos para asi pensar en el futuro ponerle uno de esos... le puedo decir a mi jefe que compre uno y se pondrá felíz xD bueno pero ese comentario solo lo hago por curiosidad ya se que estoy muy newbie para hacer estas cosas o querer correr antes de aprender a caminar pero en fin me interesaría mucho que me pudieran sacar ese duda que me mata el alama y me masca los huesos ;)
Bueno ya busqué en el foro y creo que tods los post se quedaron a medias.. osea no hay una respuesta concreta y no hay alguien que logró su objetivo. al menos eso es lo que leí saludos PD aqui les dejo el lector de huellas digitales de microsof.. AHHHH si alguien logró hacer algo asi con otra marca o modelo solo que me lo diga para comprar ese. saludos http://www.microsoft.com/hardware/mo...s.aspx?pid=036 |
El tema se ha tratado y no es que los post se hayan quedado a medias, de hecho se dice que ya hay programas funcionando de esa forma.
El problema que algunos comentan es que la imagen de la huella suele ser muy grande (en tamaño de bases de datos) por lo que se suele asociar un código a ese usuario para poder encontrar la huella rápidamente y hacer una o 2 comparaciones nada más. Como se ha dicho, no solo hay que guardar la huella de un dedo sino de varios, por posibles cortes en los dedos que dificulten la lectura o incluso amputaciones. Desde mi punto de vista, si tiene que aprenderse un número de memoria.... ¡¡ pues que se aprenda una contraseña !!. Es cierto que no es lo mismo situar un teclado entero que un simple numpad o teclado al estilo cajero automático, pero bueno, cada uno verá lo que necesite. Si necesitas continuar hablando de huellas digitales, te sugiero que abras un nuevo hilo. Como dice también la guía de estilos, a problema nuevo, nuevo hilo. Saludos |
Hola Lepe, no, solo era un comentario nada mas... yo se que si en verdad quisiera implementar ese sistema tengo que abrir un nuevo tema.. solo te lo dije a modo de comentario y perdón si desvirtué un poco este tema.
Bueno siguiendo con lo mio te cuento que desde que me travé en eso de sacar las horas totáles de cada usuario me quede asi :eek: por que no puedo avanzar casi casi nada :confused: en la aplicación.. puesto que solo le falta esa parte nada mas para que haga un trabajo medio completo.. por que luego cuando se me ocurran mas cosas trataré de implementárselas y si, sigo con ese problema de no saber si guardar las horas totáles en la tabla o solo calcularlas mediante sentencias SQL.. PD Lepe te mandé un PM espero que lo leas y luego me respondas en este hilo o por PM saludos a todos. y gracias. |
Sólo puedo darte ideas, ya te dije que MySql no es lo mío, trabajo con Firebird.
Reconozco que no es buen método el que voy a darte, precisamente por mi desconocimiento de MySql. ¿como identificar si un usuario está haciendo un login o un logout?
Hay un error que puede ser grave, aquí uso "Date" y "Time" para sacar la fecha y hora del ordenador donde está el usuario, se debería usar la fecha del servidor, MySql debe tener funciones como 'Now' para averiguar esos valores. cuando un usuario hace el logout (salir de tu aplicación) puedes lanzar 2 consultas: - En una sacas el total de horas trabajadas ese día (tal y como has hecho) - Teniendo un campo numérico en la base de datos vamos a llamarle HorasTrabajadas, (en Firebird sería Numeric (10, 0)) ahora puedes guardar ese valor. Bien, ya tienes actualizadas las horas trabajadas de ese individuo en el día actual, ahora en el informe situas un QrDBText (suponiendo que usas QuickReport) y en el evento OnPrint, añades el código delphi para traducir ese número a un texto más legible. Con esto ya tienes el informe terminado. Edito: Borro lo de la tabla horariosFijos, ya que confunde y después de pensarlo mejor, no hace falta. Tengo que irme, espero que todo esto te sirva de algo. Saludos |
hola Lepe te cuento que me quedó un poco mas claro lo de las horastotales pero no lo del problema de que si es ingreso o es salida... ahhh otra cosa es que yo estoy usando paradox NO mysql :) bueno a ver probaré lo que me dices y luego te cuento que tal me fué, pero quisiera que me des mas ideas ya que uso paradox por el momento...
saludos y gracias ;) |
Pues aunque dejaste claro que usabas paradox, no sé por qué me hice a la idea que era MySql.
Tienes razón, lo del login o logout no queda muy claro. Entre lo que me decías por el hilo y los mensajes privados me enrollé más que un gato con obillo de lana. Como bien has dicho, el usuario no tiene por qué marcar si es login o logout ni tampoco saber si es horario de mañana o tarde, eso lo debe solventar el programa. Como estamos en paradox (es para centrarme un poco jejeje) lo podemos solucionar "a nuestra manera". No hace falta la tabla HorariosFijos, lo podemos resolver desde delphi con una rutina. Primer problema: - Deducir si estamos en horario de trabajo de mañana o tarde. Pues un procedimiento en delphi, que dada la hora actual, nos devuelva dos times, dándonos el horario al que corresponde. Un procedimiento (ResuelveHorario) con 3 variables, la fecha y hora actual del sistema (Tdatetime), Finicio y FFin (ambas TTimes). En Finicio nos devuelve la hora 8:30 y en FFin 12:30, eso si la hora actual está entre esas dos horas, en caso contrario devolvería el horario de tarde. Por supuesto debería lanzar una excepción si la fecha y hora no entra en ninguno de los periodos, al menos para poder localizar el error ;). Podría ocurrir que un usuario entre a las 8:25 (porque su reloj esté adelantado) así que en lugar de usar 8:30, yo me curaría en salud y usaría las 8:00. Mejor pedir un intervalo más grande a la base de datos, que pedirlo justito a las 8:30 y que un buen trabajador que entra antes de tiempo no aparezca en el sistema. Lo mismo haría con 12:30 y el resto de horas, siempre ampliando los periodos lo máximo posible sin que intersecten entre sí. Segundo problema: - Deducir Login / Logout: Se trata de pedir una consulta con la fecha de hoy, cuya HoraEntrada esté dentro del periodo en el que debería estar trabajando, Si no devuelve datos, es un login. Si devuelve datos, es un Logout piénsalo :p
Problema derivado: - Algún avispado podría modificar la hora de windows para engañar al sistema, deberás protegerlo. Bien limitando los privilegios del usuario con el que arranca windows, o haciendo que tu aplicación se cargue como Shell de Windows. Ya hay info en el foro, busca un poco o abre un nuevo hilo. Calcular los retrasos de entrada: - Se resolvería en un bucle delphi o en un enorme Sql, como prefieras. Al final, y viendo los cálculos que deben hacerse, si añadiría los campos MinutosRetraso y MinutosTrabajados en la tabla horarios. |
heheh hola Lepe gracias por el tiempo que empleas en responder mis mensajes :) ahora sobre la hora del sistema ya lo había pensado y ya quité ese privilégio al usuario con el que inícia el sistema de eso no hay problema... ahora pasando a los otros puntos creo que está un poco complicado.. pero no imposible :) eso de sumar las horas totales de cada usuario... ahora para eso de saber si es Login o loguot tengo una idea.. usar un TIMER "ojo" solo es una idea nada mas.. xDD
Bueno ahora les digo la idea osea con el timer calcular si es mañana y tarde se preguntaran.. joder este tio esta loco @_@ , para que hacer semejante gilipollada ??? xDD , pues para hacer que el programa sepa cuando es login o es logout, si es mañana es login y si es tarde es logout y si como lograr eso ?? Pues con el Timer.. algo asi miren.. OJO pero solo es una idea no se como llevarla a cabo pero la idea es que si es mañana y se logea en la mañana llene el campo de la Tabla con los datos del sistema.. osea la hora y fecha.. ahora si es tarde y hace un logout pues que haga lo mismo... pero si el usuario despistado se olvidó marcar su horario de salida.. que el programa llene el campo de la tabla automaticamente con un campo vacío :) algo así xD
bueno es solo una idea que no se que sentencias utilizar ni como hacerlo pero bueno pienso que podría resultar ;) saludos y gracias PD ahora cumplí un mes en mi primer laburo :D |
Hola a todos... pues bueno regresé después de unas laaaargas vacaciones de 2 semanas :) con mas ganas al trabajo y mas que todo con mas ganas de aprender delphi :D ya no mas ahora empesé a trabajar y mi jefe me pidió que aumentara una sección a la aplicación para que controlase un porcentaje al cumplir ciertas responsabilidades.. bueno lo que el quiere es esto, en el panel de admin. poder asignarle a cada user o empleado puntos de acuerdo a su desempeño en el trabajo, por ej LImpieza, repuso, Etiqueto , buena atención, observaciones, etc.
La idea de esto dice que es para saber el rendimiento de cada personal osea que ya estoy muerto y despedido :( xDDD na, bueno ahora al grano con delphi, lo que habia pensado yo es hacer una nueva tabla ( paradox ) con los datos que el quiere calificar, y enlazarlos al ID_usuario para que se den una idea mejor es algo como una calificación para cada empleado que al irá dando un porcentaje o promedio de acuerdo a lo que el mi jefe califique, espero haber sido claro con mi duda, ahora se preguntataán cual es mi duda.. pues hacer eso :) osea eso de sacar porcentajes.. o mas bien darme una idea mas clara de como poder hacer eso ( sistema de calificaciones xD ) bueno saludos y espero no ser muy cargoso con mis preguntas saludos y gracias por adelantado ;) |
Hola a todos... pues bueno regresé después de unas laaaargas vacaciones de 2 semanas :) con mas ganas al trabajo y mas que todo con mas ganas de aprender delphi :D ya no mas ahora empesé a trabajar y mi jefe me pidió que aumentara una sección a la aplicación para que controlase un porcentaje al cumplir ciertas responsabilidades.. bueno lo que el quiere es esto, en el panel de admin. poder asignarle a cada user o empleado puntos de acuerdo a su desempeño en el trabajo, por ej LImpieza, repuso, Etiqueto , buena atención, observaciones, etc.
La idea de esto dice que es para saber el rendimiento de cada personal osea que ya estoy muerto y despedido :( xDDD na, bueno ahora al grano con delphi, lo que habia pensado yo es hacer una nueva tabla ( paradox ) con los datos que el quiere calificar, y enlazarlos al ID_usuario para que se den una idea mejor es algo como una calificación para cada empleado que al irá dando un porcentaje o promedio de acuerdo a lo que el mi jefe califique, espero haber sido claro con mi duda, ahora se preguntataán cual es mi duda.. pues hacer eso :) osea eso de sacar porcentajes.. o mas bien darme una idea mas clara de como poder hacer eso ( sistema de calificaciones xD ) bueno saludos y espero no ser muy cargoso con mis preguntas saludos y gracias por adelantado ;) |
Hola a todos... pues bueno regresé después de unas laaaargas vacaciones de 2 semanas :) con mas ganas al trabajo y mas que todo con mas ganas de aprender delphi :D ya no mas ahora empesé a trabajar y mi jefe me pidió que aumentara una sección a la aplicación para que controlase un porcentaje al cumplir ciertas responsabilidades.. bueno lo que el quiere es esto, en el panel de admin. poder asignarle a cada user o empleado puntos de acuerdo a su desempeño en el trabajo, por ej LImpieza, repuso, Etiqueto , buena atención, observaciones, etc.
La idea de esto dice que es para saber el rendimiento de cada personal osea que ya estoy muerto y despedido :( xDDD na, bueno ahora al grano con delphi, lo que habia pensado yo es hacer una nueva tabla ( paradox ) con los datos que el quiere calificar, y enlazarlos al ID_usuario para que se den una idea mejor es algo como una calificación para cada empleado que al irá dando un porcentaje o promedio de acuerdo a lo que el mi jefe califique, espero haber sido claro con mi duda, ahora se preguntataán cual es mi duda.. pues hacer eso :) osea eso de sacar porcentajes.. o mas bien darme una idea mas clara de como poder hacer eso ( sistema de calificaciones xD ) bueno saludos y espero no ser muy cargoso con mis preguntas saludos y gracias por adelantado ;) |
El porcentaje solo es una simple fórmula:
por ejemplo en una escala del 0 al 100 queremos darle un valor del 60 %: Código:
(60 / 100 )* 100 = 60Código:
(valor / maximo) * 100 = tanto por cientoLa puntuación que se le dá es la variable valor. En tu caso particular, quizás necesites ponderar algunas puntuaciones, es decir, que tu jefe le da más importancia a la limpieza que a otra cosa, pues fácil: Código:
((LImpieza* 0.2) + (repuso * 0.4) +(Etiqueto*0.2)+ (buena atención * 0.2)) * 100 = porcentaje- 20 % de importancia a limpieza - 40 % de importancia a repuso - 20 % de importancia a etiqueto - 20 % de importancia a atención Como ves todos esos porcentajes suman un 100 %, es lo único a tener en cuenta cuando hagas la fórmula, dicho de otra forma: 0.2 + 0.4 + 0.2 + 0.2 = 1 (la suma de todos esos siempre debe dar 1) Saludos |
:D ahora si me quedo mas claro que el agua .. ahora solo falta implementar eso a mi aplicación y luego le cuento como me fué y que problemas tube, bueno pero una duda mas.. cuantas tablas me recomendaria hacer ??
yo estaba pensando en 1 nada mas.. pero bueno puede que no sea buena idea coo también puede que sea la solución Bueno eso es todo por el momento y gracias por tu respuesta Lepe que siempre me solucionan el problema :) saludos |
| La franja horaria es GMT +2. Ahora son las 17:05:54. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi