Números de serie y números de lote

Buenas tardes a todos

Hoy les traigo 2 vistas para recopilar información de los movimientos que tienen los números de serie y los números de lote en SAP Business One.

Partiremos con los lotes:

CREATE VIEW BatchNumber_Report
AS

SELECT DISTINCT
    T0.ItemCode AS Cod_Item,
    T0.ItemName AS Nombre_Item, 
    T0.BatchNum AS Lote,
    T0.WhsCode AS Almacen,
    CASE T1.Status
        WHEN 0 THEN 'Liberado'
        WHEN 1 THEN 'Acceso Denegado'
        WHEN 2 THEN 'Bloqueado'
    END AS Estado,
    T2.Quantity AS Cantidad,
    CASE T3.BaseType
        WHEN 13 THEN 'Factura Clientes'
        WHEN 14 THEN 'NC Clientes'
        WHEN 15 THEN 'Entrega'
        WHEN 16 THEN 'Devolucion'
        WHEN 18 THEN 'Factura Proveedor'
        WHEN 19 THEN 'NC Proveedores'
        WHEN 20 THEN 'Entrada mercaderia OP'
        WHEN 21 THEN 'Devolucion mercaderias'
        WHEN 59 THEN 'Entrada mercaderias'
        WHEN 60 THEN 'Salida de mercaderias'
        WHEN 67 THEN 'Traslado stock'
        ELSE CONVERT(NVARCHAR(5),T3.BaseType)
    END AS Documento,
    T3.BaseNum AS NroDocto,
    T4.TransId AS Asiento,
    T3.BaseLinNum AS Linea,
    T3.DocDate AS Fecha,
    T3.WhsCode AS Alm_Docto,
    T3.CardName AS IC,
    CASE T3.Direction
        WHEN 1 THEN T3.Quantity*-1
        ELSE T3.Quantity
    END AS Cant_Docto,
    CASE T3.Direction
        WHEN 1 THEN 'Salida'
        ELSE 'Entrada'
    END AS Sentido   

FROM OIBT T0
INNER JOIN OBTN T1 ON T1.ItemCode=T0.ItemCode AND T1.DistNumber=T0.BatchNum
INNER JOIN OBTQ T2 ON T2.ItemCode=T1.ItemCode AND T2.SysNumber=T1.SysNumber
LEFT JOIN IBT1 T3 ON T3.ItemCode=T0.ItemCode AND T3.BatchNum=T0.BatchNum
LEFT JOIN JDT1 T4 ON T4.TransType=T3.BaseType AND T4.BaseRef=T3.BaseNum AND T4.CreatedBy=T3.BaseEntry

GO

Esta vista, contiene todas las operaciones que tienen que ver con los lotes.
Luego con una select a la vista, podemos obtener el saldo del inventario de los artículos y sus lotes o realizar un reporte de entradas y salida por articulo y lotes en Crystal Reports, va en la creatividad de cada uno.

SELECT DISTINCT
	T0.Cod_Item,
	T0.Nombre_Item,
	T0.Lote,
	T0.Estado,
	T0.Cantidad

FROM BatchNumber_Report T0
WHERE T0.Cantidad>0
UNION ALL
SELECT DISTINCT
	T0.Cod_Item,
	T0.Nombre_Item,
	'Z Total ' + T0.Cod_Item,
	'',
	SUM(T0.Cantidad)

FROM BatchNumber_Report T0
WHERE T0.Cantidad>0
GROUP BY T0.Cod_Item, T0.Nombre_Item, T0.Cantidad
ORDER BY 1,3

Ahora compararemos lo que dice el reporte de auditoria de stock y lo que entrega el resultado de la query:
ScreenShot275

Ahora haré lo mismo pero con los números de serie, la vista:

CREATE VIEW SerialNumber_Report 
AS

SELECT DISTINCT
    T0.ItemCode AS Cod_Item,
    T0.ItemName AS Nombre_Item, 
    T0.IntrSerial AS Serie,
    T0.WhsCode AS Almacen,
    CASE T0.Status
        WHEN 0 THEN 'Disponible'
        WHEN 1 THEN 'No disponible'
        WHEN 2 THEN 'Imputado'
    END AS Estado,
    T2.Quantity AS Cantidad,
    CASE T3.BaseType
        WHEN 13 THEN 'Factura Clientes'
        WHEN 14 THEN 'NC Clientes'
        WHEN 15 THEN 'Entrega'
        WHEN 16 THEN 'Devolucion'
        WHEN 18 THEN 'Factura Proveedor'
        WHEN 19 THEN 'NC Proveedores'
        WHEN 20 THEN 'Entrada mercaderia OP'
        WHEN 21 THEN 'Devolucion mercaderias'
        WHEN 59 THEN 'Entrada mercaderias'
        WHEN 60 THEN 'Salida de mercaderias'
        WHEN 67 THEN 'Traslado stock'
        ELSE CONVERT(NVARCHAR(5),T3.BaseType)
    END AS Documento,
    T3.BaseNum AS NroDocto,
    T4.TransId AS Asiento,
    T3.BaseLinNum AS Linea,
    T3.DocDate AS Fecha,
    T3.WhsCode AS Alm_Docto,
    T3.CardName AS IC,
    CASE T3.Direction
        WHEN 1 THEN 'Salida'
        ELSE 'Entrada'
    END AS Sentido   

FROM OSRI T0
INNER JOIN OSRN T1 ON T1.ItemCode=T0.ItemCode AND T1.DistNumber=T0.IntrSerial
INNER JOIN OSRQ T2 ON T2.ItemCode=T1.ItemCode AND T2.SysNumber=T1.SysNumber
LEFT JOIN SRI1 T3 ON T3.ItemCode=T0.ItemCode AND T3.SysSerial=T1.SysNumber
LEFT JOIN JDT1 T4 ON T4.TransType=T3.BaseType AND T4.BaseRef=T3.BaseNum AND T4.CreatedBy=T3.BaseEntry

GO

El query:

SELECT DISTINCT
	T0.Cod_Item,
	T0.Nombre_Item,
	T0.Serie,
	T0.Estado,
	T0.Cantidad

FROM SerialNumber_Report T0
WHERE T0.Cantidad>0
UNION ALL
SELECT DISTINCT
	T0.Cod_Item,
	T0.Nombre_Item,
	'Z Total ' + T0.Cod_Item,
	'',
	SUM(T0.Cantidad)

FROM SerialNumber_Report T0
WHERE T0.Cantidad>0
GROUP BY T0.Cod_Item, T0.Nombre_Item, T0.Cantidad
ORDER BY 1,3

Y por ultimo, la comparación
ScreenShot276 ScreenShot277

Bueno, eso es todo.
Espero les haya gustado

También te podría gustar...

17 Respuestas

  1. Leonel S dice:

    Buenas Tardes

    Felipe gracias por el query me dio una luz para una auditoria donde me solicitaban exactamente la información que muestra el query.

  2. darius dice:

    Estoy tratando de agregar ubicaciones a este reporte y no lo consigo, como deberia hacerlo???
    Desde ya Muchas gracias, el query esta genial

  3. Alvaro dice:

    Hola Felipe (Loyola).
    Mi problema es distinto. La forma que conozco para ingresar números de serie de un pedido de compras por la MIGO sólo me permite ingresarlos de 6 en 6. Supongo debe haber una forma masiva de hacerlo. Puede ayudarme, por favor?

  4. Marcelo PA dice:

    Hola Felipe, estoy intentando hacer un reporte con la vista de numeros de serie que dio, pero no logro tomar unicamente los que son utilizados en una orden de traslado. Conoce alguna manera para hacerlo?
    Adjunto pongo el query que tengo de momento

    SELECT DISTINCT T0.ItemCode, T0.IntrSerial, T3.DocNum, T3.DocDate FROM
    dbo.OSRI T0
    LEFT JOIN dbo.SRI1 T1 ON T1.ItemCode = T0.ItemCode
    LEFT JOIN dbo.OSRN T2 ON T2.ItemCode = T0.ItemCode
    LEFT JOIN dbo.OWTR T3 ON T3.DocNum = T1.BaseNum
    WHERE
    T1.Direction = 1 AND
    T3.DocEntry = 40574
    ORDER BY 1, 3, 2, 4 DESC;

    Saludos

    • Marcelo PA dice:

      Solucionado

      SELECT DISTINCT
      T0.BaseLinNum AS ‘Linea’, T0.ItemCode, T0.ItemName,
      1 AS ‘Quantity’, T2.MnfSerial AS ‘Número de Serie’,
      CASE T0.ExpDate WHEN ’01/01/1900′ THEN » ELSE T0.ExpDate END AS ‘ExpDate’, T3.WhsCode AS ‘Almacen’, T6.WhsName,
      CASE T3.Direction WHEN 1 THEN ‘Salida’ELSE ‘Entrada’ END as Sentido
      FROM
      OSRI T0
      INNER JOIN OSRN T2 ON T2.ItemCode = T0.ItemCode AND T2.SysNumber= T0.SysSerial
      LEFT JOIN SRI1 T3 ON T3.ItemCode=T0.ItemCode AND T3.SysSerial=T2.SysNumber
      INNER JOIN OWTR T5 ON T5.DocNum = T3.BaseNum
      LEFT JOIN OWHS T6 ON T6.WhsCode = T3.WhsCode
      WHERE
      T3.Direction = 1 AND
      T5.DocEntry = 40575 AND
      T0.IntrSerial !=»;

      Ese sería el query

  5. Manuel dice:

    Hola.

    Si tenemos ubicaciones para los lotes, ¿como quedaría la consulta para ver de que ubicación se cogio?

    Un saludo y muchas gracias

  6. sandra dice:

    hola felipe

    Quisiera solicitar una ayuda de sap, sobre una busqueda formeteada
    cuando se hace la entrada de mercaderia por compras,
    que cuando pida el lote que la busqueda formeteada traiga
    codigo del articulo + numero de orden de compra

    podria hacerse una busqueda asi ??

    gracias felipe

    • Es bastante difícil lo que pides, pero si quieres traer el resultado de otra ventana de SAP hacía la OC, es imposible por BF, las BF solo leen la información que está en el formulario de pantalla, con excepción de cuando el documento ya está creado en la base de datos, en ese caso puedes consultar las tablas.

  7. Diego Hernandez dice:

    Buenas tardes Felipe,

    Tu reporte esta perfecto, pero ahora estoy tratando de sacar un reporte de las ventas de cierto articulo con numero de serie, en tu reporte quisiera agregaar que solo me muestre las ventas restandole las notas de credito pero no he logrado hacerlo.

    Saludos.

  8. Frank dice:

    gracias por los aportes, tengo una consulta puntual, cual es el vinculo o enlace que hay entre las facturas o creditos fiscales con el documento de entrega, sucede que desde las facturas no puedo ver el lote al que pertenece un producto, pero si desde el documento de entrega.
    Saludos

    • Buenas tardes, lamento la tardia respuesta pero estaba muy corto de tiempo.

      Respondiendo su consulta, los vinculos se encuentran a nivel de detalle, campos (BaseEntry, BaseType, BaseLine — En la factura).

      Saludos

  9. Me parece excelente el ejemplo de las vistas, lo voy a tomar muy en cuenta para elaborar nuevas consultas y nuevos informes.

    Te lo agradezco Felipe Loyola.

  10. fco.calderon dice:

    Muy buen aporte, gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.