Erro e mascara para valores MOEDAS

75 views
Skip to first unread message

Jose Carlos Vicente Pereira

unread,
Apr 21, 2014, 5:46:43 PM4/21/14
to web2py-us...@googlegroups.com
Ola, boa noite... tinha resolvido um problema mas agora me deparei novamente com ele... veja esse codigo no meu MODEL db.py

-------------------------------------------------------------------------------------------------------------------------------------------------------
db.define_table("cadaliquota",
    Field("ano", "integer"),
    Field("dtlei",  "date"),
    Field("nrlei",  "text", length=10, notnull=True),
    Field('valaliqserv','decimal(8,2)',requires=IS_DECIMAL_IN_RANGE(0,10,dot=','),represent = lambda valaliqserv,row: '€ %.2f' % valaliqserv,),
    Field('valaliqemp','decimal(8,2)',requires=IS_DECIMAL_IN_RANGE(0,10,dot=','),represent = lambda valaliqemp,row: '€ %.2f' % valaliqemp),
    Field("dtinicio", "date"),
    Field("obs", "text",  length=128),
    Field("id_cid", "integer", length=2, notnull=True, default=request.vars.cidade),
    auth.signature
    )
db.cadaliquota.ano.requires=IS_IN_SET(anos)
db.cadaliquota.id_cid.writable = False
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

esse codigo cria a tabela sem erros, mas no momento que vou salvar as informações, me dá a seguinte mensagem:
Digite um valor entre 0 e 10
   nos campos
          Field('valaliqserv','decimal(8,2)',requires=IS_DECIMAL_IN_RANGE(0,10,dot=','),represent = lambda valaliqserv,row: '€ %.2f' % valaliqserv,),
          Field('valaliqemp','decimal(8,2)',requires=IS_DECIMAL_IN_RANGE(0,10,dot=','),represent = lambda valaliqemp,row: '€ %.2f' % valaliqemp),

mesmo eu digitando "PONTO" ou "VIRGULA" a mensagem é mostrada, alguem pode me dá uma dica para resolver isso???

aproveitando a oportunidade, quando for digitado, por exemplo, 5, no que o campo perder o fuco, tipo com um TAB.. haver uma formatacao automatica para R$ 5,00 ??? visto que geralmente quando o numero é inteiro, so digitamos 5 e pronto...




Diogo Munaro

unread,
Apr 21, 2014, 5:59:53 PM4/21/14
to web2py-us...@googlegroups.com

Em 21 de abril de 2014 18:46, Jose Carlos Vicente Pereira <carly...@hotmail.com> escreveu:
IS_DECIMAL_IN_RANGE


Para solucionar o problema tenta trocar IS_DECIMAL_IN_RANGE por IS_FLOAT_IN_RANGE

Para o outro problema é javascript. Pode olhar alguns plugins como esse: https://github.com/plentz/jquery-maskmoney

Jose Carlos Vicente Pereira

unread,
Apr 21, 2014, 6:11:18 PM4/21/14
to web2py-us...@googlegroups.com
ola, fiz a alteracao conforme vc disse, mas o erro continua da mesma forma... veja as linhas como ficaram

    Field('valaliqserv','decimal(8,2)',requires=IS_FLOAT_IN_RANGE(0,10,dot=','),represent = lambda valaliqserv,row: '€ %.2f' % valaliqserv,),
    Field('valaliqemp','decimal(8,2)',requires=IS_FLOAT_IN_RANGE(0,10,dot=','),represent = lambda valaliqemp,row: '€ %.2f' % valaliqemp),

Jose Carlos Vicente Pereira

unread,
Apr 21, 2014, 6:47:33 PM4/21/14
to web2py-us...@googlegroups.com
percebi q se eu digitar valores ate 10 não dá o erro... sera qe nao tem algo haver com essa parte do codigo

...(0,10,dot=','),.... e o formato esta em EURO...



Em segunda-feira, 21 de abril de 2014 18h46min43s UTC-3, Jose Carlos Vicente Pereira escreveu:

Jose Carlos Vicente Pereira

unread,
Apr 21, 2014, 6:51:33 PM4/21/14
to web2py-us...@googlegroups.com
na verdade nao era formato EURO... so troquei o simbolo do EURO... pelo real R$..  mas quanto digitar valor acima de 10, ainda ta dando erro...

sera que posso aumentar, tipo 99999?? eu alterei e resolveu, mas eai, dará algum problema futuro????



