Soma1
Incrementa em 1 o ultimo caractere numerico de uma string mantendo o tamanho. Padrao classico de geracao de proximo codigo (000123 -> 000124).
Assinatura: Soma1(cString) -> cStringIncrementada
Retorna: Character
Soma1 e a forma idiomatica AdvPL de "pegar o proximo codigo". Pega uma string com numero a direita, incrementa em 1, e retorna mantendo o tamanho original (com padding de zero a esquerda).
Sintaxe
cNovoCod := Soma1("000123") // "000124"
cNovoCod := Soma1("PROD009") // "PROD010"
cNovoCod := Soma1("000999") // "001000"
Padrao classico de proximo codigo
User Function ProxCod()
Local cUltimo := ""
SA1->(DBSetOrder(1))
SA1->(DBGoBottom())
cUltimo := SA1->A1_COD
Return Soma1(cUltimo)
EndFunction
Quando usar
- Geracao de proximo codigo de produto/cliente em rotina custom
- Sequencias internas em arquivos batch
- Itens de pedido (001, 002, ...)
Quando NAO usar
- Em codigo concorrente — dois usuarios simultaneos geram codigo igual. Use
GetSXENum/ConfirmSX8que controla via SX8. - Codigos com letras no fim — comportamento indefinido se ultimo char nao for digito.
- Overflow do tamanho — "999" -> "1000" cresce o tamanho.
Pegadinhas
- Sem controle de concorrencia — 2 threads em paralelo podem gerar codigo duplicado. Sempre proteja com
RecLockou use SX8. - Cresce tamanho ao virar — "9" vira "10", "99" vira "100".
- Tipo numero misturado — "12A" pode dar resultado estranho.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cString | Character | sim | String numerica ou alfanumerica terminada em digito. |