Conocer el ultimo numero existente dentro de una relación de registros

Tengo una tabla que contiene diferentes series de registros.

La tabla contiene estos campos:

Fecha Movimiento - Serie Ventas - Importe

    18-02-2021          BV23138            3,68

    15-03-2021            FG23146          67,98

    31-03-2021            FG2319            12,10

    18-06-2021            BV23146            3,68

    15-09-2021            BV23148        125.69

         ----------                    --------                 ------

Contiene diferentes números de serie que son los dos primeros caracteres.

Si pido buscar la serie BV desde el mes de Junio he de conocer que el ultimo registro anterior que se ha realizado en esta serie corresponde a: 18/02/2021 / BV23138 / 3,68

Existen varias numeraciones de líneas de venta que cada una se va registrando en función del tipo de transacción.

Existen vacíos entre los números de serie puede que no exista el numero de serie anterior y que puedan haber varias ventas inexistentes como indico en el ejemplo.

2 Respuestas

Respuesta
1

Le preparé este ejemplo, consta de una función a nivel de módulo 1 tabla y 2 formularios.

TABLA

Formulario y subformulario

Ingreso la fecha de corte y las 2 letras de la serie.

CÓDIGO DE LA FUNCIÓN

Option Compare Database
Option Explicit
Public pfecha As Date
Public pserie As String
Public pimporte As Double
Public Function datosform(mfecha As Date, mserie As String) As String
 On Error Resume Next
 Dim rs As Recordset
 Dim strSQl As String
 Dim strFecha As String
 strFecha = "#" & Format(mfecha, "mm/dd/yyyy") & "#"
  strSQl = "SELECT Last(tblmovtos.FechaMovimiento) AS ULTIMO" & vbCrLf
  strSQl = strSQl & "           , First(tblmovtos.SerieVentas) AS SERIE" & vbCrLf
  strSQl = strSQl & "           , First(tblmovtos.importe) AS IMPORTE" & vbCrLf
  strSQl = strSQl & "        FROM tblmovtos" & vbCrLf
  strSQl = strSQl & "       WHERE tblmovtos.FechaMovimiento<" & strFecha & vbCrLf
  strSQl = strSQl & "         AND Left([SerieVentas],2)='" & UCase(mserie) & "'"
 Set rs = CurrentDb.OpenRecordset(strSQl)
 pfecha = rs.Fields("ULTIMO")
 pserie = rs.Fields("SERIE")
 pimporte = rs.Fields("IMPORTE")
 rs.Close
 Set rs = Nothing
  strSQl = "SELECT tblmovtos.id AS SIGUIENTES" & vbCrLf
  strSQl = strSQl & "           , tblmovtos.FechaMovimiento AS ULTIMO" & vbCrLf
  strSQl = strSQl & "           , tblmovtos.SerieVentas AS SERIE" & vbCrLf
  strSQl = strSQl & "           , tblmovtos.importe" & vbCrLf
  strSQl = strSQl & "        FROM tblmovtos" & vbCrLf
  strSQl = strSQl & "       WHERE tblmovtos.FechaMovimiento>=#" & Format(pfecha, "mm/dd/yyyy") & "#" & vbCrLf
  strSQl = strSQl & "         AND tblmovtos.FechaMovimiento<=#" & Format(mfecha, "mm/dd/yyyy") & "#" & vbCrLf
  strSQl = strSQl & "         AND Left([SerieVentas],2)='" & mserie & "'" & vbCrLf
  strSQl = strSQl & "    ORDER BY tblmovtos.FechaMovimiento;"
 datosform = strSQl
End Function

Observe que utilizo 3 variables públicas para almacenar la información del último registro que es anterior a la fecha de corte. (Claro que se puede abreviar con base en un cuadro combinado),

Como ya tengo la fecha hago la siguiente consulta a partir del registro a esta fecha. La función retorna el SQL origen del subformulario. Como dice un sabio de TodoExpertos hay "mil formas" de hacerlo.

Si quiere el ejemplo puede solicitarlo a [email protected]

Respuesta
1

Hacerlo es muy sencillo. Lo que de verdad importa es donde quieres verlo, como quieres verlo y que es lo que debe mostrar. Por ejemplo, tengo la tabla como la tuya, sólo que en el primer registro le he puesto un importe que "se ve" más.

Y en un formulario cualquiera( de ahí mis preguntas) le pongo un combinado y un cuadro de texto llamado UltimoReg.

En el combinado voy a elegir una fecha( ya que no sé si quieres elegirlo como mm/aaaa, etc.) con los 2 primeros dígitos de la serieventas

Selecciono el registro de Junio y 

En este caso, pero ya te digo que sería muy conveniente que precisaras, en el evento Después de Actualizar del combinado ElegirMes le tengo puesto

Private Sub ElegirMes_AfterUpdate()
UltimoReg = DLast("importe", "tabla2", "fechamovimiento<#" & Me.ElegirMes & "# and left([serieventas],2)='" & Me.ElegirMes.Column(1) & "'")
End Sub

Necesito que me saque el ultimo registro realizado:

Fecha - Serie - Importe

Es un Diario Contable en el cual ha de sacar la ultimo Movimiento realizado en la serie solicitada y a continuación sacara todos los registros desde la Fecha a la Fecha solicitada.

El registro anterior que busco esta en los campos indicados esta fuera del Form continuo. Solo tiene que mostrarlo para comprobar los movimientos.

Y a continuación con un formulario continuo son mostrados todos los movimientos de la serie de venta.

Si necesitas más información dímelo y te la mando.

Jobe, sigue en pie la pregunta. ¿Quieres ver, por ejemplo, le fecha en un cuadro de Texto, la serie en otro, y el importe en otro, o, por ejemplo, en un mismo cuadro de texto que te muestra Fecha &" "&Serie&" "& Importe.

De todas formas, como ésta página ya no avisa de las "repreguntas", si quieres, repito, si quieres, podemos seguir la conversación en [email protected] 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas