Referencia al resultado de fila anterior en consulta Access

Primera vez que escribo aquí y les agradecería mucho que me pudieran ayudar ya que algo sé sobre Access pero estoy muy lejos de ser experto.

Necesito hacer una consulta (ConsultaRemanente) que calcule la diferencia entre dos campos para el mes 1 (TotalCreditos-TotalDebitos) y solo si el resultado es positivo, utilizarla diferencia en el mes 2 para sumarla con los Créditos del mes 2.

Estoy probando con lo siguiente pero no funciona:

RemanenteMes: SiInm(([TotalCreditos]>[TotalDebitos]);([TotalCreditos]-[Debitos]);(0))  **Para obtener diferencia**

RemanenteAnt: DBúsq("RemanenteMes";"ConsultaRemanente";"[Mes]=Mes-1")  **Para traer la diferencia de la linea anterior **

TotalCreditos: ([CreditosMes]+[RemanenteAnt]) ** Para sumar la diferencia del mes 1 a los datos del mes 2 y así sucesivamente del 2 al 3 etc.**

Al ejecutar la consulta me dice aparece el mensaje "La expresión que ha especificado como parámetro de la consulta produjo el error 'Microsoft Access no encuentra el nombre 'RemanenteMes' que ha especificado en la expresión'

Al parecer la función DBusq no trabaja dentro de consultas, solamente en tablas, pero no se me ocurre otra forma de buscar un valor dentro de una misma consulta. Si alguno de ustedes me pudiera orientar me ayudarían un montón.

2 respuestas

Respuesta
2

La función DBusq() sí funciona con consultas, el problema es que no trabaja bien con campos calculados dentro de la misma consulta.

Se me ocurre que pruebes de estas dos formas:

1º/ Haz la consulta en dos pasos, es decir, haces primero una consulta en la que calculas el remanenteMes, y con el resto de los campos, y luego, sobre esta primera consulta, haces la definitiva en la que además de todos los campos calculas el remanenteAnt y el Total.

2º/ En al consulta tal como la tienes ahora, sustituye dentro de la función DBusq() el nombre RemanenteMes por la expresión que usas para calcularlo.

Alternativamente, tendrías otra forma, que sería crear una función pública en un módulo independiente y la uses en tu consulta. Algo así (suponiendo que remanente sea de tipo moneda):

Public Function fncRemanenteAnterior(elMes as Integer) as Currency

fncRemanenteAnterior= DLookUp("RemanenteMes","ConsultaRemanente","[Mes]="elMes-1)

End Function

Y luego en la consulta:

RemanenteAnt: fncRemanenteAnterior([Mes])

Un saludo.


Un nuevo foro de access, visítanos: http://nksvaccessolutions.com/Foro/ 

En el primer caso, he intentado hacerlo de forma separada, pero la primera consulta necesita tener el dato calculado en la segunda, por lo que me resulta imposible.

En el segunda caso, al sustituir me arroja el mensaje de referencia circular causada por TotalCreditos.

Y en la función pública, Visual Basic me dice que hay un error de sintaxis (quizás por el uso de las comillas "")

Dejo una captura hecha en Excel de lo que necesito por si lo quieres revisar.

Gracias por tu tiempo. Saludos!

La función tiene un error de sintaxis, y para el caso de que no haya un remanente anterior, hay que darle un valor 0.

Prueba así:

Public Function fncRemanenteAnterior(elMes as Integer) as Currency

fncRemanenteAnterior= Nz(DLookUp("RemanenteMes","ConsultaRemanente","[Mes]=" & elMes-1),0)

End Function

Hola,

Hice la corrección y aun no he logrado conseguir que RemanenteAnt tome el valor del calculo hecho por RemanenteMes de la fila inmediatamente anterior. Te agradezco!

Pues no sé por qué, porque funcionar funciona: http://www.filebig.net/files/TpnPJSsZYY 

Con la misma tabla que pones del excel y la función, se puede hacer la misma consulta con los mismos valores que al del excel

¡Gracias! 

Genio! Realmente no sé que estaba haciendo mal yo, pero es exactamente lo que necesitaba. Te agradezco un millón.

Respuesta
1

Si lo que quieres es que el remanente sólo aumente cuando el balance es positivo, puedes crear una consulta, ordenada por meses, con Débitos, créditos y poner un campo

Remanente: (select sum(nz([debitos])-nz([creditos]))from [nombredelatabla] as temp where [temp].[mes]<=[mov].[mes] and [Debitos]>[creditos])

Pruébala

No me resulta, al ejecutar me dice "Desconocido" millones de veces :( no sé que estoy haciendo mal.

Quiero que la consulta acumule créditos (los débitos no los acumulo), por lo tanto si créditos > débitos arrastre la diferencia al mes siguiente y súmelo con los créditos del segundo mes. Posteriormente si los créditos (del mes 2 + el remanente del mes 1) > débitos, calcule la nueva la diferencia y llévela al mes 3 para sumarla a los créditos del mes 3.

Cuando los débitos > créditos, la diferencia que se arrastrará al mes siguiente será 0

Te agradezco el tiempo y disposición.

En Excel funciona, pero quisiera integrarlo a mi base de datos.

Saludos

Si quieres, para que no se vea tu correo, mándame un mensaje a [email protected] y te mando un ejemplo, creo que es lo mejor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas