Query con Detalles en Consulta "Where"

Buen día,

tengo un problema con Query que estoy diseñando al momento de colocar la sentencia Where con condiciones de Fecha (DocDate) y colocar las condiciones para que el usuario coloque los paramentos, sale un error que todo el Query esta mal, pero cuando cuando yo defino las fechas a modo de prueba, funciona correctamente.

como puedo colocar las condiciones para que el Query funcione. Estos son los paramentos con los que tengo problema:

WHERE T1.DocDate >= [%0] AND T1.DocDate <= [%1] con esta sentencia no funciona.

WHERE T1.DocDate >= ‘20190101’ AND T1.DocDate <= ‘20191231’ definiendo las fechas si funciona pero ya no tendría la opción de seleccion de fechas.

de ante mano gracias por su ayuda.

saludos.

Prueba asi:

WHERE T1.DocDate >= '[%0]' AND T1.DocDate <= '[%1]'
1 me gusta

Si no nos pasas la consulta entera, poco podremos aportar.
Eso es que tienes algun union o union all o alguna agrupación group by o subcosultas y los parámetros en sentencias complejas no siempre funcionan.

1 me gusta

Buen día, @meqs

Esta es la consulta entera

SELECT T2.SeriesName "Oficina", T1.DocDate "Fecha", iif(T1.DocSubType = '--','Factura','Abono') "Tipo de Documento", T1.DocNum "No de Documento",T0.BaseDocNum " No de Remision", NULL "Desc. de Devolucion", (SELECT BaseDocNum FROM DLN1 WHERE DocEntry =  T0.BaseEntry AND LineNum = T0.BaseLine) 'Doc. de Ventas', (SELECT NumAtCard FROM ORDR WHERE DocEntry = T0.BaseEntry AND LineNum = T0.BaseLine) "Orden de Compra",  (SELECT Comments FROM ORDR WHERE DocEntry = T0.BaseEntry AND LineNum = T0.BaseLine) "Descripcion", T1.CardCode "Codigo Cliente", T1.CardName "Nombre Cliente", T3.SlpName "Agente", T0.WhsCode "Almacen",T0.ItemCode "Codigo de Material",T0.Dscription "Descripcion de Material", 

CASE T1.DocSubType
WHEN 'DN' THEN -T0.U_SalesQty
WHEN '--' THEN T0.U_SalesQty
END AS 'Ctd. Facturada',

T0.U_SalesUoM "Un. Medida Venta",T0.U_Largo "Largo", T0.U_Ancho "Ancho", T0.U_Altura "Espesor", T0.U_Densidad "Densidad", 

CASE T1.DocSubType
WHEN 'DN' THEN 0
WHEN '--' THEN T0.Quantity
 END AS 'Peso Neto Kg',

T0.U_PriceSal "Precio Lista",

CASE T1.DocSubType
WHEN 'DN' THEN -((T0.U_PriceSal*T0.U_SalesQty)/T0.Quantity)
WHEN '--' THEN ((T0.U_PriceSal*T0.U_SalesQty)/T0.Quantity)
END AS 'Precio Facturado',

CASE T1.DocSubType
WHEN 'DN' THEN -T0.U_PriceSal*T0.U_SalesQty
WHEN '--' THEN T0.U_PriceSal*T0.U_SalesQty
END AS 'Importe Facturado', 

T0.Currency "Moneda", 

CASE T1.DocSubType
WHEN 'DN' THEN -T0.TotalFrgn
WHEN '--' THEN T0.TotalFrgn
END AS 'Monto USD',

CASE T1.DocSubType
WHEN 'DN' THEN -T0.LineTotal
WHEN '--' THEN T0.LineTotal
END AS 'Monto Pesos', 

CASE T1.DocSubType
WHEN 'DN' THEN -iif(T0.Currency = 'USD', T0.LineTotal, T0.LineTotal)
WHEN '--' THEN iif(T0.Currency = 'USD', T0.LineTotal, T0.LineTotal)
END AS 'USD a Pesos',

T0.GrossBuyPr "Costo MN", T0.GrossBuyPr*T0.Quantity "Costo Total", T1.DocRate*T0.GrossBuyPr*T0.Quantity "Costo Total USD", T1.DocRate "Tipo de Cambio", T5.GroupName "Segmento", T6.U_Linea_de_Producto "Linea de Producto", T6.U_Tipo_de_Corte "Tipo de Corte", 

CASE T1.U_SaleType 
WHEN 'VG' THEN 'Venta general'
WHEN 'EX' THEN 'Extraordinario'
END AS "Tipo de Venta" 

FROM INV1  T0 

INNER JOIN OINV  T1 ON T0.DocEntry = T1.DocEntry 
INNER JOIN NNM1  T2 ON T1.Series = T2.Series 
INNER JOIN OSLP T3 ON T0.SlpCode = T3.SlpCode 
INNER JOIN OCRD T4 ON T1.CardCode = T4.CardCode 
INNER JOIN OCRG T5 ON T4.GroupCode = T5.GroupCode 
INNER JOIN OITM T6 ON T0.ItemCode = T6.ItemCode
WHERE T1.DocDate >= '20190101' AND  T1.DocDate <= '20191231'

Ya intente como lo comentas al inicio del mensaje pero aun siguen con el error.

Te envió una combinación de Ambos.

En la imagen veo un error en donde pasas el parametro de fecha, tienes ‘[&1]’ y deberías tener ‘[%0]’.

Validalo

2 Me gusta

Cuando tienes subselect los parámetros no suelen funcionar desde SAP

1 me gusta

Este men tiene razón, así debes Hacerlo pon la fecha manual en el Query.

Buen día, @juliancab

Aun así colocando '[%0] sigue sin funcionar

únicamente funciona colocando la fecha de forma manual, @IKASHIMI no puedo dejar la fecha manual debido a que es un Query que se va compartir con mas usuarios que no sabrían como colocar los rangos de fecha para obtener su información.

Buen dia, @meqs

que otra opción tendría para obtener esta información que se encuentra en otras tablas y no tienen realcion entre si.

saludos.

Compañero en la captura que proporcionas se aprecia que estás usando el símbolo & en lugar del de porcentaje %, no será ese el detalle?

HI.

Tu codigo tiene varios detalles,. Lo que hace referencia a campos de usuario los deje comentados, ya que no tengo esos campos creados en mi BD. el segundo select lo deje comentado para que lo corrigas segun como esta el primero.

slds

SELECT T2.SeriesName 'Oficina', T1.DocDate 'Fecha', 
iif(T1.DocSubType = '–','Factura','Abono') 'Tipo de Documento', T1.DocNum 'No de Documento',T0.BaseDocNum " No de Remision", NULL 'Desc. de Devolucion', (SELECT BaseDocNum FROM DLN1 WHERE DocEntry = T0.BaseEntry AND LineNum = T0.BaseLine) 'Doc. de Ventas', 
(SELECT NumAtCard FROM ORDR A0 INNER JOIN RDR1 A1 ON A0.DocEntry = A1.DocEntry WHERE A0.DocEntry = T0.BaseEntry AND A1.LineNum = T0.BaseLine AND A0.DocDate >= '[%0]' AND A0.DocDate <= '[%1]') 'Orden de Compra', 
--(SELECT Comments FROM ORDR WHERE DocEntry = T0.BaseEntry AND LineNum = T0.BaseLine) 'Descripcion', 
T1.CardCode 'Codigo Cliente', T1.CardName 'Nombre Cliente', T3.SlpName 'Agente', T0.WhsCode 'Almacen',T0.ItemCode 'Codigo de Material',T0.Dscription 'Descripcion de Material',

--CASE T1.DocSubType
--WHEN 'DN' THEN - T0.U_SalesQty
--WHEN '–' THEN T0.U_SalesQty
--END AS 'Ctd. Facturada',

--T0.U_SalesUoM 'Un. Medida Venta',T0.U_Largo 'Largo', T0.U_Ancho 'Ancho', T0.U_Altura 'Espesor', T0.U_Densidad 'Densidad',

CASE T1.DocSubType
WHEN 'DN' THEN 0
WHEN '–' THEN T0.Quantity
END AS 'Peso Neto Kg',

--T0.U_PriceSal 'Precio Lista',

--CASE T1.DocSubType
--WHEN 'DN' THEN -((T0.U_PriceSalT0.U_SalesQty)/T0.Quantity)
--WHEN '–' THEN ((T0.U_PriceSalT0.U_SalesQty)/T0.Quantity)
--END AS 'Precio Facturado',

--CASE T1.DocSubType
--WHEN 'DN' THEN -T0.U_PriceSalT0.U_SalesQty
--WHEN '–' THEN T0.U_PriceSalT0.U_SalesQty
--END AS 'Importe Facturado',

T0.Currency 'Moneda',

--CASE T1.DocSubType
--WHEN 'DN' THEN -T0.TotalFrgn
--WHEN '–' THEN T0.TotalFrgn
--END AS 'Monto USD',

--CASE T1.DocSubType
--WHEN 'DN' THEN -T0.LineTotal
--WHEN '–' THEN T0.LineTotal
--END AS 'Monto Pesos',

--CASE T1.DocSubType
--WHEN 'DN' THEN -iif(T0.Currency = 'USD', T0.LineTotal, T0.LineTotal)
--WHEN '–' THEN iif(T0.Currency = 'USD', T0.LineTotal, T0.LineTotal)
--END AS 'USD a Pesos',

T0.GrossBuyPr 'Costo MN', /*T0.GrossBuyPr*T0.Quantity 'Costo Total',*/ T1.DocRate,/*T0.GrossBuyPr*T0.Quantity 'Costo Total USD' ,*/ T1.DocRate 'Tipo de Cambio', T5.GroupName 'Segmento'

--,T6.U_Linea_de_Producto 'Linea de Producto', T6.U_Tipo_de_Corte 'Tipo de Corte',

--CASE T1.U_SaleType
--WHEN 'VG' THEN 'Venta general'
--WHEN 'EX' THEN 'Extraordinario'
--END AS 'Tipo de Venta'

FROM INV1 T0

INNER JOIN OINV T1 ON T0.DocEntry = T1.DocEntry
INNER JOIN NNM1 T2 ON T1.Series = T2.Series
INNER JOIN OSLP T3 ON T0.SlpCode = T3.SlpCode
INNER JOIN OCRD T4 ON T1.CardCode = T4.CardCode
INNER JOIN OCRG T5 ON T4.GroupCode = T5.GroupCode
INNER JOIN OITM T6 ON T0.ItemCode = T6.ItemCode
WHERE T1.DocDate >= '[%0]' AND T1.DocDate <= '[%1]'

Buen dia, @l.villarreal

En la imagen no se distingue correctamente, pero se esta utilizando [%0] y [%1].

Los estoy colocando de estas dos formas [%0], [%1] y de esta otra forma ‘[%0]’, ‘[%1]’ de ninguna de estas formas funciona el Query

mi SQL no esta reconociendo el comando IIF, tal vez te este marcando algo similar

funciona lo acabo de probrar, ya lo demas es que valides tus campos que sean correctos y que te muestre los datos que quieres.

1 me gusta

Buen dia, @bfierro

Voy a realizar este cambio y te comento como quedo.

saludos

Buen día, @bfierro

Es correcto, funciona la solución que me propusiste, solo para recapitular y que me quede mas claro.

Entonces cuando realice una subconsulta, esta también debe contener los mismos rangos que el de la consulta general.

Como en el caso que compartí. Pregunto esto porque voy a seguir haciendo Querys que deben tener subconsultas y que van ser consultados por periodos, no quisiera que fallara algún otro por este tipo de subconsultas.

Sin mas por el momento me despido.

Saludos y nuevamente gracias por el apoyo.