MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Truncar valores calculado

    Compartilhe

    AdilsonSantos
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 30/07/2016

    [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos em Sab 30 Jul 2016, 23:55

    Senhores, boa noite,

    Estou com a seguinte duvida referente a truncar resultado de valores por linha e somatorio total de um pedido;

    Seria um tamburete de dados como um controle de estoque que solicito um pedido e esse pedido tem que calcular por linha cada registro e o somatorio total do pedido truncando o valor moeda para duas casas decimais:
    pequeno exemplo: ( mas a lista pode ter mais de 50 itens )
    produto: quantidade x preço
    pimentao: 0,12x3,99 = 0,4788 apresentar resultado ( truncar ) 0,47
    vermelho: 0,685*1,69 = 1,15765 apresentar resultado ( truncar ) 1,15

    total do pedido ( truncado ): 1,62
    porém ao utilizar a função truncc(x) do site da microsoft para total linha consigo utilizar a função e exibir o resultado truncado mas o resultado do total do pedido nao funciona a função e exibe sempre o resultado 1,63 ( nao truncado );

    se ja resolveram uma questao parecida qual item do forum
    obrigado,
    Adilson


    bom dia, vou editar o topico para acrescentar mais detalhes;

    Nesse banco tem a tabela pedidos, detalhepedidos ( entre outras cliente, fornecedor, etc );
    o calculo da quantidade x preço unitario esta sendo feito numa consulta chamada detalhesdopedido;

    o calculo do total do pedido ( somatorio de todas as linhas do pedido ) esta sendo feito no rodapé do subformulario detalhe pedido;

    A função inscrita em um modulo chamado truncar citada como truncc(x) transcrevo abaixo:
    O factor = 100 ( significa truncar com 2 casas decimais )


    Option Compare Database

      '******************************************************
      ' Declarao da seção do modulo
      '******************************************************

      Option Explicit
      Const Factor = 100

      Function TruncCC(X)
         TruncCC = Int(X * Factor) / Factor
      End Function


    Acho que agora consegui fazer entender minha duvida;

    No excel é simples utilizo apenas a funcao truncar e pronto, mas no access 2013 tem esse dificultador pois para exibir numa linha há o truncamento mas o access para fazer o somatorio usa todas as casas decimais para totalizar;

    Alguma solução ?

    Aceito sugestao para usar outra função ao inves da truncCC pois com essa função o calculo do pedido e do total linha ficam mais lentos;

    obrigado,

    Adilson
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Seg 01 Ago 2016, 23:42

    Olá, bem vindo ao fórum.
    Mostre como tem a origem da linha que mostra o resultado.

    Acho que pode usar diretamente.

    Teste  exemplo:

    = Int((quantidade * preco) * 100) / 100

    Abraço


    Última edição por ahteixeira em Ter 02 Ago 2016, 11:19, editado 1 vez(es)

    AdilsonSantos
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 30/07/2016

    Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos em Ter 02 Ago 2016, 01:11

    ahteixeira, Obrigado,

    Segue anexo tela copiada do access colada no word com esboço das explicações citadas na pergunta;

    Tela do pedido calculada com e sem truncamento de 2 casas decimais;

    E origem do calculo na consulta ( multiplicação da quantidade do pedido pelo preço unitario do pedido );

    Adilson
    Anexos
    Truncar 2 casas decimais.doc
    Arquivo word anexo
    Você não tem permissão para fazer download dos arquivos anexados.
    (417 Kb) Baixado 6 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Ter 02 Ago 2016, 11:16

    Olá Adilson Santos,
    Com base no que disponibilizou, fiz o teste do que referi na mensagem n.º 2, veja o resultado:
    [Você precisa estar registrado e conectado para ver esta imagem.]


    Segue abaixo a linha para testar na sua consulta e verificar se fica mais rápido diretamente:
    Código:
    TOTAL: Int(([TDetalhePedidos].[Quantidade]*[TDetalhePedidos].[PrecoPRoduto])*100)/100
    Abraço

    AdilsonSantos
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 30/07/2016

    Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos em Ter 02 Ago 2016, 12:07

    ahteixeira, bom dia,

    Com a função "int" citada acontece o truncamento porém de todas casas decimais, eu preciso do truncamento a partir da 3 casa decimal. ou seja truncar com 2 digitos.

    copiei e anexei abaixo a tela do access copiado no word com a nova função integrada no banco mas o resultado foi o truncamento;

    Veja que usando a função truncCC o somatorio por linha / registro acontece o truncamento com as duas casas decimais ( desprezando o terceiro digito em diante ), porém no somatorio do pedido o access desconsidera que estou somando o total do pedido apenas com as casas decimais truncada.

    Ele faz o somatorio considerando todas as casas decimais independentemente de ter um campo truncado a partir do terceiro digito.

    Veja se ficou claro,

    novamente obrigado,

    Adilson
    Anexos
    forum1.doc
    Você não tem permissão para fazer download dos arquivos anexados.
    (376 Kb) Baixado 4 vez(es)
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Ter 02 Ago 2016, 15:41

    Olá Adilson Santos,
    Verifique melhor, você não colocou na consulta o que postei na mensagem n.º 4, falta a parte a vermelho, veja:
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Abraço

    AdilsonSantos
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 30/07/2016

    Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos em Qua 03 Ago 2016, 01:50

    Ola ahteixeira,

    Realmente, falha minha, ao invés de copiar e colar da sua mensagem fui digitar e esqueci de digitar a função inteira;

    Perfeito solucionou o problema chegou no resultado que eu esperava;

    parabéns e obrigado novamente,

    Antes de fechar o topico para esta solução, percebi que o calculo do soma total do pedido que utilizei no formulário a exibição do resultado ficou mais lenta isto é devido ao fato de eu ter usado o somatorio no formuláro ao inves de usar o somatório na consulta ?

    Ou seja os dois campos do calculo total que foi utilizado as funções ( truncCC e Int ) a exibição do resultado levou alguns milésimos de segundo a mais antes de aparecer na tela, essa demora é devido ao uso dessas funções ?

    Ha como eliminar esse atraso na exibição ? ( se considerar um micro com 8GB de RAM processador core i7, HD solid, placa de video 128gb, etc ... fica quase imperceptível mas num micro mais modesto a exibição demora um tempo considerado;

    obrigado,

    Adilson

    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Qui 04 Ago 2016, 12:05

    Olá Adilson Santos,
    Obrigado pelo retorno.

    Quanto às características da máquina é indiscutível a performance, ainda mais com um disco SSD.
    Relativamente à exibição do resultado, uma vez que está já arredondar na linha acho que seria suficiente apenas a soma do campo listado.

    Quanto à performance, desconheço a estrutura de dados do seu projecto, mas uma alternativa seria:

    Ter na tabela o campo do total da linha (quantidade X preço) que seria gravado na tabela já arredondado.
    Ao listar, já não era necessário o arredondamento.
    O que acha?

    Fica a minha opinião.
    Abraço



    AdilsonSantos
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 30/07/2016

    Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos em Qui 11 Ago 2016, 12:54

    Ola ahteixeira,

    Realmente a dica é bastante util ja tenho na tabela o campo calculado, mesmo assim leva alguns milésimos de segundo para exibir mas esta aceitável.

    Outra duvida que tenho é referente a função que utilizei truncCC orientada no site technet e por outros foruns que pesquisei, voce ja utilizou esta função ? Por que ela nao atende ao somatorio total da forma prevista ?

    Fica ai mais esta curiosidade,

    obrigado,

    Adilson
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Qui 11 Ago 2016, 13:09

    Olá Adilson, obrigado pelo retorno.

    A ajuda foi a possível com base na função que postou.
    O desempenho depende de vários fatores (numero registos, complexidade de relacionamentos, rede ou não, etc).
    Por vezes no desenvolvimento pode existir formas para aumentar a performance.

    Para ajudar melhor, recomendo que crie uma base de dados com os objectos necessários e dados (de amostragem) e partilhe aqui no fórum.
    Só assim é que será possivel compreender melhor o que tem para poder ajudar.
    Assim também fica mais fácil para outros membros analisar e poder ajudar.
    Abraço
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Sab 10 Set 2016, 00:14

    Olá Adilson Santos,
    Como ficou a situação, os utilizadores agradecem e merecem o retorno.
    Abraço

    AdilsonSantos
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 6
    Registrado : 30/07/2016

    Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos em Sab 10 Set 2016, 14:31

    ahteixeira, bom dia,

    Realmente resolveu o problema do truncamento de valores, estou usando o a tabela access para analisar o que os supermercados vem utilizando como método de arredondamento nas compras que efetuo.
    Identifiquei que nem todos supermercados truncam os valores e utilizam o recurso de arredondamento as vezes sem critérios.

    você acha que devo fechar o tópico ?

    novamente obrigado pelo retorno,

    Adilson
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Sab 10 Set 2016, 16:12

    Olá, se a questão que colocou foi resolvida acho que deve dar o tópico por concluído.
    Não devemos misturar temas no mesmo tópico.
    A questão do arredondamento deve tirar a dúvida com quem vai usar o seu programa.

    Se o seu programa é para venda a vários clientes e já verificou que existe vários tipos de arredondamento, deverá fazer de forma a ser configurável.
    Assim o mesmo programa pode dar para vários tipos de clientes.
    Fica a dica, e não se esqueça não misture temas nos tópicos, abra um novo se não existir nenhum.
    Abraço

    pqhesf
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 30/03/2011

    Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf em Seg 07 Ago 2017, 16:06

    Bom dia!

    Tendo a função:

    Código:
    Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
      Trunc = Int(value * (10 ^ num)) / (10 ^ num)
    End Function

    Alguém já deparou com este bug:

    Trunc(12,01, 2) = 12 quando o correto seria 12,01?
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Seg 07 Ago 2017, 18:45

    Olá Carlos Santos,
    Apesar de se membro desde 2011, Bem-Vindo à actividade do MaximoAccess Wink

    Teste assim:
    Código:
    Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
      Trunc = Int(CDbl(value * (10 ^ num))) / (10 ^ num)
    End Function

    Abraço

    pqhesf
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 30/03/2011

    Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf em Seg 07 Ago 2017, 20:02

    Obrigado!

    Mas acredito que a solução passa por contornar velhos paradigmas do Access.

    Veja:

    Trunc(2,32, 2) = 2,31
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Ter 08 Ago 2017, 10:19

    Olá Carlos Santos,

    Veja com a função Round postada pelo colega JPaulo (Arredonda um valor) como fica.
    [Você precisa estar registrado e conectado para ver este link.]

    Abraço



    pqhesf
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 30/03/2011

    Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf em Ter 08 Ago 2017, 16:21

    Olá!

    Obrigado pela atenção!

    Mas como disse anteriormente, trata-se de problema intrínseco do MS Access. Até melhor opção, resolvi tratar a situação convertendo a variável para string, separando os caracteres após a virgula, mantendo apenas a quantidade de interesse e, finalmente, reconvertendo a variável para o formato original.

    Abraço!
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Ter 08 Ago 2017, 19:40

    Olá Carlos Santos,

    Obrigado pelo retorno.
    Eu pessoalmente opto sempre pelo Round nativo.
    Arredondar para baixo como no Excel no Access tem destas coisas.

    Pode partilhar o código utilizado do que relatou na última mensagem.
    Os utilizadores do fórum agradecem.

    Abraço

    pqhesf
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 30/03/2011

    Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf em Qua 09 Ago 2017, 15:12

    Olá!

    Nossa proposição não é arredondar para baixo um dado valor, possibilidade,  aliás, que com mínimos ajustes na função Round se consegue satisfatoriamente atender. Nossa intenção é suprimir as casas decimais a partir de determinado critério. Exemplo: 2,3275 para 2,32 e não 2,33 - na presunção que se queira o ajuste para duas casas decimais.

    Teoricamente multiplicando-se a variável por 100, separando a parte inteira e dividindo por 100 novamente se consegue este resultado. Contudo, existem exceções - como as levantadas acima, entre muitas - que não podemos admitir.

    Enfim, segue a solução - tupiniquim, é verdade - que adotei.
    Código:
    Public Function Truncar(ByVal Value As Double, ByVal Num As Integer) As Double
    On Error GoTo TrataErro

    Dim sValue As String
    Dim dResult As Double

    sValue = ""
    dResult = 0

    sValue = CStr(Round(Value, Num + 1))


    If InStr(sValue, ",") = 0 Then
        dResult = Value
    Else

        Dim Valor
        Valor = Split(sValue, ",")

        dResult = CDbl(Valor(0) & "," & Left(Valor(1), Num))

    End If

        Truncar = Nz(dResult, 0)


    Sair:
        Exit Function

    TrataErro:
            Beep
            MsgBox "Atenção!@Ocorreu o erro nº " & err.Number & " - " & err.Description & "@", vbExclamation
            Resume Sair

        
    End Function

    Muito obrigado pela atenção!

    À disposição de todos naquilo que puder contribuir.
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4295
    Registrado : 15/03/2013

    Re: [Resolvido]Truncar valores calculado

    Mensagem  ahteixeira em Qua 09 Ago 2017, 21:16

    Olá Carlos Santos,
    Obrigado pela partilha.
    Fica mais esta para este grande fórum.

    Abraço
    cheers

      Data/hora atual: Qua 23 Ago 2017, 03:12