mascara numerica

35 views
Skip to first unread message

Valmadson

unread,
Apr 14, 2012, 6:32:10 PM4/14/12
to geral...@googlegroups.com
Senhores, embora o grupo a muito tempo ninguém posta nada, então quer dizer ninguém tem dúvida, então vou passar a minha. Como eu posso fazer para mostrar campos numéricos neste formato : 999.999.999,99.

Consegui com esta linha de comando abaixo, exibir justificado a esquerda. Só fica faltando a máscara.

ObjectValue(expression='objeto.valor', left=6.5*cm, width=1*cm, style={'alignment': TA_RIGHT} )

Antecipadamente grato pela ajuda.

Marcos Thomaz

unread,
Apr 14, 2012, 6:36:22 PM4/14/12
to geral...@googlegroups.com
Pesquise sobre get_value.
--


Marcos Thomaz da Silva
Analista de Tecnologia da Informação

Valmadson Santos

unread,
Apr 14, 2012, 6:54:24 PM4/14/12
to geral...@googlegroups.com
Valeu Marcos, vou pesquisar e volto com resultado.

Valmadson Santos

unread,
Apr 14, 2012, 7:36:32 PM4/14/12
to geral...@googlegroups.com
Marcos resolvi temporariamente assim :

ObjectValue(expression='objeto.valor', left=6.5*cm, width=1*cm, style={'alignment': TA_RIGHT}, get_value=lambda instance: MaskMoney(instance.objeto.valor) ),

**  Funcionando perfeitamente na band_detail.

Esta função MaskMoney retorna o valor formatado.

