Ir al contenido


Foto

¿Alguna sugerencia de tipo a crear?


  • Por favor identifícate para responder
22 respuestas en este tema

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 17 agosto 2009 - 02:49

Pues eso, como lo representarian ustedes:

Un Dia tiene 24 Horas
Cada DiaDeTrabajo esta dividido en 3 Turnos
Cada turno tiene 8 Horas
cada turno tiene Inicio y Final

¿Como representar esto para programacion? Es decir que puede ser ¿Clase, record, array, ....?

Alguna sugerencia?
  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 agosto 2009 - 03:18

Pues yo lo pensarí­a como un record con los campos:



delphi
  1. Idturno: integer;
  2. Hora_Inicio: date;
  3. Hora_Final: date;



No encuentro mucha utilidad a almacenar ni el tiempo que dura un dia porque ese es siempre de 24 horas y la duración del turno se puede obtener restando la hora_final a la hora_inicial...

De rebote eso se me ocurre... tal vez ayudarí­a un poco saber qué uso le darás a esta información  :)

Saludos !  :D
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 17 agosto 2009 - 03:22

Con mis escasos conocimientos en esas áreas :p yo dirí­a record:



delphi
  1. type
  2.   THorario = record
  3.     Dia : TDate;
  4.     Turnos : string;
  5.     HInicio : DateTime;
  6.     HFinal  : DateTime;
  7.   end;



Saludos.


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 17 agosto 2009 - 03:29

Yo harí­a esto:



delphi
  1. type
  2.   THorario = record
  3.     Usuario: Integer;
  4.     Dia: Integer; {0-Dom...7-Sab}
  5.     HInicio: Time;
  6.   end;



Posibilitando horarios diferentes por dí­a. :)

Salud OS
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 17 agosto 2009 - 03:31

Jejeje, hasta ahorita, en lo que estamos de acuerdo, es en que serí­a un record  :p

Saludos !  :D
  • 0

#6 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 17 agosto 2009 - 03:52

Si, de hecho con esa idea del record empece pero como siempre surgen las dudas, de hecho es un area que no manejo, eso de los records, tipos enumerados y demas aun perturban mis 4 bytes de memoria  (2 los ocupo de ram y 2 de almacenamiento).

El uso es manejar el calculo y  presentacion de informacion por horas y totalizar por turnos; algo asi:

==========================================
|  HORAS    | CUENTA    | SUMA          |
==========================================
06:00 - 07:00 | 9,999.99  | 999,999,999.99
07:00 - 08:00 | n,nnn.nn  |  n,nnn,nnn.nn
08:00 - 09:00 |  nnn.nn  |    nnn,nnn.nn
hh - mm
hh - mm
===========================================
PRIMER TURNO  | XX,XXX.xx  |  xx,xxx,xxx.xx
===========================================
hh - mm
hh - mm
===========================================
SEGUNDO TURNO | XX,XXX.xx  |  xx,xxx,xxx.xx
===========================================
hh - mm
hh - mm
===========================================
TERCER TURNO  | XX,XXX.xx  |  xx,xxx,xxx.xx
===========================================
TOTAL DIA    | ZZZ,ZZZ.ZZ | ZZZ,ZZZ,ZZZ,ZZ
===========================================

Y ciertamente en algunos lados los turnos inician a diferente hora por lo que si es conveniente manejar los inicios y finales de forma parametrizada.

Quedo a la espera de mas sugerencias y/o Opiniones
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 agosto 2009 - 08:50

¡Hola! ¿Me extrañaron? :D

Pues... disculpen si vengo con la mala onda de dar vuelta a este hilo pero yo tengo una preguntonta a por el millón de dólares.... ¿Y que se tiene pensado hacer con estas estructuras records? *-) 8-)
¿Qué operaciones, métodos, acciones, funciones, etc deben serle aplicables?

Porque si hay algo que motivó la aparición del paradigma OO es eso: los records son datos crudos y las operaciones, por tanto la lógica, terminan disgregadas a él. Lo cual al ampliarse la complejidad lleva a mecanismos más complejos y enreversados para mantener en orden los registros.

¡Yo me juego a que es mejor que sean clases! Digo... sin tan bonita es la teorí­a OO, y sabiendo que Delphi nos lo hace más fácil la vida con este paradigma... ¿porqué involucionar y volver a lo arcaico?

Nomás ando de contrario :p :D

