Fórum Atualizando estoque em tabela de movimentação de produtos #465650

03/01/2014

0

Bom dia galera,

Estou com um problema para atualizar o estoque em uma tabela minha de movimentação de produtos.

A minha dúvida é que nela eu faço várias operações com os meus produtos tais como:

Entrada, Saída, devolução do cliente, devolução do fornecedor, perda e consumo interno.

Algumas operações são de inclusão no estoque e outras são de retirada de estoque!

Só que a minha dúvida é a seguinte em uma tabela master detail onde master é a movimentação e o detalhe são os itens como eu vou fazer isso?

Porque se eu incluir 10 produtos e clicar no cancelar do master ele cancela todos os meus itens e vai dar baixa no estoque.
Nícolas Braz

Nícolas Braz

Responder

Posts

03/01/2014

Leandro Chiodini

Boa Dia Lucas.
O correto é você fazer a opção de cancelar um produto no detalhe dele,
assim mostraria o master, e cada detalhe com seu botao de cancelar,
assim sendo quando você cancelar um unico produto, as alterações necesarias seriam feitas somente naquele produto,.
nesta linha, somente o filho seria atualizado.

att,
Leandro
Responder

Gostei + 0

03/01/2014

Nícolas Braz

Boa Dia Lucas.
O correto é você fazer a opção de cancelar um produto no detalhe dele,
assim mostraria o master, e cada detalhe com seu botao de cancelar,
assim sendo quando você cancelar um unico produto, as alterações necesarias seriam feitas somente naquele produto,.
nesta linha, somente o filho seria atualizado.

att,
Leandro


Bom dia,

Então o meu relacionamento é master detail com dbexpress! O meu salvar e excluir eu não dou um applyupdates por isso que quando ele clica no cancelar do master ele acaba voltando tudo.
Responder

Gostei + 0

03/01/2014

Leandro Chiodini

Se quiser tenta postar uma imagem de como ficou a tela,
para ver o conceito dela, e tentar te ajudar.
att,
chiodini
Responder

Gostei + 0

03/01/2014

Nícolas Braz

Vamos lá!

Aqui eu clico no meu incluir.

http://imageshack.us/photo/my-images/837/dn9x.jpg/

Lancei 3 produtos na minha movimentação.

http://imageshack.us/photo/my-images/849/ger3.jpg/

Deletei 2 produtos.

http://imageshack.us/photo/my-images/194/c0dm.jpg/

Cliquei em cancelar e abri novamente o registro.

http://imageshack.us/photo/my-images/845/f74i.jpg/

Dai eles voltam!

Mas eles voltam porque é um relacionamento master detail até ai tudo bem! Porque no meu deletar eu não posso dar um applyupdates porque se não ele faz o apply para as duas tabelas. :(
Responder

Gostei + 0

03/01/2014

Leandro Chiodini

O teu cancelar
da um rollback
por isso que eles voltam
provavelmente.

Responder

Gostei + 0

03/01/2014

Nícolas Braz

Sim, é que pelo menos do jeito que eu aprendi a fazer master detail com dbexpress o master que dá o applyupdates! Poderia me dizer como reverter isso? Porque se eu dou um applyupdates no detail ele acontece também no master.
Responder

Gostei + 0

03/01/2014

Leandro Chiodini

Segue esse video
que fala muito sobre esse assunto.
veja se te ajuda

http://cc.embarcadero.com/author/795118
Responder

Gostei + 0

03/01/2014

Nícolas Braz

Vou assistir.
Responder

Gostei + 0

03/01/2014

Nícolas Braz

Ops! Abriu vários vídeos qual seria?
Responder

Gostei + 0

03/01/2014

Leandro Chiodini

To sem acesso aqui,
tenho isso na minha base de conhecimento.
mais procura ai por DbExpress

att,
chiodini
Responder

Gostei + 0

03/01/2014

Nícolas Braz

Teria mais alguma informação? Achei uns 4,5 vídeos com dbexpress.
Responder

Gostei + 0

03/01/2014

Leandro Chiodini

Algo relacionado com
Mestre/Detail
Tsimpledataset
FDD 2008

att
Responder

Gostei + 0

03/01/2014

Nícolas Braz

Com master/detail achei só 1.

ClientDataSet Master Detail With 3 Tables - Delphi 2010
Responder

Gostei + 0

03/01/2014

João Françozo

BOA TARDE NICOLAS.

TEM COMO FAZER POR TRIGGER NO BANCO DE DADOS, COMO VOCÊ JÁ TEM A TABELA DE SALDOS CRIADOS, FICA FACIL DE FAZER.

ABAIXO UMA TRIGGER QUE USO PARA FAZER ESSAS OPERAÇÕES, VAI VERIFICAR O PARAMETRO DE CONFIGURAÇÃO DE CADA OPERAÇÃO, ESSA É DE INSERT AI TEM QUE FAZER DE DELETE E UPDATE.



UPDATE TBPRODUTOSALDO SET
SALDO_PRI = SALDO_PRI + ISNULL(QTDE_PRI, 0),
SALDO_AUX = SALDO_AUX + ISNULL(QTDE_AUX, 0),
SALDO_COMPRA_PEND = SALDO_COMPRA_PEND + ISNULL(QTDE_COMPRA_PEND, 0),
SALDO_VENDA_PEND = SALDO_VENDA_PEND + ISNULL(QTDE_VENDA_PEND, 0),
SALDO_V1 = SALDO_V1 + ISNULL(QTDE_SALDO_V1, 0),
SALDO_V2 = SALDO_V2 + ISNULL(QTDE_SALDO_V2, 0),
SALDO_V3 = SALDO_V3 + ISNULL(QTDE_SALDO_V3, 0),
SALDO_V4 = SALDO_V4 + ISNULL(QTDE_SALDO_V4, 0),
SALDO_V5 = SALDO_V5 + ISNULL(QTDE_SALDO_V5, 0)
FROM
(SELECT COD_FILIAL, COD_LOCAL, COD_PRODUTO, COD_REF, NUM_LOTE,
SUM(CASE
WHEN ATLZ_SALDO_PRI = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_PRI = 'DP' THEN -ISNULL(QTDE_PRI,0)
ELSE 0
END) AS QTDE_PRI,
SUM(CASE
WHEN ATLZ_SALDO_AUX = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_AUX = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_AUX,
SUM(CASE
WHEN SUBSTRING(ATLZ_SALDO_CPEND,1,1)='S' THEN ISNULL(QTDE_CMP,0)
WHEN SUBSTRING(ATLZ_SALDO_CPEND,1,1)='D' THEN -ISNULL(QTDE_CMP,0)
ELSE 0
END) AS QTDE_COMPRA_PEND,
SUM(CASE
WHEN SUBSTRING(ATLZ_SALDO_VPEND,1,1)='S' THEN ISNULL(QTDE_CMP,0)
WHEN SUBSTRING(ATLZ_SALDO_VPEND,1,1)='D' THEN -ISNULL(QTDE_CMP,0)
ELSE 0
END) AS QTDE_VENDA_PEND,
SUM(CASE
WHEN ATLZ_SALDO_V1 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V1 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V1 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V1 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V1,
SUM(CASE
WHEN ATLZ_SALDO_V2 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V2 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V2 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V2 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V2,
SUM(CASE
WHEN ATLZ_SALDO_V3 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V3 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V3 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V3 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V3,
SUM(CASE
WHEN ATLZ_SALDO_V4 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V4 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V4 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V4 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V4,
SUM(CASE
WHEN ATLZ_SALDO_V5 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V5 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V5 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V5 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V5
FROM INSERTED WHERE ATLZ_ESTOQUE='S'
GROUP BY COD_FILIAL, COD_LOCAL, COD_PRODUTO, COD_REF, NUM_LOTE) NOVO INNER JOIN TBPRODUTOSALDO TS
ON NOVO.COD_FILIAL = TS.COD_FILIAL AND
NOVO.COD_LOCAL = TS.COD_LOCAL AND
NOVO.COD_PRODUTO = TS.COD_PRODUTO AND
NOVO.COD_REF = TS.COD_REF AND
NOVO.NUM_LOTE = TS.NUM_LOTE

IF @@ROWCOUNT <> @QTD
BEGIN
INSERT INTO TBPRODUTOSALDO (COD_FILIAL,COD_LOCAL,COD_PRODUTO,COD_REF,NUM_LOTE,
SALDO_PRI,SALDO_AUX,SALDO_COMPRA_PEND,SALDO_VENDA_PEND,SALDO_V1,SALDO_V2,SALDO_V3,SALDO_V4,SALDO_V5)
SELECT DISTINCT
NOVO.COD_FILIAL, NOVO.COD_LOCAL, NOVO.COD_PRODUTO, NOVO.COD_REF, NOVO.NUM_LOTE,
SUM(CASE
WHEN ATLZ_SALDO_PRI = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_PRI = 'DP' THEN -ISNULL(QTDE_PRI,0)
ELSE 0
END) AS QTDE_PRI,
SUM(CASE
WHEN ATLZ_SALDO_AUX = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_AUX = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_AUX,
SUM(CASE
WHEN SUBSTRING(ATLZ_SALDO_CPEND,1,1)='S' THEN ISNULL(QTDE_CMP,0)
WHEN SUBSTRING(ATLZ_SALDO_CPEND,1,1)='D' THEN -ISNULL(QTDE_CMP,0)
ELSE 0
END) AS QTDE_COMPRA_PEND,
SUM(CASE
WHEN SUBSTRING(ATLZ_SALDO_VPEND,1,1)='S' THEN ISNULL(QTDE_CMP,0)
WHEN SUBSTRING(ATLZ_SALDO_VPEND,1,1)='D' THEN -ISNULL(QTDE_CMP,0)
ELSE 0
END) AS QTDE_VENDA_PEND,
SUM(CASE
WHEN ATLZ_SALDO_V1 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V1 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V1 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V1 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V1,
SUM(CASE
WHEN ATLZ_SALDO_V2 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V2 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V2 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V2 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V2,
SUM(CASE
WHEN ATLZ_SALDO_V3 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V3 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V3 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V3 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V3,
SUM(CASE
WHEN ATLZ_SALDO_V4 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V4 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V4 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V4 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V4,
SUM(CASE
WHEN ATLZ_SALDO_V5 = 'SP' THEN ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V5 = 'SA' THEN ISNULL(QTDE_AUX,0)
WHEN ATLZ_SALDO_V5 = 'DP' THEN -ISNULL(QTDE_PRI,0)
WHEN ATLZ_SALDO_V5 = 'DA' THEN -ISNULL(QTDE_AUX,0)
ELSE 0
END) AS QTDE_SALDO_V5
FROM INSERTED NOVO LEFT OUTER JOIN TBPRODUTOSALDO TS
ON TS.COD_FILIAL = NOVO.COD_FILIAL AND
TS.COD_LOCAL = NOVO.COD_LOCAL AND
TS.COD_PRODUTO = NOVO.COD_PRODUTO AND
TS.COD_REF = NOVO.COD_REF AND
TS.NUM_LOTE = NOVO.NUM_LOTE
WHERE NOVO.ATLZ_ESTOQUE='S' AND TS.COD_FILIAL IS NULL
GROUP BY NOVO.COD_FILIAL, NOVO.COD_LOCAL, NOVO.COD_PRODUTO, NOVO.COD_REF, NOVO.NUM_LOTE
END
Responder

Gostei + 0

03/01/2014

Leandro Chiodini

procura por
FDD 2008

esse eh o cara
:D
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar