Error de Query en SAP

Hola Podrían ayudarme con un Query que dejo de funcionar sin explicacion!

el erro que me aparece es divide by zero error encountered SWEI

la consulta es esta

DECLARE @cambio numeric(22,12 )
SET @cambio=(SELECT avg(T0.[Rate]) FROM ORTT T0 WHERE T0.[Currency] ='USD' and  T0.[RateDate] between [%0] and [%1])

SELECT T1.[ItemCode],T2.[SWW],  T1.[Dscription], AVG(T1.[Price]*@cambio)AS 'Precio Prome LPS', T2.[AvgPrice]as 'Costo LPS',(AVG(T1.[Price]*@cambio)-T2.[AvgPrice]) as'Ganancia',((AVG(T1.[Price]*@cambio)-T2.[AvgPrice])/AVG(T1.[Price]*@cambio))*100 as '%',(SELECT SUM(T4.[Quantity]) FROM OINV T3  INNER JOIN INV1 T4 ON T3.DocEntry = T4.DocEntry WHERE T3.[DocDate] between [%0] and [%1] and T3.[InvntSttus] <> 'C' and T4.[ItemCode] =T1.[ItemCode]) as 'Total Cajas Vendidas' ,(T2.[AvgPrice]-(T2.[AvgPrice]*0.2)) as 'Costo -20%'
FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode 
WHERE T0.[DocDate] between [%0] and [%1] and T0.[DocStatus] not Like 'c%%' and T0.[InvntSttus] not Like 'c%%' and  T1.[ItemCode] NOT Like 'PRODUC%%' 
GROUP BY T1.[ItemCode], T2.[SWW],T1.[Dscription], T2.[AvgPrice] ORDER BY T1.[ItemCode]

No tienes presentación, pero deduzco que esto es para SAP Business One, verdad?

Pasa por Presentaciones y crea tu tema nuevo :pray: !

Hola

Una línea manda un campo en 0 que quieres dividir

La solución es identificar dicho campo que se manda en 0 antecedele ISNULL(tucampo,1)

y listo

Slds.

3 Me gusta

si es SAP bussines One

Olga e probado con cada Campo y no logro ubicarlo!!
podrias probarlo e indicarme si es la sintaxis o algo por el estilo?

Hola
No funciona tu Query conmigo
Pero el problema esta división
/AVG(T1.[Price]*@cambio))*100

No puedes dividir números entre 0 puedes ponerle

CASE WHEN AVG(T1.[Price]*@cambio))100 = 0 THEN 1
ELSE AVG(T1.[Price]
@cambio))*100 END

4 Me gusta

Hola, prueba asi:

DECLARE @cambio numeric(22,12 )
SET @cambio=(SELECT avg(T0.[Rate]) 
			 FROM ORTT T0 
			 WHERE T0.[Currency] ='USD' 
				   and  T0.[RateDate] between [%0] and [%1])

SET @cambio = IIF(@cambio > 0, @cambio, 1) --VERIFICARMOS QUE LA TASA > 0

SELECT 
	T1.[ItemCode]
	,T2.[SWW]
	, T1.[Dscription]
	, AVG(T1.[Price]*@cambio)AS 'Precio Prome LPS'
	, T2.[AvgPrice]as 'Costo LPS'
	,(AVG(T1.[Price]*@cambio)-T2.[AvgPrice]) as'Ganancia'
	,((AVG(T1.[Price]*@cambio)-T2.[AvgPrice])/ AVG(T1.[Price]*@cambio))*100 as '%'
	,(SELECT 
		SUM(T4.[Quantity]) 
	  FROM 
		OINV T3 INNER JOIN INV1 T4 ON T3.DocEntry = T4.DocEntry 
	  WHERE 
		T3.[DocDate] between [%0] and [%1] 
		and T3.[InvntSttus] <> 'C' 
		and T4.[ItemCode] =T1.[ItemCode]) as 'Total Cajas Vendidas' 
	,(T2.[AvgPrice]-(T2.[AvgPrice]*0.2)) as 'Costo -20%'
FROM 
	OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry 
	INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode 
WHERE 
	T0.[DocDate] between [%0] and [%1] 
	and T0.[DocStatus] not Like 'c%%' 
	and T0.[InvntSttus] not Like 'c%%' 
	and  T1.[ItemCode] NOT Like 'PRODUC%%' 
GROUP BY 
	T1.[ItemCode]
	,T2.[SWW],T1.[Dscription]
	,T2.[AvgPrice] 
ORDER BY 
	T1.[ItemCode]
2 Me gusta

Gabriela lo raro es que en unos fechas si funciona y en otras fechas no!

por ejemplo coloco fecha 8 de enero y reporte funciona
luego coloco fecha 9 de enero y no funciona y asi con otras fechas!

y estoy probando con días hábiles

1 me gusta

El problema como ya te comentaron, es que la variable @cambio esta obteniendo el valor 0 en ciertos rangos de fecha, por eso debes validar dicho valor antes de hacer el resto de la consulta.

1 me gusta

a que se debe que la variable@cambio obtenga ese valor!

cabe mencionar que el año pasado no teniamos este problema?

Hola,

@Olga_Martinez tiene razón, el problema PROBABLEMENTE está en

AVG(T1.[Price]*@cambio) AS ‘Precio promedio’ o en algún otro AVG…

consulta las facturas de algún periodo donde te marque error tu query (tablas OINV , INV1) muy muy probablemente tengas un precio en 0 y es lo que está originando el problema, filtra donde price sea = ‘0’ para ubicarlo mas rápido

Nos dices como te fue.

Saludos.

2 Me gusta

PCARRASCO

tienes razón el problema es que se facturo un Item con price=0
y da error los días que se facturo!

Listo Señores Gracias por su Apoyo!!!

Seguiremos siempre en contacto

asi quedo el Query

DECLARE @cambio numeric(22,12 )
SET @cambio=(SELECT avg(T0.[Rate]) 
			 FROM ORTT T0 
			 WHERE T0.[Currency] ='USD' 
				   and  T0.[RateDate] between [%0] and [%1])

SET @cambio = IIF(@cambio > 0, @cambio, 1) --VERIFICARMOS QUE LA TASA > 0

SELECT 
	T1.[ItemCode]
	,T2.[SWW]
	, T1.[Dscription]
	, AVG(T1.[Price]*@cambio)AS 'Precio Prome LPS'
	, T2.[AvgPrice]as 'Costo LPS'
	,(AVG(T1.[Price]*@cambio)-T2.[AvgPrice]) as'Ganancia'
	,((AVG(T1.[Price]*@cambio)-T2.[AvgPrice])/ AVG(T1.[Price]*@cambio))*100 as '%'
	,(SELECT 
		SUM(T4.[Quantity]) 
	  FROM 
		OINV T3 INNER JOIN INV1 T4 ON T3.DocEntry = T4.DocEntry 
	  WHERE 
		T3.[DocDate] between [%0] and [%1] 
		and T3.[InvntSttus] <> 'C'  
		and T4.[ItemCode] =T1.[ItemCode]) as 'Total item Vendidas' 
	,(T2.[AvgPrice]-(T2.[AvgPrice]*0.2)) as 'Costo -20%'
FROM 
	OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry 
	INNER JOIN OITM T2 ON T1.ItemCode = T2.ItemCode 
WHERE 
	T0.[DocDate] between [%0] and [%1] 
	and T0.[DocStatus] not Like 'c%%' 
	and T0.[InvntSttus] not Like 'c%%' 
              and T1.[Price] > 0
	and  T1.[ItemCode] NOT Like 'PRODUC%%' 
GROUP BY 
	T1.[ItemCode]
	,T2.[SWW],T1.[Dscription]
	,T2.[AvgPrice] 
ORDER BY 
	T1.[ItemCode]
2 Me gusta

@Marckosss_P por favor marca como solución alguna de los comentarios que te realizamos, saludos

@pcarrasco listo Hermano Gracias por la ayuda aquí seguiremos en contacto!
todos son muy buenos!