Sodulas, (y)

  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 18 agosto 2009 - 09:20

¡Hola! ¿Me extrañaron? :D

Pues... disculpen si vengo con la mala onda de dar vuelta a este hilo pero yo tengo una preguntonta a por el millón de dólares.... ¿Y que se tiene pensado hacer con estas estructuras records? *-) 8-)
¿Qué operaciones, métodos, acciones, funciones, etc deben serle aplicables?

Porque si hay algo que motivó la aparición del paradigma OO es eso: los records son datos crudos y las operaciones, por tanto la lógica, terminan disgregadas a él. Lo cual al ampliarse la complejidad lleva a mecanismos más complejos y enreversados para mantener en orden los registros.

¡Yo me juego a que es mejor que sean clases! Digo... sin tan bonita es la teorí­a OO, y sabiendo que Delphi nos lo hace más fácil la vida con este paradigma... ¿porqué involucionar y volver a lo arcaico?

Nomás ando de contrario :p :D

Sodulas, (y)


Código, quiere ver código :D :D :D

Salud OS

PD, claro que me extrañaba que no entraras en este asunto :p
  • 0

#9 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 agosto 2009 - 09:35

Jeje...
No me tienes amigo... no me tientes ;)

Me encantarí­a aventar un código.... pero tengo una duda... ¿que es Cuenta y Suma? 8-)

Me gustarí­a saber bien eso antes de tirarme a la pileta. Digo, soy loquito pero no b*l*d* :p Bueno... medio b***** :|

Saludos,
  • 0

#10 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 19 agosto 2009 - 09:24

CODIGO! CODIGO! CODIGO! CODIGO!
QUEREMOS CODIGO!

JAJAJAJAJAJA

Bueno Cuenta y Suma son valores devueltos por un query. la realidad es que estoy representando esos datos que se calculan cada hora y la suma por horas en un stringgrid.
Y ademas, si, despues del record pense en clases pero eso es lo que ni idea tengo!

He leido toda la teoria del coche, del pescadito, de la vaquita pero nunca he visto un ejemplo de clases y oop aplicado a la programacion del diario. ¿algun voluntario?
  • 0

#11 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 agosto 2009 - 01:35

CODIGO! CODIGO! CODIGO! CODIGO!
QUEREMOS CODIGO!

JAJAJAJAJAJA

Bueno Cuenta y Suma son valores devueltos por un query. la realidad es que estoy representando esos datos que se calculan cada hora y la suma por horas en un stringgrid.
Y ademas, si, despues del record pense en clases pero eso es lo que ni idea tengo!

He leido toda la teoria del coche, del pescadito, de la vaquita pero nunca he visto un ejemplo de clases y oop aplicado a la programacion del diario. ¿algun voluntario?

Jeje...
Eso me sonó a "A ver, Delphius necesito que me hagas esto" :p

Dame unos minutos y veo que me sale.

Saludos,
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 agosto 2009 - 02:02

A ver... repasemos un poquito que todaví­a hay cosas que no me cierran, conceptualmente hablando.

Inicialmente nos describí­as que un dí­a estaba divido en 3 turnos, por consiguiente tiene 8 horas cada uno (24/3 =8).

Hasta vamos... ahora, volviendo al tema de cuenta y suma. ¿A que se refiere?
¿Conceptualmente hablando, hay algo que componga a cada turno? ¿La suma y cuenta hacen en realidad a esta "entidad" oculta?

Inicialmente nos decí­as que un turno tiene una hora de inicio y fin... eso, puede dejarse de lado puesto que es naturalmente y conceptualmente obvio si consideramos la primera afirmación: un dí­a tiene 3 turnos, ergo: cada turno tiene un tiempo de inicio y fin.

A lo que voy es que no me queda claro el propósito de esos "registros" dentro de cada turno. ¿Son horarios?

Podrí­as ser más descriptivo por favor? Hay cosas en el aire un tanto sueltas... te agradecerí­as que nos brindases detalles más concretos.

Saludos,
  • 0

#13 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 19 agosto 2009 - 04:12

No le busques tres pies al gato que tiene cuatro Delphius.

Cuenta y suma son campos devueltos por una consulta (query) y ademas son el titulo de dos columnas del StringGrid.

Actualmente hice esto en delphi:



