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

Dudas sobre código
Rafael
Nivel 5
Mensajes: 192
Registrado: Dom Dic 27, 2015 10:33 am

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

Mensajepor Rafael » Jue Ago 08, 2019 2:33 pm

Hola a todos.

Prácticamente tengo lista la aplicación de Control Horario de la que hablaba en este hilo https://nksvaccessolutions.com/Foro/viewtopic.php?f=9&t=1544 en el que SveinBjorn me daba la solución de sumar al final del informe de 'Horas de Presencia' (diferencia entre la Hora de Salida y la de Entrada) añadiendo simplemente en el pie del informe el control: =Suma([HoraSalida]-[HoraEntrada]).

El control efectivamente me da la suma de horas de presencia neta en el trabajo, pero mediante un previo MsgBox VbYes/No pretendía que el trabajador/administrador de la BD/encargado del 'reloj' etc. pueda incluir el tiempo empleado diariamente a la pausa del café (salida a consulta del médico... etc).

Limitándome a la posibilidad de añadir el tiempo empleado en la pausa indicada antes, a la Jornada Efectiva o Presencial de Trabajo, había pensado añadir un control al final del informe en el que se restase a la Hora de Entrada (regreso) del café la Hora de Salida a él, pero como en la BD no recojo explícitamente cada una de las distintas horas de entrada y salida del trabajo por cada uno de los distintos tipos de unas y otras, sino el TipoEntrada o TipoSalida correspondiente dentro de la diversidad que establezca cada organización aunque sí claro la hora en que estas se producen, tengo que ligar (¿where?) el literal -string- de cada Tipo de Entrada o Salida a la hora en que cada una de ellas se produce -que como he dicho lógicamente se recoge en la Tabla principal de la aplicación...

Burdamente -como veréis prácticamente lo he hecho casi a martillazos...- quisiera añadir un control que más o menos dijese lo que escribo a continuación -por favor no os riáis demasiado de la sintaxis que por supuesto sabía era errónea antes de escribirla... :roll: -, y que se incluiría en el sumatorio de la jornada dependiendo de que quien sea el encargado de hacerlo diga Yes o No al MsgBox al que me refería más arriba:

HPausa =Suma([HoraEntrada] where [TipoEntrada]="Regreso del café"-[HoraSalida] where [TipoSalida]="Tomar café")

Matizo que entre comillas haría figurar el literal del tipo de la entrada o salida: Pausa del café, visita médico, asunto particular...

Edito para añadir: Los campos 'HoraEntrada' y 'HoraSalida' son campos de la tabla principal de la aplicación que he llamado, 'T_Control_Diario'. Los campos 'TipoEntrada' y 'TipoSalida' pertenecen a las tablas auxiliares llamadas 'T_Tipo_Entrada' y 'T_Tipo_Salida'.

pitxiku
VIP
Reto02
Mensajes: 313
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 » Vie Ago 09, 2019 6:37 pm

Según cómo tengas los datos y qué necesites, puedes usar un SiInm para "filtrar" los datos:

HPausa =Suma(SiInm([TipoEntrada]="Tomar café", [HoraEntrada], 0) - SiInm([TipoEntrada]="Regreso del café", [HoraSalida],0))

También puedes filtrar/sumar las horas en la consulta que uses para alimentar el informe.

Rafael
Nivel 5
Mensajes: 192
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 09, 2019 7:01 pm

Hola Pitxiku, gracias por contestar, he copiado el código que me dices en el Origen de un control creado al efecto en el pie del informe : =Suma(SiInm([TipoEntrada]="Tomar café", [HoraEntrada], 0) - SiInm([TipoEntrada]="Regreso del café", [HoraSalida],0))

Pero me da error: "La expresión que ha especificado contiene una sintaxis no válida. Omitió un operando o un operador, escribió un carácter o una coma no válidos, o escribió texto sin encerrarlo en comillas"

Con independencia de ello Pitxiku creo que hay una confusión en el Tipo de Entrada o Salida, no?: :?: , fíjate que el literal "Tomar café" corresponde a un Tipo de Salida, no de Entrada... :?: :?:

pitxiku
VIP
Reto02
Mensajes: 313
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 » Vie Ago 09, 2019 7:40 pm

Yo no puedo saber cómo tienes montada la base de datos, ni qué datos tienes, ni... Lo que te puedo dar es algo de información de cómo lo haría yo. A partir de ahí, es cuestión de ajustarlo a la base de datos que tienes.

Dicho esto, si te da fallo de sintaxis no válida, puede ser porque tu configuración regional hagas que en vez de la coma tengas que usar el punto y coma como separador de los parámetros:

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

Y en cuanto a su el tipo de registro es tomar café, o volver del café, o comer, o... Para que sea una entrada o una salida, es tan sencillo como modificar la expresión adecuándola a tus datos.

