Imprimir página | Cerrar ventana

Barra de Progreso de un periodo de tiempo

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85331
Fecha de impresión: 19/Abril/2024 a las 18:38


Tema: Barra de Progreso de un periodo de tiempo
Publicado por: Ixtlacihuatl
Asunto: Barra de Progreso de un periodo de tiempo
Fecha de publicación: 09/Junio/2020 a las 04:26
Buenas noches, necesito mostrar graficamente el tiempo que una lavadora está procesando un lavado de prendas durante 8 horas de un turno. He investigado ejemplos y encontré como se muestra un porcentaje de progreso, solo que no aplica para lo que necesito. Tengo un formulario multiregistro donde muestro todas las lavadoras. Algunas de elllas estan ocupadas lavando prendas y de acuerdo al proceso que estan haciendo tienen un tiempo de inicio al cual se le agrega un tiempo en el que debería terminar por ejemplo 1.5 horas. de manera que quiero mostrar una barra por cada lavadora en un periodo de 8 horas. y mostrar cuando inició a lavar, el tiempo en que debería terminar a paritr de la hora en que inició, para que gráficamente el operador vea en que momento una lavadora estará disponible. 



-------------
Ismael G.H.
Saludos desde México



Respuestas:
Publicado por: maxpro
Fecha de publicación: 09/Junio/2020 a las 04:40
Hola.

Fijate si te sirve este ejemplo y si lo puede adaptar.

http://www.mvp-access.es/juanmafan/trucos/progresando.htm

Saludos


-------------
-------Maxpro-------

San Luis - Argentina


Publicado por: Ixtlacihuatl
Fecha de publicación: 09/Junio/2020 a las 04:59
estoy tratando de poner una imagen de mi formulario, pero no se puede ver...


ya vi el ejemplo. solo que no se como ponerlo sobre una barra de 8 horas.


-------------
Ismael G.H.
Saludos desde México


Publicado por: maxpro
Fecha de publicación: 09/Junio/2020 a las 05:04
Hola.

De la pagina del maestro Emilio Sancha!

http://www.mvp-access.es/emilio/busqueda.asp?Palabra=Progreso

Despues iras adaptando!

Saludos

EDITO: En este foro todos hemos aprendido viendo codigos que nos han provisto y de ahi solo depende de nosotros lograr el objetivo entendiendolos y escribiendolos a nuestro modo! dar todo servido no enseña y no seria tu objetivo que es aprender!


-------------
-------Maxpro-------

San Luis - Argentina


Publicado por: lbauluz
Fecha de publicación: 09/Junio/2020 a las 15:01
Hola Ixtlacihuati

Cuando dices que el ejemplo del porcentaje no aplica a lo que necesitas de 8 horas, ¿por qué no aplica?

¿Puedes ponernos lo que tienes hecho para que veamos nosotros también donde está el problema y podamos orientarte un poco más? (Y si pones además una explicación, mejor que mejor)

Un saludo.

Luis



-------------
El Búho es un pajarraco


Publicado por: Ixtlacihuatl
Fecha de publicación: 10/Julio/2020 a las 05:17
No he podido resolver el problema que tengo de la barra de progreso y ya no tengo tanto tiempo para resolverlo, por lo que si alguien me puede ayudar a hacerlo obviamente pagando sus honorarios me ayudaría mucho. espero que pueda verse este link: https://1drv.ms/b/s!As0Fy4KTOVH3jtEw-Cb3W5PIUS2-kA

-------------
Ismael G.H.
Saludos desde México


Publicado por: Ixtlacihuatl
Fecha de publicación: 10/Julio/2020 a las 15:31
Como pensé resolverlo es:
1. Tengo una tabla "Bitacora_Lavado"  con un campo tipo texto  "Progreso"
2. En el formulario dibujar este campo de 12 cm de largo pensando que cada centímetro es una hora
3. Hacer una función que en base a la "hora de inicio" del ciclo de lavado, se posicione en el centímetro correspondiente del campo. Luego en base a el "tiempo del Ciclo de lavado" incremente el numero de centímetros que corresponde a las horas.




-------------
Ismael G.H.
Saludos desde México


Publicado por: lbauluz
Fecha de publicación: 10/Julio/2020 a las 20:26
Vamos a olvidarnos de los centímetros, hablamos de pantallas y cada una puede variar de tamaño, así que si no te importa me lo traduzco como 12 cuadrados en línea, donde cada cuadrado representa una hora.

Hasta aquí bastante fácil

Una función que en base a la hora de inicio... esto ya queda menos claro.

¿Quieres decir que si empieza a las 8 de la mañana hay que ir al cuadrado 8?

O quizás es que tienes 12 horas de servicio, que este servicio empieza (por ejemplo( a las 7 de la mañana y termina a las 7 de la tarde y cada cuadrado representa una hora?



Seguimos, Luego en base a el "tiempo del Ciclo de lavado" incremente el numero de centímetros que corresponde a las horas.

Aquí me pierdo, ¿quieres decir que si el ciclo e lavado dura (por ejemplo), 7 horas y empieza en la última hora tengo que añadir otros 7 cuadrados, haciendo un total de 19 cuadrados?

Y otra pregunta, ¿tienes solo un lavado cada vez o puedes tener, no sé, 20 o 30 a la vez y necesitas 20 o 30 gráficos=

Porque para mí, sería mucho más fácil crear  una línea en la base que tenga las horas, y cada lavado como si fuese una tartar de una duración estimada... como un GANTT pero para lavados.

Es solo mi idea, claro, pero por si te da nuevas ideas.

Un saludo.

Luis




-------------
El Búho es un pajarraco


Publicado por: mounir
Fecha de publicación: 10/Julio/2020 a las 21:45
Hola!

En la página de la master http://www.mvp-access.com/-marta-/web/asp/MisEjemplosLista.asp?eje=30&page=4&orden=&tipo=" rel="nofollow - Marta hay un http://www.mvp-access.com/-marta-/web/asp/ContadorDescargas.asp?Idejemplo=13" rel="nofollow - ejemplo de reloj, su formato se podría adaptar a tus necesidades.



-------------
Un Saludo.


Publicado por: Ixtlacihuatl
Fecha de publicación: 12/Julio/2020 a las 02:45
Si es correcto. tengo un campo de fondo que representa 12 horas (de 8AM a 8pm) y si tengo 12 campos que representan cada hora. lo que requiero es que si el ciclo de lavado comienza a las 9:00 am y el proceso dura 1 hora con 30 minutos. Debería ir al campo 9 e incrementar su tamaño 1 centimetro con 30 milimetros. Tengo 10 lavadoras y se muestran todas a la vez para que graficamente el operador sepa cuando termina un ciclo de lavado, para poner la lavadora disponible y usarla de nuevo. no sé si el link que puse se pueda ver. Sí es como un gant y cada renglón es una lavadora.

-------------
Ismael G.H.
Saludos desde México


Publicado por: Ixtlacihuatl
Fecha de publicación: 12/Julio/2020 a las 02:47
Voy a revisarlo., gracias.

-------------
Ismael G.H.
Saludos desde México


Publicado por: Ixtlacihuatl
Fecha de publicación: 12/Julio/2020 a las 03:00
Gracias. Esto es lo más cercano de lo que necesito.

-------------
Ismael G.H.
Saludos desde México


Publicado por: Ixtlacihuatl
Fecha de publicación: 12/Julio/2020 a las 05:50
Revisando el codigo de la maestra Martha, que me comentaron, lo puse en mi subformulario
agregué a la tabla "Bitacora_Lavado" los campos (H0, H1, H2 ... H24) y en el formulario utilicé las funciones del ejemplo. pero no funciona con los campos, solamente funciona con campos independientes, me podrían decir porque?

Este es el código de mi formulario.
Option Compare Database

Private Sub cerrar_Click()
DoCmd.Quit
End Sub
Private Sub Form_Close()
 Me.TimerInterval = 0
End Sub

Private Sub Form_Current()
 xHoras
 Me.TimerInterval = 1000
End Sub

Private Sub Form_Load()
 Segundos
 Minutos
 Horas
 Me.TimerInterval = 1000
End Sub

Private Sub Form_Timer()
Me.xReloj.Value = Format(Time, "HH:mm:ss AM/PM")

If Second(Time) = 0 Then
   Call Limpia("s")
   Minutos
End If

If Minute(Time) = 0 Then
   Call Limpia("m")
   Horas
End If

If Hour(Time) = 0 Then
   Call Limpia("h")
End If

   Segundos
Me.Caption = Time()
End Sub

Private Sub ST_Lavado_Click()
If ST_Lavado.OldValue = "Ocupada" Then
Hora_Fin = Time()
ST_Lavado = "Disponible"
Else
    ST_Lavado = ST_Lavado.OldValue
End If
Recalc
End Sub

Private Sub xKilos_AfterUpdate()
Dim xCliente As String
Dim xInicio As Date
Dim xDuracion As Double
Dim xMinuto As Long
Dim xHora As Long
Dim HoraFin As Date

Set db = DBEngine(0)(0)

xCliente = xPlanta.Column(1)
xInicio = Now()
xDuracion = DLookup("Duracion", "Procedimiento", "Procedimiento=" & xProcedimiento)
xHora = Hora_Proceso(xDuracion)
xMinuto = Minutos_Proceso(xDuracion)
HoraFin = Agrega_Tiempo(xInicio, xHora, xMinuto)
xInicio = Format(xInicio, "hh:nn:ss")

strSQL = "INSERT INTO Bitacora_Lavado Values("
strSQL = strSQL & xLavadora & ",'"  'Maquina
strSQL = strSQL & Date & "','"    'Fecha_Lavado
strSQL = strSQL & xInicio & "','"  'Hora_Inicio
strSQL = strSQL & xCliente & "','"  'Cliente
strSQL = strSQL & xPlanta.Column(0) & "',"  'Planta
strSQL = strSQL & 0 & ","  'Ruta
strSQL = strSQL & 0 & ",'"  'Pedido
strSQL = strSQL & "" & "',"  'Tipo_Proceso
strSQL = strSQL & xProcedimiento & ","   'Procedimiento
strSQL = strSQL & xDuracion & "," 'Tiempo de Proceso
strSQL = strSQL & xKilos & ",'" 'Peso_Lavado
strSQL = strSQL & HoraFin & "','"  'Hora_Fin
strSQL = strSQL & Usr & "','"  'Operador
strSQL = strSQL & "Ocupada" & "','"  'St_Lavado
strSQL = strSQL & "" & "','"  'Hora 0
strSQL = strSQL & "" & "','"  'Hora 1
strSQL = strSQL & "" & "','"  'Hora 2
strSQL = strSQL & "" & "','"  'Hora 3
strSQL = strSQL & "" & "','"  'Hora 4
strSQL = strSQL & "" & "','"  'Hora 5
strSQL = strSQL & "" & "','"  'Hora 6
strSQL = strSQL & "" & "','"  'Hora 7
strSQL = strSQL & "" & "','"  'Hora 8
strSQL = strSQL & "" & "','"  'Hora 9
strSQL = strSQL & "" & "','"  'Hora 10
strSQL = strSQL & "" & "','"  'Hora 11
strSQL = strSQL & "" & "','"  'Hora 12
strSQL = strSQL & "" & "','"  'Hora 13
strSQL = strSQL & "" & "','"  'Hora 14
strSQL = strSQL & "" & "','"  'Hora 15
strSQL = strSQL & "" & "','"  'Hora 16
strSQL = strSQL & "" & "','"  'Hora 17
strSQL = strSQL & "" & "','"  'Hora 18
strSQL = strSQL & "" & "','"  'Hora 19
strSQL = strSQL & "" & "','"  'Hora 20
strSQL = strSQL & "" & "','"  'Hora 21
strSQL = strSQL & "" & "','"  'Hora 22
strSQL = strSQL & "" & "','"  'Hora 23
strSQL = strSQL & "" & "')"  'Hora 24
db.Execute (strSQL)
xPlanta = Null
xLavadora = Null
xProcedimiento = Null
xKilos = 0
xTerminar = Null
Recalc
End Sub

Private Sub xProcedimiento_GotFocus()
xProcedimiento.Dropdown
End Sub

Private Sub xTerminar_AfterUpdate()
Set db = DBEngine(0)(0)
strSQL = "UPDATE Bitacora_Lavado set Hora_Fin = '" & Time & "', St_Lavado='Disponible'"
strSQL = strSQL & " WHERE Maquina=" & xTerminar & " And St_Lavado='Ocupada'"
db.Execute (strSQL)
Requery
End Sub

Private Sub xTerminar_GotFocus()
xTerminar.Dropdown
End Sub

Private Sub xHoras()
Dim ctrControl As Control
Dim ctrForm As Form
Dim NombreControl As String
Dim Contador As Integer

Contador = 0

Set ctrForm = Me

For Each ctrControl In ctrForm
    With ctrControl

    NombreControl = "h0" & Contador
    If .Name = NombreControl Then   '
       If Contador < Hour(Time) Then Contador = Contador + 1
         .BackColor = 8388608
         .ForeColor = 8388608
       End If
     End With
Next ctrControl
End Sub

Private Sub Horas()
Dim ctrControl As Control
Dim ctrForm As Form
Dim NombreControl As String
Dim Contador As Integer

Contador = 0

Set ctrForm = Me

For Each ctrControl In ctrForm
    With ctrControl

    NombreControl = "h" & Contador
    If .Name = NombreControl Then '
       If Contador < Hour(Time) Then Contador = Contador + 1
         .BackColor = 8388608
         .ForeColor = 8388608
       End If
     End With
Next ctrControl
End Sub

Private Sub Minutos()
Dim ctrControl As Control
Dim ctrForm As Form
Dim NombreControl As String
Dim Contador As Integer

Contador = 0
Set ctrForm = Me

For Each ctrControl In ctrForm
    NombreControl = "m" & Contador
    With ctrControl
    If .Name = NombreControl Then  '
       If Contador < Minute(Time) Then Contador = Contador + 1
          .BackColor = 32768
          .ForeColor = 32768
     End If
    End With
Next ctrControl
End Sub

Private Sub Segundos()
Dim ctrControl As Control
Dim ctrForm As Form
Dim NombreControl As String
Dim Contador As Integer

Contador = 0

Set ctrForm = Me

For Each ctrControl In ctrForm
    NombreControl = "s" & Contador
    With ctrControl
      
    If .Name = NombreControl Then
      If Contador < Second(Time) Then Contador = Contador + 1
       .BackColor = 255
       .ForeColor = 255
     End If
    End With
    
Next ctrControl
End Sub

Private Function Limpia(NombreControl As String)
Dim ctrControl As Control
Dim ctrForm As Form
Dim Control As String
Dim Contador As Integer

Control = NombreControl

Set ctrForm = Me
    Contador = 1
For Each ctrControl In ctrForm
    NombreControl = Control & Contador
    With ctrControl
    If .Name = NombreControl Then '
       Contador = Contador + 1
       .BackColor = 16777215
       .ForeColor = 16777215
     End If
     End With
Next ctrControl
End Function




-------------
Ismael G.H.
Saludos desde México


Publicado por: mounir
Fecha de publicación: 12/Julio/2020 a las 16:15
Hola!

Si te he entendido bien no hace falta agregar los controles de la hora (H0,H1,....H24). Creo que deberías tener dos campos en tu tabla, uno es hora_Inicio y otro hora_Final de forma que al terminar el funcionamiento te lo graba en la tabla. y Dejas el interface sólo como estético.

Una pregunta, Cuando se cambia el día que pasaría con el subformulario?, se pone a cero los registros?

-------------
Un Saludo.


Publicado por: Ixtlacihuatl
Fecha de publicación: 13/Julio/2020 a las 15:52
La tabla "Bitacora_Lavado" almacena todos los ciclos de lavado como un historico. No tengo un cierre dl día como tal, solo agregan ciclos de lavado y se van almacenando. pero en el formulario se muestran todas las lavadoras y el tiempo que se están utilizando. En el encabezado del formulario tengo un control donde se puede seleccionar la lavadora que ya terminó su ciclo de lavado real (manualmente el operador selecciona la lavadora) y en ese momento se almacena la hora en que terminó el ciclo. entonces se inicializa la barra de progreso y el operador puede utilizar nuevamente esa lavadora disponible. La razón por la que agregué los 24 campos (H0,H1,H3...H24) es porque el formulario es multi-registro y al no saber como manejarlo con controles independientes, me repite el ultimo valor en todos los registros. En la tabla "Bitacora_Lavado" tengo estos campos: 
  • Maquina
  • Fecha_Lavado
  • Hora_Inicio
  • Cliente
  • Planta
  • Tipo_Proceso
  • Procedimiento
  • Tiempo_Proceso
  • Peso_Lavado
  • Hora_Fin
  • Operador
  • ST_Lavado
  • H0
  • H1
  • ...


-------------
Ismael G.H.
Saludos desde México


Publicado por: mounir
Fecha de publicación: 14/Julio/2020 a las 19:56
Hola!

He tenido un poco de tiempo y te he adaptado el ejemplo "Reloj" con otro ejemplo que tenía yo guardado a tus necesidades.

http://www.filebig.net/files/4fQn45rhPT" rel="nofollow - http://www.filebig.net/files/4fQn45rhPT

Nota:- No hace falta guardar todas las horas, en el ejemplo te guarda el tiempo de inicio y final.

No te voy hacer más por varios motivos:-
1- No dispongo de la estructura de tu base de datos.
2- tienes que hacerlo tú mismo.

Sí tienes alguna duda o problema aquí estaremos.



-------------
Un Saludo.


Publicado por: Ixtlacihuatl
Fecha de publicación: 15/Julio/2020 a las 03:49
Gracias, entiendo. Voy a intentar resolverlo.

-------------
Ismael G.H.
Saludos desde México


Publicado por: Ixtlacihuatl
Fecha de publicación: 24/Julio/2020 a las 00:06
Ya pueden cerrar esto. Gracias

-------------
Ismael G.H.
Saludos desde México


Publicado por: lbauluz
Fecha de publicación: 24/Julio/2020 a las 22:07
¿Y nos podrías decir como se solucionó?


Un saludo.

Luis


-------------
El Búho es un pajarraco


Publicado por: Ixtlacihuatl
Fecha de publicación: 25/Julio/2020 a las 23:49
Olvidé la barra de progreso porque mi objetivo principal era mostrar como un ghant del tiempo que dura un ciclo de lavado que depende del procedimiento de lavado(lavado ligero, lavado pesado) y dejé el tiempo fijo sin representar el avance. 
  • Hice una función de un ciclo de 24 veces (horas) donde le pongo una "X" a cada hora que estará ocupada la lavadora (Ho,H1,..H24)  (si comienza a las 9:00 y el ciclo dura una hora y 40 minutos) actualizo H9 y H10 con una "X"
  • En el encabezado del formulario el operador ingresa los datos para utilizar una lavadora y después de actualizar el peso, agrego un registro a la bitácora de lavado utilizando la función para almacenar una "X" en el campo de hora que estará ocupada.
  • En el formulario puse todos los campos (H0,H1,..H24) ocultos (muy juntos).
  • En el formulario multiregistro de la bitácora hice una regla con el formato condicional sobre los campos de la hora para poner el fondo de color cuando el campo tenga una "X"
https://youtu.be/f3beuVtVGUg

Esa fue la manera muy básica como lo resolví, de acuerdo a mis pocos conocimientos. Obviamente si alguien profesional me hubiera ayudado, podría haber sido de otra manera.
Gracias a todos.


-------------
Ismael G.H.
Saludos desde México


Publicado por: mounir
Fecha de publicación: 26/Julio/2020 a las 00:41
Hola!

Mira que con el ejemplo de Marta que te adapté, te lo puse en bandeja para hacerlo como querías inicialmente. En Fin!

-------------
Un Saludo.


Publicado por: Mihura
Fecha de publicación: 26/Julio/2020 a las 09:28
Publicado originalmente por Ixtlacihuatl Ixtlacihuatl escribió:

Esa fue la manera muy básica como lo resolví, de acuerdo a mis pocos conocimientos. Obviamente si alguien profesional me hubiera ayudado, podría haber sido de otra manera.
Gracias a todos.

Ixtlacihuatl

¿Has tenido en cuenta para pedir ayuda, la diferencia de fees que se cobran en España / Europa y el cambio entre el Euro y el Peso Mexicano?

Digamos, que yo te paso un presupuesto, una jornada de trabajo, 8 horas a 40 € hora son 320 €, digamos 300 para dejarlo redondo y por ser mi primer trabajo para ti.

Suponiendo que no tenga que cobrarte el IVA (el impuesto general sobre el valor añadido) al cambio quedaría 300 € * 26,0167 pesos por euro = 7.805,02 pesos.

¿Estás conforme con el presupuesto?, si es que sí no tienes más que decirlo y me pongo a ello. Wink

Esto es un problema que me he / nos hemos encontrado al intentar realizar desarrollos para cualquier país no europeo.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: guarracuco
Fecha de publicación: 01/Agosto/2020 a las 17:27
Regalamos conocimientos, pero no tiempo. Filosofica, teorica y prácticamente hablando, el tiempo es intangible, inmensurable, ni siquiera podemos decir que no disponemos de, porque realmente no se puede 'tener'.
Vaya, que me he puesto ha filosofar.



Imprimir página | Cerrar ventana