StrZero

Converte numero em string com zeros a esquerda (zero-padding). Indispensavel pra gerar codigos formatados (000123) e chaves de busca DBSeek.

Assinatura: StrZero(nNumero, nTam, [nDec]) -> cString

Retorna: Character

StrZero e o "pad zero a esquerda" do AdvPL. Recebe numero, devolve string com tamanho fixo preenchida com zeros. E a forma idiomatica de gerar codigos formatados.

Sintaxe

StrZero(nNumero, nTam, nDec) --> cString
//   nNumero = valor numerico
//   nTam    = tamanho total (incluindo decimais e ponto)
//   nDec    = casas decimais (opcional, default 0)

Exemplos

StrZero(123, 6)              // "000123"
StrZero(123, 10)             // "0000000123"
StrZero(1, 4)                // "0001"
StrZero(999999, 6)           // "999999"
StrZero(1234567, 6)          // "234567" (trunca esquerda!)

// Com decimais
StrZero(99.9, 7, 2)          // "0099.90"
StrZero(1.5, 5, 2)           // "01.50"

// Negativo
StrZero(-5, 4)               // "-005"

Casos praticos

1. Gerar codigo sequencial

// Proximo codigo de produto (formato P000001)
Static Function _ProxCod()
    Local nUlt := 0
    SB1->(DBSetOrder(1))
    SB1->(DBGoBottom())
    nUlt := Val(SubStr(SB1->B1_COD, 2))    // ignora prefixo "P"
Return "P" + StrZero(nUlt + 1, 5)

// "P00001", "P00002", "P00003"...

2. Chave de busca DBSeek

// Tamanho da chave fixo conforme SX3
nCodigo := 42
cChave  := xFilial("SA1") + StrZero(nCodigo, TamSx3("A1_COD")[1])
If SA1->(DBSeek(cChave))
    cNome := SA1->A1_NOME
EndIf

3. Numerador de NF

// Proxima NF — formato 000000123
nProx := GetSXENum("SF2", "F2_DOC")
cNumNF := StrZero(Val(nProx), 9)
ConfirmSX8()

4. Codigo composto (filial + sequencial)

cCod := cFilAnt + "/" + StrZero(nSeq, 6)
// "01/000042"

Pegadinhas

Comparacao com PadL

// StrZero — entrada numerica
StrZero(42, 6)                    // "000042"

// PadL — entrada string (com chr customizado)
PadL("42", 6, "0")                // "000042"
PadL("AB", 6, "0")                // "0000AB"
PadL("AB", 6, "*")                // "****AB"

Parâmetros

NomeTipoObrigatórioDescrição
nNumeroNumericsimValor numerico.
nTamNumericsimTamanho total da string resultante.
nDecNumericnãoCasas decimais (default 0).

Veja também