Em segunda-feira, 21 de abril de 2014 18h46min43s UTC-3, Jose Carlos Vicente Pereira escreveu:

Isvaldo Fernandes

unread,
Apr 21, 2014, 7:01:02 PM4/21/14
to web2py-us...@googlegroups.com
você pode consultar os limites aqui (:

http://web2py.com/books/default/search/29?search=IS_DECIMAL_IN_RANGE

"IS_DECIMAL_IN_RANGE(-1e100, 1e100)"
ou seja você pode colocar números entre  (-10^100) - (10^100)





--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo quot;web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-br...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Jose Carlos Vicente Pereira

unread,
Apr 21, 2014, 7:06:21 PM4/21/14
to web2py-us...@googlegroups.com
legal, ja coloquei a pagina aqui nas minhas anotaçoes... ja fiz o ajuste para os valores...

muito obrigado pela ajuda e dica...



Em segunda-feira, 21 de abril de 2014 18h46min43s UTC-3, Jose Carlos Vicente Pereira escreveu:

Flávio Casacurta

unread,
Apr 23, 2014, 1:30:52 AM4/23/14
to web2py-us...@googlegroups.com
Você está definindo uma coluna com tamanho 8  e dois decimais e informando para IS_DECIMAL_IN_RANGE(minimum=0, maximum=10) quando deveria ser IS_DECIMAL_IN_RANGE(minimum=0, maximum=999999.99), para não dar erro de persistência no banco.

Quanto as mascaras eu uso:

Abraços

Jose Carlos Vicente Pereira

unread,
Apr 23, 2014, 10:48:40 AM4/23/14
to web2py-us...@googlegroups.com
entendi... mas no caso de precisar inserir valor NEGATIVO, esse:

IS_DECIMAL_IN_RANGE(minimum=0, maximum=999999.99)

nao travaria, nao podendo inserir valor menor que 0 ???

me disseram para fazer assim, dai coloquei:
Field('valaliqserv','decimal(8,2)',requires=IS_DECIMAL_IN_RANGE(-1e100,1e100,dot=','),represent = lambda valaliqserv,row: 'R$ %.2f' % valaliqserv,),

pode dar erro no sistema e banco de dados??



Em segunda-feira, 21 de abril de 2014 18h46min43s UTC-3, Jose Carlos Vicente Pereira escreveu:

Diogo Munaro

unread,
Apr 23, 2014, 8:07:15 PM4/23/14
to web2py-us...@googlegroups.com

O requires sempre é uma verificação de código. A verificação do banco é no decimal. Dependendo do banco existem verificações padrão para cada tipo.

Não precisa botar o range porque ele boa dependendo da sua definição de decimal

Flávio Casacurta

unread,
Apr 24, 2014, 5:12:34 PM4/24/14
to web2py-us...@googlegroups.com
IS_DECIMAL_IN_RANGE(-1e100,1e100) é igual a  IS_DECIMAL_IN_RANGE(), ou seja a primeira parte (IS_DECIMAL), aceita qualquer valor possível

Os valores possíveis para uma coluna 'decimal(8,2)' estão (IN_RANGE) de -999999.99 à 999999.99

In [2]: IS_DECIMAL_IN_RANGE(-1e100,1e100)(111111111111111111111)
Out[2]: (Decimal('111111111111111111111'), None)

In [3]: IS_DECIMAL_IN_RANGE()(111111111111111111111)
Out[3]: (Decimal('111111111111111111111'), None)

In [4]: IS_DECIMAL_IN_RANGE(-999999.99,999999.99)(111111111111111111111)
Out[4]: (111111111111111111111L, 'enter a number between -1e+06 and 1e+06')

In [5]: IS_DECIMAL_IN_RANGE(-999999.99,999999.99)(111111.11)
Out[5]: (Decimal('111111.11'), None)

In [6]: IS_DECIMAL_IN_RANGE(-999999.99,999999.99)(999999.99)
Out[6]: (Decimal('999999.99'), None)

In [7]: IS_DECIMAL_IN_RANGE(-999999.99,999999.99)(-999999.99)
Out[7]: (Decimal('-999999.99'), None)

No banco de dados sem prever (IN_RANGE) e informando um valor fora do range aceito pelo banco

Ticket ID...
DataError: ERRO:  estouro de campo numeric
DETAIL:  Um campo com precisão 8, escala 2 deve arredondar para um valor absoluto menor do que 10^6.

Reply all
Reply to author
Forward
0 new messages