Redondeo Altruista

Byleto estoy haciendo una aplicación en Access 2003 por necesidad para mi tienda se poco de Access y menos aun de código y tengo una cuestión aver si se puede hacer:
Resulta que quiero hacer como las tiendas grandes, es decir que piden a sus clientes redondear sus centavos para donarlos a causas de bien social: Niños huérfanos, con Cáncer, etc.
En el formulario principal tengo los siguientes textbox: Importe, Efectivo, Cambio, Redondeo. Todos funcionan como se supone: Importe recibe el dato del SubForm, en Efectivo dígito la cantidad de dinero con la que paga el cliente y Cambio es la Resta de Efectivo e Importe, hasta aquí todo bien.
Bueno lo que necesito es:
Que al recibir el enfoque el textbox:Importe
1.- Si el Importe es un Número cuyos decimales sean .00 entonces no redondear el Importe porque no tiene centavos. Ej. 10.00 = 10.00
2.- Si el Importe es un Número cuyos decimales son mayores que .01 y menores que .49; entonces redondear los decimales a .50 ej. 10.01 = 10.50, 10.49 = 10.50
3.- Si el Importe es un Número cuyos decimales son mayores que .51 y menores que .99; entonces redondear los decimales al siguiente Entero ej. 10.51 = 11.00, 10.99 = 11.00
4.- Todavía no redondear en los hechos pues hace falta recibir el Efectivo del Cliente, una vez digitado el Efectivo y si procede el redondeo: Mostrar un cuadro de mensaje donde aparezcan: a) El Importe a redondear, el Importe ya redondeado y los centavos que se van a redondear; con los botones Si No y Cancelar.
Si selecciona Si, Redondear el Importe, restarlo al Efectivo y mostrar la diferencia en el Cambio. Si selecciona No cerrar el cuadro de mensaje y no hacer cambios y si selecciona cancelar cerrar el cuadro de mensaje y regresar el enfoque al textbox Importe.
Perdón se que es mucho pedir.

2 Respuestas

Respuesta
1
¿No te funcionó la respuesta de fozzie que recibiste hace 2 días en mvp-access.com?
A esto se le llama crossposting ... y se considera una falta de respeto porque los que acostumbran a responder preguntas en un sitio, también lo hacen en otros más. Y también se acaba por huir de ese tipo de gente que cuelga la misma pregunta en varios foros.
Xavi
Hola, Xavi
Gracias por la aclaración.
Para ser sincero no sabia que era lo del crossposting, y si me sirvió lo de fozzie, lo estoy usando aunque parcialmente pues no era exactamente lo que necesitaba, fozzie es un gran programador y lo que hace son como perlas: resumido pero sorprendente y tubo la amabilidad de darme un seguimiento. Pienso que buscar y pedir más de una opinión en otro foro (todavez que solo lo he hecho con fozzie y aquí y no en muchos más foros) no debería de ofender (y si ofendí a alguien, pido mil disculpas repito no es mi intención faltar al respeto sino pedir una ayuda u orientación)
Pero que pasa si por cualquier razón, la ayuda que alguien te dio no es exactamente como la necesitabas ¿buscarías la ayuda de alguien más?
Bueno Xavi, no quiero dejar pasar la ocasión para felicitarte porque veo que eres una gran persona, muy sensible con los que apenas empezamos, y te tomas el tiempo para explicar con gran detalle "como en la escuela" el cómo y el porqué de las cosas, lo que otros apenas escriben tres renglones tu das toda una cátedra, y ejemplos, y enlaces; para mi eso te hace especial y no es adulación es mi corazón el que lo escribe.
Cuidate mucho, que estés bien y muchas gracias por corregirme.
P.D. Espero esto no resulte en una negación.
Perdón por la demora en responder pero estuve fuera de vacaciones unos días.
¿Entiendo qué lo tienes solucionado? (es que me aparece como pendiente...)
Hola Xavi,
Perdón a mi también se me pasó, y si ya se solucionó gracias por tu interés. Espero hallan sido buenas vacaciones,
Saludos.
Respuesta
1
Lo que pides no es algo tan complicado, dame tiempo te lo tendré listo pronto, creo que hoy no podre pero en esta semana lo resolvemos.
Buena iniciativa la de las donaciones te felicito.
Muy amable, gracias por tu interés.
Estaré pendiente...
Termine tu código!, a continuación te lo envío
Private Sub Efectivo_AfterUpdate()
Dim redondeado As Double
Dim mensaje1, mensaje2 As String
Dim valormsg As Integer
If (Me.Importe - Int(Me.Importe) = 0#) Then
Exit Sub
End If
redondeado = Me.Importe
If (redondeado - Int(redondeado) > 0#) And (redondeado - Int(redondeado) < 0.5) Then
    redondeado = Int(redondeado) + 0.5
Else
    redondeado = Int(redondeado) + 1
End If
mensaje1 = "Importe= " & Me.Importe & ", Importe redondeado= " & redondeado & ", "
mensaje2 = "Centavos redondeados=" & redondeado - Me.Importe
valormsg = MsgBox("¿Desea redondear el importe?" & vbCr & mensaje1 & vbCr & mensaje2 _
    , vbQuestion + vbYesNoCancel, "Redondear Centavos")
If valormsg = 6 Then
    Me.Redondeo = redondeado - Me.Importe
    Me.Importe = redondeado
    Me.Cambio = Me.Efectivo - Me.Importe
Else
    If valormsg = 7 Then
        Me.Cambio = Me.Efectivo - Me.Importe
        Me.Redondeo = 0
    Else
        Me.Importe.SetFocus
    End If
End If
End Sub
¡¡¡¡¡¡¡¡  W O O O O O W W W W W W W W   !!!!!!!!!!!!!!!
ERES LO MÁXIMO, TODO ESTUVO SIMPLEMENTE P E R F E C T O.
Gracias a ti mucha gente se beneficiará, estoy emocionado funciona tal cual
Te lo pedí eres un gran programador, muchas felicidades...
M U C H I S I M A S       G R A C I A S!!!!!!!!!!!!!!!!
P.D. Cuidate mucho.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas