cancel
Showing results for 
Search instead for 
Did you mean: 

Solicitado VS Transferido

former_member220991
Participant
0 Kudos

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 un solicitud y las personas de materia prima se las envían bajo una solicitud y transferencia de stock.

estoy realizando una consulta que me mande un comparativo de estas solicitudes y trasferencias

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 un 50% ya que si me manda lo que me interesa saber pero pasa lo siguiente al momento de el resultado final

este es mi tabla resultado

NumeroDocumento de SolicitudArticuloCantidad SolicitadaDocumento de trasladoArticuloCantidad TrasladadaEstatusFecha de Solicitud
0176BJS7-57969-A900.000000NULLRFX9Y72ADX1209680.000000Abierto2015-08-22 00:00:00.000
1176RFX9Y72ADX1209195.30000011352RFX9Y72ADX1209680.000000Cerrado2015-08-22 00:00:00.000
2176T1G0580058A005900.000000NULLRFX9Y72ADX1209680.000000Abierto2015-08-22 00:00:00.000
3176THG0150050010A900.000000NULLRFX9Y72ADX1209680.000000Abierto

2015-08-22 00:00:00.000

si se dan cuente en el campo Articulo me repite este articulo RFX9Y72ADX1209 que es el único que sea entregado y en Cantidad Trasladada me manda la misma cantidad para todos los artículos que es la cantidad de articulo entregado.


esto es lo que yo requiero


NumeroDocumento de SolicitudArticuloCantidad SolicitadaDocumento de trasladoArticuloCantidad TrasladadaEstatusFecha de Solicitud
0176BJS7-57969-A900.000000NULLBJS7-57969-A0.000000Abierto2015-08-22 00:00:00.000
1176RFX9Y72ADX1209195.30000011352RFX9Y72ADX1209680.000000Cerrado2015-08-22 00:00:00.000
2176T1G0580058A005900.000000NULLT1G0580058A0050.000000Abierto2015-08-22 00:00:00.000
3176THG0150050010A900.000000NULLTHG0150050010A0.000000Abierto2015-08-22 00:00:00.000

de igual forma que el usuario pueda poner un rango de fechas o de numero de documento

Accepted Solutions (0)

Answers (2)

Answers (2)

bfierro
Active Participant
0 Kudos

Hola Antonino prueba el código siguiente y lo puedes modificar según requieras.

SELECT

T1.LineNum AS 'Numero',T0.DocNum as 'Documento de Solicitud',T1.ItemCode AS 'Articulo',T1.Quantity AS 'Cantidad Solicitada',

T1.TrgetEntry As 'Documento de traslado',T2.itemcode AS 'Articulo',

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

former_member220991
Participant
0 Kudos

ok gracias por sus comentario lo reviso y les comento que tal de igual forma yo lo realice de esta forma

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 'Codigo',wtq1.Quantity AS 'Cantidad Solicitada',

OWTQ.DocDate AS 'Fecha de Solicitud',WTQ1.TrgetEntry As 'Documento de traslado',WTR1.itemcode AS 'Codigo',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 exacto lo que yo requiero pero me hace lo esencial que necesito saber

felipe_loyolarodriguez
Active Contributor
0 Kudos

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