Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 14-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #22  
Antiguo 15-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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 caaaaaaaaaasi igual al mio peroooooooo!! en ves de usar user y pass tenia un lector de huellas digitales era de la marca Microsoft, si esos mismos los quer ya los hackearon 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
Responder Con Cita
  #23  
Antiguo 15-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #24  
Antiguo 15-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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 por que no puedo avanzar casi casi nada 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.
Responder Con Cita
  #25  
Antiguo 15-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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?
Código Delphi [-]
query1.sql.text:= 'select HoraEntrada, HoraSalida from horarios where  (FechaEntrada = :FechaActual) and (HoraEntrada < :HoraActual) and (id_usuario = :Id';
query1.parambyname('FechaActual').Value := Date;
query1.parambyname('HoraActual').Value := Time;
query1.parambyname('Id').Value := id del usuario actual;
query1.Open;
if query1.fieldbyname('HoraEntrada').IsNull then
// es un login, no se encuentra la fecha de entrada de hoy, todavía no se ha realizado.
else 
  // es un logout, grabar la hora actual del sistema en HoraSalida y además computar las horas trabajadas en este periodo

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.

Código Delphi [-]
procedure QuickReport1.Qrdbtext1Print(..... var PrintText:string);
var  T, H, M, S: Integer;
       Texto:string;
Time: TTime;
begin
  T := Query1['HorasTrabajadas'];
  H := T div 3600;
  M := (T mod 3600) div 60;
  S := (T mod 3600) mod 60;
  Texto:=  format('%d Horas %d minutos %d segundos',
                      [ H, M, S]);
{esto va en el evento Onprint del qrdbtext, verás que tienes un parametro
 de texto que puedes cambiarlo, no tengo delphi a mano, así que le he llamado
 PrintText}
 PrintText := Texto;
end;
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 16-12-2006 a las 13:18:55.
Responder Con Cita
  #26  
Antiguo 15-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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
Responder Con Cita
  #27  
Antiguo 16-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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

Código Delphi [-]
var FActual :Tdatetime;
 Finicio, FFin :Time;
begin
Factual := now;
ResuelveHorario(FActual, Fini, FFin);
query1.sql.text:= 'select HoraEntrada, HoraSalida from horarios where  (FechaEntrada = :FechaActual) and (HoraEntrada between :Fini and FFin) and (id_usuario = :Id)';
query1.parambyname('FechaActual').AsDate := Trunc(Factual);
query1.parambyname('Fini').AsTime := Fini;
query1.parambyname('FFin').AsTime := FFin;
query1.parambyname('Id').AsInteger:= id del usuario actual;
query1.Open;
if query1.fieldbyname('HoraEntrada').IsNull then
// es un login, no se encuentra la fecha de entrada de hoy, todavía no se ha realizado. grabar la fechaEntrada, código de usuario y HoraEntrada en un nuevo registro.
else 
  // es un logout,grabar la hora actual del sistema en HoraSalida y además computar las horas trabajadas en este periodo y los retrasos de entrada.

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.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #28  
Antiguo 16-12-2006
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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

Código Delphi [-]
procedure TFrm_Data.RELOJTimer(Sender: TObject);
var
   hora : TDateTime;
   dia, tarde: string;

begin
   dia:=   '7:00';
   tarde:= '12:00';
   hora:= Time;

   If hora > StrtoTime(Dia) then
     begin

       Query1.Close;
       Query1.Open;
       Query1.Add ( ('Sentencia SQL para que llene el campo de la tabla automaticamente' )  + 
                          (' en el caso de que el user se olvide hacer el LOGIN' ));
       Query.ExecSQL;
     end;


   If hora > StrtoTime(Tarde) then
     begin
       
       Query1.Close;
       Query1.Open;
       Query1.Add ( ('Sentencia SQL para que llene el campo de la tabla automaticamente' )  + 
                          (' en el caso de que el user se olvide hacer el LOGOUT' ));
       Query.ExecSQL;

     end;
end;


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

Última edición por BlackDaemon fecha: 16-12-2006 a las 20:04:15.
Responder Con Cita
  #29  
Antiguo 11-01-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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 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
Responder Con Cita
  #30  
Antiguo 12-01-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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 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
Responder Con Cita
  #31  
Antiguo 12-01-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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 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
Responder Con Cita
  #32  
Antiguo 12-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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 = 60
Como fórmula general, siempre usando valores positivos, sería:
Código:
(valor / maximo) * 100 = tanto por ciento
La escala de puntuación sería desde cero a máximo
La 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
He asignado:
- 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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #33  
Antiguo 12-01-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consejo para impresion lbidi Impresión 2 02-08-2006 03:58:22
Consejo aplicación Internet (Backups) Gabriel Firebird e Interbase 2 26-12-2005 15:36:59
Consejo para manejar tablas Paradox Coco_jac Varios 8 17-11-2005 17:27:17
Consejo para Acelerar Procesos manuelpr Varios 2 08-03-2005 09:02:22
Consejo para desarrollar en linux Casimiro Notevi Varios 2 05-01-2005 10:41:51


La franja horaria es GMT +2. Ahora son las 14:36:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi