on 08-24-2015 10:29 PM
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
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 |
1 | 176 | RFX9Y72ADX1209 | 195.300000 | 11352 | RFX9Y72ADX1209 | 680.000000 | Cerrado | 2015-08-22 00:00:00.000 |
2 | 176 | T1G0580058A005 | 900.000000 | NULL | RFX9Y72ADX1209 | 680.000000 | Abierto | 2015-08-22 00:00:00.000 |
3 | 176 | THG0150050010A | 900.000000 | NULL | RFX9Y72ADX1209 | 680.000000 | Abierto | 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
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 | BJS7-57969-A | 0.000000 | Abierto | 2015-08-22 00:00:00.000 |
1 | 176 | RFX9Y72ADX1209 | 195.300000 | 11352 | RFX9Y72ADX1209 | 680.000000 | Cerrado | 2015-08-22 00:00:00.000 |
2 | 176 | T1G0580058A005 | 900.000000 | NULL | T1G0580058A005 | 0.000000 | Abierto | 2015-08-22 00:00:00.000 |
3 | 176 | THG0150050010A | 900.000000 | NULL | THG0150050010A | 0.000000 | Abierto | 2015-08-22 00:00:00.000 |
de igual forma que el usuario pueda poner un rango de fechas o de numero de documento
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
95 | |
11 | |
11 | |
6 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.