on 07-22-2013 10:17 PM
Buenas, escribo este posta para hacerles unas cuantas preguntas, estoy realizando un query en el cual tengo que mostrar las ordenes de compra con estado CANCELED = N y ademas tengo que mostrar que ordenes de compra (OPOR) tienen facturas de reserva de proveedores (OPCH) y tambien las que tienen entradas de mercancias (OPDN), he realizado el siguiente query:
SELECT
T0.[CardCode],
T0.[CardName],
T0.[DocNum],
T0.[DocDate],
T1.[WhsCode],
T1.[ItemCode],
T1.[Dscription],
T1.LineNum+1,
T1.[Quantity],
T1.[Currency],
T1.[PriceAfVAT],
T1.[Quantity]*T1.[PriceAfVAT] as "Total",
CASE WHEN T1.TargetType=18 then 'Fac. Prov.' else ' ' end 'Doc. Destino1',
CASE WHEN T3.TargetType = 20 THEN 'Entrada Merc.' else ' ' end 'Doc. Destino2'
FROM [dbo].[OPOR] T0 INNER JOIN [dbo].[POR1] T1 ON T0.DocEntry = T1.DocEntry INNER JOIN OPCH T2 ON T0.Docentry = T2.DocEntry INNER JOIN PCH1 T3 on T1.DocEntry = T3.Docentry
WHERE T0.[CardCode] =[%0]
and T0.[CANCELED] ='N'
and T1.LineStatus = 'C'
order by T0.DocNum asc
me despliega los resultados, pero no llega a mostrarme las entradas de mercancias. Cuando selecciono una orden de compra y veo el mapa de relaciones este documento tiene una factura de reserva de proveedores y tambien una entrada de mercancias, pero esto no se muestra en el resultado del query. Estoy utilizando el targettype 18 de la tabla POR1 y el targettype 20 de la PCH1 para hacer referencia a la factura y a la entrada de mercancias.
Si alguien podria ayudarme o darme algunos consejos de como podria resolver este problema.
Un saludo y muchas gracias por las respuestas.
PD: otra pregunta, cuando veo el mapa de relaciones, la factura de reserva de proveedores tiene relacion con la entrada de mercancias, pero de la factura salen dos flechas, una azul y otra amarilla, que significado tienen estas flechas??? Muchas gracias!!!
Hola Raul,
Cuando enlazas documentos de sap siempre debes tener en cuenta el document base y el documento destino estos 2 documentos se unen por las lineas y los campos que normalmente se usan son: BaseType, BaseEntry y BaseLine.
En tu caso tu deseas saber que Facturas y que Entradas estas relacionadas a las ordenes de compra no canceladas para un determinado proveedor, para eso puedes probar el siguiente codigo:
SELECT
T0.[CardCode],
T0.[CardName],
T0.[DocNum],
T0.[DocDate],
T1.[WhsCode],
T1.[ItemCode],
T1.[Dscription],
T1.LineNum+1 AS Linea,
T1.[Quantity],
T1.[Currency],
T1.[PriceAfVAT],
T1.[Quantity]*T1.[PriceAfVAT] as "Total",
'Doc Dest.' = CASE WHEN T3.OBJTYPE = '18' AND T3.ISINS = 'Y' THEN 'Fact. Reserva Prov.'
WHEN T3.OBJTYPE = '18' AND T3.ISINS = 'N' THEN 'Fact. Prov'
WHEN T5.OBJTYPE = '20' THEN 'Entrada Merc.'
ELSE NULL END,
'Num. Doc' = CASE WHEN T3.OBJTYPE = '18' THEN T3.DOCNUM
WHEN T5.OBJTYPE = '20' THEN T5.DOCNUM
ELSE NULL END
FROM OPOR T0
INNER JOIN POR1 T1 ON T0.DOCENTRY = T1.DOCENTRY
LEFT OUTER JOIN PCH1 T2 ON T2.BASEENTRY = T1.DOCENTRY AND T2.BASETYPE = T1.OBJTYPE AND T2.BASELINE = T1.LINENUM
LEFT OUTER JOIN OPCH T3 ON T2.DOCENTRY = T3.DOCENTRY
LEFT OUTER JOIN PDN1 T4 ON T4.BASEENTRY = T1.DOCENTRY AND T4.BASETYPE = T1.OBJTYPE AND T4.BASELINE = T1.LINENUM
LEFT OUTER JOIN OPDN T5 ON T4.DOCENTRY = T5.DOCENTRY
WHERE
T0.[CardCode] =[%0] AND
T0.[CANCELED] ='N' AND
T1.LineStatus = 'C'
ORDER
BY T0.DOCNUM ASC
Un punto importante es que si bien las Facturas de Proveedor y las Facturas de Reserva de Proveedor utilizan la misma table se diferencian a traves del campo IsIns. Si este campo es Y significa que es de Reserva y si es N significa que es una Factura convencional.
Con respecto a las flechas, la flecha azul indica relacion con otro documento y la amarilla indica que ha habido un pago.
Espero te sirva.
Saludos
Sebastian
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Muchísimas gracias!!! sebastian por la ayuda, no sabes cuando me ha ayudado tu respuesta, He revisado el query y le he agregado unas cuantas cosas mas para que despliegue el resultado que quiero.
El query quedo, hasta mientras, de la siguiente manera:
SELECT
T0.[CardCode],
T0.[CardName],
T0.[DocNum],
T0.[DocDate],
T1.[WhsCode],
T1.[ItemCode],
T1.[Dscription],
T1.LineNum+1 AS Linea,
T1.[Quantity],
T1.[Currency],
T1.[PriceAfVAT],
T1.[Quantity]*T1.[PriceAfVAT] as "Total",
'Doc Dest. 1' = CASE WHEN T3.OBJTYPE = '18' AND T3.ISINS = 'Y' THEN 'Fact. Reserva Prov.'
WHEN T3.OBJTYPE = '18' AND T3.ISINS = 'N' THEN 'Fact. Prov.'
WHEN T5.OBJTYPE = '20' THEN 'Entrada Merc.'
ELSE NULL END,
'Num. Doc' = CASE WHEN T3.OBJTYPE = '18' THEN T3.DOCNUM
WHEN T5.OBJTYPE = '20' THEN T5.DOCNUM
ELSE NULL END,
'Doc Dest. 2' = CASE WHEN T7.OBJTYPE = '19' THEN 'Nota de Credito'
WHEN T2.TARGETTYPE = '20' THEN 'Entrada Merc.'
WHEN T4.TARGETTYPE = '18' THEN 'Fac. Prov.'
WHEN T9.OBJTYPE = '21' THEN 'Devolucion de Merc.'
ELSE NULL END
FROM OPOR T0
INNER JOIN POR1 T1 ON T0.DOCENTRY = T1.DOCENTRY
LEFT OUTER JOIN PCH1 T2 ON T2.BASEENTRY = T1.DOCENTRY AND T2.BASETYPE = T1.OBJTYPE AND T2.BASELINE = T1.LINENUM
LEFT OUTER JOIN OPCH T3 ON T2.DOCENTRY = T3.DOCENTRY
LEFT OUTER JOIN PDN1 T4 ON T4.BASEENTRY = T1.DOCENTRY AND T4.BASETYPE = T1.OBJTYPE AND T4.BASELINE = T1.LINENUM
LEFT OUTER JOIN OPDN T5 ON T4.DOCENTRY = T5.DOCENTRY
LEFT OUTER JOIN RPC1 T6 ON T6.BASEENTRY = T2.DOCENTRY AND T6.BASETYPE = T2.OBJTYPE AND T6.BASELINE = T2.LINENUM
LEFT OUTER JOIN ORPC T7 ON T7.DOCENTRY = T6.DOCENTRY
LEFT OUTER JOIN RPD1 T8 ON T8.BASEENTRY = T4.DOCENTRY AND T8.BASETYPE = T4.OBJTYPE AND T8.BASELINE = T4.LINENUM
LEFT OUTER JOIN ORPD T9 ON T9.DOCENTRY = T8.DOCENTRY
WHERE
T0.[CardCode] =[%0] AND
T0.[CANCELED] ='N' AND
T1.LineStatus = 'C'
ORDER
BY T0.DOCNUM ASC
Sin embargo me falta todavia relacionar mas documentos, porque lo que me pidieron es que se despliegue todo el circuito, desde su inicio hasta su fin, un documento final puede ser, un pago efectuado, una nota de credito, un precio de entrega, etc.
lo que queria hacer ahora era relacionar la tabla IPF1 con la PDN1, pero no estoy seguro con que campos relacinarlos, trate con los que tu me mencionaste y nada, nose si solamente es relacionarlos con el DocEntry, es decir IPF1.DocEntry = PDN1.Docentry.
Otra pregunta mas , pueden existir documentos que no tengan relación? es decir que no tengan un BaseType o talvez un Targettype registrado? esto debido a que realizaron un "copiar a" o un "copiar de"? de ser verdad como podria tratar esos documentos?
Una vez mas muchísimas gracias por la ayuda, espero no te molestes por las preguntas, pero de verdad quiero aprender lo mas que pueda del SAP que es muy interesante y que me encanta!.
Un Saludo
Hola Raul,
Al incluir documentos de pagos en tu query es un poco mas complejo ya que existen varias tablas relacionadas al pago dependiendo del metodo de pago que utilices y de la informacion que deseas mostrar. Mientras mas tablas utilices mas complicado puede ser tratar de relacionarlas, si vas a incluir pagos te recomiendo que muestres informacion basica para no complicar el reporte.
En el caso de precio de entrega la logica es parecida, el documento destino es el precio de entrega y el documento base es la entrada de mercancia. Te recomiendo tratar de buscar siempre el objeto, el docentry y la linea cuando trates de enlazarlos. Por ejemplo, en este caso puedes usar el BaseType, BaseEntry y el BaseRowNum del precio de entrega.
Con respecto a tu otra pregunta, si, si pueden existir documentos que no tienen relacion y en esos casos los campos se llenan con -1. Para incluirlos puedes usar un union all, ya que actualmente tu query arroja datos basado solamente en la orden de compra.
Espero que sea de ayuda
Saludos
Sebastian
Hola Raul, en el segundo case tienes:
CASE WHEN T3.TargetType = 20 THEN 'Entrada Merc.' else ' ' end 'Doc. Destino2'
Estas usando T3.TargetType=20, pero el T3 en tu query es la Tabla PCH1, y el destino de la PCH1 no seria 20, cambia el T3.targetType por T1.targetType.
Saludos.
Alessandro.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Muchas Gracias por la respuesta Alessandro. tienes razón en la corrección, ya lo cambie, sin embargo necesito lo siguiente:
De una orden de compra puede ir a una Factura de Proveedores o a una entrada de mercancía, de la factura de proveedores puede ir a una Nota de Crédito y ahi terminaría el recorrido, pero si luego de la orden de compra viene la entrada de mercancía se puede generar una factura de proveedor.
Un posible recorrido puede ser:
OPOR -> OFCH -> OPDN -> OIPF
Otro recorrido puede ser:
OPOR -> OPDN -> OFCH -> OVPM
otra opcion puede ser:
OPOR -> OPDN -> ORPN
y asi puedo tener varias combinaciones, dependiendo si la compra fue por una importación o por una compra local.
Espero haberme explicado mejor y que se haya entendido lo que necesito hacer, espero me puedan ayudar, el ultimo query que he generado es el siguiente:
SELECT
T0.[CardCode],
T0.[CardName],
T0.[DocNum],
T1.LineNum+1 'Nro. de Linea',
T0.[DocDate],T1.[WhsCode],
T1.[ItemCode],
T1.[Dscription],
T1.[Quantity],
T1.[Currency],
T1.[PriceAfVAT],
T1.[Quantity]*T1.[PriceAfVAT] as "Total",
CASE WHEN T1.TargetType=18 then 'Fac. Prov.' when T1.TargetType=20 then 'Entrada Merc.' else ' ' end 'Doc. Destino1',
CASE WHEN T1.TargetType=18 AND T3.TargetType = 19 then 'Nota de Credito' else ' ' end 'Doc. Destino 1.1',
CASE WHEN T1.TargetType=18 AND T3.TargetType = 20 then 'Entrada Merc.' else ' ' end 'Doc. Destino 2',
CASE WHEN T1.TargetType=18 AND T3.TargetType = 20 AND T5.TargetType = 69 then 'Precio de Entrega' else ' ' end 'Doc. Destino 3',
CASE WHEN T1.TargetType=20 AND T5.TargetType = 69 then 'Precio de Entrega' else ' ' end 'Doc. Destino 1.2',
CASE WHEN T1.TargetType=20 AND T5.TargetType = 18 then 'Fac. Prov' else ' ' end 'Doc. Destino 2.1',
CASE WHEN T1.TargetType=20 AND T5.TargetType = 18 AND T3.TargetType = 19 then 'Nota de Credito' else ' ' end 'Doc. Destino 4',
CASE WHEN T1.TargetType=20 AND T5.TargetType = 18 AND T3.TargetType = 46 then 'Pago Efectuado' else ' ' end 'Doc. Destino 5'
FROM [dbo].[OPOR] T0 LEFT JOIN [dbo].[POR1] T1 ON T0.DocEntry = T1.DocEntry
LEFT JOIN PCH1 T3
on T0.DocEntry = T3.BaseEntry
and T1.LineNum=T3.BaseLine
and T1.ItemCode = T3.ItemCode
LEFT JOIN OPCH T4
ON T4.DocEntry = T3.DocEntry
LEFT JOIN PDN1 T5
ON T4.DocEntry = T5.BaseEntry
and T3.LineNum = T5.BaseLine
and T3.ItemCode = T5.ItemCode
LEFT JOIN OPDN T6
ON T5.DocEntry = T6.Docentry
LEFT JOIN RPD1 T7
ON T6.Docentry = T7.BaseEntry
and T5.LineNum = T7.BaseLine
and T5.ItemCode = t7.Itemcode
LEFT JOIN ORPD T8
ON T7.DocEntry = T8.Docentry
LEFT JOIN RPC1 T9
ON T8.Docentry = T9.BaseEntry
and T7.LineNum = T9.BaseLine
and T7.ItemCode = T9.ItemCode
LEFT JOIN ORPC T10
ON T9.DocEntry = T10.Docentry
WHERE T0.[CardCode] =[%0]
and T0.[CANCELED] ='N'
order by T0.DocNum asc
Un saludo y muchas gracias por la ayuda!
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
5 | |
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.