on 05-10-2016 3:23 PM
Buenos días foro
estoy realizando una consulta para sacar mis inventarios y movimientos por hora y por fecha.
ya tengo la consulta la cual si me muestra los movimientos. pero por ejemplo si quiero saber los movimientos de las 22:00 horas asta las 7:30 horas me manda cantidades en 0 y si las hago de las 7:30 a las 22:00 horas si me las da.
es decir cuando selecciono un rango de un solo día si me muestra los daos pero si selecciono un horario que comienza en un día y termina en el siguiente no me muestra nada.
esta es mi consulta.
/* Select * From [dbo].[OWTR] T0 */
Declare @FecIni DateTime
Declare @FecFin DateTime
Declare @HorIni Int
Declare @HorFin Int
/* Where */
select @FecIni /* T0.[DocDate] */= '[%0]'
/* And */
Select @FecFin /* T0.[DocDate] */= '[%1]'
/* And */
Select @HorIni /* T0.[DocTime] */= '[%2]'
/* And */
Select @HorFin /* T0.[DocTime] */= '[%3]'
SELECT DISTINCT T.ItemCode, T.ItemName,
A.OnHand +
IsNull((SELECT Sum(B.Quantity)
FROM [dbo].RPD1 B INNER JOIN [dbo].ORPD A2 ON B.DocEntry = A2.DocEntry
WHERE B.ItemCode=T.ItemCode AND A2.DocDate BETWEEN @FecIni AND @FecFin and A2.DocTime BETWEEN @HorIni and @HorFin and A2.Canceled='N'),0) +
ISNULL((SELECT SUM(Y.Quantity)
FROM [dbo].OWTR X INNER JOIN [dbo].WTR1 Y ON Y.DocEntry=X.DocEntry
WHERE Y.ItemCode=T.ItemCode AND X.DocDate BETWEEN @FecIni AND @FecFin AND DocTime BETWEEN @HorIni and @HorFin and Y.FromWhsCod = 'MP' AND Y.WhsCode = 'WIP'),0)as 'stock historial',
IsNull((SELECT Sum(B.Quantity)
FROM [dbo].PDN1 B INNER JOIN [dbo].OPDN A1 ON B.DocEntry = A1.DocEntry
WHERE B.ItemCode=T.ItemCode AND A1.DocDate BETWEEN @FecIni AND @FecFin and A1.DocTime BETWEEN @HorIni and @HorFin and A1.Canceled='N'),0) as 'Entradas de Mescancia',
IsNull((SELECT Sum(B.Quantity)
FROM [dbo].RPD1 B INNER JOIN [dbo].ORPD A2 ON B.DocEntry = A2.DocEntry
WHERE B.ItemCode=T.ItemCode AND A2.DocDate BETWEEN @FecIni AND @FecFin and A2.DocTime BETWEEN @HorIni and @HorFin and A2.Canceled='N'),0) as'Devoluciones',
ISNULL((SELECT SUM(Y.Quantity)
FROM [dbo].OWTR X INNER JOIN [dbo].WTR1 Y ON Y.DocEntry=X.DocEntry
WHERE Y.ItemCode=T.ItemCode AND X.DocDate BETWEEN @FecIni AND @FecFin AND DocTime BETWEEN @HorIni and @HorFin and Y.FromWhsCod = 'MP' AND Y.WhsCode = 'WIP'),0)as 'Cantidad Entregada',
A.OnHand as 'Inventario'
/*ISNULL((SELECT SUM(Y.Quantity)
FROM [dbo].OIGE X INNER JOIN [dbo].IGE1 Y ON Y.DocEntry=X.DocEntry
WHERE Y.ItemCode=T.ItemCode AND X.DocDate >=@FecIni AND X.DocDate<= @FecFin and Y.WhsCode = 'WIP' AND Y.AcctCode = '1200.2.1' AND X.Comments LIKE '%Nº-OT%'),0) as'Cantidad Consumida'*/
FROM OITM T Inner JOin OITW A on T.ItemCode = A.ItemCode
where T.SellItem = 'N' and T.PrchSeItem = 'Y' AND A.WhsCode = 'MP'
GROUP BY T.ItemCode, T.ItemName,A.OnHand
ORDER BY T.ItemCode
Antonio,
Lo ideal en estos casos es que guardes en una variable la fecha inicio y hora inicio de manera concatenada (p. ej. 201605021723) y en otra variable la final. Y modifica tus filtros de tiempo usando estas dos variables para compararlas -vs- el docdate y doctime (convertido a 4 dígitos este último) tmbn concatenados, convirtiéndolos a varchar ya que de lo contrario va sumar docdate y doctime en lugar de concatenarlos.
Se vería algo así
Where Docdate+Doctime between @FechaHoraInicio and @FechaHoraFin
No puse la conversión de datos, ya que la intención es mostrarte el esquema del Where.
Espero haberme explicado.
Saludos,
JC.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Aquí va un ejemplo de concatenar la fecha y hora de la tabla:
Convert(nvarchar(8),DocDate,112) + Right('0000' + convert(nvarchar(4),DocTime),4)
Puedes basarte en esto para tratar de concatenar la fecha hora de las variables de acuerdo al tipo de dato, que de hecho son los mismos que DocDate y DocTime.
Saludos,
JC.
Estimado, al parecer Juan Carlos, si no estoy equivocado, quiere que concatenes después del where en este caso, osea where Convert(nvarchar(8),DocDate,112) + Right('0000' + convert(nvarchar(4),DocTime),4) between '201605110915' and '201605111000', esto creo que sería la solución a su consulta.
Saludos cordiales
Así es, Claudio.
Antonio los valores de fecha que muestra Claudio tienes que reemplazarlos por la concatenación de tus variables de FechaInicio y Hora Inicio y luego otra concatenación para la FechaFin y HoraFin. Recuerda que tus variables son tipo Datetime y Int, hay que convertirlas a Nvarchar o varchar.
ok muchas gracias.
tengo algo así en mi código
/* Select * From [dbo].[OWTR] T0 */
Declare @FechaHoraInicio varchar
Declare @FechaHoraFin varchar
/* Where */
select @FechaHoraInicio /* T0.[DocDate]*/= '[%0]'
/* And */
Select @FechaHoraFin /* T0.[DocDate] */= '[%1]'
SELECT DISTINCT T.ItemCode, T.ItemName,
IsNull((SELECT Sum(B.Quantity)
FROM [dbo].PDN1 B INNER JOIN [dbo].OPDN A1 ON B.DocEntry = A1.DocEntry
WHERE B.ItemCode=T.ItemCode AND A1.Canceled='N' AND Convert(nvarchar(8),A1.DocDate,112) + Right('0000' + convert(nvarchar(4),A1.DocTime),4) between @FechaHoraInicio and @FechaHoraFin),0) as 'Entradas de Mescancia',
IsNull((SELECT Sum(B.Quantity)
FROM [dbo].RPD1 B INNER JOIN [dbo].ORPD A2 ON B.DocEntry = A2.DocEntry
WHERE B.ItemCode=T.ItemCode AND A2.Canceled='N' AND Convert(nvarchar(8),A2.DocDate,112) + Right('0000' + convert(nvarchar(4),A2.DocTime),4) between @FechaHoraInicio and @FechaHoraFin ),0) as 'Devoluciones',
ISNULL((SELECT SUM(Y.Quantity)
FROM [dbo].OWTR X INNER JOIN [dbo].WTR1 Y ON Y.DocEntry=X.DocEntry
WHERE Y.ItemCode=T.ItemCode AND Y.FromWhsCod = 'MP' AND Y.WhsCode = 'WIP' AND Convert(nvarchar(8),X.DocDate,112) + Right('0000' + convert(nvarchar(4),X.DocTime),4) between@FechaHoraInicio and @FechaHoraFin),0) as 'Cantidad Entregada',
A.OnHand as 'Inventario'
FROM OITM T Inner JOin OITW A on T.ItemCode = A.ItemCode
where T.SellItem = 'N' and T.PrchSeItem = 'Y' AND A.WhsCode = 'MP'
GROUP BY T.ItemCode, T.ItemName,A.OnHand
ORDER BY T.ItemCode
lo que no se muy bien es como puedo hacer para que al momento de declarar mis variables de@FechaHoraInicio Y @FechaHoraFin varchar me pida los datos de fecha y tiempo o como puedo hacer para que me pida la cadena como tal que es lo que va a contener la fecha y la hora
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
quedaría algo así
SELECT DISTINCT T.ItemCode, T.ItemName,
IsNull((SELECT Sum(B.Quantity)
FROM [dbo].PDN1 B INNER JOIN [dbo].OPDN A1 ON B.DocEntry = A1.DocEntry
WHERE B.ItemCode=T.ItemCode AND A1.Canceled='N' AND Convert(nvarchar(8),A1.DocDate,112) + Right('0000' + convert(nvarchar(4),A1.DocTime),4) between '201605010915' and '201605111000'),0) as 'Entradas de Mescancia',
IsNull((SELECT Sum(B.Quantity)
FROM [dbo].RPD1 B INNER JOIN [dbo].ORPD A2 ON B.DocEntry = A2.DocEntry
WHERE B.ItemCode=T.ItemCode AND A2.Canceled='N' AND Convert(nvarchar(8),A2.DocDate,112) + Right('0000' + convert(nvarchar(4),A2.DocTime),4) between '201605010915' and '201605111000' ),0) as'Devoluciones',
ISNULL((SELECT SUM(Y.Quantity)
FROM [dbo].OWTR X INNER JOIN [dbo].WTR1 Y ON Y.DocEntry=X.DocEntry
WHERE Y.ItemCode=T.ItemCode AND Y.FromWhsCod = 'MP' AND Y.WhsCode = 'WIP' AND Convert(nvarchar(8),X.DocDate,112) + Right('0000' + convert(nvarchar(4),X.DocTime),4) between '201605010915' and '201605111000'),0)as 'Cantidad Entregada',
A.OnHand as 'Inventario'
FROM OITM T Inner JOin OITW A on T.ItemCode = A.ItemCode
where T.SellItem = 'N' and T.PrchSeItem = 'Y' AND A.WhsCode = 'MP'
GROUP BY T.ItemCode, T.ItemName,A.OnHand
ORDER BY T.ItemCode
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
104 | |
12 | |
11 | |
6 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.