Rafael
Nivel 5
Mensajes: 192
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 09, 2019 8:02 pm

Tenías razón: he cambiado la coma por el punto y coma y el Origen de Control lo ha aceptado... gracias.

Ahora tengo que 'jugar' con las dos partes de la resta matemática: pienso que el minuendo debe ser la hora de Entrada -'Regreso del café'- y el sustraendo la de Salida -'Tomar café'-, puesto que la primera es posterior (superior) a la segunda...

Confío en sacarlo... Muchas gracias Pitxiku :)

Rafael
Nivel 5
Mensajes: 192
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 » Dom Ago 11, 2019 7:54 pm

Pitxiku, he reordenado la línea de código que me apuntaste del siguiente modo:

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

Y funciona genial en el supuesto de que la salida al café TipoSalida="Tomar café" tenga su correlativo cierre de Fichado de Entrada con el TipoEntrada="Regreso del café", en otro caso, es decir que lance el listado habiendo fichado la Salida al café pero NO la Entrada de Regreso de él, en el informe me casca el valor que consigné en en el campo 'HoraSalida' cuando fiché al irme al café, lo que obviamente distorsiona todo: en el supuesto que digo no debía sumar la distorsionadora 'HoraSalida'. He pensado si la función Nz podría solucionar el desaguisado, pero lo he usado de todas las formas posibles que he imaginado y no he conseguido nada.

P.S.- Obviamente este post lo dirijo a Pitxiku porque fue él el que originalmente me brindó la ayuda que he descrito arriba pero si hay alguien ahí fuera que quiere ayudarme por supuesto que encantado... :)

pitxiku
VIP
Reto02
Mensajes: 313
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 » Dom Ago 11, 2019 10:15 pm

Como todo en la vida, depende de los factores (en este caso, cómo tengas montados los registros). Si ese fichaje de salida no existe, o tenga un valor nulo, puedes usar Nz. Le puedes decir a access que si la hora del regreso del café es nula o no existe, que tome la hora de ida, con lo que la resta dará un valor cero:

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

Pero como he dicho, depende de cómo esté montada la estructura y como se creen los registros. Porque ya puestos, también se puede dar el caso contrario: que cuando alguien vaya a tomar café se olvide de fichar (o la máquina no funcione), pero que sí fiche a la vuelta o entrada. Y este problema también se puede producir en cualquier momento. Por ejemplo, que se olvide de fichar la salida después de la jornada laboral, y no fiche hasta el día siguiente.

Rafael
Nivel 5
Mensajes: 192
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 » Lun Ago 12, 2019 2:14 pm

Ptxiku, te cuento:

1) La filosofía general de la aplicación gira en torno a la idea de que el trabajador Ficha una Entrada y Ficha una Salida. La pareja de estos fichados componen un único registro. Los Tipos de Entrada y los de Salida son fijados por el Administrador, aunque para el juego del MsgBox Vb Yes/No del que hablo por ahí en algún post de este hilo y matizo más en éste, aconsejaría que no se modificasen, al menos los que se facilitarían en el Back End del programa: Tipo de Salida y de Entrada, Ordinarios; además, del primero, "Tomar café" y del segundo "Regreso del café"; también, del primero, "Salida a consulta médica" y del segundo "Regreso de consulta médica"... y luego libremente lo que el administrador prevea: Atención de asunto particular, Regreso asunto particular... etc etc etc... La idea era de que en la empresa, organismo, entidad etc en la que se utilizase el programa pudiera añadirse a la jornada NETA de trabajo las pausas para el café... la salida al médico... incluso la atención puntual (?) de un asunto particular... ello automáticamente preguntando previamente al lanzado del informe de control horario correspondiente, mediante el MsgBox Vb Yes/No al que me he referido antes, si se incluyen los tiempos dedicados a la pausa del café... la atención del médico... etc... ello de acuerdo a la convención de la empresa, organismo, entidad etc...

2) Adicionalmente el programa dispone para el administrador herramientas de modificación de registros, emisión de listados para todos y cada uno de los trabajadores de la empresa, entidad etc., añadir o quitar trabajadores de la relación correspondiente, añadir tipos de entrada o salida laborales... etc etc etc....

