Problemas con decimales en formulario.

En el formulario que estoy creando tengo esta instrucción con decimales y no consigo que haga bien la operación

Esta es una parte

Me.TotalAPagar = Round(Nz(Me.TotalPrincipal) + Round(Nz(Me.RecargoDeApremio) + Round(Nz(Me.InteresesDeDemora) + Round(Nz(Me.CostasDeProcedimiento)))))

y esta otra

Me.TotalAPagar = Me.TotalPrincipal + Me.RecargoDeApremio + Me.InteresesDeDemora + Me.CostasDeProcedimiento

El resultado que da al sumar unas cantidades es 1069.07 con esta cantidad no funciona y en cambio pruebo con esta y si funciona 1033.01

Si alguien sabe la solución

1 respuesta

Respuesta
3

Por partes, si los cuadros de texto Totalapagar, totalprincipal, etc están en el formulario no hace falta que le pongas el me.

Por otro lado, deberías ponerlo como

Me.TotalAPagar = Round(Nz(Me.TotalPrincipal)) + Round(Nz(Me.RecargoDeApremio)) + Round(Nz(Me.InteresesDeDemora)) + Round(Nz(Me.CostasDeProcedimiento))

O también podrías ponerlo como

totalapagar=round(nz([totalprincipal])+nz([recargodeapremio])+nz([interesesdedemora])+nz([costasdeprocedimiento])

Por último, ¿podrías poner un ejemplo de la suma que te debe dar 1069.07 y 1033.01?

Es que si pones los campos origen de los controles como, por ejemplo, moneda y decimales 0, ya te redondea al número entero. Lo mismo, si lo pones como número. Y si le pones, que tenga dos decimales, aunque el resultado de una operación sea 7 decimales, te lo redondea a 2

esto es la suma de cantidades

este el resultado

esto las entregas

y este el resultado T.A Pagar menos las entregas

como puedes ver cuando pones el cursor en el te marca un montón de decimales.

este es el resultado sin el cursor

este es el resultado que marca la etiqueta 

cuando tendría que marcar esto

Gracias.

Al no saber como llegas a esos datos, voy a suponer. Supongamos que tengo un formulario con subformulario. Si a medida que voy poniendo entregas, llego a igualar el total a pagar

Por el contrario, si las supero

El código del subformulario es, pero para este caso en particular, ya que como dije antes, no sé como lo "rellenas" y, personalmente, lo haría de otra forma

Private Sub Entregas_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
TotalEntregas = DSum("entregas", "tabla1", "idcliente=" & Me.IdCliente & "")
If TotalEntregas = DLookup("totalpagar", "tabla1", "idcliente=" & Me.IdCliente & "") Then
Me.Parent!Pagado.Visible = True
ElseIf TotalEntregas > DLookup("totalpagar", "tabla1", "idcliente=" & Me.IdCliente & "") Then
Me.Parent!Demas.Visible = True
End If
End Sub
Private Sub TotalPagar_GotFocus()
TotalPagar = Nz([TotalPrincipal]) + Nz([Recargo]) + Nz([Costes]) + Nz([Intereses])
End Sub

Todo son formularios

este entro los datos

aquí las entregas

aquí el resultado de T.A pagar - Total Entregas

y esta es la etiqueta donde dice si esta pagado, pendiente, etc.

en las entregas al perder enfoque esto

Private Sub Importe_LostFocus()
Me.Requery
Me.Parent.TotalEntregas = Me.SumaEntregas
Me.Parent.Pendiente = Me.Parent.TotalAPagar - Me.Parent.TotalEntregas
Me.Parent.Refresh
MsgBox "El Importe Pendiente es de : " & (Nz(Me.Parent.Pendiente))
Me.Parent.TotalEntregas.SetFocus
Call Me.Parent.ColorSegunValor
End Sub

 i al recibir enfoque en el Total Entregas esto

Private Sub TotalEntregas_GotFocus()
Call ColorSegunValor
End Sub

Me.TotalAPagar = Me.TotalPrincipal + Me.RecargoDeApremio + Me.InteresesDeDemora + Me.CostasDeProcedimiento

If Me.Pendiente = 0 Then
Me.EtiPagado.Caption = "IMPORTE PAGADO"
Me.EtiPagado.BackColor = 52582 'verde
Me.FacturaPagadaSiNo = True
Me.EtiPagos.Caption = "(Total Entregas) es igual a (Total A Pagar)"
Me.EtiPagos.BackColor = 52582 'verde
Me.EtiPagos.ForeColor = 0 'negro
Me.Etiqueta90.BackColor = 52582 'verde
Me.Etiqueta91.BackColor = 52582 'verde
End If

If Me.TotalEntregas < Me.TotalAPagar Then
Me.EtiPagado.Caption = "IMPORTE PENDIENTE DE PAGAR"
Me.EtiPagado.BackColor = 255 'rojo
Me.FacturaPagadaSiNo = False
Me.EtiPagos.Caption = "(Total Entregas) es menor a (Total A Pagar)"
Me.EtiPagos.BackColor = 255 'rojo
Me.EtiPagos.ForeColor = 0 'negro
Me.Etiqueta90.BackColor = 255 'rojo
Me.Etiqueta91.BackColor = 255 'rojo
End If

If Me.TotalEntregas > Me.TotalAPagar Then
Me.EtiPagado.Caption = "IMPORTE PAGADO Entregas de más"
Me.EtiPagado.BackColor = 16741960
Me.FacturaPagadaSiNo = False
Me.EtiPagos.Caption = "(Total Entregas) es mayor a (Total A Pagar)"
Me.EtiPagos.BackColor = 16741960
Me.EtiPagos.ForeColor = 0 'negro
Me.Etiqueta90.BackColor = 16741960
Me.Etiqueta91.BackColor = 16741960
End If

If Me.TotalEntregas > Me.TotalAPagar Then
Me.FacturaPagadaSiNo = True
Me.FacturaPendienteSiNo = False
End If

If Me.TotalEntregas < Me.TotalAPagar Then
Me.FacturaPagadaSiNo = False
Me.FacturaPendienteSiNo = True
End If

End Sub

Tengo que decirte que no tengo muchos conocimientos en access.

Saludos.

Daniel, no es necesario que el cursor llegue al control pendiente. Es más, yo lo pondría como bloqueado. Las operaciones las haría, por ejemplo, a medida que fuera poniendo Entregas en el subformulario. Por otro lado, no te extrañe que te muestre muchos decimales. Por ejemplo, en una operación le digo que me divida 7 entre 3, el resultado sería

2,333333333333333333333333333333333333 o más dependiendo de si el campo es simple o doble

Puedo decirle que me lo "muestre" redondeado a 2 decimales, con lo que me pondría

2,33

Pero al convertir ese control en el control activo me muestra su valor real(el de arriba) pero al perder el enfoque vuelve al valor de abajo.

De todas formas, si quieres, repito, si quieres, mándame una copia con dos o tres registros inventados a [email protected] y la miro. Si lo haces, en el asunto del mensaje pon tu alias Daniel, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas