Autor Tema: CONSULTA SQL PARA KARDEX  (Leído 14757 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
CONSULTA SQL PARA KARDEX
« en: Abril 23, 2011, 05:06:17 pm »
Bueno primeramente un saludo a todo el foro la cual me saco de muchas pero muchas dudas por la cual estoy muy agradecido por los temas publicados; en si!!! mi duda es la siguiente estuve buscando como hacer una consulta en la que consuga una calculo para el kardex de productos; encontre una respuesta publicada por nuestro compañero YvanB pero lo intente y no me resulto; tal vez por que yo uso access, en fin mi duda es la siguiente:
Yo tengo una tabla en la cual se denomina Tabla_Det_Movimientos la cual se ve de la siguiente forma:
[ID]----- [DETALLE]----- [INGRESOS]----- [SALIDAS]
1______compra_________100__________0
2______venta____________0__________50
3______venta____________0__________20

lo que necesito es realizar una consulta en la cual me de el siguiente resultado.

[ID]----- [DETALLE]----- [INGRESOS]----- [SALIDAS]-----[SALDO]
1______compra_________100__________0_________100
2______venta____________0__________50_________50
3______venta____________0__________20_________30

Muchas gracias de antemano a todos por las posibles respuesta u opiniones.
saludos desde La Paz Bolivia.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:CONSULTA SQL PARA KARDEX
« Respuesta #1 en: Abril 23, 2011, 06:10:31 pm »
Hola.
Le explicación que di corre para cualquier base de datos, no hay restricción por el motor que uses.

Otro punto. Sobre el diseño de la tabla no veo necesario que esa sea la estructura. Bien podria ser:
ID----Detalle----Movim
1____Compra___ 100
2____Venta_____-50
3____Venta_____-20

Incluso si no quieres usar el signo negativo tendrías entonces que preguntar por el campo Detalle pero mejor es usar el signo.
Como fuere, siguiendo tu table, para armar el informe que quieres tendrías que hacerlo con un Stored Procedure o alli si usando ADO para armar el campo de saldos ya que tendrías que recorrer cada registro. Lo haremos con ADO:

Haces tu consulta normal pero agregas el campo Saldo
rs.Open (" Select ID, Detalle, Ingresos, Salidas, ' ' as Saldo "), dB, adOpenDynamic, adLockPessimistic

y luego vas llenando en el campo Saldo los saldos.
<<<< Aqui el código sugerido >>>
Código: [Seleccionar]
If rs.RecordCount > 0 Then
   For i = 1 To rs.RecordCount
      If Val(rs!Ingresos) > 0 Then Movimiento = Val(rs!Ingresos) Else Movimiento = Val(rs!Egresos)
      If i = 1 Then
         rs!SALDO.Value = Movimiento + SaldoPrevio  '<-- esto si usas rango de fechas y ya traes un saldo previo
         NuevoSaldo = Movimiento + SaldoPrevio
      Else
         rs!SALDO.Value = Movimiento + NuevoSaldo
         NuevoSaldo = Movimiento + NuevoSaldo
      End If
      rs.Update
      rs.MoveNext
   Next i
End If

y luego llena el grid o reporte con el rs y listo.
Me encuentras en YAcosta.com

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Re:CONSULTA SQL PARA KARDEX
« Respuesta #2 en: Abril 23, 2011, 06:51:50 pm »
Estimado YvanB te comento que acabo de realizar tu sugerencia y me lanza el siguiente error:

La Operación en varios pasos generó errores, compruebe los valores de estado.

que estoy realizan mal; no lo se, te envio el codigo:

With rs
    If .State = 1 Then .Close
    .Open "SELECT id, detalle, ingresos, salidas, '' as SALDO from Tabla_Det_Movimientos;", base, adOpenDynamic, adLockPessimistic
    If .RecordCount > 0 Then
        For i = 1 To .RecordCount
                 If Val(!Ingresos) > 0 Then Movimiento = Val(!Ingresos) Else Movimiento = Val(!salidas)
      If i = 1 Then
         !SALDO = Movimiento + SaldoPrevio '<-- esto si usas rango de fechas y ya traes un saldo previo
         NuevoSaldo = Movimiento + SaldoPrevio
      Else
         !SALDO.Value = Movimiento + NuevoSaldo
         NuevoSaldo = Movimiento + NuevoSaldo
      End If
      .Update
      .MoveNext
   Next i
End If
End With
« última modificación: Abril 23, 2011, 07:16:35 pm por Ozcarj »

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:CONSULTA SQL PARA KARDEX
« Respuesta #3 en: Abril 23, 2011, 07:08:23 pm »
Por eso puse que era una sugerencia, debes ajustarlo a tu proyecto.
Imagino que el error te sale en el Open o donde te sale? si puedes manda una captura de pantalla.
Yo tengo ahora mismo un código bastante similar y levanta bien.

Quizá te falta alguna referencia???

Me encuentras en YAcosta.com

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Re:CONSULTA SQL PARA KARDEX
« Respuesta #4 en: Abril 23, 2011, 07:30:45 pm »
te comento que lo adapte tal como me sugeriste pero me da el error en la siguiente linea.

!SALDO = Movimiento + SaldoPrevio

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:CONSULTA SQL PARA KARDEX
« Respuesta #5 en: Abril 23, 2011, 07:34:27 pm »
jajajaja, pucha doc... si te fijas mas abajito del código original verás la respuesta, por la velocidad de editar el código me borre alli una palabra.
En vez de:
!SALDO = Movimiento + SaldoPrevio

debe ir:
!SALDO.Value = Movimiento + SaldoPrevio
Me encuentras en YAcosta.com

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Re:CONSULTA SQL PARA KARDEX
« Respuesta #6 en: Abril 23, 2011, 07:41:16 pm »
te comento que acabo de editarlo adicionando el VALUE, pero lamentablemente me sigue saliendo el error; bueno de todos modos muchisimas gracias por la sugerencia y por la molestias de responder tan pronto, saludos

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:CONSULTA SQL PARA KARDEX
« Respuesta #7 en: Abril 23, 2011, 07:44:38 pm »
Bueno.
Me encuentras en YAcosta.com

Ozcarj

  • Bytes
  • *
  • Mensajes: 17
  • Reputación: +1/-1
    • Ver Perfil
Re:CONSULTA SQL PARA KARDEX
« Respuesta #8 en: Abril 23, 2011, 07:59:59 pm »
Estimado YvanB te comento que acabo de añadir el campo SALDO a la tabla asi funciono; muchas gracias por tu sugerencia me ayudo mucho.

crema20

  • Bit
  • Mensajes: 1
  • Reputación: +0/-0
    • Ver Perfil
Re:CONSULTA SQL PARA KARDEX
« Respuesta #9 en: Mayo 03, 2011, 08:13:07 pm »
Buenas tardes YvanB...tengo el mismo problema sobre la consulta del kardex y quisiera que me enseñes a hacerlo en un stored procedure en Sql Server...muchas gracias por la atencion prestada

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:CONSULTA SQL PARA KARDEX
« Respuesta #10 en: Mayo 04, 2011, 02:15:24 am »
Hola crema20, no se si te percataste pero no trabajo con SQL Server, trabajo con FirebirdSQL, aunque el código (script de SqlServer) pueda ser casi el mismo seria conveniente que veas como se crea en SQL Server.

En lineas generales se trata de crear un SP que actualiza el campo SALDO de tu tabla, claro primero lees con otro SP el saldo anterior y lo almacenas en una variable llamada por ejemplo saldoanterior. La joda esta en que aqui hay un campo de Ingreso y otra de Salida asi que tienes que leer primero el de ingreso y si es cero asumes el de salida... me parece enredoso, por eso yo trabajo con una sola columna y para los ingresos utlizo valores positivos y para los egresos negativos.

CREATE PROCEDURE set_ActualizaSaldo(ID Integer, Cant Integer) as
BEGIN
   Update MiTabla Set Saldo = SaldoAnterior + :Cant Where Id = :ID;
END

Por ejemplo no se como pasan los parámetros en sqlServer, no se si usa ":Variable" ... checa eso.
Me encuentras en YAcosta.com

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:CONSULTA SQL PARA KARDEX
« Respuesta #11 en: Mayo 04, 2011, 12:52:51 pm »
Yvan, lo que el quiere es algo simple....! Fijate en la siguiente consulta..!

Código: [Seleccionar]

SELECT ID,Detalle,'Ingresos'=
      CASE
         WHEN Detalle = 'compra' THEN SUM(monto)
      END
,'Salidas'=
      CASE
         WHEN Detalle = 'venta' THEN SUM(monto)
      END
From Tu_tabla
group by ID, Detalle


Ahora bien, alli te agrupa y te muestra todos los ingresos y todas las salidas ya totalizadas...! Verifica y nos comentas...!
Miguel Núñez.

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:CONSULTA SQL PARA KARDEX
« Respuesta #12 en: Mayo 04, 2011, 01:01:42 pm »
Yo tengo una tabla en la cual se denomina Tabla_Det_Movimientos la cual se ve de la siguiente forma:
[ID]----- [DETALLE]----- [INGRESOS]----- [SALIDAS]
1______compra_________100__________0
2______venta____________0__________50
3______venta____________0__________20

lo que necesito es realizar una consulta en la cual me de el siguiente resultado.

[ID]----- [DETALLE]----- [INGRESOS]----- [SALIDAS]-----[SALDO]
1______compra_________100__________0_________100
2______venta____________0__________50_________50
3______venta____________0__________20_________30

Ahora bien, si solo quieres hacer ese tipo de consulta, pues simple...! Realiza lo siguiente...

Código: [Seleccionar]
SQL="Select ID, Detalle, Ingresos, Salidas, abs(Ingresos - Salidas) as Saldo from Tabla_Det_Movimientos"
Es evidente que el resultado en caso de que los registros sean salidas, dara negativo, ya que si resto 0 ingresos menos 50 salidas, me arrojara (-50).. Pero simplemente aplicas el abs(campo) y listo, el te da el valor absoluto que siempre es positivo..! Y es el abs que ves en la consulta...! Saludos...!
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:CONSULTA SQL PARA KARDEX
« Respuesta #13 en: Mayo 04, 2011, 01:17:30 pm »
Solo veo un problema a nivel funcional acerca de:
abs(Ingresos - Salidas)

Si hacemos esto, no creas que confundirá el ver que todos los valores son positivos??? ejemplo
Ingreso  Egreso  Saldo
100____ _____ _100
_______ __50_ __50
_20____ _____ __70
_______ __80_ __10    <--- aquí debería decirme -10, considero que el Abs no debe ir.

Ahora, si tu software Ozcarj tiene como política NO CONCENTIR saldo negativos (como es mi caso, mi software no permite jamas vender si no hay stock, por tanto nunca quedaría una saldo negativo) por ende el Abs no seria necesario tampoco.
Me encuentras en YAcosta.com

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:CONSULTA SQL PARA KARDEX
« Respuesta #14 en: Mayo 04, 2011, 02:25:57 pm »
Pero el expone que ambos resultados sean positivos?  :-\ a menos que su planteamiento no este claro del todo..!
Miguel Núñez.