[firebase-br] RES: Firebird IBO ou Programador com erro
Jose Aparecido da Silva
joseasilva em bol.com.br
Sex Jun 4 10:57:08 -03 2010
Bom dia Marcio!
Gostaria de dar algumas dicas que demorei pra aprender e sofri bastante no
inicio, visto que utilizava antes o Paradox.
Aproveite o que te servir e descarta o resto
1. Não use aspas duplas para definir os nomes de tabelas e de campos na
criação do banco a não ser que seja realmente necessário. Não utilizar aspas
duplas facilita na escrita das sqls de consulta. Se você usa delphi vai
entender o que estou falando.
2. Quando se faz calculo com campos diretamente no sql, assegure-se que
sempre existira um valor, mesmo que zero. O FB, não sei sobre outros bancos,
não realiza operação com valores null. Por isso use sempre coalesce para
garantir que haverá um valor.
3. Não consegui enxergar erro na tua trigger. Só não será processada as tuas
linhas nas seguintes condições: new.Movimento não traz exatamente o literal
'Devolucao', 'Entrada' e por isso nunca encontrara igualdade. Coisa comum de
acontecer quando definimos o campo como char. No delphi o campo é preenchido
com espaços no final da string para completar o tamanho do campo.
Ou a linha esta sendo processada, mas por motivo de valor null o campo não
esta sendo processado, encontrado. Ou ainda, você pode estar dando um
rollback na operação executada.
[ ]'s
Jose Aparecido da Silva
Fasystem
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Marcio Alves de Almeida
Enviada em: quarta-feira, 2 de junho de 2010 15:59
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Firebird IBO ou Programador com erro
Pois eh seguindo os conselhos dos amigo
fiz esta Trigger
mas onde estou errando
Onde esta o erro pois só funciona a Primeira parte a 'venda'...
na venda a trigger funciona mas devolucao e outras nao funga
CREATE TRIGGER "MovSaida_BI" FOR "MovSaida" ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
/* Movimenta estoque dos produtos que foram marcados com Entrada ,
Devolucao,Venda, Estorno */
if (new."Movimento" = 'Venda') then
begin
update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" -
new."Quantidade"
where P."Cod_Produto" = new."Cod_Produto";
end
if (new."Movimento" = 'Devolucao') then
begin
update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" +
new."Quantidade"
where P."Cod_Produto" = new."Cod_Produto";
end
if (new."Movimento" = 'Entrada') then
begin
update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" +
new."Quantidade"
where P."Cod_Produto" = new."Cod_Produto";
end
if (new."Movimento" = 'Estorno') then
begin
update "Produto" P set P."Prod_UltimoEstoque" = P."Pro_Quantidade" -
new."Quantidade"
where P."Cod_Produto" = new."Cod_Produto";
end
END
2010/5/26 Marcio Alves de Almeida <net.marcio em gmail.com>:
> Tenho um sistema vendas rodado depois de fazer o pedido um cliente
> vai ateh um caixa pagar e nesse momento
> eh dado a baixa no estoque acontece essa semana em uma venda na hora
> da baixa do estoque aconteceu algo estranho tenho uma tabela aparte
> que guarda as movimentacoes dos produto tipo UltimoEstroque a
> quantidade de saida e Saldo depois da venda
> tipo Assim
> Cod UltimoEstoque Saida EstoqueAtual Hora cod_venda
> 1 500 10 490 07:10:10
> 255551
> 1 490 10 480 07:10:15
> 255555
> 1 480 20 460 07:10:22
> 255569
>
>
> acontece que em um determinada venda 1 produto foi dar baixa ao
> mesmo tempo e aconteceu isso
> 1 401 1 400 09:10:01
> 255571
>
> 1 400 1 399 09:10:22
> 255902
> 1 400 1 399 09:10:22
> 255940
>
> ele deveria ficar assim
>
> 1 399 1 398 09:10:22
> 255940
>
> Delphi 7 IBO 4.7.16 Firebird 2.0
> alguem tem uma luz sobre isso o que eu poderia fazer para nao
> acontecer isso
> uma vez que no tabela produtos nao deu baixa no estoque isso nao pode
> acontecer.
>
> If Q_Produto.RecordCount > 0 Then
> Begin
> Modulo.Q_MovSaida.Append;
> Modulo.Q_MovSaidaCod_Venda.Value :=
> Modulo.Q_VendaCod_Venda.Value;
> //*******************************************
> Modulo.Q_MovSaidaVen_NumNota.Value :=
> Modulo.Q_VendaVen_NumNota.Value;
> Modulo.Q_MovSaidaCod_Marca.Value :=
Q_ItemVendaCod_Marca.Value;
> //*******************************************
> Modulo.Q_MovSaidaCod_ItemVenda.Value :=
> Q_ItemVendaCod_ItemVenda.Value;
> Modulo.Q_MovSaidaCod_Produto.Value :=
> Q_ItemVendaCod_Produto.Value;
> Modulo.Q_MovSaidaCod_Grupo.Value :=
> Q_ItemVendaItem_Cod_Grupo.Value;
> Modulo.Q_MovSaidaCod_vendedor.Value :=
> Modulo.Q_VendaCod_Funcionario.Value;
> Modulo.Q_MovSaidaCod_Caixa.Value :=
> Modulo.Q_VendaCod_Caixa_Funcionario.Value;
> Modulo.Q_MovSaidaNumeroNota.Value :=
> Modulo.Q_VendaVen_NumNota.Value;
> Modulo.Q_MovSaidaSaida_Estorno.Value := 'Venda';
> Modulo.Q_MovSaidaData.Value :=
> Modulo.MemoriaDataServer.Value;
> Modulo.Q_MovSaidaPrecoUnit.Value :=
> Q_ItemVendaItem_VlrVenda.Value;
> Modulo.Q_MovSaidaQuantidade.Value :=
> Q_ItemVendaItem_QtddVenda.Value;
> Modulo.Q_MovSaidaHora.Value := Now;
> Modulo.Q_MovSaidaValorTotal.Value :=
Q_ItemVendaItem_Total.Value;
> Modulo.Q_MovSaidaCod_Fecha_Nota.Value :=
> Modulo.Q_Fecha_NotaCod_Fecha_Nota.Value;
> Modulo.Q_MovSaidaEstoqueAnterior.Value :=
> Q_ProdutoPro_Quantidade.Value;
> Modulo.Q_MovSaidaEstoqueAtual.Value :=
> Q_ProdutoPro_Quantidade.Value - Q_ItemVendaItem_QtddVenda.Value;
> Modulo.Q_MovSaida.Post;
>
> Q_Produto.Edit;
> Q_ProdutoPro_Quantidade.Value :=
> Q_ProdutoPro_Quantidade.Value - Q_ItemVendaItem_QtddVenda.Value;
> Q_ProdutoPro_DtUltimaVenda.Value :=
> Modulo.MemoriaDataServer.Value;
> Q_Produto.Post;
> end;
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista