Jump to content
Fórum Script Brasil
  • 0

Problema Com Table


Pirambu!

Question

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 to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

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

Link to comment
Share on other sites

  • 0
Micheus, eu sou um novato no assunto de Delphi , você poderia me da uma explicação sobre campos calculados e ReadOnly
Campos 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 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

Link to comment
Share on other sites

  • 0

Micheus eu consigo parametrizar assim:

Na query1:

select SUM (entradaPA.Quantidade) AS TotalEntrada FROM entradaPA

WHERE cast( fichatecnicaID AS VARCHAR(10)) LIKE :N

e 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 ".

Link to comment
Share on other sites

  • 0
Micheus eu consigo parametrizar assim:

Na query1:

select SUM (entradaPA.Quantidade) AS TotalEntrada FROM entradaPA

WHERE cast(fichatecnicaID AS VARCHAR(10)) LIKE :N

Pirambu!, 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 = :ID

No 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.

[]s

p.s. Voltarei a ler as mensagens apenas dia 1º de janeiro. Boas festas de fim de ano!

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...