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

Usar Campo Calculado No Campo Agregado Em Dbgrid


paulobergo

Pergunta

Oi!

Gostaria de saber se alguém sabe como criar um campo agregado em um dataset que aceite uma expressao contendo um campo calculado.

Explicando melhor:

Tentando transformar um stringgrid para lançamento de notas fiscais em um dbgrid, deparei com o problema de não conseguir criar um campo agregado que totalize uma coluna, sendo esta coluna um campo "calculado". Com isso, tenho problemas de arredondamento nas várias colunas que precisam tratar precos e quantidades (com decimais variáveis) e valores em moeda (2 decimais).

Exemplo:

Campos: descricao (tipo caractere)

quantidade (tipo numerico)

preço (tipo numerico)

valor (tipo currency, calculado, sendo = preço * quantidade)

total (tipo agregado, sendo a soma do preço x valor = sum(preço * quantidade))

descricao quantidade preço valor

Calculadora....... 1 x R$ 2,226 = R$ 2,23

Caneta............ 1 x R$ 2,226 = R$ 2,23

Total R$ 4,45

Gostaria, então, que o campo agregado aceitasse a expressão sum(valor). Assim, o total seria de 4,46 (o correto)...

Além disso, tenho outros campos na mesma situação, como:

valor do ipi do produto = (valor do produto * aliquota) / 100,

valor do icms do produto = ((valor do produto * base de calculo) * aliquota) / 100,

e assim por diante...

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Gostaria, então, que o campo agregado aceitasse a expressão sum(valor). Assim, o total seria de 4,46 (o correto)
Se você faz sum(preço * quantidade) e valor é 2,226, você terá o somatório igual a 2,226 + 2,226 que é igual a 4,452 e que arredondado será 4,45. Já se você tiver algo como sum(round_de_duas_casas(preço * quantidade)), então você terá 2,23 + 2,23 que será igual a 4,46. Assim, talvez seja uma questão de veficar onde deverá ser feito o arredondamento. Ou seja, se você arredondar o campo valor em dois dígitos antes da totalização, provavelmente obterá o esperado.
Link para o comentário
Compartilhar em outros sites

  • 0

Grato pela ajuda...

Infelizmente, a expressão em um campo do tipo TAggregates não aceita a função Round...

Por exemplo:

sum(Round(precobase)*quantidade) não funciona.

Eu precisava realmente descobrir uma forma de fazer com que aceitasse os campos calculados, principalmente para simplificar o código e contemplar todas as situações tributárias que hoje são calculadas tanto na versão stringgrid (delphi) como na versão array (clipper).

Para que você tenha uma idéia, o valor do produto é obtido assim, quando, por exemplo, temos um produto com redução de base de cálculo de ICMS (em que o desconto deve ser repassado para o consumidor, obrigatoriamente):

precodopedido = x (um valor qualquer)

percentualdoimpostodispensado = ((100-basedecalculodoICMS)*aliquotadoICMS)/10

// Diferimento, em MG, em vendas para produtores rurais, por exemplo.

precounitario = precodopedido*((100-percentualdoimpostodispensado)/100)

// o preço unitario aumenta para, com o desconto, voltar ao preço original do pedido.

valorproduto = quantidade*precounitario

ICMSbasedecalculo = (valorproduto*basedecalculodoICMS)/100

ICMSValor = (ICMSbasedecalculo*ICMSaliquota)/100

... e assim por diante... sem contar as fórmulas do IPI, da Substituição Tributária, etc...

Outra opção que tentei foi criar um stringgrid associado à tabela... assim, cada modificação nos campos da tabela provoca a totalização e os cálculos das colunas equivalentes no Stringgrid... por enquanto está dando certo... porém com mais código!

De qualquer forma, grato pela colaboração!!

Link para o comentário
Compartilhar em outros sites

  • 0

Nunca utilizei o Aggregate, dei uma pesquisada para entender melhor como funciona e realmente você tem razão - desculpe o mau paupite.

Utilizando ainda aquele seu primeiro exemplo:

valor (tipo currency, calculado, sendo = preço * quantidade)

total (tipo agregado, sendo a soma do preço x valor = sum(preço * quantidade))

descricao quantidade preço valor

Calculadora....... 1 x R$ 2,226 = R$ 2,23

Caneta............ 1 x R$ 2,226 = R$ 2,23

Mas, e se você realizar este processo na sua consulta (SQL)? Se no comando SQL você criar uma coluna com o cálculo do tipo "SELEC ..., (ROUND((preço * Quantidade)*100)/100) AS Valor, ..." talvez resolva seu problema (apesar de ficar um pouco mais pesada). Alguns boncos aceitam a instrução ROUND (encontrei uma tabela que diz que os bancos Access, MySQL, PostGreSQL e SQLServer aceitam). Será o seu caso?

Ou, quem sabe, utilizar uma outra query (contendo as informações a calcular) devidamente parametrizada e realizar este arredondamento "na mão" através de campo calculado.

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,4k
×
×
  • Criar Novo...