Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2006
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 21
NickName Va por buen camino
Question Costo de Inventario

Hola.
Desde hace dias estoy batallando con esto que me pidio mi cliente; necesito hacer un reporte donde muestre las mercancias que existen en almacen, sumando el precio de compra de cada una de las mercancias opteniendo asi el costo del inventario. Bueno para esto el tiene que introducir de que fecha a que fecha se hara este calculo; Para lograr esto ami se me ocurrio hacer 2 tablas:
Código SQL [-]
HISTORIAL_COMPRAS (
    COD_HISTORIAL_COMPRA  INTEGER NOT NULL,
    COD_MERCANCIA         VARCHAR(7),
    FECHA_COMPRA          DATE
);

HISTORIAL_VENTAS (
    COD_HISTORIAL_VENTAS  INTEGER NOT NULL,
    COD_MERCANCIA         VARCHAR(7),
    FECHA_VENTA           DATE
);
Donde boy guardando cada compra y venta que se van haciendo registro por registro por ejemplo: si compro 4 Tv guardo 4 veces su codigo 0000009.
Bien ahora esas tablas en las pruebas que estoy haciendo tienen los siguientes datos:

Código SQL [-]
COD_HISTORIAL_COMPRA  COD_MERCANCIA   FECHA_COMPRA
        1               0000009       2006-10-06
        2               0000009       2006-10-06
        3               0000009       2006-10-06
        4               0000009       2006-10-06

Código SQL [-]
COD_HISTORIAL_VENTAS  COD_MERCANCIA   FECHA_VENTA
        1               0000009       2006-10-07
        2               0000009       2006-10-08

Donde he vendido esa Tv 2 Veces pero en fechas distintas; En la consulta que se hace si la hago del 2006-10-06 al 2006-10-08, en mi resultado tendrian que estar solo 2 Tv y se sumaria su precio de compra de esas 2 Tvs.

Bueno mi problema es que no puedo lograr eso, el codigo de la consulta que hago es este:
Código SQL [-]
Select HC.Cod_Mercancia
From   Historial_Compras HC
Where  Hc.Fecha_Compra >='06.10.2006' And
       Hc.Fecha_Compra <='06.10.2006' And
       (Hc.Cod_Mercancia)
       Not In (Select HV.Cod_Mercancia
               From   Historial_Ventas HV
               Where  HV.Fecha_Venta >= '06.10.2006' And
                      HV.Fecha_Venta <= '06.10.2006')
Aqui cuando no se hiso ninguna venta en esa fecha si me muestra todas las ventas pero si cambio ha una fecha que si aya hecho alguna venta me desaparece todos los registros aunque se aya vendido 1 nadamas en esa fecha...
Código SQL [-]
Select HC.Cod_Mercancia
From   Historial_Compras HC
Where  Hc.Fecha_Compra >='06.10.2006' And
       Hc.Fecha_Compra <='07.10.2006' And
       (Hc.Cod_Mercancia)
       Not In (Select HV.Cod_Mercancia
               From   Historial_Ventas HV
               Where  HV.Fecha_Venta >= '06.10.2006' And
                      HV.Fecha_Venta <= '07.10.2006')
la verdad estoy en la oscuridad ya intente otras formas y nada... alguien que me pueda iluminar con alguna idea de como lograr esto... o si existe otra forma de lograr lo que necesito... se lo agradeceria muchisimo...
__________________
Saludos...
Responder Con Cita
  #2  
Antiguo 07-10-2006
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
A veces sucede que los motores de bases de datos te incluyen la parte de tiempo, por que no pruebas limitando los campos a que solo validen la parte de la fecha?.



Por cierto, que motor de base de datos usas?.
Responder Con Cita
  #3  
Antiguo 08-10-2006
JulioGO JulioGO is offline
Miembro
 
Registrado: ago 2004
Posts: 94
Poder: 20
JulioGO Va por buen camino
Costo de Inventario

Hola NickName:

Tengo yo realizo el proceso de costear el inventario de un almacen de la siguiente manera: en una tabla tengo los datos de la compra y en otro los de la venta(cabeceras), cada una con su respectiva tabla de detalles. Es con las tablas de detalles con las q trabajo. En la tabla detalles de compras es donde guardo el precio de compra, y en la tabla detalles de ventas el precio de venta.

Luego lo q hago es mediante vistas, unir los datos de la cabecera(fecha, proveedor/cliente, id_articulo, precio compra, precio venta). Una vista para lo q es compras y otra para lo q es ventas.

De ahi uno las dos vistas mandando el rango de fechas q desea procesar y voy realizando el costo de inv. Todo esto ultimo en un procedimiento almacenado:

Aqui te envio el procedimiento:

Código SQL [-]
create procedure costeo_articulo(codart, fecini, fecfin)
results(tipo, fecha, proveed_cliente, cantidad, precio, total, precio_costo)
for select tipo, fecha, 
from (
     select 'C' tipo, fecha, proveedor proveed_cliente, cantidad, precio_compra
       from vista_compras
      where codart=:codart and fecha between :fecini and :fecfin
    union all
    select 'V' tipo, fecha, cliente proveed_cliente, cantid, precio_venta
      from vista_ventas
      where codart=:codart and fecha between :fecini and :fecfin
)
order by fecha
into :tipo, :fecha, roveed_cliente, :cantidad, recio do
begin
 total = recio * :cantidad;
 if (:tipo = 'C') then /*si el mov. es compras realiza el precio de costo*/
      precio_costo = :cantidad/recio;
 else
     total = recio_costo * :cantidad;
 suspend;
end

Si revisas el codigo el procedimiento realiza el proceso de costeo por articulo
q lo puedes anexar a otro procedimeinto para poder sacar el costeo de todos los articulos

Espero te sirva.

Saludos
Responder Con Cita
  #4  
Antiguo 08-10-2006
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 21
NickName Va por buen camino
Thumbs up

Hola.
Gracias por contestar...perdon si se me paso poner con que estoy trabajando... Uso Delphi7, Firebird 1.0, IBx como conexión.

Cita:
JulioGo: Espero te sirva
Claro que si me sirve hasta q llego la luz... Muchas Gracias ahora nadamas deja probar la forma que dices aver que sale.... y les cuento.

Cita:
JulioGo: Si revisas el codigo el procedimiento realiza el proceso de costeo por articulo q lo puedes anexar a otro procedimeinto para poder sacar el costeo de todos los articulos
Si esta super bien lo Pruebo y les cuento...
GRACIAS...
__________________
Saludos...
Responder Con Cita
  #5  
Antiguo 09-10-2006
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 21
NickName Va por buen camino
Hola.

Segun yo ya resolvi lo mas importante q era sacar el costo de cada mercancia q existiera en almacen... les pongo lo que hice, bueno primero 2 vistas como me recomendo JulioGo:
Código SQL [-]
CREATE VIEW VISTA_COMPRAS(
    COD_PROVEEDOR,
    FECHA_COMPRA,
    PRECIO_COMPRA,
    COD_MERCANCIA,
    CANTIDAD)
AS
select  C.Cod_Proveedor, C.Fecha_Compra, P.Precio_Compra, LC.Cod_Mercancia, LC.Cantidad
From    Compras C, Lineas_Compra LC, Precios P
where   LC.Cod_Compra = C.Cod_Compra And
        LC.Cod_Mercancia = P.Cod_Mercancia And
        C.Cancelada = 'NO'

Código SQL [-]
CREATE VIEW VISTA_VENTAS(
    FECHA_VENTA,
    COD_MERCANCIA,
    CANTIDAD)
AS
select  N.Fecha_Venta, LN.Cod_Mercancia, LN.Cantidad
From    Notas N, Lineas_Nota LN
where   LN.Cod_Nota = N.Cod_Nota

Luego mi SP no habia hecho uno en mi vida... sera por eso q la variable Total_Inventario no me toma el valor q le digo... chequenlo, Jusgenlo y hechenme otra ayudadita para ver por q esa variable no me toma ningun valor:
Código SQL [-]
CREATE PROCEDURE COSTEO_INVENTARIO (
    FECHA_INICIO DATE,
    FECHA_FIN DATE)
RETURNS (
    FECHA_COMPRA DATE,
    COD_PROVEEDOR INTEGER,
    COD_MERCANCIA VARCHAR(7),
    PRECIO_COMPRA DECIMAL(15,2),
    CANTIDAD INTEGER,
    TOTAL_MERCANCIA DECIMAL(15,2),
    TOTAL_INVENTARIO DECIMAL(15,2))
AS
DECLARE VARIABLE CANTIDAD_VENTA INTEGER;
begin
For Select Cod_Proveedor, Fecha_Compra, Precio_Compra, Cod_Mercancia, Cantidad
From Vista_Compras C Where C.Fecha_Compra Between :Fecha_Inicio And :Fecha_Fin
Order By Fecha_Compra
Into :Cod_Proveedor, :Fecha_Compra, :Precio_Compra, :Cod_Mercancia, :Cantidad Do
Begin
   /* cuanto se ha vendido */
   Select Count(Cod_Mercancia)
   From Vista_Ventas V Where V.Cod_Mercancia = :Cod_Mercancia And V.Fecha_Venta Between :Fecha_Inicio And :Fecha_Fin
   Into :Cantidad_Venta;
   /* Operaciones */
   Cantidad = Cantidad - :Cantidad_Venta;
   Total_Mercancia = Precio_Compra * Cantidad;
   /* Se puede hacer esto en un SP ? por q es la variable q no toma valor */
   Total_Inventario = Total_inventario + Total_Mercancia;
  suspend;
end
End

Segun las pruebas q he realizado funciona bien exepto por la variable Total_Inventario ya comentada de hay en fuera todo bien

Se me estaba olvidando comentar q sumo el codigo de Mercancia de las ventas por q si una mercancia la vendo 2 veces en una Nota genero 2 Registros con el mismo codigo esto es por los numeros de serie q son distintos... bueno ojala y me aya explicado...
ha y esta super esto de los SP...
__________________
Saludos...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Inventario de Hardware vichovi API de Windows 3 03-01-2005 15:35:10
Costo de DelphiPack AGAG4 DelphiPACK 4 11-10-2004 22:20:23
Controlar inventario? AbcXxx Varios 4 12-06-2004 00:54:13
Costo del Software francisco182 Varios 1 17-04-2004 10:18:00
Costo de mi aplicación. Walterdf Varios 1 24-05-2003 02:41:09


La franja horaria es GMT +2. Ahora son las 06:54:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi