cancel
Showing results for 
Search instead for 
Did you mean: 

consulta de inventario por hora y fecha

former_member220991
Participant
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

juancarlos_huerta
Contributor
0 Kudos

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.

former_member220991
Participant
0 Kudos

me puedes apoyar con algún ejemplo para concatenar

juancarlos_huerta
Contributor
0 Kudos

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.

former_member220991
Participant
0 Kudos

queda algo así

SELECT CONVERT(nvarchar(8),Variables FechaHoraInicio ,112) + Right('0000' + convert(nvarchar(4),Variables FechaHoraFin),4)

?????

Former Member
0 Kudos

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

juancarlos_huerta
Contributor
0 Kudos

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.

Answers (2)

Answers (2)

former_member220991
Participant
0 Kudos

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

former_member220991
Participant
0 Kudos

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

juancarlos_huerta
Contributor
0 Kudos

Sólo suple los valores 201605010915 y 201605111000 de acuerdo al comentario anterior.

Saludos

JC.