cancel
Showing results for 
Search instead for 
Did you mean: 

Saldo de Inventario Filtrado por Cliente y # de Lotes

Former Member
0 Kudos

Buenos Días

Consultores de SAP B1

Actualmente la empresa amplio una nueva linea de producto el cual todo sus articulo manejan # de lote en base a esto se crearon 2 almacenes, el primer almacen es el principal donde se reciben la mercancia y el segundo almacen se denomina en consignacion ya que estos articulos se transfieren a los clientes ( Hospitales )

Para proceder a transferir los articulos del almacen principal al almacen en consignación establecemos el siguiente requisito :

Se genera o se crea una llamada de servicio en el modulo de Servicio el cual se le relaciona el cliente y la tarjeta de equipo de cliente que tambien reposa en cliente en este caso como por ejemplo puede ser una maquina de soda.

Dentro de llamada de servicios ingresamos a la parte donde se denomina Costos - Detalle de los Gastos desde aqui generamos un documento nuevo que puede ser :

Transferencia

Entrega

Retorno de Transferencia

Devolucion en Ventas

Facturacion

Nota de Credito

Ya efectuado todas estas operaciones para el cliente y asignado a la bodega de consignación utilizando las tablas de lotes OIBT y IBT1, como puedo hacer para que me recupere la información de la siguiente manera

Producto - # de Lote , # de Vencimiento, Cliente A , Cliente B, Cliente C, Ciente D, Cliente E, Total

Soda AZS1 31/12/2011 20 20 20 20 20 100 Sodas en Consignación.

Agradezco por todo su apoyo.

Saludos Cordiales.

Accepted Solutions (0)

Answers (3)

Answers (3)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola

Bueno, con este query deberias poder filtrar por fecha en SAP

Solo fataria que filtres los clientes que son hospitales y los tipos de movimientos


DECLARE @TOP INT, @F_INI DATETIME, @F_FIN DATETIME
SET @TOP=(SELECT TOP 1 A.TransId FROM [dbo].[JDT1] A WHERE A.RefDate>='[%0]' AND A.RefDate<='[%1]')
SET @F_INI='[%0]'
SET @F_FIN='[%1]'

DECLARE @pvt_table NVARCHAR(MAX)
SELECT @pvt_table = COALESCE(@pvt_table + ',[' + CardCode + ']', '[' + CardCode + ']')
FROM OCRD
WHERE CardType = 'C'

DECLARE @Pvt NVARCHAR(MAX)
SET @Pvt = 
	N'
	SELECT *
	FROM (	SELECT Y1.ItemCode AS Codigo , A1.ItemName AS Nombre_Item, Y2.ExpDate AS Fecha_Venc,Y1.BatchNum AS #Lote, Y1.WhsCode AS Almacen, A2.WhsName AS Nombre_Almacen, Y1.CardCode,
			ISNULL((SELECT SUM(X.Quantity) FROM IBT1 X WHERE X.ItemCode=Y1.ItemCode AND X.BatchNum=Y1.BatchNum AND X.WhsCode=Y1.WhsCode AND X.CardCode=Y1.CardCode AND X.Direction != 1),0)-ISNULL((SELECT SUM(X.Quantity) FROM IBT1 X WHERE X.ItemCode=Y1.ItemCode AND X.BatchNum=Y1.BatchNum AND X.WhsCode=Y1.WhsCode AND X.CardCode=Y1.CardCode AND X.Direction=1),0) AS Quantity
			FROM IBT1 Y1
			INNER JOIN OITM A1 ON A1.ItemCode=Y1.ItemCode
			INNER JOIN OWHS A2 ON A2.WhsCode=Y1.WhsCode
			INNER JOIN OIBT Y2 ON Y2.BatchNum=Y1.BatchNum AND Y2.ItemCode=Y1.ItemCode
			WHERE (Y1.DocDate>=(@INI) AND Y1.DocDate<=(@FIN))
			) AS A
	PIVOT (
	SUM(Quantity)
	FOR CardCode IN ('+ @pvt_table +')
	) AS Pvt
	'

EXEC sp_executesql @pvt, N'@pvt_table NVARCHAR(MAX), @INI DATETIME, @FIN DATETIME',@pvt_table, @F_INI, @F_FIN

Saludos y espero te sirva

Former Member
0 Kudos

Estimados Amigos

Soy nuevo en esto de los querys y bueno tengo una consulta hecha con el asistente. Ya tengo los campos y las tablas que quiero filtrar. Sin embargo no logro crear un filtro para busqueda por socio de negocios y por fecha para esa consulta

lo que tengo armado es lo siguiente:

SELECT T0.[CardCode] AS 'Código SN', T0.[CardName] AS 'Nombre de socio de negocios', T1.[DocNum] AS 'Número de documento', T1.[U_Paciente] AS 'Nombre del Paciente', T1.[U_CIPaciente] AS 'Cédula del Paciente', T1.[U_CAval] AS 'Carta Aval' FROM  [dbo].[OCRD] T0   FULL OUTER  JOIN [dbo].[OINV] T1  ON  T1.[CardCode] = T0.[CardCode]  AND  T1.[CardCode] = T0.[CardCode]  AND  T1.[CardCode] = T0.[CardCode]   WHERE T1.[U_CAval] IS NOT NULL

Agradeciendo altamente su ayuda

Saludos

Juan

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola

Prueba este query


DECLARE @PIVOT_TABLE NVARCHAR(MAX)
SELECT @PIVOT_TABLE = COALESCE(@PIVOT_TABLE + ',[' + CardCode + ']', '[' + CardCode + ']')
FROM OCRD
 
DECLARE @PIVOTSQL NVARCHAR(MAX)
SET @PIVOTSQL = N'SELECT *
			FROM (	SELECT Y1.ItemCode AS Codigo , A1.ItemName AS Nombre_Item, Y2.ExpDate AS Fecha_Venc,Y1.BatchNum AS #Lote, Y1.WhsCode AS Almacen, A2.WhsName AS Nombre_Almacen, Y1.CardCode,
				ISNULL((SELECT SUM(X.Quantity) FROM IBT1 X WHERE X.ItemCode=Y1.ItemCode AND X.BatchNum=Y1.BatchNum AND X.WhsCode=Y1.WhsCode AND X.CardCode=Y1.CardCode AND X.Direction != 1),0)-ISNULL((SELECT SUM(X.Quantity) FROM IBT1 X WHERE X.ItemCode=Y1.ItemCode AND X.BatchNum=Y1.BatchNum AND X.WhsCode=Y1.WhsCode AND X.CardCode=Y1.CardCode AND X.Direction=1),0) AS Quantity
				FROM IBT1 Y1
				INNER JOIN OITM A1 ON A1.ItemCode=Y1.ItemCode
				INNER JOIN OWHS A2 ON A2.WhsCode=Y1.WhsCode
				INNER JOIN OIBT Y2 ON Y2.BatchNum=Y1.BatchNum AND Y2.ItemCode=Y1.ItemCode
				) AS A
		PIVOT (
		SUM(Quantity)
		FOR CardCode
		IN ('+ @PIVOT_TABLE +')
		) AS Pvt
		' 
EXECUTE (@PIVOTSQL)

Te sugiero lo siguiente.

Si los Hospitales ya los tienes definidos en algun grupo, Agrega el filtro en esta parte, un ejemplo


DECLARE @PIVOT_TABLE NVARCHAR(MAX)
SELECT @PIVOT_TABLE = COALESCE(@PIVOT_TABLE + ',[' + CardName + ']', '[' + CardName + ']')
FROM OCRD
WHERE GroupCode = 110 /*Suponiendo que este sea el grupo de los hospitales*/
AND
CardName LIKE '%Hospital%' /*Suponiendo que todos tuviesen la palabra hospital en el nombre del SN*/

Y si no, agrega algun filtro con el que puedas identificar solo los hospitales

Ojala te sirva

Saludos

Edited by: Floyola on Aug 11, 2011 4:06 PM

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola

Creo que todos los datos que necesitas estan en las tablas OINM, OIBT e IBT1.

Lo primero es llegar al saldo del almacen y de los articulos usando esas tablas.

Producto - # de Lote - TotalStock

Luego de eso, podrias usar un PIVOT para sumar las cantidades de entradas y salidas por Cliente, filtrando por los tipos de objecto de los documentos que mencionaste.

En realidad se ve bastante desarrollo para el query...mmm

Atte.