Curioso é que não consegui fazer acontecer  na band_summary, deu este erro: 

    unsupported operand type(sfor +: 'int' and 'str'

Código da band summary:

ObjectValue(attribute_name='objeto.valor', top=0.1*cm, left=6.5*cm, action=FIELD_ACTION_SUM, width=1*cm, style={'alignment': TA_RIGHT}, get_value=lambda instance: MaskMoney(instance.objeto.valor) ),

Estou ainda procurando uma solução, caso encontre, envio para o grupo.

Marcos Thomaz

unread,
Apr 14, 2012, 8:59:55 PM4/14/12
to geral...@googlegroups.com
É porque ele (Geraldo) está tentando somar o valor retornado pelo get_value. Não é certeza isso que estou dizendo, mas creio que é o que está acontecendo.

Milton Brandão

unread,
Apr 14, 2012, 11:23:01 PM4/14/12
to geral...@googlegroups.com
Valmadson

A solução abaixo é a melhor que eu conheço. 

Você copia o código abaixo em um arquivo ("reports.py" por exemplo) numa pasta ("utils" por exemplo):

------------------------------------------------------------------------------------------------------------------------------------------------------

from djangoplus.templatetags.djangoplus_tags import moneyformat
class DecimalObjectValue(ObjectValue):
    decimal_places = 2

    def _text(self):
        if not self.stores_text_in_cache or self._cached_text is None:
            try: # Before all, tries to get the value using parent object
                value = self.band.get_object_value(obj=self)
            except AttributeNotFound:
                if self.expression:
                    value = self.get_value_by_expression()
                else:
                    value = getattr(self, 'action_'+self.action)()

            if not value:
                value = 0

            if self.get_text:
                value = self.get_text(self.instance, value)

            self._cached_text = moneyformat(float(value or 0), self.decimal_places)

        return self.display_format % self._cached_text

------------------------------------------------------------------------------------------------------------------------------------------------------

Você terá que instalar o Djangoplus para usar isso

------------------------------------------------------------------------------------------------------------------------------------------------------

Depois disso, no reports.py vc usa da seguinte forma:

from utils.reports import DecimalObjectValue
DecimalObjectValue(expression='objeto.valor', left=6.5*cm, width=1*cm, style={'alignment': TA_RIGHT} )

------------------------------------------------------------------------------------------------------------------------------------------------------

Boa sorte

--
Milton Neiva Brandão
Raminel Web - Sites, Sistemas Web, ERP
www.raminel.com.br
(62)3264-1487
con...@raminel.com.br
Twitter: @raminelweb        @miltinhobrandao

MSN: milt...@hotmail.com
GTalk: milt...@gmail.com

Valmadson Santos

unread,
Apr 14, 2012, 11:34:01 PM4/14/12
to geral...@googlegroups.com
Agradeço Milton, vou fazer uns teste e retorno para o grupo. Eu utilizo web2py, vou ver como ficaria com djangoplus, não sei se vai ser possível.

Seria ótimo se desse pelo display_format. Lá diz assim : 

    You can also use 'display_format' attribute to set a friendly string
    formating, with a mask or additional text.
    
ObjectValue(attribute_name='objeto.valor', top=0.1*cm, left=6.5*cm, action=FIELD_ACTION_SUM, width=1*cm, style={'alignment': TA_RIGHT}, display_format='%s'),

Milton Brandão

unread,
Apr 14, 2012, 11:45:38 PM4/14/12
to geral...@googlegroups.com
Dê uma estudada no código que passei e também no código do "moneyformat" do Djangoplus que vc vai achar uma forma de adaptar ao web2py. Afinal de contas é tudo Python.

------------------------------------------------------------------------------------------------------------------------------------------------------

def moneyformat(value, decimal_places=2, thousands_separator=''):
    """Returns a float value in monetary format, using MONETARY_LOCALE
    setting and locale functions"""
    decimal_places = decimal_places is None and 2 or decimal_places
    thousands_separator = thousands_separator or app_settings.THOUSANDS_SEPARATOR

    import locale

    if app_settings.MONETARY_LOCALE:
        locale.setlocale(locale.LC_NUMERIC, app_settings.MONETARY_LOCALE)

    format = r"%0.0"+str(decimal_places)+'f'

    value = value or 0.0

    ret = locale.format(format, float(value), grouping=True)

    if thousands_separator:
        dec_sep = thousands_separator == ',' and '.' or ','
        parts = ret.split(dec_sep)
        ret = split1000(parts[0].replace(thousands_separator, ''), thousands_separator)

        if len(parts) > 1:
            ret += dec_sep + parts[1]

    return ret

------------------------------------------------------------------------------------------------------------------------------------------------------

Let´s go. rs

Valmadson Santos

unread,
Apr 14, 2012, 11:49:33 PM4/14/12
to geral...@googlegroups.com
Obrigado Milton. Estudandô.....

Valmadson Santos

unread,
Apr 15, 2012, 1:39:09 AM4/15/12
to geral...@googlegroups.com
Obrigado Marcos, Miltinho finalizado com sucesso. Dormindô....

Milton Brandão

unread,
Apr 15, 2012, 8:20:13 AM4/15/12
to geral...@googlegroups.com
Valmadson.

Posso te passar também para "formato de datas". É só falar. 

Parabéns e bom trabalho.

2012/4/15 Valmadson Santos <valm...@gmail.com>

Obrigado Marcos, Miltinho finalizado com sucesso. Dormindô....

Valmadson Santos

unread,
Apr 15, 2012, 4:39:24 PM4/15/12
to geral...@googlegroups.com
Oh, milton eu agradeço. Você pensa em fazer essas atualização na próxima versão ?

Milton Brandão

unread,
Apr 15, 2012, 5:08:51 PM4/15/12
to geral...@googlegroups.com
Valmadson

Eu  não sou o criador do Geraldo. É o Marinho. rs

Esses códigos que te passei a gente fez aqui para usar o Geraldo.

2012/4/15 Valmadson Santos <valm...@gmail.com>

Oh, milton eu agradeço. Você pensa em fazer essas atualização na próxima versão ?

Valmadson Santos

unread,
Apr 15, 2012, 5:38:02 PM4/15/12
to geral...@googlegroups.com
Ah foi mal, eu pensei que você fosse um dos criadores/mantenedor. 

Mesmo assim obrigado.

Milton Brandão

unread,
Apr 15, 2012, 6:44:22 PM4/15/12
to geral...@googlegroups.com
Acho que sou o maior usuário.... rssss

2012/4/15 Valmadson Santos <valm...@gmail.com>

Ah foi mal, eu pensei que você fosse um dos criadores/mantenedor. 

Mesmo assim obrigado.

Valmadson Santos

unread,
Apr 15, 2012, 11:47:41 PM4/15/12
to geral...@googlegroups.com
Olha ai quem eu encontrei ? Então me tira uma dúvida, programo em pascal é possível criar os relatórios no geraldo e ser chamado de um aplicativo compilado no pascal ? Já teve essa necessidade ?

Marcos Thomaz

unread,
Apr 16, 2012, 1:28:00 AM4/16/12
to geral...@googlegroups.com
Valmadson, existe um componente chamado Python4Delphi, onde você consegue sim fazer esse tipo de chamada. Outra forma é montar uma pequena rotina (usando django, web2py ou até mesmo o cherrypy direto) com um serviço rest ou webservice, onde com a passagem de parâmetros, seja gerado o relatório. No Delphi você usaria um idhttp ou um Httpprio para fazer as chamadas e requisitar o relatório.


Em 15 de abril de 2012 23:47, Valmadson Santos <valm...@gmail.com> escreveu:
Olha ai quem eu encontrei ? Então me tira uma dúvida, programo em pascal é possível criar os relatórios no geraldo e ser chamado de um aplicativo compilado no pascal ? Já teve essa necessidade ?



Valmadson Santos

unread,
Apr 16, 2012, 8:34:32 AM4/16/12
to geral...@googlegroups.com
Legal Marcos, atualmente estou passando meus sistemas do Delphi para FreePascal/Lazarus, vou ver se tem algo que possa substituir estes componentes.( idhttp , Httpprio )
Reply all
Reply to author
Forward
0 new messages