Suma Campos Continuos Condicionados en Formulario

Tengo un gran problema con el cual ya no puedo más y ojala tu me puedas apoyar.
Deseo sumar los campos continuos de un formulario dependiendo del concepto capturado. Ejemplo del subformulario "REPORTE DE VIAJE":
Folio de Orden de Viaje  = 0001  (ID)
Concepto = Comida
Monto = 10
Concepto = Comida
Monto = 20
Concepto = Comida
Monto = 30
Como veras el usuario esta capturando en el registro 0001 varios conceptos de Comida pero con diferentes montos, y eso es lo que deseo calcular; he utilizado la función DSUM, pero ha sid muy complicado para mi el comprenderla.
Al mismo tiempo, esto fue solo por concepto de comida, pero igual hay otros 8 diferentes conceptos que de igual modo deseo irlos sumando al momento de la captura en el formulario.
Una vez logrado esto, viene la segunda parte.
Al mismo tiempo, dentro de este mismo formulario, tengo otro subformulario llamado "ORDEN DE VIAJE", la cual ya capturado por ejemplo:
Folio de Orden de Viaje = 0001
Concepto = Comida
Monto = 100
Concepto = Hotel
Monto = 200
Estos montos ya son fijos, entonces, deseo que cuando el usuario inicie la carga del detalle del REPORTE DE VIAJE, vaya sumando los conceptos de comida pero al mismo tiempo comparando que la suma de dichos montos no sean mayores al de la ORDEN DE VIAJE por concepto de comida. Es decir:
Reporte de Viaje=Monto_Comida no sea mayor que Orden de Viaje=Monto_Comida
Aquí te dejo parte del código que he diseñado, pero al momento no me esta funcionando como quisiera, y me urge, ya que es parte de mi trabajo diario.
Private Sub Monto_Validado_AfterUpdate()
Dim var0 As Currency
Dim var2 As Currency
Dim subt As Currency
var0 = DSum("[Monto_Validado]", "Catalogo_Viaticos_OV_RV_Detalle", "ID_Catalogo_Viaticos_OV_RV =" & Me.ID_Catalogo_Viaticos_OV_RV)
var2 = IIf(Forms!Catalogo_Viaticos_RV_Principal.Form!Catalogo_Viaticos_RV_OV_Detalle!Concepto.Value = "Comida", Forms!Catalogo_Viaticos_RV_Principal.Form!Catalogo_Viaticos_RV_OV_Detalle!Monto.Value, 0)
subt = var2 - var0
Monto_Validado = subt
If subt < 0 Then
MsgBox "El monto del RV excede al monto de la OV"
Else
End If
If Concepto.Value = "Comida" Then
If Forms!Catalogo_Viaticos_RV_Principal.Form!Catalogo_Viaticos_RV_OV_Detalle!Concepto.Value = "Comida" And Forms!Catalogo_Viaticos_RV_Principal.Form!Catalogo_Viaticos_RV_OV_Detalle!Monto.Value < Monto_Validado.Value Then
MsgBox "El Monto Validado NO puede ser mayor al monto de la Orden de Viaje"
Monto_Validado = 0
Else
End If
End If
End Sub

1 respuesta

Respuesta
Sin probarlo mucho te recomiendo que la comparación la hagas al final. Es decir, primero ocúpate sólo de sumar los Montos y guardarlos en campos.
Una vez tengas los valores, en el botón que realice la validación haz la comparación de si el valor es igual o menor.
Lo mejor siempre es evitar complejidades y hacerlo paso a paso. Primero asegúrate de que calculas bien, y los datos se suman, y luego haz la validación.
Eso, o lanza una consulta directamente que acceda a la tabla y vaya sumando los montos, pero para eso tendrás que haberlo guardado en la tabla.
Otra opción es conforma vas haciendo la inserción de los montos, ir haciendo la suma en un campo y realizando la comprobación con el campo máximo definido
Ok, ¿pero tu me podrías asesorar con el código para indicarle a un campo que sume dichos valores? Porque como te explique, el DSUM no funcionó bien, y es ahí donde viene mi complicación primordial. Todo consejo de código que tengas me será muy útil. Y Mil gracias, realmente que ando bloqueado, y cualquier sugerencia de códigos serán de utilidad.
Dentro del propio subformulario, si todos son del mismo tipo (comida), puedes crear un campo con valor =SUMA(monto).
Otra opción sencilla es crear una consulta aparte, en la que ya defines la consulta concreta:
SELECT Sum(viaje.monto) FROM viaje WHERE viaje.concepto="Comida"
Y asignas este valor a un campo del formulario, o lo insertas en un subformulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas