Avalados por :

Gerando uma comparação de solicitações e transferências no SAP B1: consulta SQL e resultados detalhados

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 4 Vistas
0
Cargando...

Boa tarde, sou novo no SAP B1. Meu processo para solicitar matéria-prima é através de solicitações de transferência, onde a equipe de produção faz uma solicitação e as pessoas de matéria-prima são responsáveis por enviá-la sob uma solicitação e transferência de estoque.

Estou fazendo uma consulta que me gera um comparativo dessas solicitações e transferências.

Esta é a minha consulta:

select WTQ1.LineNum AS 'Número', OWTQ.DocNum as 'Documento de Solicitação', WTQ1.ItemCode AS 'Artigo', wtq1.Quantity AS 'Quantidade Solicitada', WTQ1.TrgetEntry As 'Documento de transferência', WTR1.itemcode AS 'Artigo', WTR1.quantity AS 'Quantidade Transferida',

CASE

WTQ1.LineStatus

When 'O'

then 'Aberto'

when 'C'

then 'Fechado'

else 'NULO'

end  AS 'Status', OWTQ.DocDate AS 'Data da Solicitação'

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]'

A consulta funciona em 50%, pois me mostra o que eu preciso saber, mas no final do resultado final

Esta é a minha tabela de resultados:

Número Documento de Solicitação Artigo Quantidade Solicitada Documento de transferência Artigo Quantidade Transferida Status Data da Solicitação
0 176 BJS7-57969-A 900.000000 NULO RFX9Y72ADX1209 680.000000 Aberto 2015-08-22 00:00:00.000

Se observar no campo "Artigo", o mesmo artigo "RFX9Y72ADX1209" se repete, que é o único entregue, e em "Quantidade Transferida" mostra a mesma quantidade para todos os artigos, que é a quantidade do artigo entregue.

Isso é o que eu preciso:

Número Documento de Solicitação Artigo Quantidade Solicitada Documento de transferência Artigo Quantidade Transferida Status Data da Solicitação

Além disso, preciso que o usuário possa inserir um intervalo de datas ou um número de documento.

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

3 Respuestas

0
Cargando...

Boa tarde

Teste a seguinte consulta


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

Não só deve unir o BaseEntry, mas também o BaseLine, já que o SAP usa esse método nas relações entre documentos.

Além disso, deve considerar que existe a possibilidade de uma solicitação ter mais de 1 transferência e, portanto, se fizer JOINS entre as tabelas, a informação será duplicada ao trazer dados das transferências.

Saudações

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

Ok, obrigado pelos seus comentários. Vou revisar e informar como está. Da mesma forma, fiz dessa maneira.

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 Solicitação', WTQ1.ItemCode AS 'Código', WTQ1.Quantity AS 'Quantidade Solicitada',

OWTQ.DocDate AS 'Data de Solicitação', WTQ1.TrgetEntry AS 'Documento de transferência', WTR1.ItemCode AS 'Código', WTR1.Quantity

AS 'Quantidade Transferida',

CASE

WTQ1.LineStatus

WHEN 'O'

THEN 'Aberto'

WHEN 'C'

THEN 'Fechado'

ELSE 'NULL'

END† AS 'Status', OWTR.DocDate AS 'Data Entregue'

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

Não é exatamente o que preciso, mas fornece as informações essenciais que eu preciso saber.

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

Olá Antonino, experimente o seguinte código e modifique conforme suas necessidades.

SELECT

T1.LineNum AS 'Número', T0.DocNum AS 'Documento de Solicitação', T1.ItemCode AS 'Artigo', T1.Quantity AS 'Quantidade Solicitada',

T1.TrgetEntry AS 'Documento de Transferência', T2.ItemCode AS 'Artigo',

T2.Quantity AS 'Quantidade Transferida',

CASE

T1.LineStatus

WHEN 'O'

THEN 'Aberto'

WHEN 'C'

THEN 'Fechado'

ELSE 'NULL'

END AS 'Status', T0.DocDate AS 'Data de Solicitação'

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

Saudações

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?