Query centros de costo con variables


#1

Buen día,

Tengo la siguiente query para centros de costo ,quiero que tenga mas de un parametro en esta caso quiero tener como parametro fecha del documento y el artículo , el problema es que si uso un AND entre los parametros fecha y item code, al dejar uno en blanco no trae nada y SI uso OR la combinación de parametros trae todos los resultados y no los filtrados.

SELECT T2.[DocDate] AS ‘Fecha de contabilización’, T2.[ItemCode] AS ‘Número de artículo’, T2.[OcrCode] AS ‘Norma de reparto’, T2.[OcrCode2] AS ‘Código del cálculo del costo 2’, T2.[AcctCode] AS ‘Código de cuenta’, T2.[LineTotal] AS ‘Total líneas’, T0.[Number] AS ‘Número de asiento’, T1.[DocEntry] AS ‘Número de documento’ FROM [dbo].[OJDT] T0 , [dbo].[OPCH] T1 INNER JOIN [dbo].[PCH1] T2 ON T2.[DocEntry] = T1.[DocEntry] WHERE T1.[DocEntry] = T0.[BaseRef] AND (T2.[DocDate] >=[%0] AND T2.[DocDate] <= [%1] OR T2.[ItemCode] >= [%2] AND T2.[ItemCode] <= [%3])

Alguien me podria ayudar con esto?

Gracias


#2

Lo que debes hacer es capturar lo que te coloquen en los campos [%0], [%1], [%2], [%3], y colocarlos primero en variables…

Luego en el Query les haces validaciones primero. si te dejan un valor de item code en blanco que vas a hacer??? traer todo? entonces actualizas las variables al primer y último código de artículo,
¿si no te ponen fecha? tomaras desde el inicio de los tiempos hasta hoy?? haces exactamente lo mismo, actualizas las variables con una fecha inicial (ejemplo 01-01-2000) hasta el día de hoy.

No soy de ponerle el código a la gente… les doy la idea de como lo deben hacer, colocarles el código es muy fácil y no se aprende.


#4

tambien puedes agregar el uso de las codiciones IS NULL o IS NOT NULL para ajustar la consulta mas especifica.


#5

Hice algo así pero me sigue sin funcionar…

DECLARE @FechaI AS datetime
SET @FechaI = /* T2.DocDate /[%0]
DECLARE @FechaF AS datetime
SET @FechaF = /
T2.DocDate /[%1]
DECLARE @ArticI AS char
SET @ArticI = /
T2.ItemCode /[%2]
DECLARE @ArticF AS char
SET @ArticF = /
T2.ItemCode */[%3]
SELECT T2.[DocDate] AS ‘Fecha de contabilización’, T2.[ItemCode] AS ‘Número de artículo’, T2.[OcrCode] AS ‘Norma de reparto’, T2.[OcrCode2] AS ‘Código del cálculo del costo 2’, T2.[AcctCode] AS ‘Código de cuenta’, T2.[LineTotal] AS ‘Total líneas’, T0.[TransId] AS ‘Número de asiento’, T1.[DocEntry] AS ‘Número de documento’ FROM [dbo].[OJDT] T0 , [dbo].[OPCH] T1 INNER JOIN [dbo].[PCH1] T2 ON T2.[DocEntry] = T1.[DocEntry] WHERE T1.[DocEntry] = T0.[BaseRef] and t0.transtype = ‘18’ AND (T2.[DocDate] >=@FechaI AND T2.[DocDate] <= @FechaF OR T2.[ItemCode] >= @ArticI AND T2.[ItemCode] <= @ArticF)

Tengo el siguiente error:

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword ‘DECLARE’. 2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword ‘SELECT’. 3). [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement ‘Valores definidos por usuario’ (CSHS) (s) could not be prepared.


#6

Pendiente de los asteriscos:

Tu código:
DECLARE @FechaI AS datetime
SET @FechaI = /* T2.DocDate / [%0]
DECLARE @FechaF AS datetime
SET @FechaF = / T2.DocDate / [%1]
DECLARE @ArticI AS char
SET @ArticI = / T2.ItemCode /[%2]
DECLARE @ArticF AS char
SET @ArticF = / T2.ItemCode */[%3]

Como debería de ser:

DECLARE @FechaI AS datetime
SET @FechaI = /* T2.DocDate */ [%0]
DECLARE @FechaF AS datetime
SET @FechaF = /* T2.DocDate */ [%1]
DECLARE @ArticI AS char
SET @ArticI = /* T2.ItemCode */ [%2]
DECLARE @ArticF AS char
SET @ArticF = /* T2.ItemCode */ [%3]

Un último detalle…
los Itemcode no son Varchar??? o Nvarchar?


#7

Los itemcode son Varchar, sigue sin funcionar la consulta… no se que se me puede estar pasando!!
No existen registros coincidentes ‘’ (SWEI) (ODBC -2028) [Mensaje 131-183]
Y si existen ya que los muestra sin parámetros


#8

Va a sonar raro lo que te voy a decir pero más raro es que funciona…

En sap: Herramientas - Consultas - Generador de Consultas.

Create una “consulta” mas o menos así como te muestro en esta pantalla

NOTA: Todos los campos que te muestro en la pantalla que sean seleccionados con un doble click, muy importante y principalmente para las condiciones mayor igual, menor igual, y los [%0] son lo mas importante que NO debes escribir sino darle doble click

No importa que no te traigas todos los campos, no importa que no sean los inner join correctos, no importa que no te traigas todos los campos… nada… no importa. Lo importante es que crees la consulta por este generador con esas condiciones que te dije antes y le des en “Ejecutar”

La idea es que te genere la pantalla de consulta mas o menos con algo así:

Ya ahí modificas la sección de SQL a lo que estás necesitando PERO… no cortes las partes de las variables… si puedes borra todo lo demás y deja los de las condicionales, copias y pegas tu codigo original y le dejas estos condicionales “nuevos” creados por el sistema…

Porqué suena todo esto loco?.. no se… me ha funcionado. Por alguna razón cuando hago los querys directo en la consulta nueva, y no le pongo los condicionales sino “a mano” el sistema me arroja errores como el que te arrojó a tí, mientras que si lo “engañamos” diciendole que él creó las variables [%0], [%1] y todos los demás deja de arrojar ese error.


#9

Te dije que era una locura pero funcionaba… xD


#10

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.