Pirambu! Postado Dezembro 24, 2006 Denunciar Share Postado Dezembro 24, 2006 Eu preciso lançar pedidos, em um DbGrid onde eu possa informar um codigo do produto e a quantidade, e na mesma linha retorne o total de entrada, saida e saldo do mesmo produto exemplocodigo - produto - quantidade - total entrada - total saida - saldo12002 - peça A - 122 - 530 - 300 - 23023251 - peça B - 200 - 400 - 150 - 250o total entrada, eu criei uma query1 onde uso select SUM (entradaPA.Quantidade) AS TotalEntrada FROM entradaPA;o Total Saida, eu criei uma query2 onde usoselect SUM (SaidaPA.Quantidade) AS TotaSaida FROM SaidaPA;criei uma tableItensPedidos para onde o codigo e quantidade devem irmais não funciona,alguém poderia me indicar a melhor forma. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 25, 2006 Denunciar Share Postado Dezembro 25, 2006 Pirambú!, a tableItensPedidos é a tabela associada ao DBGrid correto?!O uso das query's para obter os totais está correto. Porém, esses totais são por código do produto, então, você deve parametrizar suas query's para obter o total referente determinado produto.Eu faria mais ou menos assim:Criaria, na tabela tableItensPedidos, campos calculados para armazenar os totais, que serão apresentados no DBGrid (essas colunas serão ReadOnly). Estes campos, são inicializados(preenchidos) no evento OnCalcField da tabela. Assim, neste evento, você abre suas query's passando como parâmetro o campo código do produto (conforme mensionei antes) e atribui o total ao respectivo campo. O saldo (também campo calculado) seria obtido após a obtenção do valor de entrada e saída, também neste evento. Bom, essas contas você sabe fazer, a questão era onde fazer.Não esqueça de observar o comportamento de Quantidade_Entrada, com relação ao fato do valor Quantidade informada.Ex. 1) Novo item no pedido (Insert/Append). - quantidade digitada 100 - total entrada era 530, então talvez no cálculo você tenha que fazer 100+530 (630 -> total entrada no grid)Ex. 2) Alterar item no pedido (Edit). - nova quantidade digitada 150 - total entrada era 630, então talvez no cálculo você tenha que fazer 150+(630 - field.OldValue) (680 -> total entrada no grid)Se você observar, a propriedade OldValue será zero no Insert, então o cálculo será o mesmo que o da Edição. Testa ai pra ver se não falei abobrinha. rsrsrs[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Dezembro 26, 2006 Autor Denunciar Share Postado Dezembro 26, 2006 Micheus, eu sou um novato no assunto de Delphi , você poderia me da uma explicação sobre campos calculados e ReadOnly Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 26, 2006 Denunciar Share Postado Dezembro 26, 2006 Micheus, eu sou um novato no assunto de Delphi , você poderia me da uma explicação sobre campos calculados e ReadOnlyCampos calculados são utilizados justamente para apresentarem valores calculado da forma como você precisa.Para definir um campo calculado (forma mais fácil), você deve acessar a lista de campos do dataset (TQuery, TTable, ...) - botão direito do mouse sobre o componente, tem uma opção relacionada aos fields (agora não estou lembrado). Na pequena janela que abre você clica com o botão direito e seleciona Add Field (acho que é assim). Então informa os dados solicitados, selecionando no radiobox a opção referente a calculado.Este tipo de campo só pode ser manipulado no evento OnCalcField do dataset em questão.Dê preferência a utilizar os valores do dataset evocando o tipo. Ex. tabitensVALOR.AsFloat, isso pode evitar problemas com campos que possam estar nulos e que serão convertidos, neste exemplo, para zero;A questão da coluna do DBGrid no modo ReadOnly (propriedade = true) é porque a edição será feita no grid e os campos calculados não poderão ser alterados lá - eles são calculados no evento apropriado.Este evento irá ocorrer a cada campo da tabela que for alterado. Assim, o ideal não utilizá-lo em excesso (se você depurar, vai ver que o evento é chamado muitas vezes).Toda operação que você fizer com eles será referente ao registro atualmente posicionado no dataset.Clariou um pouco? Não pude dar informações mais precisas, porque onde estou não tenho o Delphi.[]s Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Dezembro 26, 2006 Autor Denunciar Share Postado Dezembro 26, 2006 Cara valeu pelas dicas, vou tenta, dassim que poder te dou um retorno. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Dezembro 27, 2006 Autor Denunciar Share Postado Dezembro 27, 2006 Micheus eu consigo parametrizar assim:Na query1: select SUM (entradaPA.Quantidade) AS TotalEntrada FROM entradaPA WHERE cast( fichatecnicaID AS VARCHAR(10)) LIKE :Ne no codigo:Query1.Close;query1.paramt[0].value := Edit.text +'%';Query1.Open;Mais não sei com usar no DBgrid que estar ligado a TableItensPedidos mesmo tendo um campo de calculo" SaldoPA ". Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 27, 2006 Denunciar Share Postado Dezembro 27, 2006 Micheus eu consigo parametrizar assim:Na query1: select SUM (entradaPA.Quantidade) AS TotalEntrada FROM entradaPA WHERE cast(fichatecnicaID AS VARCHAR(10)) LIKE :NPirambu!, em primeiro lugar você não pode usar o LIKE. Observe que você quer contabilizar um item específico, então compare utilizando um "=".O SQL da query que totaliza os itens para uso no cálculo deveria ficar assim:SELECT SUM (entradaPA.Quantidade) AS TotalEntrada FROM entradaPA WHERE fichatecnicaID = :IDNo evento OnCalcField da tabela TableItensPedidos (onde você criou os campos calculados) você coloca o código mais ou menos assim:procedure TableItensPedidosCalcFields(...); begin Query1.paramByName(ID).Value := TableItensPedidosfichatecnicaID.Value; Query1.Open; TableItensPedidosTotalEntrada.AsFloat := Query1.FieldByName('TotalEntrada').AsFloat; // ou Query1TotalEntrada.AsFloat // Se adicionou os campos na query1 Query1.Close; end;Assim, no grid, este campo calculado aparecerá com o valor obtido na Query1.[]sp.s. Voltarei a ler as mensagens apenas dia 1º de janeiro. Boas festas de fim de ano! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Pirambu! Postado Dezembro 28, 2006 Autor Denunciar Share Postado Dezembro 28, 2006 Micheus, Funcionaou direitinho como eu estava querendo, ficou assim:Na Query1(QryEntradaPA):SELECT itensEntradaPA.FichaTecnicaID, SUM ( ItensEntradaPA.Quantidade)AS TotalEntrada FROM itensEntradaPA WHERE fichatecnicaID = :ID GROUP BY itensEntradaPA.FichaTecnicaID;no parametro "ID" ficou como Integer;o mesmo para ItensSaidaPA.no Código ficou:QryEntradaPA.ParamByName('ID').Value := TableITensPedidosFichaTecnicaID.Value ;QrySaidaPA.ParamByName('ID').Value := TableITensPedidosFichaTecnicaID.Value ;QryentradaPa.Open;QrySaidaPA.Open;TableitensPedidosSaldo.AsFloat := QryEntradaPATotalEntradaPA.AsFloat-QrySaidaPATotalSaidaPA.AsFloat;TableItensPedidosNecProducao.AsFloat := TableItensPedidosQuantidade.AsFloat -TableitensPedidosSaldo.AsFloat ;QryEntradaPA.Close;QrySaidaPA.Close;Obrigado em Micheus, Boas Festas Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Pirambu!
Eu preciso lançar pedidos, em um DbGrid onde eu possa informar um
codigo do produto e a quantidade, e na mesma linha
retorne o total de entrada, saida e saldo do mesmo produto
exemplo
codigo - produto - quantidade - total entrada - total saida - saldo
12002 - peça A - 122 - 530 - 300 - 230
23251 - peça B - 200 - 400 - 150 - 250
o total entrada, eu criei uma query1 onde uso
select SUM (entradaPA.Quantidade) AS TotalEntrada FROM entradaPA;
o Total Saida, eu criei uma query2 onde uso
select SUM (SaidaPA.Quantidade) AS TotaSaida FROM SaidaPA;
criei uma tableItensPedidos para onde o codigo e quantidade devem ir
mais não funciona,
alguém poderia me indicar a melhor forma.
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.