Ayuda SAP

Query SAP B1 - Pago a proveedores

Estimados;
Junto con saludar a quien este leyendo este post, favor si me podrian ayudar con lo siguiente:
La query que tengo es la siguiente:

SELECT DISTINCT  
CASE
WHEN T4.[FatherNum] = '50000100' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50100000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50101000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50103000 ' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50102000 ' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50104000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50105000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50106000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50107000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50109000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50111000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '50200000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '60101000' THEN 'Gasto Directo'
WHEN T4.[FatherNum] = '10105000' THEN 'Stock'
WHEN T4.[FatherNum] = '10106000' THEN 'Stock'
WHEN T4.[FatherNum] = '20106000' THEN 'Stock'
WHEN T4.[FatherNum] = '10201000' THEN 'Activo'
WHEN T4.[FatherNum] = '10202000' THEN 'Activo'
WHEN T4.[FatherNum] = '10203000' THEN 'Activo'
END AS ' Nombre de cuenta mayor',
T4.[AcctName],  
CASE
WHEN T3.[OcrCode] = 'LNE' THEN 'La Negra'
WHEN T3.[OcrCode] = 'STG' THEN 'Santiago'
WHEN T3.[OcrCode] = 'IQQ' THEN 'Iquique'
WHEN T3.[OcrCode] = 'COQ' THEN 'Coquimbo'
WHEN T3.[OcrCode] = 'DGS' THEN 'Gasto general'
WHEN T3.[OcrCode] = 'COP' THEN 'Copiapo'
WHEN T3.[OcrCode] = 'ANT' THEN 'Antofagasta'
WHEN T3.[OCRCODE] = 'B01' THEN 'No usar B01'
WHEN T3.[OCRCODE] = 'B09' THEN 'No usar B09'
END AS 'Sucursal', 
Sum((T3.LineTotal*1.19)) AS 'Total Pagado'

FROM OVPM T0
INNER JOIN VPM2 T1 ON T0.[DocNum] = T1.[DocNum] 
INNER JOIN OPCH T2 ON T1.[DocEntry] = T2.[DocEntry]
INNER JOIN PCH1 T3 ON T2.[DocEntry] = T3.[DocEntry]
INNER JOIN OACT T4 ON T3.[AcctCode] = T4.[AcctCode]

WHERE T0.[DocDate] >= [%0] AND  T0.[DocDate] <= [%1]
GROUP BY T4.[FatherNum], T3.[OcrCode], T4.[AcctName]
ORDER BY 'Sucursal'

Me solicitaron crear una query que me agrupe todos los pagos a proveedores segun estas 3 categorias de cuenta (personalizada):
Gasto directo, stock/inventario y activos. Especificando a la sucursal que corresponden y la sumatoria del total pagado dentro de un rango de fecha (consultable)
Los operadores de SAP imputan la cuenta en la factura de proveedores, cuyas cuentas son nivel 5-6, las cuales utlizo para obtener su ‘FatherNum’ (Cuenta mayor) y segun el nombre de estas, las categorizo manualmente en una de las 3 cuentas que mencione anteriormente. El problema es que no las puedo agrupar del todo:
image

Mi ideal seria:
Gasto Directo - Sucursal 1 - Total pagado
Stock - Sucursal 1 - Total Pagado
Activo - Sucursal 1 - Total pagado
Gasto Directo - Sucursal 2 - Total pagado
Stock - Sucursal 2 - Total Pagado
Activo - Sucursal 2 - Total pagado
y asi sucesivamente…
De antemano, gracias. Espero haberme explicado bien

Para eso tienes que evitar en el group by el nombre de la cuenta… y ya lo tienes

Disculpa, tienes razon… de momento lo tenia así para ir puliendo los case segun el nombre de la cuenta, de todas formas, ya habia probado haciendo lo que me indicas y me sale lo siguiente:


Sigo obteniendo mas de 1 fila por Gasto directo, stock o activo.

Y la verdad es que me imagino porque… simplemente estoy reemplazando el nombre de la cuenta mayor por el que yo indico en la query, visualmente se ven iguales pero el valor de la cuenta es distinto… pero si no es asi, aun no encuentro la forma de hacerlo.

En lugar de usar Case usa BETWEEN en el WHERE y tal vez algunos UNION

recuerdo que me pidieron algo parecido, este es mi reporte del query…

image

La diferencia es que esta desglozado por cuenta lo que lo hace mas largo…

Inténtalo de la siguiente forma, cambie un poco las relaciones

SELECT 
	A0.[Nombre de cuenta mayor]
	,A0.[Sucursal]
	,SUM(A0.[Total Pagado]) [Total Pagado]
FROM 
	(
		SELECT 
		CASE
		WHEN T4.[FatherNum] = '50000100' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50100000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50101000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50103000 ' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50102000 ' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50104000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50105000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50106000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50107000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50109000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50111000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '50200000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '60101000' THEN 'Gasto Directo'
		WHEN T4.[FatherNum] = '10105000' THEN 'Stock'
		WHEN T4.[FatherNum] = '10106000' THEN 'Stock'
		WHEN T4.[FatherNum] = '20106000' THEN 'Stock'
		WHEN T4.[FatherNum] = '10201000' THEN 'Activo'
		WHEN T4.[FatherNum] = '10202000' THEN 'Activo'
		WHEN T4.[FatherNum] = '10203000' THEN 'Activo'
		END AS [Nombre de cuenta mayor],
		T4.[AcctName],  
		CASE
		WHEN T3.[OcrCode] = 'LNE' THEN 'La Negra'
		WHEN T3.[OcrCode] = 'STG' THEN 'Santiago'
		WHEN T3.[OcrCode] = 'IQQ' THEN 'Iquique'
		WHEN T3.[OcrCode] = 'COQ' THEN 'Coquimbo'
		WHEN T3.[OcrCode] = 'DGS' THEN 'Gasto general'
		WHEN T3.[OcrCode] = 'COP' THEN 'Copiapo'
		WHEN T3.[OcrCode] = 'ANT' THEN 'Antofagasta'
		WHEN T3.[OCRCODE] = 'B01' THEN 'No usar B01'
		WHEN T3.[OCRCODE] = 'B09' THEN 'No usar B09'
		END AS [Sucursal], 
		(T3.LineTotal*1.19) AS [Total Pagado]

		FROM OVPM T0
		INNER JOIN VPM2 T1 ON T0.[DocEntry] = T1.[DocNum] 
		INNER JOIN OPCH T2 ON T1.[DocEntry] = T2.[DocEntry] AND T1.InvType = T2.ObjType
		INNER JOIN PCH1 T3 ON T2.[DocEntry] = T3.[DocEntry]
		INNER JOIN OACT T4 ON T3.[AcctCode] = T4.[AcctCode]

		WHERE T0.[DocDate] >= [%0] AND  T0.[DocDate] <= [%1]
	) A0
GROUP BY 
	A0.[Nombre de cuenta mayor]
	,A0.[Sucursal]
ORDER BY 
	A0.[Sucursal]
		
2 Me gusta

Muchas gracias estimado!
Estoy tratando de entender el efecto que tuvo este cambio
INNER JOIN OPCH T2 ON T1.[DocEntry] = T2.[DocEntry] AND T1.InvType = T2.ObjType
Pero efectivamente me entregaste la solución. Gracias de nuevo