Poner valor temporal en cuadro de texto independiente según valor de casilla de verificación de otro formulario.

Nuevamente recurro a vuestro superior conocimiento en demanda de ayuda.

No se si esto será posible de hacer. Resulta que tengo dos formularios, que son los que aparecen en la imagen.

De la izquierda "Reserva Comida Convivencia", abre un registro cualquiera del subformulario continuo que aparece en el formulario de la derecha y tiene una casilla de verificación "Pagado"

La idea es que si si en el evento después de actualizar, el valor de la casilla de verificación es =-1,, entonces me ponga el valor de del cuadro de texto "Total" del formulario en el cuadro de texto "PagoParcial" del formulario de la derecha. Dicho cuadro de texto es independiente

La utilidad de esto es que en una mesa puede haber un numero indeterminado de reservas para una fecha concreta, y de esas reserva hayer pagados dos, hoy han pagado uno, mañana pagaraan tres, etc. Y para evtiar errores, cada vez que se pagan algún o algunos cubiertos, la suma del todos los que se paguen esa ocasión se vaya poniendo el control "PagoParcial" del formulario de la derecha.

No se si habré sido capaz de plasmar bien la idea.

3 Respuestas

Respuesta
1

Si el campo esta en la cabecera del formulario (o en el pie), como origen de datos:

= Suma([P.Menu] * Abs([Pagado]))

He deducido que al campo a sumar se le llama 'P.Menu' y el que indica si esta abonado se le llama 'Pagado'

Si el campo a sumar fuera el campo TOTAL, la fórmula se tiene que modificar.

No se puede poner TOTAL sustituyendo a [P.Menu].

En lugar de TOTAL (por ser un campo calculado) se tiene que utilizar su origen de datos (la fórmula que da lugar al descuento si es socio)

Amigo Enrique:

Antes de nada quiero agradecer tu interés y celeridad en responder.

A ver, te comento: en el pie del subformulario continuo he puesto un cuadro de texto independiente al que he llamado "PagoParcial" Al poner como origen = Suma([Total] * ABS([pagaado]) me suma el valor de [Total] de todos los registros del subformulario que tengan como valor -1 en la casilla "Pagado" . Pero no es eso lo que se pretende. Los que buscamos es que sume sólo el valor  de [Total] de los que se paguen en un mismo acto. 

= Suma([P.Menu] * Abs([Pagado]))

Para hacer eso se necesita definir (para que Access lo entienda) que es 'acto' y como el periodo comenzara cuando se abra el formulario y (se supone) que finalizara cuando se cierre lo ideal seria un campo de tipo fecha.

Este campo tomará por defecto el valor de NOW() al abrir el formulario y se lo asigna a los registros cuyo campo [pagado] se modificase a verdadero.

Con ese tercer dato se puede parcializar los cobros (hacer la suma de los parciales) y adicionalmente seria útil para hacer un seguimiento de quien (o que turno) hizo la anotación.

A la formula solo habrá que añadir una condición mas, que la fecha guardada sea igual a la que se aplica como referente (la que se actualiza al abrir el formulario o sesión) y que puede ser tan precisa (ocupa lo mismo) como se necesite si al día se añade la hora, minuto y segundo.

Es mas, modificaría el campo Pagado (que actualmente es un Si/No = booleano) por uno de fecha o numérico (pagado si es diferente de cero y cero si aun no se cobro).

La referencia de la sesión (dato que se obtiene al abrir el formulario)
Sesion= Format(Now, "yyyymmddhhnnss")

Curiosidad: el campo 'Total' es la asignación de un valor o un calculo (el precio es diferente, los socios están suvencíonados).

Hay mas alternativas, por ejemplo iniciar una variable a cero al iniciar la sesión y en ella acumular el valor de 'Total' al cambiar el estado de 'pagado' a verdadero.

Todo ira en función del tipo de control que se necesite.

Amigo Enrique, Nuevamente te agradezco el tiempo que me dedicas. He intentado plasmar tus indicaciones en mi proyecto, pero no he sido capaz de hacerlo, es demasiado para mis escasos conocimientos. No acabo de entender  que objetos, controles y eventos debo codificar. necesito una información más detallada de como hacerlo.  Si no supone mucha molestia para ti, te ruego me lo expliques paso a paso para pueda asimilar el concepto. GRACIAS.

Sin problema, pero con una condición: acordar primero lo que deseas crear para ir directos a por la solución.

En el formulario 'reservas' hay un 'p, menú' que puede modificarse por los campos 'aporte Peña' y 'descuento socio'.

¿Cómo interactúan? No es lo mismo hacer un descuento sobre el total que sobre una parte y que se guarda, pues también aparecen como modificables en en el formulario de configuración de la mesa (y en ese punto lo 'modificable' seria si abono o no la comida).

También puede darse el caso de que no sean descuentos compatibles (o aporte/o descuento)

Definir lo que es 'Sesión' (de cobros), porque contabilizar el apartado 'Total' de los que se modifiquen desde que se abre hasta que se cierra ese formulario, no necesita mas que una suma.

Esa suma tiene un inconveniente y es que si viene un asistente y paga tres cubiertos da un resultado correcto, viene otro y paga un cubierto mas (pero el subtotal serán cuatro, la caja, no lo que se ha de cobrar al que esta pagando).

Estos detalles son los que diferencian un tratamiento correcto de los datos (y le facilitan el trabajo a los usuarios).

Plantea las alternativas que pueden darse y (si tienen lógica se le pueden programar a la maquina) si no la tiene habrá que tener en cuenta las excepciones para llegar a un resultado correcto.

Tienes razón Enrique. Vamos a simplificar la cosa. Nos vamos a olvidar del formulario "Reservas"  del "P_Menu", "AportePeña", y Descuento a socios. vamos a centrarnos en este formulario.

Lo que necesito, si es posible, es que al modificarse la casilla pagado  de algún o algunos registros a "Verdadero" me vaya sumando el valor de "Total" en el control "CobroParcial" que aparece con fondo verde en el formulario principal, sólo eso. 

Yo le puesto un cuadro de texto independiente "TxtCobroParcial" no visible, en el pie del subformulario  que es donde entiendo que se deben ir anotando el valor de "Total" de los registros del subformulario a los que se le modifique "Pagado" ,  mientras el formulario este abierto. y sería el origen de datos de "CobroParcial" del formulario principal.

El fin que perseguimos es que el usuario tenga información de la cantidad que debe cobrar, ya que es frecuente que venga una persona y pague uno, dos, tres, etc. reservas, y posteriormente vengan a pagar algunos mas de la misma mesa,  Osea que si me pagan tres de una vez, sepa cuanto tiene que pagar, con independencia de si es socio o no, tenga descuento o no lo tenga, porque todos esos cálculos ya me lo hace en el otro formulario, con lo que el dato que nos interesa es el valor de "Total" del subformulario.

Cuando se abre el formulario, el campo 'TxtCobroParcial' hay que ponerlo a cero (se inicia como Null).

Para impedir que se pueda cambiar el estado mas de una vez, jugaremos con las propiedades activado y bloqueado en cada cambio de registro y cuando se hace click.

He añadido la opción de poner el campo 'TxtCobroParcial' a cero con un doble click (la alternativa: cerrar y abrir el formulario)

Al campo 'TxtCobroParcial' en sus propiedades, pestaña datos se activan sus propiedades activado y bloqueado, activado para poder borrar el contenido y bloqueado para que no se pueda modificar el valor si no es con 'pagado'.

Adjunto los procedimientos aplicados:

Private Sub Form_Open(Cancel As Integer)
Me.TxtCobroParcial = 0
End Sub
Private Sub pagado_Click()
Me.TxtCobroParcial = Me.TxtCobroParcial + Me.Precio
Me.Pagado.Enabled = 0: Me.Pagado.Locked = -1
End Sub
Private Sub Form_Current()
Me.Pagado.Enabled = IIf(Me.Pagado, False, True)
Me.Pagado.Locked = Not Me.Pagado.Enabled
End Sub
Private Sub TxtCobroParcial_DblClick(Cancel As Integer)
Me.TxtCobroParcial = 0
End Sub

Espero que te sea útil y se adapte a lo que deseas.

Respuesta
1

José María, me voy a permitir enviarte un ejemplo, que quizá te dé una idea.

Gracias Julián quizás así me entere mejor de lo que me dice Enrique

Te la envié ayer

Respuesta

Estoy de acuerdo con Enrique cambie el campo booleano "Pagado" por un campo fecha, así puede totalizar solo los de determinada fecha o adicione un campo para registrar la fecha cuando activo la casilla a true, aunque no es lo ideal.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas