cancel
Showing results for 
Search instead for 
Did you mean: 

Modificar Reporte de SAP

Former Member
0 Kudos

Hola buenas tardes,

A ver si me pueden ayudar con lo siguiente por favor, yo quisiera saber si existe alguna manera de modificar algun reporte de los que ya vienen por defecto con sap, es que hay un informe, especificamente el informe de centro de beneficio, que es perfecto para lo que estan pidiendo pero hay un detalle que le falta y queria ver si existia la manera de modificarlo?.

Gracias por su atenciòn,

Saludos.

Accepted Solutions (1)

Accepted Solutions (1)

angeles804
Active Contributor
0 Kudos

puedes tratar de generar un query dentro del query manager.

Former Member
0 Kudos

Hola Mary, disculpa como aplico esta opción, se el funcionamiento de el query manager pero como podria lograr copiar y modificar el informe de centro de beneficios con esto?

Floyola esto de sql profiler, lo he estado viendo, aun no he dado con el query pero sigo viendo, es que la verdad nunca habia usado eso.

angeles804
Active Contributor
0 Kudos

define que datos quieres, puedes visualizar los campos en vista/información del sistema

obtienes los campos que ocupas y luego haces inner join o generas un SELECT.

no es tan complicado es solo saber que tablas puedes usar y un poco de básico SQL.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Hola Miguel

Encontre el query del informe


SELECT T1.[TransId], T1.[Line_ID], T1.[ShortName], T1.[TransType], T1.[Debit], T1.[Credit], T1.[RefDate], T1.[DueDate], T0.[ActType] FROM  
[dbo].[OACT] T0 ,  
[dbo].[JDT1] T1 
WHERE T1.[Account] = T0.[AcctCode]  AND  T1.[DueDate] >= (@P1)  AND  T1.[DueDate] <= (@P2)  AND  T1.[RefDate] >= (@P3)  AND  T1.[RefDate] <= (@P4)  AND  T1.[TaxDate] >= (@P5)  AND  T1.[TaxDate] <= (@P6)  AND  T1.[ProfitCode] = (@P7)   
ORDER BY T1.[Account]

El informe lo ejecute de esta manera

[http://imageshack.us/photo/my-images/829/screenshot008kd.jpg/]

Espero te sirva

Slds

Former Member
0 Kudos

Claro Mary, igual si no queda de otro tendre que hacerlo por el generador de consultas, lo que queria era encontrar la manera de tomar el que ya existe y copiarlo para hacerle la modificaciòn que necesito.

Floyola copie el query en el generador de consulatas y me genera el siguiente error resumido:

Must declare the scalar variable "@P1"

felipe_loyolarodriguez
Active Contributor
0 Kudos

¬¬ esperaba un poquito de ...

Miguel, ese query proviene del SQL Profiler, las variables son las que tu llenas cuando ejecutas el reporte, por lo tanto debes hacer lo mismo en el query


SELECT T1.[TransId], T1.[Line_ID], T1.[ShortName], T1.[TransType], T1.[Debit], T1.[Credit], T1.[RefDate], T1.[DueDate], T0.[ActType] FROM  
[dbo].[OACT] T0 ,  
[dbo].[JDT1] T1 
WHERE T1.[Account] = T0.[AcctCode]  AND  T1.[DueDate] >= '[%0]'  AND  T1.[DueDate] <= '[%1]'  AND  T1.[RefDate] >= '[%2]'  AND  T1.[RefDate] <= '[%3]'  AND  T1.[TaxDate] >= '[%4]'  AND  T1.[TaxDate] <= '[%5]'  AND  T1.[ProfitCode] = '[%6]'   
ORDER BY T1.[Account]

Atte.

Former Member
0 Kudos

jajaja ya ya disculpaaaa jaja, que traigo la cabeza en otro lado, disculpa de verdad :). dejame probar

Former Member
0 Kudos

Floyola a ver si me puedes ayudar en lo siguiente por favor:

Este reporte que me envías en el código es para mostrar las entras y salidas por centro de beneficio, que pasa, realmente lo que quiere el cliente es medir la productividad de cada vendedor, y que pasa con este reporte, que muestra las salidas, pero las entradas que muestra no son reales, ya que muestra el valor de las facturas total, cuando a estas facturas debería restársele el valor del costo del producto, el resultado de la resta entre el total de la factura - el costo de cada producto, sería la entrada bruta que está generando este vendedor.

No sé si tienes algún reporte parecido a lo que te estoy diciendo, o como sería la manera de restar el total de estas facturas con el costo de cada línea de producto, en este código que me pasas el campo que muestra las entradas es Credit.

Saludos.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Dejame ver si entiendo

Los vendedores los clasifican por centro de beneficio? o

el reporte lo necesitas por empleado de departamento de ventas?

Atte.

Former Member
0 Kudos

Asi es, cada vendedor es un centro de beneficio, el reporte se necesita por centro de beneficio que es la manera como son capturados en cada factura.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Bueno miguel, veamos como queda este reporte

Crea un stored en la base de esta manera, si quieres le cambias el nombre jaja


CREATE PROCEDURE dbo.Miguel_SDN_jajaja (@FECHAINI DATETIME, @FECHAFIN DATETIME)AS

BEGIN

DECLARE @UNIONSAP TABLE (SlpCode SMALLINT, SlpName NVARCHAR(100), OcrCode NVARCHAR(8), Ventas INT, Costos INT, Margen INT)
INSERT INTO @UNIONSAP

SELECT T0.SlpCode'SlpCode', T2.SlpName, T1.OcrCode, SUM(T1.Price*T1.Quantity)'Ventas', SUM(T1.Quantity*T1.StockPrice)'Costos', (SUM(T1.Price*T1.Quantity)-SUM(T1.Quantity*T1.StockPrice))'Margen'
FROM OINV T0
INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OSLP T2 ON T2.SlpCode = T0.SlpCode
WHERE T0.DocDate >= @FECHAINI AND T0.DocDate <= @FECHAFIN
GROUP BY T0.SlpCode, T2.SlpName, T1.OcrCode
UNION
SELECT T0.SlpCode'SlpCode', T2.SlpName, T1.OcrCode, -SUM(T1.Price*T1.Quantity)'Ventas', -SUM(T1.Quantity*T1.StockPrice)'Costos', -(SUM(T1.Price*T1.Quantity)-SUM(T1.Quantity*T1.StockPrice))'Margen'
FROM ORIN T0
INNER JOIN INV1 T1 ON T1.DocEntry = T0.DocEntry
INNER JOIN OSLP T2 ON T2.SlpCode = T0.SlpCode
WHERE T0.DocDate >= @FECHAINI AND T0.DocDate <= @FECHAFIN
GROUP BY T0.SlpCode, T2.SlpName, T1.OcrCode

SELECT T0.OcrCode'Centro Benef', T0.SlpCode'Cod Empleado', T0.SlpName'Nombre Empleado', SUM(Costos)'Costos', Sum(Ventas)'Ventas', SUM(Margen)'Margen'
FROM @UNIONSAP T0
GROUP BY T0.OcrCode, T0.SlpCode, T0.SlpName
UNION
SELECT T0.OcrCode'Centro Benef', NULL, 'ZZZ-TOTAL CENTRO', SUM(Costos)'Costos', Sum(Ventas)'Ventas', SUM(Margen)'Margen'
FROM @UNIONSAP T0
GROUP BY T0.OcrCode
ORDER BY 1,3
END

Luego ve a SAP y lo ejecutas con este query


DECLARE @VAR INT, @INI DATETIME, @FIN DATETIME
SET @VAR = (SELECT TOP 1 T.DocEntry FROM dbo.OINV T INNER JOIN dbo.INV1 Y ON Y.DocEntry = T.DocEntry WHERE T.DocDate BETWEEN '[%0]' AND '[%1]')
SET @INI = '[%0]'
SET @FIN = '[%1]'

EXECUTE dbo.Miguel_SDN_jajaja
@FECHAINI = @INI,
@FECHAFIN = @FIN

Me cuentas si esta bien, mal, pesimo, horrible o si le falta algo hehe

Saludos

PD: si le cambias el nombre al stored, cambiaselo tambien a la query que lo ejecuta desde el EXECUTE

Edited by: Floyola on Jul 19, 2011 4:47 PM

Former Member
0 Kudos

Floyola estoy revisando el reporte, pero hay manera de agregarle una columna que muestre el asiento y el código de la cuenta que seria , , para poder ir al documento?

Former Member
0 Kudos

Otra cosa, en la columna que dice costos, que estas tomando? solo el costo del artículo? es que para obtener la ganancia real, el cual tu llamas en el reporte "margen", deberia ser el costo de ariculo, otra columna que contemple los gastos del empleado, como sueldo,comisiones, viaticos etc... y todo eso restale a la factura y asi poder obtener el margen real.

Por ej. en el reporte de centro de beneficios muestra todos estos gastos, las ventas, pero no muestra un margen real ya que no resta con el costo del articulo.

felipe_loyolarodriguez
Active Contributor
0 Kudos

OK OK

Eso necesitaba, dejame un momento para pensar

-


Pero si es asi, el primer reporte debe servite, porque?, porque el costo de los articulos proviene de la entrega, esta es la que hace el asiento de los costos, y la factura solo genera el asiento de la venta porque el costo ya "deberia" estar hecho en la entrega...Ahora bien, si se saltan la entrega, la factura de igual manera crea el asiento del costo de los articulos...

Lo que creo que deberias agregar, es el TransType, asi sabras cuales corresponden a las entregas que son las que traen el costo de los articulos.

Espero comentarios

Atte.

Edited by: Floyola on Jul 19, 2011 5:25 PM

Former Member
0 Kudos

O yo me perdi, o nos confundimos jeje, primero que nada pongamos un nombre al reporte "estado de resultados de vendedor", ahora, a ver tomando un parte del reporte de sap de centro de beneficios:

Centro de Beneficio, clave de operaciones (asiento), código de cuenta contable, salidas, ingresos, total.

salidas: los gastos del vendedor: sueldo, comisiones, viaticos etc. Esto si lo contempla ese reporte.

Ingresos: las ventas que genera este vendedor, todo esto se captura ya que en cada factura se coloca el centro de beneficio.

Ahora que hace este reporte, el toma los gastos - ingresos y nos da el total, pero que pasa con estos ingresos, que no son reales, porque el cliente quiere saber cual es el margen real de cada factura, y para saber esto se necesita restar el precio que se coloco en la factura para cada articulo - el costo del articulo, y de esta manera obtener el margen real de la factura, luego si restar salidas - ingresos, y entonces el total si seria margen bruto.

No se si me entiendas

Former Member
0 Kudos

Floyolaaa donde estas :s

felipe_loyolarodriguez
Active Contributor
0 Kudos

jajaaja

Esperame un momento, ya tengo una idea

-


Esta es mi idea, me cuentas...


SELECT T1.TransId, T1.Line_ID, T1.ProfitCode, T1.ShortName, T1.TransType, T1.Debit, T1.Credit, T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType NOT IN ('13','15') AND T1.ProfitCode = '[%2]'
UNION ALL
SELECT T1.TransId, T1.Line_ID, T1.ProfitCode, T1.ShortName, T1.TransType, NULL AS 'Debit', 
ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity-Y.StockPrice) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.TransId = T1.Transid),0)'Credit',
T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType = 13 AND  AND T1.ProfitCode = '[%2]'
GROUP BY T1.TransId, T1.Line_ID, T1.ProfitCode, T1.ShortName, T1.TransType, T1.RefDate, T1.DueDate
ORDER BY 4

Atte.

Edited by: Floyola on Jul 20, 2011 12:21 PM

Former Member
0 Kudos

Ese hace los mismo que el que me pasaste de sap, muestra el debit con todos los gastos, pero en el credit se trae las facturas, pero no como lo piden :s.

aaah yo pienso y no se como darle la vuelta.

Veamos el escenario completo floyola:

- Compramos un producto, le hicimos entrada con costo 100.

- Vamos a vender el articulo, el precio que colocamos para este articulo sera 150, colocamos el centro de beneficio (que seria el vendedor que concreto la venta) por ej. 4001.

Que hace el reporte de SAP, en gastos coloca como ya sabes, sueldos, viaticos, etc etc.... En ingreso el reporte coloca 150, y otra columna que es total, aqui seria la resta entre ingreso - gastos.

Eso esta bien, pero que quiere el cliente, que en vez de aparecer 150 en ingresos, aparezca 50, por que 50?? porque 50 es el margen real que esta dejando la factura a la empresa, 50 viene de precio 150 - costo 100.

Entonces que quieren ver ellos, la ganancia real que le esta dejando cada vendedor y lo que esta gastando.

former_member188440
Active Contributor
0 Kudos

Eso pinta mas para un cubo que para un reporte de sql simple!

Former Member
0 Kudos

No me digas muchos que me cambio a BI

felipe_loyolarodriguez
Active Contributor
0 Kudos

Estimado

Que hice en el query

En los debitos coloque todos los gastos, que segun tu revision estaban OK

En los creditos, coloque la (venta-costo) por factura de venta, ahora si tu me dices que no es el real?

Sugiero revises y me digas cual es el campo en donde esta el costo StockPrice o GrossBuyPr

felipe_loyolarodriguez
Active Contributor
0 Kudos

Miguel...habia un error en el query

Pruebalo asi! y revisa si estan bien las ventas


SELECT T1.TransId, T1.Line_ID, T1.ProfitCode, T1.ShortName, T1.TransType, T1.Debit, T1.Credit, T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType NOT IN ('13','15') AND T1.ProfitCode = '[%2]'
UNION ALL
SELECT T1.TransId, T1.Line_ID, T1.ProfitCode, T1.ShortName, T1.TransType, NULL AS 'Debit', 
ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.StockPrice/*GrossBuyPr*/) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.TransId = T1.Transid),0)'Credit',
T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType = 13 AND T1.ProfitCode = '[%2]'
GROUP BY T1.TransId, T1.Line_ID, T1.ProfitCode, T1.ShortName, T1.TransType, T1.RefDate, T1.DueDate
ORDER BY 4

Atte.

Former Member
0 Kudos

Excelenteee , muchas gracias,, hombree que tienes un millon de reportes en un cajon o que jaja, mil gracias de verdad, quedo de lujo

angeles804
Active Contributor
0 Kudos

el costo del artículo esta en oitm.avgprice pero te recomiendo hacer un campo de usuario en la tabla de inv1 por que dentro de la misma el que dice stockprice no guarda el costo de venta siempre, si no solo cuando se realiza la entrega.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Mary, el AvgPrice es el costo al dia de hoy, si usas PMP no te sirve debido a la gran variabilidad que tiene.

El costo de cada articulo de factura, queda guardado en los campos StockPrice o GrossBuyPr desde la OV hasta la factura y no se modifica como el AvgPrice, por lo tanto para saber el costo de la venta de esa factura debes hacer la multiplicacion de la cantidadcosto (QuantityStockPrice o GrossBuyPr)

Saludos

angeles804
Active Contributor
0 Kudos

si lo se, pero por eso digo que hagas un campo de usuario en inv1 para que guardes también al que tienes el momento con la condición de que si usa facturas de reserva.

Former Member
0 Kudos

Buenas tardes Floyola,

Oye una ayuda por favor con respecto al este reporte:

SELECT T1.TransId 'Asiento', T1.ProfitCode 'Centro de Beneficio', T1.ShortName 'Cuenta Contable', T1.TransType, T1.Debit 'Gastos', T1.Credit 'Ingresos', T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType NOT IN ('13','15') AND T1.ProfitCode = '[%2]'
UNION ALL
SELECT T1.TransId, T1.ProfitCode, T1.ShortName, T1.TransType, NULL AS 'Debit', 
ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.StockPrice/*GrossBuyPr*/) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.TransId = T1.Transid),0)'Credit',
T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType = 13 AND T1.ProfitCode = '[%2]'
GROUP BY T1.TransId, T1.ProfitCode, T1.ShortName, T1.TransType, T1.RefDate, T1.DueDate
ORDER BY 4

Hay alguna manera de que salga el nombre del centro de beneficio y el codigo, sabes que tu colocas ProfitCode = '[%2]', y cuando la persona abre el fitro solo le salen los codigos, habra forma que al abrir esa tabla le salga el codigo y el nombre?? Yo intente llamando a la tabla OPRC, INNER JOIN OPRC T2 ON T1.ProfitCode = T2.PrcName, pero esto me daba error.

Un par de cosas mas, en este reporte hay una columna que se trae el numero del asiento, sabes porque no se trae la flecha amarilla para que el usuario vaya al asiento directamente? Y como se le podria agregar una columna adicional que muestre el documento que tiene el asiento, si es RF, PP...

Saludos.

felipe_loyolarodriguez
Active Contributor
0 Kudos

Miguel

Las Flechas de enlace desaparecen al hacer una sentencia de UNION, PIVOT, UNPIVOT...Nada que hacer al respecto

Prueba este query, le agregue lo que pediste, si aparecen tipos de documento otros, los agregas al CASE


SELECT T1.TransId 'Asiento', 
CASE T1.TransType
WHEN '13' THEN 'Factura Cliente'
WHEN '14' THEN 'N/C Cliente'
WHEN '15' THEN 'Entrega'
WHEN '18' THEN 'Factura Proveedor'
WHEN '19' THEN 'N/C Proveedor'
WHEN '20' THEN 'Entrada Mercaderias OP'
WHEN '21' THEN 'Devolucion Existencias'
WHEN '59' THEN 'Entrada de mercancías'
WHEN '67' THEN 'Traslado de stocks'
WHEN '30' THEN 'Asiento contable'
ELSE 'Otros'
END 'Tipo Documento',
T1.ProfitCode 'Cod.Centro de Beneficio', T2.OcrName'Centro de Beneficio', T1.ShortName 'Cuenta Contable', T1.BaseRef'# Doc interno', T1.Debit 'Gastos', T1.Credit 'Ingresos', T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
INNER JOIN [dbo].[OOCR] T2 ON T2.OcrCode=T1.ProfitCode
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType NOT IN ('13','15') AND T2.OcrName='[%2]'
UNION ALL
SELECT T1.TransId, 
CASE T1.TransType
WHEN '13' THEN 'Factura Cliente'
WHEN '14' THEN 'N/C Cliente'
WHEN '15' THEN 'Entrega'
WHEN '18' THEN 'Factura Proveedor'
WHEN '19' THEN 'N/C Proveedor'
WHEN '20' THEN 'Entrada Mercaderias OP'
WHEN '21' THEN 'Devolucion Existencias'
WHEN '59' THEN 'Entrada de mercancías'
WHEN '67' THEN 'Traslado de stocks'
WHEN '30' THEN 'Asiento contable'
ELSE 'Otros'
END 'Tipo Documento',
T1.ProfitCode'Cod.Centro de Beneficio', T2.OcrName'Centro de Beneficio', T1.ShortName, T1.BaseRef, NULL AS 'Debit', 
ISNULL((SELECT SUM(Y.Quantity*Y.Price)-SUM(Y.Quantity*Y.StockPrice/*GrossBuyPr*/) FROM OINV Z INNER JOIN INV1 Y ON Y.DocEntry=Z.DocEntry WHERE Z.TransId = T1.Transid),0)'Credit',
T1.RefDate, T1.DueDate
FROM [dbo].[JDT1] T1
INNER JOIN [dbo].[OOCR] T2 ON T2.OcrCode=T1.ProfitCode
WHERE T1.[RefDate] >= '[%0]'  AND  T1.[RefDate] <= '[%1]' AND T1.TransType = 13 AND T2.OcrName='[%2]'
GROUP BY T1.TransId, T1.ProfitCode, T1.ShortName, T1.TransType, T1.RefDate, T1.DueDate, T2.OcrName, T1.baseRef
ORDER BY 4

Saludos

Former Member
0 Kudos

Vale Muchas Gracias Floyola

Answers (1)

Answers (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Miguel;

Los informes nativos no se pueden modificar.

Como alternativa, intenta averiguar el query que ejecuta el informe desde el SQL Profiler y tratar de modificar el query para hacer un nuevo reporte.

Saludos