Avalados por :

Generando un comparativo de solicitudes y transferencias en SAP B1: consulta SQL y resultados detallados

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 7 Vistas
0
Loading...

Buenas tardes, soy nuevo en SAP B1. Mi proceso para solicitar materia prima es mediante solicitudes de transferencia, donde la gente de producción realiza una solicitud y las personas de materia prima se encargan de enviarla bajo una solicitud y transferencia de stock.

Estoy realizando una consulta que me genere un comparativo de estas solicitudes y transferencias.

Esta es mi consulta:

select WTQ1.LineNum AS 'Numero', OWTQ.DocNum as 'Documento de Solicitud', WTQ1.ItemCode AS 'Articulo', wtq1.Quantity AS 'Cantidad Solicitada', WTQ1.TrgetEntry As 'Documento de traslado', WTR1.itemcode AS 'Articulo', WTR1.quantity AS 'Cantidad Trasladada',

CASE

WTQ1.LineStatus

When 'O'

then 'Abierto'

when 'C'

then 'Cerrado'

else 'NULL'

end  AS 'Estatus', OWTQ.DocDate AS 'Fecha de Solicitud'

from OWTR INNER JOIN WTR1 on OWTR.DocEntry = WTR1.DocEntry

INNER JOIN OWTQ ON WTR1.BaseEntry = OWTQ.DocEntry

INNER JOIN WTQ1 ON OWTQ.DocEntry = WTQ1.DocEntry

WHERE OWTQ.DocNum = '[%0]' and OWTQ.DocNum < '1000001' and OWTR.DocDate BETWEEN '[%0]' and '[%1]'

La consulta funciona en un 50%, ya que me muestra lo que necesito saber, pero al finalizar el resultado final

Esta es mi tabla de resultados:

Numero Documento de Solicitud Articulo Cantidad Solicitada Documento de traslado Articulo Cantidad Trasladada Estatus Fecha de Solicitud
0 176 BJS7-57969-A 900.000000 NULL RFX9Y72ADX1209 680.000000 Abierto 2015-08-22 00:00:00.000

Si observas en el campo "Articulo", se repite el mismo artículo "RFX9Y72ADX1209", que es el único entregado, y en "Cantidad Trasladada" muestra la misma cantidad para todos los artículos, que es la cantidad del artículo entregado.

Esto es lo que necesito:

Numero Documento de Solicitud Articulo Cantidad Solicitada Documento de traslado Articulo Cantidad Trasladada Estatus Fecha de Solicitud

Además, necesito que el usuario pueda ingresar un rango de fechas o un número de documento.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

3 Respuestas

0
Loading...

Buenas tardes

Prueba la siguiente query


select 
     A.DocNum [Nro Sol]
    ,A.DocDate [Fecha Sol]
    ,B.ItemCode [Item]
    ,B.Quantity [Cant Sol]
    ,isnull((select distinct count(A1.DocEntry) from WTR1 A1 inner join OWTR A2 on A1.DocEntry=A2.DocEntry where A1.BaseEntry=A.DocEntry and A2.CANCELED='N'),0) [Nro de Traslados]
    ,isnull((select sum(A1.Quantity) from WTR1 A1 inner join OWTR A2 on A1.DocEntry=A2.DocEntry where A1.BaseEntry=A.DocEntry and A1.BaseLine=B.LineNum and A2.CANCELED='N'),0) [Cantidad Trasladada]

from OWTQ A
inner join WTQ1 B on A.DocEntry=B.DocEntry

No solo debes unir el BaseEntry, también el BaseLine ya que SAP usa ese método en las relaciones entre documentos.

Además debes considerar que existe la posibilidad que una solicitud tenga mas de 1 transferencia y por lo tanto si haces JOINS entre las tablas se

duplicará la información cuando traes datos de las transferencias.

Saludos

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Loading...

Ok, gracias por sus comentarios. Lo reviso y les comento qué tal. De igual forma, lo realicé de esta manera.

DECLARE @i DATETIME, @f DATETIME

SET @i=(/*SELECT TOP 1 A.DocDate FROM OWTR A WHERE A.DocDate=*/'[%0]')

SET @f=(/*SELECT TOP 1 A.DocDate FROM OWTR A WHERE A.DocDate=*/'[%1]')

SELECT OWTQ.DocNum AS 'Documento de Solicitud', WTQ1.ItemCode AS 'Código', WTQ1.Quantity AS 'Cantidad Solicitada',

OWTQ.DocDate AS 'Fecha de Solicitud', WTQ1.TrgetEntry AS 'Documento de traslado', WTR1.ItemCode AS 'Código', WTR1.Quantity

AS 'Cantidad Trasladada',

CASE

WTQ1.LineStatus

WHEN 'O'

THEN 'Abierto'

WHEN 'C'

THEN 'Cerrado'

ELSE 'NULL'

END  AS 'Estatus', OWTR.DocDate AS 'Fecha Entregada'

FROM OWTR INNER JOIN WTR1 ON OWTR.DocEntry = WTR1.DocEntry

INNER JOIN OWTQ ON WTR1.BaseEntry = OWTQ.DocEntry

INNER JOIN WTQ1 ON OWTQ.DocEntry = WTQ1.DocEntry

WHERE WTQ1.LineNum = WTR1.BaseLine AND OWTR.DocDate BETWEEN @i AND @f

No es exactamente lo que requiero, pero me proporciona la información esencial que necesito saber.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Loading...

Hola Antonino, prueba el siguiente código y modifícalo según tus necesidades.

SELECT

T1.LineNum AS 'Número', T0.DocNum AS 'Documento de Solicitud', T1.ItemCode AS 'Artículo', T1.Quantity AS 'Cantidad Solicitada',

T1.TrgetEntry AS 'Documento de Traslado', T2.ItemCode AS 'Artículo',

T2.Quantity AS 'Cantidad Trasladada',

CASE

T1.LineStatus

WHEN 'O'

THEN 'Abierto'

WHEN 'C'

THEN 'Cerrado'

ELSE 'NULL'

END AS 'Estatus', T0.DocDate AS 'Fecha de Solicitud'

FROM OWTQ T0

INNER JOIN WTQ1 T1 ON T0.DocEntry = T1.DocEntry

INNER JOIN WTR1 T2 ON T1.DocEntry = T2.BaseEntry AND T1.DocEntry = T2.BaseRef AND T1.LineNum = T2.BaseLine

INNER JOIN OWTR T3 ON T3.DocEntry = T2.DocEntry

WHERE T0.DOCNUM = 1

Saludos

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?