Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Dudas sobre código
pitxiku
VIP
Reto02
Mensajes: 383
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor pitxiku » Mié Ago 14, 2019 10:35 am

En la imagen donde te falla el control de la pausa del café, tienes 2 salidas y una entrada. Es posible que para la segunda salida te esté tomando la primera entrada, u otro fichaje que no vemos. Puedes probar a usar Nz en los 2 fichajes, para ver qué sucede:


=Suma(SiInm([TipoEntrada]="Regreso del café ";Nz([HoraEntrada];[HoraSalida]);0)-SiInm([TipoSalida]="Tomar café ";Nz([HoraSalida];[HoraEntrada];0);0))

Es decir, que si no encuentra uno de los 2 datos, que tome el otro.

Si con esto tampoco sirve, tal vez tengamos que hacer una suma continua sobre los registros. Pero para eso, hace falta saber si los 2 fichajes, entrada y salida, están guardados en un mismo registro de la tabla; o si en cada registro de la tabla hay un único fichaje, entrada o salida.

Para los fichajes omitidos de un día a otro, recuerda que en algunos sitios se trabaja de noche, con lo que una persona empieza a trabajar un día y sale al día siguiente.

Y no hay que pedir perdón por ser torpe, todos lo somos en más de un momento de la vida.

P.D.: cuanto está parte vaya bien, pasaremos a ver en ese informe que va a ocurrir cuando hagas un resumen de más de 1 día, cuando la suma de las horas supere las 24.

Rafael
Nivel 6
Mensajes: 208
Registrado: Dom Dic 27, 2015 10:33 am

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor Rafael » Mié Ago 14, 2019 5:02 pm

Pitxiku: he copiado lo que me dices como origen del control 'Pausa café' y, error :| : "La expresión que ha especificado contiene una función con un número incorrecto de argumentos".

Edito para añadir: No tengo ningún inconveniente en subir a la nube en el Front Back y el Back End de la base de datos dando explicaciones de donde se produce el error y a la vez comprobarás que no hay ningún registro perdido por ahí que esté jorobando la marrana... Como me digas...

Edito nuevamente: Intuyendo que la segunda parte de la resta (el sustraendo) debía seguir el patrón de sintaxis de la primera (minuendo), he escrito: =Suma(SiInm([TipoEntrada]="Regreso del café ";Nz([HoraEntrada];[HoraSalida]);0)-SiInm([TipoSalida]="Tomar café ";Nz([HoraSalida];[HoraEntrada]);0)) , pero nada: la resta indicada me presenta idéntico valor al Total de la Horas Netas de Trabajo...

pitxiku
VIP
Reto02
Mensajes: 383
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor pitxiku » Mié Ago 14, 2019 11:36 pm

Si quieres, sube una copia e intentaré echarle un vistazo, pero eso será la próxima semana; está la tengo bastante ocupada.

Eso sí, si subes algo, que sean todos datos ficticios, por eso de la protección de datos.

Rafael
Nivel 6
Mensajes: 208
Registrado: Dom Dic 27, 2015 10:33 am

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor Rafael » Jue Ago 15, 2019 11:02 am

Pitxiku, aquí tienes el Front y el End comprimidos. Si descomprimes en una carpeta que creases en C:\CONTROL HORARIO no tendrías ni que revincular tablas -que por supuesto solo contienen datos ficticios-.

Haz clic en 'Listados individualizados de datos', contraseña 'a' -sin las comillas claro-, no filtres datos. En el listado que te sale -se llama: Inf_Entradas_y_Salidas_I- es donde se está produciendo el problema. Observa que en el momento actual el control 'SumaPausaCafé' toma el valor del 'SumaHPresencia' y que a su vez el que he llamado 'Total' -no sé si es una pista...- presenta 00:00.

Vete a 'Utilidades Administración' del Menú Principal --> Modificación de datos de control --> Contraseña 'a' --> Filtra por el Tranajador 'Rafael' --> En el registro que se te presenta, el 3 y último, modifica simplemente el Tipo de Salida y pon por ejemplo 'Salida Ordinaria'.

Cierra todo y abre de nuevo el Listado Individualizado de Datos. Repara en que ahora todo es correcto...

El .rar:

https://mega.nz/#!vV8mAazL!bZZiGbJ18WajY5_fde-Io1lVd17w-oWDNy_HD-wft1w

P.S.- En el evento 'Al dar formato' de la sección Pie del Informe del Inf_Entradas_y_Salidas_I, había empezado a hacer pruebas con el MsgBox VbYesNo... las líneas de código las he comentado al no tener éxito en estos primeros momentos.

Rafael
Nivel 6
Mensajes: 208
Registrado: Dom Dic 27, 2015 10:33 am

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor Rafael » Vie Ago 16, 2019 2:09 pm

Yo diría que una vez resuelto el problema de la SiInm renuente el programa quedaría listo.

La aplicación presentaría para un período previamente indicado y para cada trabajador, dos informes, uno con indicación de las horas (decimales) de presencia física en el trabajo, el total de pausas para el café, el total de horas de visitas médicas, el dedicado a la atención de asuntos particulares... (no se me ocurre qué más... ¿a alguien ahí fuera sí? :mrgreen: )... y otro casi exactamente con el mismo formato pero totalizando horas de trabajo (siempre decimales) de acuerdo a las respuestas afirmativas o negativas a los MsgBox YesNo que, de acuerdo a las convenciones que rijan en la organización de que se trate, se contesten a si se suman como jornada efectiva de trabajo las 'pausas de café', visitas médicas, asuntos particulares (puntuales claro)... y... Finalmente este segundo informe se cerraría con las firmas del trabajador y gerente/jefe de personal/encargado del control/administrador... ¿¿??

Pero bueno, esperaré a la solución del problema pendiente...

Edito para compartir (17-08-2019) un truco/descubrimiento que hice ayer.- Lo esquematizo así: conversión a número de horas decimales Sumas acumuladas de Horas Cortas. Quien esté leyendo esto es que ha leído aunque sea deprisa y corriendo parte del contenido de este hilo. Si es así sabrá que el informe de Control de Jornada Laboral al que se dedica gran parte del contenido del mismo, tiene en la Sección del Pie de aquél varios controles de campos calculados que sumarían Horas Netas de Presencia Laboral, Horas de Pausa para el café, Horas de Salida del Centro para Consulta Médica, Horas de Atención de Asuntos Particulares fuera del centro de trabajo... etc etc etc... y todos ellos con el formato de Hora Corta, por lo que sabía que tarde o temprano tendría que reconvertir este formato a número de horas pues cuando tales sumas superasen el total de 24:00 horas: plaf! Pues bien de un modo casual, experimentando, cambié el formato de uno de estos controles -el de que me calculaba las horas netas de trabajo presencial: =Suma([HoraSalida]-[HoraEntrada])- de Hora Corta a número Estándar. Eso hizo que al lanzar el informe ese control me presentase un valor numérico que no me decía absolutamente nada. Siguiendo experimentando me dio por crear al lado de dicho control -al que finalmente asigné un ancho 0- otro que simplemente multiplicase su fórmula de cálculo por 24... y .... bingo! El nuevo control me presentaba el total de horas decimales de presencia en el trabajo... por supuesto que no creo haber inventado la pólvora pero bueno comparto con todos aquellos a los que este método simplérrimo de cálculo les puede ser útil y no conocían... :)

pitxiku
VIP
Reto02
Mensajes: 383
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor pitxiku » Mar Ago 20, 2019 4:15 pm

Te he hecho unas pequeñas modificaciones en el informe:

- https://1drv.ms/u/s!AsYMk9OS3HACiQCSxuD ... h?e=TeGPjy

Como puedes tener una salida sin entrada (que es el problema que tenías), lo que he hecho es colocar un poco de código para que almacene la última salida al café, para que cuando haya un regreso del café, tomar ese dato para calcular la pausa y el total de tiempo en el café.

¿Se puede hacer sin código? Seguramente sí, pero estoy un poco espeso para pensar en las posibilidades y hacer una expresión o consulta que funcione bien.

¿Y qué pasa si hay una entrada sin salida? Que habrá un resultado erróneo. Pero así como la salida sin entrada si que es posible (hoy he salido a tomar café y has generado el informe antes de que yo haya vuelto), entiendo que no se puede volver del café si todavía no te has ido, y tendrás por otro lado contemplada la posibilidad para evitar el fichaje.

Ahora, algún apunte más:

- Ya has visto qué ocurre cuando multiplicas x24 una fecha. Esto es porque Access guarda todas las fechas y horas como un número, donde la parte entera son el número de días que han pasado desde una fecha específica (creo que para Access es el 1 de enero de 1900), mientras que la parte decimal son las horas, minutos y segundos que han transcurrido desde medianoche. Si al valor que tienes después de multiplicar x24, le quitas la parte entera, y lo multiplicas x60, tendrás los minutos.

- Access sólo tiene un tipo de datos Fecha/Hora, y siempre guarda la fecha y hora, aunque sólo le pasemos una parte. Lo digo porque tener 2 campos para el fichaje de entrada y otros 2 para la salida, es un poco duplicar datos. Y si tienes un campo para la fecha y hora de entrada, y otro para la fecha y hora de salida, podrás calcular más fácil el tiempo de trabajo cuando la persona entre a trabajar hoy y salga mañana (turno de noche). Vale que puedes sumar la fecha a la hora de entrada, pero si los puedes tener juntos, para qué separarlos y volverlos a unir.

- Usa Option Explicit: te lo puede poner Access por defecto, y te ahorrará quebraderos de cabeza, sobre todo si eres como yo, que cometo errores de escritura: no es lo mismo PEPE que EPPE. Pero si no lo ves, y Access no tiene el Option Explicit, no se va a quejar y puedes tener resultados inesperados.

Rafael
Nivel 6
Mensajes: 208
Registrado: Dom Dic 27, 2015 10:33 am

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor Rafael » Mar Ago 20, 2019 6:32 pm

Gracias Pitxiku, esperaba tu respuesta como agua de mayo!!! :) , pero en este momento estoy a 500 kms del ordenador :) ... hasta el domingo no podré destripar lo que me dices: de hecho estoy escribiendo esto desde el móvil, así que perdón por posibles errores ortográficos :) :)

Edito para añadir: P.S. 26-08-20119.- Impresionante Pitxiku, muchas gracias. Aunque tardaré semanas en digerir -si es que llego a digerirlo :oops: - lo que me has mandado.

Rafael
Nivel 6
Mensajes: 208
Registrado: Dom Dic 27, 2015 10:33 am

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor Rafael » Mar Ago 27, 2019 1:45 pm

Maravilloso Pitxiku, de momento he cambiado, para hacerlos más polivalentes, los literales "Tomar café" por "Salida pausa diaria" y "Regreso café" por "Regreso pausa diaria", al mismo tiempo que he cambiado las líneas de código y funciones que me has pasado por nombres coherentes con aquéllos cambios, y fenomenal: todo ok!!! :) :) :)

El problema que me quedaría por resolver sería el siguiente -y ya no solo me dirijo al maestro Pitxiku, sino a todo el que pueda y quiera darme una idea...-:

En el evento Al Activar el Informe de Control de Trabajo tengo previsto incluir diversas estructuras If con MsgBox VbYesNo, más o menos -el detalle es lo de menos ya acomodaría las etiquetas y cuadros de texto a la realidad...- con el siguiente formato:

Código: Seleccionar todo

Private Sub Report_Activate()
If MsgBox("¿Procede añadir la suma de pausas de diarias del período recogido en el informe, como tiempo efectivo de trabajo?", vbYesNo + vbQuestion, "CONFIRMACION") = vbYes Then
Me.EtiqPausaDiaria.Visible = True
Me.SumaPausasDiarias.Visible = True
Else
'Me.EtiqPausaDiaria.Visible = False
'Me.SumaPausasDiarias.Visible = False
End If
DoCmd.Maximize
End Sub

... y todo ello con la idea de Sumar, O NO, de acuerdo a las convenciones laborales de la organización de que se trate, los períodos de tiempo dedicados a la que he llamado antes 'Pausa diaria', PERO TAMBIÉN, O NO -insisto en esa 'O' disyuntiva...- los dedicados a visitas médicas... atención de asuntos particulares (dentro de un orden claro) y... ¿¿?? Creo que siguiendo los pasos que me indica Pitxiku podría crear tantas estructuras If MsgBox,s VbYesNo como periodos susceptibles de incluir en la Jornada de Trabajo, O NO, pero intuyo -no me he metido todavía en harina y de lleno con este asunto...- que si contemplo más de tres o cuatro posibilidades de inclusión de tiempos O NO -insisto de nuevo en la disyuntiva :D -, en la Jornada Laboral, me puedo ir, binariamente hablando :mrgreen: , al infinito...

Alguna idea porfa? :mrgreen: -y conociendo mis limitaciones -pese a que ya se me ha catalogado en este foro nada más y nada menos que como arquitecto de informes... :shock: - si puede ser con detalle mejor... :mrgreen:

Saludos al foro desde la Mancha manchega...

pitxiku
VIP
Reto02
Mensajes: 383
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor pitxiku » Mar Ago 27, 2019 10:12 pm

Estas seguro de que quieres mostrar un MsgBox por cada opción/posibilidad que haya? Como tengas la salida del café, la del médico, la de asuntos propios, la de... Se van a acordar de ti cuando salgan 4 MsgBox uno tras otro.

Yo creo que un grupo de opciones en el formulario desde el que abres el informe, donde se puedan marcar las opciones deseadas, es más sencillo y amigable. Y ya para rematar, que se guarde qué opciones se marcaron, para que la siguiente vez que se abra el formulario, ya aparezcan marcadas

Rafael
Nivel 6
Mensajes: 208
Registrado: Dom Dic 27, 2015 10:33 am

Re: Control horario. Suma a Horas de Presencia las Salidas a tomar café y otras.... Sintaxis correcta.

Mensajepor Rafael » Mar Ago 27, 2019 10:19 pm

Pitxiku, dices: «Y ya para rematar, que se guarde qué opciones se marcaron, para que la siguiente vez que se abra el formulario, ya aparezcan marcadas»...

eso me gusta, perooo :?:


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados