Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com Table


Pirambu!

Pergunta

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

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...