3) Dicho lo anterior, confesarte he de... -como hubiese dicho el maestro Yoda- que, muy decidido había re-acondicionado el Origen del control del que hablo en este hilo siguiendo tus consejos de aquesta guisa: =Suma(SiInm([TipoEntrada]="Regreso del café ";Nz([HoraEntrada];[HoraSalida]);0)-SiInm([TipoSalida]="Tomar café ";[HoraSalida];0)), y ello con éxito rotundo: el control me devolvía el valor de la 'pausa del café' correctamente... pero ha sido fichar una salida cerrando la entrada abierta y completado consecuentemente el registro correspondiente, con el Tipo de Salida "Tomar café", y, }&/$·")$#@Ǩ%·"][&%{ :roll: : el valor del control referido, que no debía haberse alterado, me ha ofrecido un valor que no he sabido descifrar...

Moraleja, Pitxiku, que tiro la toalla: me temo que la función NZ me supera -al menos en este de momento- por lo que aparco la aplicación, a ver si una vez que pase el calor... ;)
Última edición por Rafael el Sab Ago 17, 2019 1:29 pm, editado 1 vez en total.

pitxiku
VIP
Reto02
Mensajes: 313
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 13, 2019 1:01 am

La función Nz no tiene mucho misterio: si el dato/variable piso en el primer parámetro es un valor nulo, devuelve el segundo parámetro. Si no, devuelve el primero.

El problema (al menos para mí) es qué hacer con los registros huérfanos. Si la persona ficha una entrada y no su salida, o viceversa, qué hay que hacer? Con Nz estamos intentando crear la hora que no existe, pero... Es necesario? O tal vez sea más sencillo marcar de alguna forma ese registro para que el administrador decida qué hacer. Este creo es el mayor problema. Una vez definido el método de trabajo, ya solo se trata de aplicar la solución: Nz, consultas, RecordSet,...

Otra solución es gestionar las fallas en el fichaje. Si la persona ficha la salida al café, por ejemplo, luego debe fichar sí o sí el retorno. La máquina/programa no le permitirá fichar otra cosa hasta que fiche el retorno. Luego la persona puede hablar con el administrador para explicarle porque la pausa del café ha sido de 4 horas, o porqué la jornada laboral ha sido de 20 horas (se olvidó fichar la salida y has tenido que fichar salida y entrada seguidas al día siguiente). También puedes ajustar el informe para que marque de un color especial los fichajes extraños o con más horas de lo normal.

Rafael
Nivel 5
Mensajes: 192
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 13, 2019 7:27 pm

Lo siento Pitxiku, pero lo de la función Nz, combinada si fuese poco con una SlInm, me está volviendo loco.

Me había dicho que aparcaba este asunto pero es obvio que me resisto a ello, le he echado mucho tiempo y conmigo otros muchos amigos a los que he asaltado con este tema.

De hecho había escrito un largo post explicando el problema que tengo, aderezándolo con tres imágenes que recogen otros tantos momentos de fichados 'idílicos' -la práctica ya se encargará de complicarlos más...-, pero justo cuando iba a subirlo plaf... un incidente ha echado a perder lo escrito y no he sido capaz de rescatarlo. Y siendo incapaz de volver a hilvanar el problema con el detalle que lo había hecho lo resumo ahora:

Respecto de lo que dices de los 'fichados huérfanos', tienes toda la razón, ahí está el meollo del asunto. La aplicación funciona por parejas de fichados: todo fichado de Entrada debe ir acompañado de uno de Salida. La aplicación no deja que el trabajador intente realizar un fichado de Entrada si ya hay una Entrada abierta -y al revés o viceversa: no permite fichar una Salida si no hay una Entrada susceptible de cerrar con ella-. Y aquí se presenta un problema que la aplicación resuelve del modo que diré a continuación. El problema es el de un Fichado de Entrada de una fecha anterior a la fecha de hoy ya que el sistema tampoco permite al trabajador 'ordinario' cerrarla con una Salida normal, el sistema le obliga a acudir al administrador de la Base de datos para que éste, usando las herramientas específicas dispuestas para él por la aplicación, cierre con una Salida tal Entrada 'atípica' -quizás no sea el mejor sistema pero es lo que hay y así lo dejo...-.

Voy terminando. A continuación copiaré las tres imágenes de los fichados idílicos o de libro a que me refería antes. En las dos primeras las sumas etiquetadas como 'pausa café' figuradas en el pie del informe -que he separado con una raya roja deliberadamente además de indicarlo con una etiqueta que lógicamente borraría una vez resueltos los problemas- son correctas. En la la tercera, por el contrario, el control 'pausa café', que debía recoger el valor correspondiente presentado en los momentos de fichado recogidos en las imágenes una y dos, todo por obra del origen del control incorrecto que copio asimismo al final de este post pues el tiempo empleado en 'pausa de café' no ha variado entre la imagen dos y la tres, no hace lo que se pretende y presenta el valor de las horas netas de trabajo.

Aquí tienes las tres imágenes a que me refería antes: https://mega.nz/#F!vFNT1CTL!296jH3xOgXNnMkAIWnz8Ag

Y aquí el origen del control a todas luces erróneo de la 'pausa café':

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

P.S.- Perdón por mi torpeza :oops:


Volver a “Código VBA”

¿Quién está conectado?

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