delphi
  1. type
  2.   TTurno = record
  3.     HInicio: string;
  4.     HFinal: string;
  5.   end;
  6.  
  7. var
  8.   fmInicio: TfmInicio;
  9.   PrimerTurno: TTurno;
  10.   SegundoTurno: TTurno;
  11.   TercerTurno: TTurno;
  12.  
  13. procedure TfmInicio.FormCreate(Sender: TObject);
  14. begin
  15.   //Inicializamos los horarios de los turnos de trabajo
  16.   with PrimerTurno do
  17.     begin
  18.       HInicio := '6:00:00';
  19.       HFinal := '13:59:59';
  20.     end;
  21.  
  22.   with SegundoTurno do
  23.     begin
  24.       HInicio := '14:00:00';
  25.       HFinal := '21:59:59';
  26.     end;
  27.  
  28.   with TercerTurno do
  29.     begin
  30.       HInicio := '22:00:00';
  31.       HFinal := '5:59:59';
  32.     end;
  33. end;
  34.  
  35. {---------------------------------------------------------------------
  36.  Este procedimiento configura la cadena de consulta horario y suma los datos,
  37.  escribe en la rejilla en la fila correspondiente
  38.  ---------------------------------------------------------------------}
  39. procedure TfmInicio.CalculaTurnos(laHora: integer);
  40. var
  41.   Inicio,_Final:string;
  42. begin
  43.   //De acuerdo a la hora genera la cadena de consulta
  44.   case laHora of
  45.     //Armamos la fecha y hora para el primer turno
  46.     6..13:begin
  47.             Inicio := DateToStr(Now) + ' ' + PrimerTurno.HInicio ;
  48.             _Final := DateToStr(Now) + ' ' + PrimerTurno.HFinal ;
  49.           end;
  50.   //Armamos la fecha y hora para el segundo turno
  51.   14..21:begin
  52.             Inicio := DateToStr(Now) + ' ' + SegundoTurno.HInicio ;
  53.             _Final := DateToStr(Now) + ' ' + SegundoTurno.HFinal ;
  54.           end;
  55.   //El tercer turno abarca dos horas del dia anterior y cinco del actual
  56.   22..23:begin  //sumar un dia para _Final
  57.             Inicio := DateToStr(Now) + ' ' + TercerTurno.HInicio ;
  58.             _Final := DateToStr(IncDay(Now,1)) + ' ' + TercerTurno.HFinal ;
  59.           end;
  60.     0..5: begin  //restar un dia para Inicio
  61.             Inicio := DateToStr(IncDay(Now,-1)) + ' ' + TercerTurno.HInicio ;
  62.             _Final := DateToStr(Now) + ' ' + TercerTurno.HFinal ;
  63.           end;
  64.   end;
  65.  
  66. //Ejecuto la consulta que cuenta y suma los datos de las horas adecuadas
  67. dmDatos.SumaTurnos(Inicio,_Final);
  68.  
  69. //Actualizo la lectura de la rejilla en la fila de turno adecuada
  70. EscribeTurnos(laHora);
  71. end;


Y con esto me resulta lo que queria hacer, no quito el dedo del renglon de que se puede mejorar. Quiero poner una imagen pero no me deja! Grrrrrrr!  :angry:
  • 0

#14 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 19 agosto 2009 - 04:35

No le busques tres pies al gato que tiene cuatro Delphius.

Cuenta y suma son campos devueltos por una consulta (query) y ademas son el titulo de dos columnas del StringGrid.

.....
Y con esto me resulta lo que queria hacer, no quito el dedo del renglon de que se puede mejorar. Quiero poner una imagen pero no me deja! Grrrrrrr!  :angry:


Excelente amigo FGarcia, qué bueno que has logrado un primer paso, y por supuesto que tiene mejora, no conozco código que no la tenga  (y)

By the way... Delph no le busca tres pies al gato, simplemente le gusta ayudar de manera integral... ;)

Saludos !  :D
  • 0

#15 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 19 agosto 2009 - 04:38

No, no lo dije en mala onda, solo fue una frase

y por cierto....se tarda en integrar la imagen al mensaje, andaba peleando donde alojarla!!  :)
  • 0

#16 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 19 agosto 2009 - 05:03

No, no lo dije en mala onda, solo fue una frase

y por cierto....se tarda en integrar la imagen al mensaje, andaba peleando donde alojarla!!  :)


Ya ves una que es sensible  :embarrassed:... jejeje, pero no pasa nada, vámonos de fiesta que ya es mitad de semana !!!!! :cool:

Saludos !  :D
  • 0

#17 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 20 agosto 2009 - 10:28

Una clase así­ se me ocurre



delphi
  1. unit uTurno;
  2.  
  3. interface
  4.  
  5. type
  6. TTurno = class
  7.   private
  8.     Ajuste: integer;
  9.     FInicio: string;
  10.     FFinal: string;
  11.     function GetFinal: string;
  12.     function GetInicio: string;
  13.   public
  14.     procedure EntreInicioFin(laHora: integer);
  15.     constructor Create(Inicio, &Final: string);
  16.   published
  17.     property Inicio: string read GetInicio;
  18.     property &Final: string read GetFinal;
  19. end;
  20.  
  21. implementation
  22.  
  23. uses
  24.   SysUtils, DateUtils;
  25.  
  26. { TTurno }
  27.  
  28. function TTurno.EntreInicioFin(laHora: integer): boolean;
  29. begin
  30.   case laHora of
  31.     22..23: Ajuste:= 1;
  32.     0..5: Ajuste:= -1;
  33.     else Ajuste:= 0;
  34.   end;
  35.   Result:= HourOf(DateTimeToStr(FInicio)) < laHora < HourOf(DateTimeToStr(FFinal));
  36. end;
  37.  
  38. constructor TTurno.Create(Inicio, &Final: string);
  39. begin
  40.   FInicio:= Inicio;
  41.   FFinal:= &Final
  42. end;
  43.  
  44. function TTurno.GetFinal: string;
  45. begin
  46.   Result:= DateToStr(IncDay(Now,Ajuste)) + FFinal;
  47. end;
  48.  
  49. function TTurno.GetInicio: string;
  50. begin
  51.   Result:= DateToStr(IncDay(Now,Ajuste)) + FInicio;
  52. end;
  53.  
  54. end.



Usandola así­



delphi
  1. var
  2.   fmInicio: TfmInicio;
  3.   ListaTurnos: TList<TTurno>;
  4.  
  5. procedure TfmInicio.FormCreate(Sender: TObject);
  6. begin
  7.   ListaTurnos:= TList<TTurno>.Create;
  8.   //Inicializamos los horarios de los turnos de trabajo
  9.   ListaTurnos.Add(TTurno.Create('6:00:00', '13:59:59'));
  10.  
  11.   ListaTurnos.Add(TTurno.Create('14:00:00', '21:59:59'));
  12.  
  13.   ListaTurnos.Add(TTurno.Create('22:00:00', '5:59:59'));
  14. end;
  15.  
  16. {---------------------------------------------------------------------
  17.  Este procedimiento configura la cadena de consulta horario y suma los datos,
  18.  escribe en la rejilla en la fila correspondiente
  19.  ---------------------------------------------------------------------}
  20. procedure TfmInicio.CalculaTurnos(laHora: integer);
  21. var
  22.   Turno: TTurno;
  23. begin
  24.   for Turno in ListaTurnos do
  25.   begin
  26.     if Turno.EntreInicioFin(laHora) then
  27.     //Ejecuto la consulta que cuenta y suma los datos de las horas adecuadas
  28.     dmDatos.SumaTurnos(Turno.Inicio, Turno.&Final);
  29.   end;
  30.  
  31. //Actualizo la lectura de la rejilla en la fila de turno adecuada
  32. EscribeTurnos(laHora);
  33. end;


  • 0

#18 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 agosto 2009 - 11:13

Bien dije: " se puede mejorar"

deja la pruebo y comento :shocked: :shocked: :shocked:
  • 0

#19 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 20 agosto 2009 - 11:42

Claro que no me molesta amigo.

Sólo lo decí­a porque no me quedaba bien en claro esos hh:mm dentro de cada turno... y la relación de éstos respecto a suma y cuenta.

Algo, conceptualmente, no me cuadraba... (y debo decir que no me cuadra) :s

¿Será que mi cerebro perdió la capacidad de hacer Round-Robin y ahora el proceso proyecto de grado acaparó todo mis recursos? ¿Funcionará el reset? :s :|

Saludos,

  • 0

#20 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 20 agosto 2009 - 12:13

jajajajajaj

mientras no se dañe el sector de arranque todo bien!!!!!

o el virus delphius2 acapare todo!!!
  • 0




IP.Board spam blocked by CleanTalk.