Problema al querer mostrar cantidad del producto en Stock

Necesito que al cargar el producto o su código, talle y color, antes de colocar la cantidad que sale me diga cual es la cantidad existente. He intentado con varias alternativas un sql pero he visto que no abre consultas solo actualiza, inserta o borra. Lo último, he intentado con un cuadro combinado, basado en una consulta cuyos parámetros son los anteriores. Me dá el resultado, pero debo desplegar el cuadro y la idea es que aparezca automáticamente.

2 Respuestas

Respuesta
3

En este ejemplo de Neckkito Nck puedes ver una posible forma de hacerlo: http://goo.gl/DUIc2V

El ejemplo está pensado para que te avise si intentas sacar más unidades de las que hay, pero lo puedes adaptar fácilmente para que te muestre las existencias en todo momento.

Gracias Sveinbjorn El Rojo, estuve mirando tu ejemplo y básicamente es eso. Solo que lo que necesito es que en la sección "Salidas", al cargar una nueva salida de un producto, me diga en un cuadro de texto cuanto tengo en stock de ese producto. 

La forma más sencilla es usar la función DLookup para mostrar el valor, poniendola como origen del cuadro de texto. Si tienes un IdProducto, una consulta/tabla que te devuelva el stock, sería:

=DLookup("Cantidad","CStock","IdProducto"=[IdProducto])

es decir:

=DLookup("Campo a buscar","Tabla o Consulta", "Filtro")

Otras opciones serían buscar el valor por código y cargarlo en el cuadro de texto al añadir una salida, o como decía el compañero, hacer una función que te devuelva ese dato y asignarla al origen del control del cuadro de texto

¡Gracias! Veré como sigo a partir de esto.

Esto del DLookup lo había visto pero no sabía como aplicarlo porque tengo 3 criterios.

Adjunto una imagen para explicarme, tal vez un poco mejor.

Los criterios que tengo son Color y Talle y la idea sería que antes de cargar el cuadro "cantidad", dentro de ese círculo (por ejemplo), me diga cuanto me queda en stock de ese producto, talle y color.

Tengo una db que me agrupa todas las entradas y todas las salidas

No sé si estas aclaraciones, que debería haber hecho al principio, se puede conseguir algo más.

Gracias

El DLookUp lo puedes aplicar con los tres criterios sin problema, por ejemplo:

=DLookUp("Stock","CStock","CodProducto=" & [CodProducto] & " AND Talle='" & [Talle] & "' AND Color='" & [Color] & "'")

Gracias Sveinbjorn El Rojo y perdón por la insistencia.

En mi caso, coloqué un cuadro de texto, y en el Origen del control coloqué lo siguiente:

=DBúsq([Stock_Instant],[Stock],"CodProducto=" & [CodProducto] & " AND Talle=" & [Talle] & "' AND Color=" & [Color] & "'")

("Stock_Instant" es una consulta, basada en otra, que me agrupa las V y las C, además del Talle y Color para darme el Stock total)

El resultado que aparece es: #¿Nombre? 

Prueba así:

=DBúsq("[Stock_Instant]","[Stock]","CodProducto=" & [CodProducto] & " AND Talle='" & [Talle] & "' AND Color='" & [Color] & "'")

lo puse así, ahora no muestra #¿Nombre? queda transparente, pero al hacer click dentro del cuadro aparece #error.

Si ejecuto la consulta Stock_Instant por fuera el resultado es el correcto. O sea que el problema lo debo tener en el subformulario, supongo

¿Y así: 

=DBúsq([Stock_Instant],[Stock],"CodProducto=" & [CodProducto] & " AND Talle='" & [Talle] & "' AND Color='" & [Color] & "'")

¿

?

Si no tendría que ver tu BD para hacerle pruebas

Bueno, tampoco. Y ahora me fui empastando más agregándole un evento a talle. Pero me da error.

No tengo problema en pasarte la db. Me dirás como.

Súbela a dropbox o similar y me pones aquí el enlace de descarga

Ahí vá entonces

https://drive.google.com/folderview?id=0B8fJIVBp67T9fnRCZV8xRXdoaW13MEpaaVRGN0ZjLWR6WTY5NkM5VVctOHpoamthbEw3cjg&usp=sharing

Veamos... el dbúsq funciona perfectamente si abres directamente el subformulario como formulario, pero dentro del formulario principal como subformulario deja de funcionar y no consigo que ande de ninguna de las formas que probé (y ya no se me ocurren más)

Te planteo dos alternativas, que pasan por crear una función (la misma para las dos alternativas):

Alternativa 1: usar la función directamente en el origen de control del cuadro de texto. La puedes ver en el formulario Ventas Cabecera (le cambié el DBúsq por la fórmula)

Alternativa 2: crearte una consulta con los campos de la tabla VentasDetalle, añadirle un campo Stock con la fórmula, y usar esa nueva consulta como origen del subformulario en vez de directamente la tabla. Esto lo puedes ver en la consulta CVentasDetalle y los formularios Ventas Cabecera2 y VentasDetalle Subformulario2.

La ventaja de esta alternativa sobre la primera es que en el registro nuevo no te aparece #tipo# en el cuadro de texto.

La función la tienes en el módulo1.

http://www.filebig.net/files/PPrfSawSCg 

Respuesta
1

Yo haría una función que calcule la existencia tomando como parámetro el código del producto y en el formulario sobre el campo código, en el evento después de actualizar, mando llamar a la función y el resultado lo pongo en el control donde lo quieres ver.

¡Gracias! 

Gracias nuevamente Ismael González H. Algo así es lo que busco, el tema es que justamente no sé como empezar con eso.

Function Existencia_Producto(xAlmacen As Long, xCodigo As String)
Dim xEntradas As Long
Dim xSalidas As Long
Dim Ent As Recordset
Dim Sal As Recordset
Set Db = DBEngine(0)(0)
'Calcula las Entradas Procesadas
strSQL = "Select sum(Cantidad) as Tot_Entradas "
strSQL = strSQL & " From Entrada_Partida Ep, Entrada E"
strSQL = strSQL & " Where E.Entrada = Ep.Entrada"
strSQL = strSQL & " And E.ST_Entrada = 'Procesada'"
strSQL = strSQL & " And E.Almacen = " & xAlmacen
strSQL = strSQL & " And Ep.Codigo = '" & xCodigo & "'"
Set Ent = Db.OpenRecordset(strSQL)
If Ent.RecordCount > 0 Then
   xEntradas = notnull0(Ent!Tot_Entradas)
End If
'Calcula las Salidas Procesadas
strSQL = "Select sum(Cantidad) as Tot_Salidas "
strSQL = strSQL & " From Pedido_Producto Pp, Pedido P"
strSQL = strSQL & " Where P.NoPedido = Pp.NoPedido"
strSQL = strSQL & " And P.ST_Pedido = 'Procesado'"
strSQL = strSQL & " And Pp.Codigo = '" & xCodigo & "'"
Set Sal = Db.OpenRecordset(strSQL)
If Sal.RecordCount > 0 Then
   xSalidas = notnull0(Sal!Tot_Salidas)
End If
Existencia_Producto = xEntradas - xSalidas
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas