Máscara automática para campos numéricos

Pessoal alguém conhece alguma função padrão para retornar de forma automática a máscara para campos números? Algo semelhante ao que ocorre quando criamos um campo no configurador e quando colocamos o tamanho do campo e os decimais ele já monta a máscara sozinho. Queria algo semelhante para usar de forma mais ampla para montar grids e browsers com tabelas temporárias.

Cirilo,

Não conheço nada documentado e aberto para uso que faça isso.

Mas é um algoritmo relativamente simples, você deve considerar a vírgula no cálculo quando existe valor decimal e então montar a máscara, contando de três em três caracteres para a parte da milhar, milhão etc.

Abaixo um exemplo:


//-------------------------------------------------------------------
/*/{Protheus.doc} u_MakePicture
Gera uma picture numérica de acordo com o tamanho do campo e decimal

@param nSize, numeric, tamanho do campo
@param nDec, numeric, decimais do campo

@return cPicture, character, picture numérica

@author Daniel Mendes
@since 20/05/2022
@version 1.0
/*/
//-------------------------------------------------------------------
function u_MakePicture(nSize as numeric, nDec as numeric) as character
local nI as numeric
local nTho as numeric
local nRest as numeric
local nInteger as numeric
local cPicture as character
local lHasDec as logical

lHasDec := nDec > 0
nInteger := nSize - Iif(lHasDec, nDec + 1, 0)
nTho := Int(nInteger / 3)
nRest := nInteger - (nTho * 3)

if Empty(nTho) .and. !lHasDec
    cPicture := Replicate("9", nSize)
else
    cPicture := "@E " + Replicate("9", nRest)

    for nI := 1 to nTho

        if nRest > 0 .or. nI > 1
            cPicture += ","
        endif

        cPicture += "999"
    next

    if lHasDec
        cPicture += "." + Replicate("9", nDec)
    endif
endif

return cPicture

Muito obrigado Daniel, vou fazer como você sugeriu mesmo.