Hola experto, elabore un pequeña base de datos de contabilidad, en access 2003.

Elabore una pequeña base en access 2003, soy Contador Publico y trabajo en Gobierno, la base es de contabilidad, tengo un formulario en el cual registro los datos de la póliza cheque y a su vez un subformulario en el cual registro los asientos contables, el cual tiene los siguientes campos: cuenta, subcuenta, subsubcuenta, descipción de la cuenta, parcial, debe y haber, todos estos campos en mención su origen es una consulta, luego tengo tres campos independientes dentro del subformulario, un campo es la suma de todos los asientos contables del campo debe, otro campo es la suma de todos los asientos contables del campo haber y otro campo el la diferencia entre la suma de todos los asientos del campo debe menos la suma del campo haber, que debe ser 0, a este campo le puse de nombre DIF_p, el problema que tengo es que para que el sistema me avise que la diferencia no es igual a 0, tengo de posicionarme en el campo DIF_p, para que me aparezca el msgbox, lo que yo quiero es que me aparezca automáticamente y que si no corrijo la sumas iguales no me permita salir del registro en el cual me encuentro, te proporciono el evento que si funciona, pero no se que otro cosa le tenga que agregar para que me aparezca el msgbox en forma automática.
Te comento que también ya lo intente en el evento después de actualizar y es lo mismo tengo que clickear el campo DIF_p, para que me aparezca el msgbox.
Private Sub DIF_p_MouseMove(Button As Integer, Shift As Integer, por As Single, Y As Single)
If [DIF_p] > 0 Then
MsgBox "Los montos no son igual a 0"
With Me.DIF_p
.BackColor = vbYellow
.BorderColor = vbRed
.ForeColor = vbRed
.FontBold = True
End With
End If
If [DIF_p] < 0 Then
MsgBox "Los montos no son igual a 0"
With Me.DIF_p
.BackColor = vbYellow
.BorderColor = vbRed
.ForeColor = vbRed
.FontBold = True
End With
End If
End Sub
Por tu atención Experto

1 respuesta

Respuesta
1

Como esta echo el formulario.? ¿Tienes un formulario continuo dentro en un formulario? Si el origen de datos es desde una consulta no encuentro en que momento se pueda crear el evento después de actualizar... ¿podría indicarme como ingresa los datos?

Amisadai

Gracias experto, si tengo un formulario continuo dentro de un formulario, en el formulario tengo un campo que se llama Id_poliza y en el formulario continuo también tengo un campo Id_poliza que hace que se relacionen los registros, en el formulario tengo varios campos en el cual registro el No. de póliza, No. de cheque, Beneficiario, Fecha, Concepto, No. de Cuenta y en el formulario continuo registro los cargos (debe) y abonos (haber), dentro del formulario continuo tengo también tres campos, un campo con la suma de todos los cargos, otro campo con la suma de todos los abonos y por ultimo otro campo que es la resta del total de los cargos menos el total de los abonos el resultado es igual a cero, si no es igual a cero, lo que quiero es que me avise mediante un msgbox en forma automática. Te comento Experto que mediante el evento que anteriormente te expuse, si me permite verificar pero solamente cuando me posiciono con el puntero del mouse en el campo y cuando la diferencia es diferente a 0.00 me avisa mediante un msgbox, lo que yo quiero es que ese msgbox me aparezca en forma automática, que me sugieres Experto.

Gracias

Si mi pregunta era en como ingresas los cargos y los abonos... creo que ahí esta el momento en el cual puedes hacer que se te haga popup el msgbox.. digo esto no se trata de programación si no mas bien de en donde hacer el evento...

Lo que se me ocurre es que si ingresas los datos directamente en la tabla, tendría que ingresarse en el mismo registro tanto el cargo como el abono de tal manera que al salir del registro se generar el evento...

Ahora si ingresas primero un cargo en un registro y luego un abono en otro registro pues pon el código en el evento al salir del campo donde pones el importe...

Me imagino que cuando ingreses un cargo o un abono te saldrá un mensaje solo para recordarte que te falta ingresar un cargo o un abono para igualar..

Si lo que quieres es que no puedas salir de ahí hasta que este igualado pues

Desactiva el botón cerrar del formulario

Agrega tu propio botón cerrar con el código

private sub comandx_click()

docmd.close

end sub

en las propiedades del formulario ponlo en emergente y modal

luego ponle un if al formulario haciendo referencia al botón

if forms!formularioprincipal!sumformulario.form!textox.value = 0 then

'sustituye lo subrayado'

me.comandox.enabled = true

else

me.comandox.enabled = false

end if

Si eso no te ayuda tal vez necesites explicarme como ingresas los cargos y los abonos...

Gracias Experto por tu valioso apoyo, te comento que los cargos y abonos los ingreso de la siguiente manera en el detalle del formulario continuo : en un campo ingreso el No. de póliza, en un cuadro combinado ingreso la cuenta contable del catalogo de cuentas, en otro campo el importe (Parcial_cve) y por ultimo en un campo (Movimiento) ingreso la letra "C" si es un cargo y la letra "A" si es un abono, para este ultimo campo tengo el siguiente evento:

Private Sub Debe_LostFocus()
Select Case [Movimiento]
Case "C"
If [Parcial_cve] > 0 Then
PASO = [Parcial_cve]
[Cargo] = PASO
[Abono] = Null
End If
Case "A"
If [Parcial_cve] > 0 Then
PASO = [Parcial_cve]
[Abono] = PASO
[Cargo] = Null
End If
End Select
End Sub

Y así sucesivamente voy registrando los cargos y abonos.

En el pie del formulario continuo, tengo tres cuadros de texto; en cuadro la suma todos los cargos, en otro cuadro la suma todos los abonos y por ultimo tengo un cuadro de texto llamado DIF_p, que es la resta de los dos cuadros de texto anteriormente citados, el resultado siempre debe ser 0.00, ahora si no cumple con esa condición, tengo el siguiente evento:

Private Sub DIF_p_MouseMove(Button As Integer, Shift As Integer, por As Single, Y As Single)
If [DIF_p] > 0 Then
MsgBox "Los montos no son igual a 0"
With Me.DIF_p
.BackColor = vbYellow
.BorderColor = vbRed
.ForeColor = vbRed
.FontBold = True
End With
End If
If [DIF_p] < 0 Then
MsgBox "Los montos no son igual a 0"
With Me.DIF_p
.BackColor = vbYellow
.BorderColor = vbRed
.ForeColor = vbRed
.FontBold = True
End With
End If
End Sub

Lo que deseo es que el msgbox me aparezca en forma automática, sin la necesidad que tenga que posicionarme con el puntero del mouse en el cuadro de texto para que aparezca el msgbox.

Muchas gracias Experto y disculpa las molestias.

Lamento la tardanza... pero creo que tal vez puedas hacerlo de la siguiente manera..

1. Cambiar el cuadro te texto o campo movimiento cambiarlo a cuadro combinado que te elija entre A y C

2. Mover el procedimiento de evento que tienes de "al perder enfoque" a "después de actualizar"

3. Añadir al código después de actualizar del control movimiento... un requery.. de esta manera inmediatamente aseguramos que se actualicen los tres campos que tienes con las sumas

4.- Añadir al código que tienes ahora en el control movimiento en el procedimiento de evento "después de actualizar" el código que tienes en DIF-p. Y lo borras de Dif_p.

Quedaría mas o menos así:

Private Sub Debe_afterupdate()
Select Case [Movimiento]
Case "C"
If [Parcial_cve] > 0 Then
PASO = [Parcial_cve]
[Cargo] = PASO
[Abono] = Null
End If
Case "A"
If [Parcial_cve] > 0 Then
PASO = [Parcial_cve]
[Abono] = PASO
[Cargo] = Null
End If
End Select

actualizacion1

If [DIF_p] > 0 Then
MsgBox "Los montos no son igual a 0"
With Me.DIF_p
.BackColor = vbYellow
.BorderColor = vbRed
.ForeColor = vbRed
.FontBold = True
End With
End If
If [DIF_p] < 0 Then
MsgBox "Los montos no son igual a 0"
With Me.DIF_p
.BackColor = vbYellow
.BorderColor = vbRed
.ForeColor = vbRed
.FontBold = True
End With
End If
End Sub
End Sub

¿Me puede decir por favor como se llama su formulario principal y el nombre de subformulario?

Por favor hágalo y le va a funcionar

Hola Experto, muchas gracias por tu amabilidad y paciencia, te informo que el formulario principal de llama FrmPolizaCheque y el subformulario se llama FrmPolizaDetalle.

Mañana en la oficina, voy a proceder a realizar el procedimiento que me indicaste y con mucho gusto te informo los resultados.

Gracias

¿Me gustaría que me dijera si ha funcionado para usted?

Hola experto, disculpa la tardanza en responder, lo que pasa es que andaba fuera de la Ciudad donde radico, por cuestiones de trabajo, te informo que realice el procedimiento que me indicaste, me aparece un error en actualizacion1, se lo elimine y se restaura el evento, pero no me aparece el msgbox, lo que hice fue cambiar el evento al salir, ahí si sale el msgbox pero solo cuando clickeo en el subformulario del lado izquierdo donde aparece como un asterisco.

Ahora que me sugieres Experto.

Gracias por las atenciones brindadas.

Ah si perdón se me ovido darte el código de actualización1

Mira ve a la pestaña crear de el entorno de access y ve a donde esta macros y despliegue las demás opciones y luego elige modulo

Osea crea un nuevo modulo

No se como se llama tu formulario y tu subformulario así que voy a inventar lo siguiente nada mas como ejemplo

El formulario se llama principal y el subformulario se llama secundario.

En el modulo pones el siguiente código

public sub actualizacion1()

dim zump as control

set zump = Forms!principal!secundario

zump.requery

end sub

Ahora vuelve a llamar el sub volviendo a escribir actualizacion1 en el código donde lo borraste y me dice que paso..

'Esto se puede hacer de muchas maneras pero de esta manera no me ha fallado nunca...

Esta muy bien que lo hallas puesto al salir en realidad creo que ahí iva

Hola experto te informo, que realice lo que me indicaste y funciono de maravilla.

Muchas gracias por las atenciones brindadas y por tu amabilidad.

A la orden... si ya no hay mas con respecto de este tema.. ahora es necesario cerrar la pregunta y tal vez quieras regalarme alguna estrella...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas