Ayuda SAP

Mostrar una lista de rendiciones de SAP (Query)

Estimados tengo una consulta la cual consiste en mostrar una lista de rendiciones de SAP en una consulta de SQL por ejemplo:

SELECT	T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription], 
		T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO', 
		CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO', 
		CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM 	OPRC T3 INNER JOIN OPOR T0 INNER JOIN 
		POR1 T1 ON T0.[DocEntry] = T1.[DocEntry] INNER JOIN
		RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON
		T3.[PrcCode] = T1.[OcrCode4] LEFT OUTER JOIN
		OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE 	(T1.[BaseType]=17) 
		AND (T1.[BaseRef] LIKE '15%') 
		AND (T0.[CANCELED]='N') 
		AND ((CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal],'0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END) = 'NO_PAGADO')

La cual muestra una lista como la siguiente, quite una columnas que no me sirven:

#	Estado OC	OC	NV	Número	Descripción	DESTINO	STATUS FC	Nombre
1	O	6267	15000356	ADRE0001	REND./11111111	NO TIENE	NO PAGADO	Luis
2	C	6300	15000368	ADRE0004	RENDICION	FACTURA	NO PAGADO	Ana
3	C	5278	15000224	ADRE0001	AUTOMATICOS	NO TIENE	NO PAGADO	Daniel

Como podría hacer para que me elimine u oculte la tercera fila la cual tiene Estado C, Destino NO TIENE y Status FC NO PAGADO, mi problema es que este un un listado muy grande, acá solo deje los tres tipos de resultados que me muestra, favor su ayuda gracias solo deje los tres tipos de resultados que me muestra, favor su ayuda gracias

Hola Gerardo,

Podrias intentar con lo siguiente:

SELECT	T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription], 
		T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO', 
		CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO', 
		CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3 
INNER JOIN OPOR T0 
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4] 
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE	T1.[BaseType]=17
		AND T1.[BaseRef] LIKE '15%'
		AND T0.[CANCELED]='N'
		AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
		AND T0.[DocStatus] <> 'C'
		AND T1.[TargetType]<>-1

Saludos,
Gustavo

2 Me gusta

Estimado gracias por atender a mi requerimiento, aplique tu consulta a mi base y esta no me entrego ningun resultado, pero al quitar el signo menos a la ultima linea donde dice -1 la deje en 1 y esta me entrego de resultado solo las filas que están con O, con No tiene y No pagado, lo cual es bueno solo faltaría aplicar que se muestre las que están en C, Factura y No pagado. favor tu ayuda gracias.

Disculpa, leí mal tu requerimiento, espero esto pueda ayudarte!

SELECT	T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription], 
		T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO', 
		CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO', 
		CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3 
INNER JOIN OPOR T0 
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4] 
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE	T1.[BaseType]=17
		AND (T1.[BaseRef] LIKE '15%') 
		AND (T0.[CANCELED]='N') 
		AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
		AND T1.[TargetType] = 18

Esto debería traerte todos los registros independientemente del estado (O, C) que tengan factura (TargetType = 18) y que no han sido pagadas ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0)).

Espero haber ayudado.

Saludos,
Gustavo

1 me gusta

Gustavo, lo usa pero ahora solo me muestra las C con factura y no las O jajaja

ok, entonces creo que puedes hacer una unión con ambas consultas, algo así como:

SELECT	T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription], 
		T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO', 
		CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO', 
		CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3 
INNER JOIN OPOR T0 
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4] 
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE	T1.[BaseType]=17
		AND T1.[BaseRef] LIKE '15%'
		AND T0.[CANCELED]='N'
		AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
		AND T0.[DocStatus] <> 'C'
               AND T1.[TargetType]<>1

UNION ALL

SELECT	T0.[DocStatus] AS 'ESTADO_OC', T0.[DocNum] AS 'OC', T1.[BaseRef] 'NV', T1.[ItemCode], T1.[Dscription], 
		T1.[LineTotal] AS 'LINE_OC', T2.[LineTotal] AS 'LINEA_NV', T1.[OcrCode4] AS 'PERSO', 
		CASE WHEN T1.[TargetType]='-1' THEN 'NO_TIENE' WHEN T1.[TargetType]='18' THEN 'FACTURA' ELSE 'OTRO' END AS 'DESTINO', 
		CASE WHEN (T4.[DocTotal] <> T4.[PaidToDate] OR ISNULL (T4.[DocTotal], '0')=0) THEN 'NO_PAGADO' ELSE 'PAGADO' END AS 'STATUS_FC', T3.[PrcName]
FROM OPRC T3 
INNER JOIN OPOR T0 
INNER JOIN POR1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN RDR1 T2 ON T1.[BaseEntry] = T2.[DocEntry] AND T1.[BaseLine] = T2.[LineNum] ON T3.[PrcCode] = T1.[OcrCode4] 
LEFT OUTER JOIN OPCH T4 ON T1.[TrgetEntry] = T4.[DocEntry]
WHERE	T1.[BaseType]=17
		AND (T1.[BaseRef] LIKE '15%') 
		AND (T0.[CANCELED]='N') 
		AND ((T4.[DocTotal] <> T4.[PaidToDate]) OR (ISNULL(T4.[DocTotal],0)=0))
		AND T1.[TargetType] = 18

Quizás me esté liando un poco.

Saludos,
Gustavo

1 me gusta

Perro te pasaste, seco llevaba caleta tratando de realizar esta consulta de verdad gracias…

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.