DUVIDA SQL SERVER

GUSTAVOCANALLI 31/08/2009 00:43:54
#321423
E AI GALERA BLZ
OIA MAIS UM TOPICO AI...HEHE

SEGUINTE...TENHO ESSAS 3 TABELAS
CREATE TABLE PIZ_PRODUTO
(
PRO_IN_CODIGO INT IDENTITY
CONSTRAINT PIZ_PK_PRODUTO PRIMARY KEY,
PRO_ST_NOME VARCHAR(50) NOT NULL,
FOR_IN_CODIGO INT NOT NULL
CONSTRAINT PRO_FK_PIZ_FOR FOREIGN KEY REFERENCES PIZ_FORNECEDOR,
CAT_IN_CODIGO INT NOT NULL
CONSTRAINT PRO_FK_PIZ_CAT FOREIGN KEY REFERENCES PIZ_CATEGORIA,
PRO_RE_COMPRA NUMERIC(12,2),
PRO_RE_VENDA NUMERIC(12,2),
PRO_IN_ESTOQUE INT,
PRO_IN_ESTOQUEMINIMO INT,
PRO_CH_COMPOSTO CHAR(3)
)

CREATE TABLE PIZ_INGREDIENTE
(
ING_IN_CODIGO INT IDENTITY
CONSTRAINT PIZ_PK_INGREDIENTE PRIMARY KEY,
ING_ST_NOME VARCHAR(50) NOT NULL,
UNI_IN_CODIGO INT NOT NULL
CONSTRAINT PRO_FK_PIZ_UNI FOREIGN KEY REFERENCES PIZ_UNIDADE,
ING_IN_ESTOQUE INT
)

CREATE TABLE PIZ_ITEMINGREDIENTE
(
ITI_IN_CODIGO INT IDENTITY
CONSTRAINT PIZ_PK_ITEMINGREDIENTE PRIMARY KEY,
ING_IN_CODIGO INT NOT NULL
CONSTRAINT ITI_FK_PIZ_ING FOREIGN KEY REFERENCES PIZ_INGREDIENTE,
PRO_IN_CODIGO INT NOT NULL
CONSTRAINT ITI_FK_PIZ_PRO FOREIGN KEY REFERENCES PIZ_PRODUTO,
ITI_IN_QUANTIDADE INT
)

UM PRODUTO PODE SER COMPOSTO (SER FEITO POR INGREDIENTES)
AI EU CRIEI A TABELA INGREDIENTES E A TABELA ITEMINGREDIENTE PRA VINCULAR OS DOIS...

O PROBLEMA...é QUE NA HORA DA VENDA...EU NAO ESTOU CONSEGUINDO SUBTRAIR A QTDE DE ESTOQUE DA TABELA INGREDIENTES...

TEM QUE VERIFICAR NA TABELA ITEMINGREDIENTES TODOS OS INGREDIENTES REFERENTES AQUELE PRODUTO, E RETIRAR A QTDE ESPECIFICADA (NA TABELA ITEMINGREDIENTE MSM) DA TABELA INGREDIENTE

ALGUEM PODE ME DAR UMA AJUDA?
FOXMAN 31/08/2009 01:29:06
#321424
Voce só esqueceu de postar na seção SQL / DATABASE.

Vamos lá.

Eu tenho em meu cadastro de produto a seguinte situação

Um KIT DE PRODUTO A (codigo 111) é composto por :
2 - PRODUTO B (codigo 222)
1 - PRODUTO C (codigo 333)
1 - PRODUTO D (codigo 444)
2 - PRODUTO E (codigo 555)

De forma que ao vender 1 KIT DE PRODUTO A (codigo 111) A estarei dando baixa no estoque de :

2 - PRODUTO B (codigo 222)
1 - PRODUTO C (codigo 333)
1 - PRODUTO D (codigo 444)
2 - PRODUTO E (codigo 555)
e do próprio KIT DE PRODUTO A (codigo 111)

Minha tabela possue além dos campos normais para um cadastro de produto , um campo chamado PRODUTOCOMPOSTO do tipo BOOLEAN(verdadeiro ou falso)


Para os produtos :
2 - PRODUTO B (codigo 222)
1 - PRODUTO C (codigo 333)
1 - PRODUTO D (codigo 444)
2 - PRODUTO E (codigo 555)

Esse valor é Falso, porém para o produto KIT DE PRODUTO A (codigo 111) , esse valor é verdadeiro.

Ae que vem o X da questão.

Tenho uma outra tabela chamada produtocomposto(mesmo nome do campo hehehe), e nela os seguintes campos :
codProdutoPrinciapal(no caso o codigo do KIT DE PRODUTO A (codigo 111))
codProdutoComposto(codigo dos produtos que farão parte do KIT)
qtde(quantidade de cada produto q fará parte do kit)
E no meu caso eu coloquei o campo DESCRIÇÃO, para facilitar minha vida.

O KIT DE PRODUTO A (codigo 111) é cadastrado normalmente, alterando apenas PRODUTOCOMPOSTO para verdadeiro.
é inserido na tabela produtocomposto os produtos que fazem parte desse kit.

Ficando mais ou menos assim :

codProdutoPrincipal | codProdutoComposto | Qtde | Descrição
___________________________________________________________
111 222 2 PRODUTO B
111 333 1 PRODUTO C
111 444 1 PRODUTO D
111 555 2 PRODUTO E

Na baixa do produto eu verifico se ele é composto ou não , caso seja dou dou baixa no estoque buscando a quantidade na tabela produtocomposto.
No meu caso eu adiciono os produtos vendidos em uma tabela chamada movprodsaida e somente no final da venda eu atualizo a tabela de produtos com base nos registros da tabela movprodsaida cujo codigo da venda = XXXXX

UPDATE PRODUTOS INNER JOIN MOVPRODSAIDA ON (PRODUTOS.CODPRODUTO = MOVPRODSAIDA.CODPRODUTO) SET PRODUTOS.ESTOQUE = PRODUTOS.ESTOQUE - MOVPRODSAIDA.QTDE WHERE ((MOVPRODSAIDA.IDVENDA) = XXXX


GUSTAVOCANALLI 31/08/2009 02:15:53
#321425
EU COLOQUEI ASSIM...MAS TAH DANDO ERRO

UPDATE
PIZ_INGREDIENTE
INNER JOIN
PIZ_ITEMINGREDIENTE
ON
PIZ_INGREDIENTE.ING_IN_CODIGO = PIZ_ITEMINGREDIENTE.ING_IN_CODIGO
RIGHT JOIN
PIZ_PRODUTO
ON
PIZ_PRODUTO.PRO_IN_CODIGO = PIZ_ITEMINGREDIENTE.PRO_IN_CODIGO
SET PIZ_INGREDIENTE.ING_IN_ESTOQUE = PIZ_INGREDIENTE.ING_IN_ESTOQUE - PIZ_ITEMINGREDIENTE.ITI_IN_QUANTIDADE
WHERE ((PIZ_PRODUTO.PRO_IN_CODIGO) = @PPRODUTO)

O ERRO é ESSE: Sintaxe incorreta próxima à palavra-chave [ô]INNER[ô]
FOXMAN 01/09/2009 08:21:30
#321521
Gustavo,

Vc tem 3 tabelas.

1 - Produtos
2 - Ingredientes
3 - ItemIngredientes.

Esta ultima quais dados são inseridos ???

Não estou entendendo o esquema e a regra que vc está implementando.


Cadastro de Produto
PIZZA DE CALABREZA.

Cadastro de Ingredientes
CALABREZA.

Itensingredientes
??????????????

Se consideramos que uma pizza de calabreza tem :

300 gr Calabreza
300 gr Mussarela
100 gr Azeitona

Na venda de uma pizza de calabreza teriamos que dar baixa em 3 itens + o proprio produto(pizza)

Diante disso um unico cadastro pode ser adotado.

Porem para os produtos montados(pizzas) deverá haver um campo q identifique que ele seja composto.

Com o codigo desse produto(pizza) vc adiciona os ingredientes e suas respectivas quantidades em uma tabela(no meu caso produtocomposto)

Eu trato os ingredientes e os produtos montatodos como o mesmo tipo de cadastro e ficam na mesma tabela.

O diferencial é que tenho a tabela de produto_composto, mov_saida_produto(registra as saidas dos produtos.)



Tópico encerrado , respostas não são mais permitidas