Manejo de inventarios

24/04/2004 - 16:29 por Gustavo | Informe spam
Amigos, no soy un experto en SQL,
Trabajo para una constructora, por lo que la tabla de Insumos o materiales
es muy extensa y variable, por lo que después de evaluar todas las
alternativas, un material se define de la siguiente forma
tblMateriales(1) tblPresentaMaterial (2) tblMarcaMaterial(3)
tblModeloMaterial(4) tblColorMaterial(5)
idMaterial idMaterial idMaterial
idMaterial idMaterial
NMaterial Presentacion MarcaMaterial
ModeloMaterial ColorMaterial
undMat Equivalencia
La combinación de estas 5 tablas nos permiten definir satisfactoriamente un
material
Una Orden de Compra (OC) (pedidos de mercaderia a los proveedores registra
la sgte informacion)
idObra (obra a la que pertenece), idMaterial (insumo), Presentacion (puede
ser nula), Marca (puede ser nula), Modelo (puede ser nula), Color (puede ser
nula), CantPedida

Una guía de recepcion(GR) (mercaderia enviada en un proveedor a una obra
registra la siguiente informacion)
idObra (obra a la que pertenece), idMaterial (insumo), Presentacion (puede
ser nula), Marca (puede ser nula), Modelo (puede ser nula), Color (puede ser
nula), CantRecibida

Quiero elaborar un reporte que presente: idObra, idMaterial, Presentacion,
Marca, Modelo, Color, CantPedida, CantRecibida, SaldoporLlegar

Este reporte podría tener la sgte información (ejemplo)
"XXX", 15, CAJA 25KG,NULL,NULL,NULL,25,15
"XXX",25,,PHILIPS,X1,AZUL,20,0
"XXX,25,,PHILIPS,X1,ROJO,40,10
...

Por ahora se me ocurrio, eliminar cualquier información de la tabla
inventarioObra (la que almacenara la información para el reporte) y hacer un
SELECT DISTINCT de idMaterial, Presentacio,Marca, Modelo, Color de las c/u
de las 2 tablas y con un cursor, agregar una única combinacion de
idMaterial, Presentacion, Marca, Modelo, Color en la tabla
"inventarioObra", y luego actualizar este insumo con lo pedido y lo recibido
y el saldoporLlegar

Pero lo encuentro un poco engorroso, se les ocurren otras alternativas,
descarto un trigger porque ya tengo información almacenada en las tablas de
OC y GR

Disculpen lo extenso, pero preferí colocar toda la información para que no
hayan dudas sobre la información que se maneja.

Gracias
Gustavo
 

Leer las respuestas

#1 Javier Loria
25/04/2004 - 04:32 | Informe spam
Hola Gustavo:
Parece que hoy no es mi dia para escribir SQL pero talvez te funciona:
=SELECT Ordenado.IdObra
, Ordenado.IdMaterial
, COALESCE(Ordenado.Presentacion,Recibido.Presentacion)
, COALESCE(Ordenado.Marca,Recibido.Marca)
, COALESCE(Ordenado.Modelo,Recibido.Modelo)
, COALESCE(Ordenado.Color,Recibido.Color)
, COALESCE(CantPedida, 0) AS CantPedida
, COALESCE(CantRecibida, 0) AS CantRecibida
, COALESCE(CantPedida, 0)-COALESCE(CantRecibida, 0) AS saldoporLlegar
FROM (SELECT IdObra
, IdMaterial
, Presentacion
, Marca
, Modelo
, Color
, SUM(CantPedida) AS CantPedida
FROM OC
GROUP BY IdObra
, IdMaterial
, Presentacion
, Marca
, Modelo
, Color) as Ordenado
CROSS JOIN (SELECT IdObra
, IdMaterial
, Presentacion
, Marca
, Modelo
, Color
, SUM(CantRecibida) AS CantRecibida
FROM Gr
GROUP BY IdObra
, IdMaterial
, Presentacion
, Marca
, Modelo
, Color) AS Recibido
ON (Ordenado.IdObra=Recibido.IdObra)
AND (Ordenado.IdMaterial=Recibido.IdMaterial)
AND ((Ordenado.Presentacion=Recibido.Presentacion) OR
((ISNULL(Ordenado.Presentacion) AND ISNULL(Recibido.Presentacion))))
AND ((Ordenado.Marca=Recibido.Marca) OR ((ISNULL(Ordenado.Marca)
AND ISNULL(Recibido.Marca))))
AND ((Ordenado.Modelo=Recibido.Modelo) OR
((ISNULL(Ordenado.Modelo) AND ISNULL(Recibido.Modelo))))
AND ((Ordenado.Color=Recibido.Color) OR ((ISNULL(Ordenado.Color)
AND ISNULL(Recibido.Color))))
= Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Gustavo" wrote in message
news:
Amigos, no soy un experto en SQL,
Trabajo para una constructora, por lo que la tabla de Insumos o materiales
es muy extensa y variable, por lo que después de evaluar todas las
alternativas, un material se define de la siguiente forma
tblMateriales(1) tblPresentaMaterial (2) tblMarcaMaterial(3)
tblModeloMaterial(4) tblColorMaterial(5)
idMaterial idMaterial idMaterial
idMaterial idMaterial
NMaterial Presentacion MarcaMaterial
ModeloMaterial ColorMaterial
undMat Equivalencia
La combinación de estas 5 tablas nos permiten definir satisfactoriamente


un
material
Una Orden de Compra (OC) (pedidos de mercaderia a los proveedores registra
la sgte informacion)
idObra (obra a la que pertenece), idMaterial (insumo), Presentacion (puede
ser nula), Marca (puede ser nula), Modelo (puede ser nula), Color (puede


ser
nula), CantPedida

Una guía de recepcion(GR) (mercaderia enviada en un proveedor a una obra
registra la siguiente informacion)
idObra (obra a la que pertenece), idMaterial (insumo), Presentacion (puede
ser nula), Marca (puede ser nula), Modelo (puede ser nula), Color (puede


ser
nula), CantRecibida

Quiero elaborar un reporte que presente: idObra, idMaterial, Presentacion,
Marca, Modelo, Color, CantPedida, CantRecibida, SaldoporLlegar

Este reporte podría tener la sgte información (ejemplo)
"XXX", 15, CAJA 25KG,NULL,NULL,NULL,25,15
"XXX",25,,PHILIPS,X1,AZUL,20,0
"XXX,25,,PHILIPS,X1,ROJO,40,10
...

Por ahora se me ocurrio, eliminar cualquier información de la tabla
inventarioObra (la que almacenara la información para el reporte) y hacer


un
SELECT DISTINCT de idMaterial, Presentacio,Marca, Modelo, Color de las


c/u
de las 2 tablas y con un cursor, agregar una única combinacion de
idMaterial, Presentacion, Marca, Modelo, Color en la tabla
"inventarioObra", y luego actualizar este insumo con lo pedido y lo


recibido
y el saldoporLlegar

Pero lo encuentro un poco engorroso, se les ocurren otras alternativas,
descarto un trigger porque ya tengo información almacenada en las tablas


de
OC y GR

Disculpen lo extenso, pero preferí colocar toda la información para que no
hayan dudas sobre la información que se maneja.

Gracias
Gustavo


Preguntas similares