MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


3 participantes

    [Resolvido]Truncar valores calculado

    avatar
    AdilsonSantos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos 30/7/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
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 1/8/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 2/8/2016, 11:19, editado 1 vez(es)

    napoli gosta desta mensagem

    avatar
    AdilsonSantos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos 2/8/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
    [Resolvido]Truncar valores calculado AttachmentTruncar 2 casas decimais.doc
    Arquivo word anexo
    Você não tem permissão para fazer download dos arquivos anexados.
    (417 Kb) Baixado 26 vez(es)
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 2/8/2016, 11:16

    Olá Adilson Santos,
    Com base no que disponibilizou, fiz o teste do que referi na mensagem n.º 2, veja o resultado:
    [Resolvido]Truncar valores calculado 2mh7z9k


    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

    Ribamar Sousa gosta desta mensagem

    avatar
    AdilsonSantos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos 2/8/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
    [Resolvido]Truncar valores calculado Attachmentforum1.doc
    Você não tem permissão para fazer download dos arquivos anexados.
    (376 Kb) Baixado 11 vez(es)
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 2/8/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:
    [Resolvido]Truncar valores calculado 9ga7et

    Abraço
    avatar
    AdilsonSantos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos 3/8/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

    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 4/8/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


    avatar
    AdilsonSantos
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos 11/8/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
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 11/8/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
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 10/9/2016, 00:14

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


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  AdilsonSantos 10/9/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
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 10/9/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
    avatar
    pqhesf
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf 7/8/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?
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 7/8/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
    avatar
    pqhesf
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf 7/8/2017, 20:02

    Obrigado!

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

    Veja:

    Trunc(2,32, 2) = 2,31
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 8/8/2017, 10:19

    Olá Carlos Santos,

    Veja com a função Round postada pelo colega JPaulo (Arredonda um valor) como fica.
    https://www.maximoaccess.com/t11-102-codigos-vba-para-access

    Abraço


    avatar
    pqhesf
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf 8/8/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!
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 8/8/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
    avatar
    pqhesf
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  pqhesf 9/8/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.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Alvaro Teixeira 9/8/2017, 21:16

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

    Abraço
    cheers

    Conteúdo patrocinado


    [Resolvido]Truncar valores calculado Empty Re: [Resolvido]Truncar valores calculado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 23/11/2024, 12:55