Fraccionar una cantidad de varias formas

Hace un tiempo que no me pongo en contacto con vosotros, aunque si consulto, con mucha frecuencia, las respuestas que constantemente estáis dando.

Veréis. Estoy haciendo un BD en acces 2016, para una empresa que permite a sus clientes fraccionar sus pagos. Lo que pretendo es que en el registro de la tabla donde aparece la venta figure también el fraccionamiento de forma que si es un pago semestral aparezca la mitad en dos campos, si trimestral un tercio en cada de los tres campos, y así en cuatro campo para el pago cuatrimestral o en 12 en el caso del mansual. He intentado funciones Silnm anidadas como esta, en la tabla, en cada uno de los 12 campos:

SiInm([NUMPAGOSAÑO]=1;[BENEFICIONET];SiInm([NUMPAGOSAÑO]=2;([BENEFICIONET]/2);SiInm([NUMPAGOSAÑO]=3;([BENEFICIONET]/3);SiInm([NUMPAGOSAÑO]=4;([BENEFICIONET]/4);SiInm([NUMPAGOSAÑO]=12;([BENEFICIONET]/12);0))))).

Lo que intento hacer, y no consigo, es que si el pago es semestral se rellenen solo dos campo y asímismo 3, 4 o 12, porque con lo que estoy haciendo se rrellenan los doce, con la cantidad correcta. Os agradeceriía profundamente vuestra ayuda.

1 respuesta

Respuesta
1

No dices la estructura de la tabla, por lo que haré una suposición: tienes un campo Beneficionet donde registras el importe total de la venta, y 12 campos (Pago1, Pago2... Pago12) para registrar los pagos parciales.

Además, supondré que los datos los metes a través de un formulario y no directamente en la tabla.

En el Evento "Después de actualizar" del campo "NumPagosAño" de tu formulario, le generas este código:

Dim elImporte as Currency

Dim numPagos as Integer

Dim i As Integer

elImporte=Nz(Me.BeneficioNet,0)

numPagos=Nz(Me.NumPagosAño,0)

'Si alguno de los dos campos está vacío, no haces nada

If elImporte=0 Or numPagos=0 Then Exit Sub

For i=1 To numPagos

Me.Controls("Pago" & i)=elImporte/numPagos

Next i

Y en el evento "Depués de actualizar" del campo BeneficioNet le pones el mismo código.

Si lo quieres hacer directamente en la tabla, tendrás que crear un campo calculado para cada campo de pago parcial, siguiendo lo que se explica en este ejemplo: http://siliconproject.com.ar/neckkito/index.php/97-ejemplos-explicados/ejemplos-especiales/305-campos-calculados-en-tabla

Ante todo muchísimas gracias por tu rápida respuesta. A continuación pedirte disculpas por mi ignorancia. Al probarlo, con solo dos pagos, me funcionó, pero cuando le he añadido hasta 12, cuando pongo el nª de pagos, me salta el dichoso recuadrito "Se ha producido el error 438 en tiempo de ejecución: El objeto no admite esta propiedad o método. Y en el código de NUMPAGOSAÑO aparece resaltada en amarillo la línea Me.Controls("Pago"& i) = elImporte /numPagos. Es una pena que no se puedan adjuntar imágenes porque tengo hecha las dos capturas de pantalla. En fin creo que con esto tu sabrás, de sobra, que es lo que he hecho mal. Un cordial saludo y mi agradecimiento. Espero tu respuesta.

El error debe venir porque tus campos )más bien tus cuadros de texto del formulario) no se llaman Pago10, Pago11 y Pago12... si te funciona para valores inferiores.

No sabes lo que siento darte la murga, amigo Sveinbjorn, pero me he cerciorado del nombre de todos y cada uno de los cuadros de texto del formulario se llaman Pago1,Pago2, ect... Es más hasta a los campo de la tabla les he puesto el mismo nombre, con lo cual el origen del control de cada cuadro tiene el mismo nombre y sigue dando el mismo error que te describí anoche. Por probar, el campo NumPagosaño es un cuadro de lista y lo he cambiado a cuadro de edición y no ha cambiado el error.Te ruego un poquito de paciencia conmigo y que me pidas todos los detalles que quiera. Estoy a tu disposición. ¿Podría enviarte por algún medio las capturas de pantalla o, incluso la base de datos, lo que va hecho,? Aunque comprendo que eso sería abusar de tu amabilidad. Un salodo

Sube a dropbox, filebig o similar una copia de tu BD y ponme aquí el enlace de descarga.

O mándamela comprimida a [email protected]

Ya encontré el problema: no tienes un cuadro de texto que se llama Pago1 (el que sería el Pago1 se llama COBROANUAL o algo así) y tienes una etiqueta llamada Pago1, por eso te da el error de que el objeto no admite la propiedad.

La solución es muy simple:

1º/ Cambia el nombre a la etiqueta que pone Pago1 por el que quieras

2º/ Cambia el nombre al cuadro de texto que lleva el pago1 a Pago1

Te he modificado el código para que si bajas el número de pagos el resto te quede a 0:

Dim elImporte As Currency
Dim numPagos As Integer
Dim i As Integer
elImporte = Nz(Me.BENEFICIONET, 0)
numPagos = Nz(Me.NUMPAGOSAÑO, 0)
'Si alguno de los dos campos está vacío, no haces nada
If elImporte = 0 Or numPagos = 0 Then Exit Sub
For i = 1 To numPagos
    Me.Controls("Pago" & i) = elImporte / numPagos
Next i
For i = 12 To numPagos + 1 Step -1
    Me.Controls("Pago" & i) = 0
Next i

¡Gracias! ¡Muchísimas gracias! Si no fuera por personas sabías y generosas como tú no se sería de los ignorantes como yo. Un cordial saludo y ya sabes donde tienes un amigo.

Perdona, Sveinbjorn, pero después de ver el magnífico resultado de tu ayuda, he pensado si sería muy difícil poner fecha a cada uno de los pagos en función de la del pago1. Si consideras que es demasiado pedir te ruego me perdones y te quedo muy agradecido. Un saludo muy cordial

Lo podemos estudiar. Pero, si no te importa abre una nueva pregunta y explícame un poco cómo sería la distribución de las fechas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas