Duda con parametros de SAP en una consulta

Hola

Me pasó algo curioso: Al hacer un query en SAP que incluye varias tablas y al colocar dentro del WHERE algo como: T0.Fecha BETWEEN [%0] AND [%1], en el momento de ejecutarlo me da el error " (SWEI).
Al quitar los parámetros [%0] y [%1] y colocarlos directamente funciona (Tambien funciona perfectamente en SQL con al colocar “@parametro”).
No encontré el porqué del problema ni como solucionarlo, final no lo deje como consulta sino que hice un informe con Crystal. Sin embargo quisiera saber si a alguien le ha pasado lo mismo y que se puede hacer, porque no me quisiera quedar con esa duda.

Saludos y gracias desde ya por sus comentarios.

Hola @juliosura.

Es muy molesto cuando te encuentras con este tipo de inconvenientes, en lo personal me pille este código y me ha servido de maravilla:

DECLARE @FechaInicial AS DATETIME 
DECLARE @FechaFinal AS DATETIME 
 

SELECT @FechaInicial = T0.F_RefDate, @FechaFinal = T0.T_RefDate From OFPR T0 Where T0.F_RefDate = '[%0]' AND T0.T_RefDate = '[%1]' 
SET @FechaInicial = CONVERT(DATETIME, '[%0]', 112) 
SET @FechaFinal = CONVERT(DATETIME, '[%1]', 112)

Al final sustituyes los valores en tu Where:

Where T0.DocDate Between @FechaInicial AND @FechaFinal

Espero te sirva, saludos.

3 Me gusta

Hola juliosura, no estaras tomando el T0.Fecha de un alias Fecha y no directamante de la dbo?? porque con el T0.[DocDate] si funciona

1 me gusta

Hola @Nestor_Romo, comunmente esto sucede cuando es un query más estructurado con select anidados, etc. Con un Query básico no existe problema alguno con los parámetros, además esto me ha sucedido solo con la versión 9.2 de SAP Business One, con versiones como la 8.81 y 9.1 nunca tuve detalles con los parámetros.

Saludos.

Hola @Nestor_Romo

No, no estoy tomando de un alias, escribí T0.Fecha como ejemplo, pero realmente es: T0.DocDate.

Hola @Gera_Mendez
Lo acabo de probar y no me funciona, ahora me sale el error "(WLS1)
Ha de ser algo de la versión, uso SAP 9.2 y es cierto que con versiones anteriores no da ese problema. Además es cierto es un query estructurado, con los query sencillos no pasa.
Muchas gracias.

hazlo con una vista o funcion en SQl y despues lo jalas del generador de consultas del SAP metiendo los parametros

Te sugiero que cierres SAP Business One, lo abras nuevamente y ejecutes el query, no se que ha pasado con esta nueva versión pero da mucho problemas con el generador de consultas, mira este es un ejemplo que funciona sin problemas:

DECLARE @FechaInicial AS DATETIME 
DECLARE @FechaFinal AS DATETIME 
 

SELECT @FechaInicial = T0.F_RefDate, @FechaFinal = T0.T_RefDate From OFPR T0 Where T0.F_RefDate = '[%0]' AND T0.T_RefDate = '[%1]' 
SET @FechaInicial = CONVERT(DATETIME, '[%0]', 112) 
SET @FechaFinal = CONVERT(DATETIME, '[%1]', 112)  

SELECT T0.DocDate as Fecha, (Select TA.City FROM OCRD TA Where T0.CardCode = TA.CardCode) as Ciudad  FROM OINV T0 Where T0.DocDate Between @FechaInicial  AND @FechaFinal

Sigo pendiente.

Saludos.

1 me gusta

@Nestor_Romo me hizo pensar en los alias y cómo hacia referencia a las tablas, así que revise y me encontre con lo siguiente:

En el generador de consulta cuando busco una tabla definida por usuario queda así:

Por lo tanto en el query, en el FROM, colocaba [dbo].[@PRESENTACION], según yo esa era lo forma correcta y a decir verdad funcionaba hasta que quise usar parámetros; pero probe quitando el “[dbo].” y para sorpresa mía funcionó.
Hay momentos cuando una sugerencia te ayuda mucho ya que ves las cosas desde otro punto de vista.

El query que me compartiste @Gera_Mendez ahora funciona perfectamente, gracias a los dos, al juntar sus ideas y/o comentarios pude encontrar la respuesta y de paso optimizar la consulta ya que ahora no se tiene que seleccionar según una fecha específica sino según los períodos contables establecidos.

Muchísimas gracias.

si amigo, tiene que ser con la etiqueta T0… entonces pondras mi post como solucion?? jeje
no te creas, lo bueno que ya quedo

Creo que @juliosura fue muy claro cuando comentó:

No, no estoy tomando de un alias, escribí T0.Fecha como ejemplo, pero realmente es: T0.DocDate.

Así que nada tiene que ver el uso del alias T0 con la solución, jeje.

Saludos.

pero se baso en mi respuesta Gera por eso le busco por ahi, pero ya depende de el, aunque no creas que me muero por una etiqueta en mi respuesta, yo solo quiero aprender

La impresión fue otra pero todo depende de la percepción de cada persona.

Me da gusto tu ímpetu por aprender, debemos basar nuestra vida en un continuo aprendizaje de todos los ámbitos de la misma.

Saludos.

1 me gusta