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