Problema Variables en Query Manager

Buenas tardes amigos.

Tengo problemas con un Query que tengo que mejorar en SAP B1.

El query original lo hice yo, realiza multiples calculos de pesos, costos y demás para el SCRAP que se declara mensual en la fábrica. El query era muy largo y cada que tenía que corregirle algo era muy tedioso hacerlo en el query manager de SAP, por lo que tomé la opción y lo convertí en una vista. (las vistas son más fáciles de modificar y mas visuales).

Sin embargo tengo un problema…

Cuando coloco el siguiente query en SAP me funciona perfectamente

Select * From dbo.[V_USK_SCRAP] T0
where T0.U_Fecha >= '01/03/2020' and T0.U_Fecha <= '31/03/2020'

(como menciono es una vista personal, el query original son 780 líneas de calculos).

Pero ahora necesito que el usuario pueda pedir por un rango de fecha al momento de hacer la consulta (que al dar click en el query le solicite el rango de fechas). Pero al cambiar el Queri de la siguiente manera:

Select * From dbo.[V_USK_SCRAP] T0
where T0.U_Fecha >= [%0] and T0.U_Fecha <= [%1]

o de esta otra

Select * From dbo.[V_USK_SCRAP] T0
where T0.U_Fecha >= N'[%0]' and T0.U_Fecha <= N'[%1]'

Siempre me arroja errores. y son distintos, que si no encuentra la tabla AITP, o no es valor definido por usuario, o x, y, z…

Cabe destacar, todas las tablas que usa la vista, son tablas que se crearon dentro de SAP (por eso el campo fecha se llama U_Fecha xD)

¿Alguien sabe de que manera debería de declarar las variables para que me lo acepte?

NOTA: La vista también la tengo en el QueryManager, y en ella uso los parámetros como la segunda opción y me lo toma sin problemas, por eso lo probé con el N’[%0]’ Si quieren les pongo 1 pedacito de los calculos que si me funciona normal sin la vista.

Hola.

En la primer vista que me viene a la mente donde utilizamos parámetros de fechas utilizamos variables para que nos permitiera trabajar:

/* SELECT FROM ORDR T0V T0 */                          
  DECLARE @FechaInicio AS DATE       
  DECLARE @FechaFin AS DATE                       
  /* WHERE */                                                
  SET @FechaInicio = /* T0V.[DocDate] */ '[%0]'   
  SET @FechaFin = /* T0V.[DocDate] */ '[%1]'  

Select * 
From Vista_Seguimiento
Where Fecha >=  @FechaInicio and Fecha <= @FechaFin

Espero te funcione con esto.

Saludos. :wink:

1 me gusta

lo copié y pegue textual y sigue igual…

El error: 1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near ‘/’.
2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement ‘Alertas recibidas’ (OAIB) (s) could not be prepared.

coloco el query con el cambio que me propusiste:

/* SELECT * FROM ORDR T0V T0 */                          
  DECLARE @FechaInicio AS DATETIME       
  DECLARE @FechaFin AS DATETIME                       
  /* WHERE */                                                
  SET @FechaInicio = /* T0V.[DocDate] */ '[%0]'   
  SET @FechaFin = /* T0V.[DocDate] */ '[%1]'  

Select * From dbo.[V_USK_SCRAP] T1
where T1.U_Fecha >= @FechaInicio and T1.U_Fecha <= @FechaFin

Sabes… Probe agregando dbo.[] y el alias (T1) a mi query y me marca error, lo volví a dejar tal cual te lo adjunté y se genera sin problemas.

¿Podrías probar dejando tu consulta sin la sintaxis dbo.[] y sin álias en la tabla?

Saludos.

Mmmmm fíjate que SUPER RARO…

Entré para colocar que encontré la solución. pero también modifique el query según tu indicación y resulta que se me funciona también…

Te comento:

Lo cambié de la siguiente manera:

/* SELECT FROM [dbo].[OINV] T0 */
DECLARE @DATEFROM as datetime

DECLARE @DATEUNTIL as datetime

/* WHERE */

SET @DATEFROM = /* T0.DocDate */ N'[%0]'

SET  @DATEUNTIL = /* T0.DocDate */ N'[%1]'

--Select @datefrom, @dateuntil

Select * From dbo.[V_USK_SCRAP] T1
where T1.U_Fecha >= @DATEFROM and T1.U_Fecha <= @DATEUNTIL
ORDER BY 1,2,9,8,14,10 DESC

Y a pesar de tener los alias a mi vista ahora SI FUNCIONA. (me interesa mucho los Alias porque este es el principio de la mejora que le voy a hacer xD).

Peeeero lo cambié con tus indicaciones:

/* SELECT * FROM ORDR T0V T0 */                          
  DECLARE @FechaInicio AS DATETIME       
  DECLARE @FechaFin AS DATETIME                       
  /* WHERE */                                                
  SET @FechaInicio = /* T0V.[DocDate] */ '[%0]'   
  SET @FechaFin = /* T0V.[DocDate] */ '[%1]'  

Select * From [V_USK_SCRAP]
where U_Fecha >= @FechaInicio and U_Fecha <= @FechaFin

Y también funcionó… Cosa rara desde mi punto de vista pero que deja 2 posibles soluciones

de hecho… Les dejo la imagen para que vean que ambos funcionaron:

1 me gusta