Passei pela necessidade completar um número (do tipo caracter) com ZEROS À ESQUERDA e dei uma solução simples e funcional.
Procurei uma solução aqui no fórum e não encontrei, por isso estou compartilhando com os colegas, principalmente os iniciantes, para que não passem pelas dificuldades por que passei.
Vamos lá:
O cliente tem uma tabela com um campo Código, do tipo caracter de 4 dígitos.
Se você definir no SC o VALOR A SER GRAVADO NO BANDO DE DADOS como sendo Auto incremento Manual, o valor a ser gravado será, por exemplo, 1, 2, 3…
Então, deixei essa condição em branco, sem nada definido.
Para completar com zeros à esquerda, fiz o seguinte:
Utilizei a rotina pronta do SC "SELECTING A FIELD FROM ANOTHER TABLE’ e fiz algumas alterações, conforme segue abaixo:
/**
- Selecting a field from another table
*/
// Check for record
$check_sql = “SELECT MAX(nome_seu_numero_sequencial)”
. " FROM Sua_tabela";
sc_lookup(rs, $check_sql);
if (isset({rs[0][0]})) // Se encontrou registro, completa com zeros
{
{nome_seu_numero_sequencial} = str_pad({rs[0][0]}+1,4,‘0’,STR_PAD_LEFT);
}
else // Se não encontrou registro
{
{nome_seu_numero_sequencial} = ‘0001’;
}
O +1 é o indentador, e o 4 é o número de dígitos do seu campo.
Agora, vamos supor que haja condição de filtragem na localização do maior número (cláusula where):
/**
- PEGA NÚMERO
*/
// Check for record
$check_sql = “SELECT MAX(nome_seu_numero_sequencial)”
. " FROM Sua_tabela"
. " WHERE Tipo_de_lancamento = ‘Crédito’ and Ano = ‘" . [varANO] . "’";
sc_lookup(rs, $check_sql);
if (isset({rs[0][0]})) // Row found
{
{Numero} = str_pad({rs[0][0]}+1,4,‘0’,STR_PAD_LEFT);
}
else // No row found
{
{Numero} = ‘0001’;
}
Para utilizar, é só recortar e colar no evento BEFORE INSERT da aplicação.
É isso, espero que ajude.