Poner en Informe el valor de un campo del primer y ultimo registro de un formulario continuo filtrado por rango de fechas.

En un formulario continuo que depende de la tabla "T_Contabiidad" se van anotando todos los movimientos contables (Ingresos, Gastos y saldo.) La idea es que al filtrar los registros del formulario continuo por rango de fechas,, nos ponga el saldo que había al inicio del periodo y el que hay al final del mismo.

Agradecería que algún experto me orientase acerca de como hacerlo.

2 respuestas

Respuesta
1

Puede obtener los saldos de varias formas:

1Con una consulta SQL

2 Con Dfirst("Saldo","T_Contabilidad","fecha Beteewn

3. Clonando el formulario

Le dejo esta idea. Con las opciones 2 y 3

Formulario con el salo inicial

FORMULARIO CON EL SALDO FINAL

En el formulario están 2 veces los saldos, uno para el cálculo con Dfirst() y DLast() y el segundo, clonando el formulario.

CÓDIGO DEL BOTÓN VER SALDO

Private Sub btnCalcular_Click()
' I - FORMA - Con funciones de agregado
  Dim strAux As String
  If Me.fdesde < Me.fhasta Then
   strAux = "fecha_rec Between " & "#" & Format(Me.fdesde, "mm/dd/yyyy") & "#" & " AND " & "#" & Format(Me.fhasta, "mm/dd/yyyy") & "#"
   Me.Filter = strAux
   Me.FilterOn = True
    Me.ctlInicial = DFirst("[monto]", "T_Contabilidad", strAux)
    Me.ctlFinal = DLast("[monto]", "T_Contabilidad", strAux)
  End If
'II - FORMA - Clonando el formulario
  Dim miRS As Recordset
  Set miRS = Me.RecordsetClone
  miRS.MoveFirst
  Me.ctlsaldoIn2 = Me.monto
  miRS.MoveLast
  Me.ctlsaldofin2 = Me.monto
End Sub

Esta es una idea, puede mejorarla.

Tenga presente si no hay un ID o número consecutivo cuando hay registros de la misma fecha pueden existir incoherencias.

Respuesta
1

Vamos por partes. Dices de un informe. Por otro lado hablas de ingresos y gastos en un formulario continuo.

Si tengo la tabla Movimientos con FechaMov, Ingresos, gastos y Saldos y construyo un informe como el de la imagen

En el cuadro de texto texto11 que es el de Saldo Inicial, le pongo como origen de control el propio campo Saldo, ya que me cogerá el primero de ese período.

Desde el formulario Movimientos, donde voy recogiendo los mismos

Los cuadros de texto donde voy a escribir el intervalo se llaman FInicial y Ffinal. Escribo unas fechas y se abre el informe en ese intervalo.

En el caso del formulario le tengo puesto en el evento Después de actualizar del cuadro de texto FFinal

Private Sub FFinal_AfterUpdate()
If Not IsNull([FInicial]) Then
DoCmd.OpenReport "Movimientos", acPreview, , "fechamov between #" & Me.FInicial & "# and #" & Me.FFinal & "#"
End If
End Sub

Y en el evento Al dar formato de la sección donde esté el cuadro de texto Saldo Final(texto15), que en el ejemplo está en el encabezado, le pongo

Private Sub EncabezadoDelInforme_Format(Cancel As Integer, FormatCount As Integer)
Texto15 = DLast("saldo", "movimientos", "fechamov between forms!movimientos!finicial and forms!movimientos!ffinal")
End Sub

Porque el formulario Movimientos está abierto ya que desde él, abro el informe.

Amigo, se me plantea una cuestión.

Cuando filtro un periodo entre fechas, me saca como saldo inicial, el valor del campo  saldo nicial del primer registro. Y como saldo final el valor del saldo del último registro. Hasta ahí, todo perfecto, pero al contrastar el informe de un periodo, con el informe del periodo siguiente, no coinciden los saldos final de uno, con el inicial del otro.

Esto es debido a que el saldo va cambiando a medida que se van incrementando registros. Me gustaría saber cómo puedo sacar en el informe, si ello es posible, el valor del saldo que había en el último registro del periodo anterior.

GRACIAS.

José María, al no saber como son las tablas, y como tengo tu correo, te mando un ejemplo y si quieres, sobre él hablamos.

Julián perdona mi retrenteeaso, he tenido un día socialmente complicado, tú ya me entiendes 

Pues si, te agradecía ese ejemplo

Te lo envié a tu dirección de email

Enviado a

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas