Gerar nº automaticamente

O meu sistema é uma base única onde cada empresa terá acesso separadamente. Em cada tabela consta o codigoempresa.
Na app emissão de orçamento preciso gerar automaticamente o nº do orçamento seqüencial para cada empresa. Ex. empresa x (nº 001 e 002…) e empresa Y (nº 001 e 002…)

Gostaria da ajude dos colegas.
Obg

Gilmar Monteiro

crie o campo nro_orcamento na tabela de empresas, e incremente a cada insert dos orçamentos.

// PARA PEGAR O ULTIMO ORÇAMENTO DE DETERMINADA EMPRESA

sc_lookup(meusdados,“Select max(seq_orcamento)+1 from sua_tabela where empresa = ‘x’”);

if(false === {meusdados}){
sc_error_message(“Erro no acesso da tabela de XXXXXXXXXXXXX!” . {meusdados});
return;
}
if({meusdados[0][0]} == 0){
$orcamento = 1;
}else{
$orcamento={meusdados[0][0]};
}

Isso não é arriscado em mult-usuário?

Extremamente arriscado … =-\

William

É verdade, desculpa.

E eu estou usando assim, com o alerta de vcs despertei para o problema, vou alterar minhas rotinas.

Obrigado

Estava analisando a rotina e o que ela faz é a mesma coisa da sugerida por Haroldo, se ta pegando o maior seqüencial de determinada empresa qual a diferença para ser arriscado?

É a mesma coisa de ta pegando o último sequencial (orçamento) no cadastro da empresa.

Agora fiquei em duvida, onde esta o risco?

se dois usuários fizerem o insert ao mesmo tempo, ocorrerá erro.
com o campo controlado na tabela de empresas, você busca o número e incrementa tudo numa única instrução sql, durante o processo o travamento não permitirá a duplicação.
Pode ser díficil ocorrer uma inserção simultânea, ma não impossível, então por regras de programação voltada a uma concorrência mult-usuária, evitamos esse tipo de procedimento.

George;

Como sou aprendiz tanto na linguagem com no scriptcase.

Vão algumas dúvidas.

1 - Em que evento inserir?
2 - empresa = X (no meu caso a tabela esta como codigoempresa e o X seria a variável [var_codigoempresa] que pego ao se logar.
3 - sua_tabela (é a do orçamento ou da empresa)?

Obrg

Desculpa a ignorância

Harold

Entendi, uso assim e hoje uma dos sistemas tem mais de 600 usuarios distintos (multi usuários) e graças a Deus não ocorreram erros. Vou analisar melhor para ver se altero.

Obrigado.

Gilmar

1 - O evento pode ser no Onload;

2 - X seria a variável [var_codigoempresa];

3 - sua_tabela é a tabela que contem os sequencias dos orçamentos.

O script que postei pega o ultimo sequencial (orçamento) +1 da empresa definida como filtro na clasura Where.

Se não encontrar nenhum registro que atenda a condição é porque não existe orçamento para a empresa, então o número do orçamento vai ser 1.

E vc não tem porque pedir desculpas.

Boa sorte.

George;

Retonou o erro conforme o if abaixo, a tabela esta correta o campo tambem.

sc_lookup(meusdados,"Select max(n_orc)+1 from tb_orcamentos where codigoempresa = [var_codigoempresa]);

if(false === {meusdados}){
sc_error_message(“Erro no acesso da tabela de XXXXXXXXXXXXX!” . {meusdados});
return;
}
if({meusdados[0][0]} == 0){
$orcamento = 1;
}else{
$orcamento={meusdados[0][0]};
}

Gilmar

Postei o sc_lookup faltando um " no final, substitua por esse.

sc_lookup(meusdados,“Select max(n_orc)+1 from tb_orcamentos where codigoempresa = ‘[var_codigoempresa]’”);

George

Agora não esta dando erro.

Mas não tive resultado,ao abrir o app a caixa de texto [nº Orc] era pra vim já o com o próximo numero, pois esta vazia.

Têm alguma coisa a ver com o tipo de dados na tabela ou no campo da app.

Gilmar,

Se não achar registros o valor deveria retornar 1.

Mande para meu e-mail o script que vou criou.