Olá. Estou tentando um aplicação para cadastrar Ofícios, sendo que ao mudar de ano a contagem ZERA, continuando nova contagem para o ano seguinte.
Alguém pode me ajudar?
Desde já agradeço á atenção.
vc tem um campo na tabela de oficios e deseja zerar a contagem ao mudar o ano?
Esse campo não é autoincrement na tabela, correto? E nem índice exclusivo?
Agradeço o retorno Haroldo. Como pode perceber sou iniciante em lógica de programação.
Bom então, tenho que ter um campo, que não seja o autoincrement, e nem índice da tabela e a partir daí zerar a contagem, seria isso?
A tabela que criei é essa:
CREATE TABLE tbl_sg1procentr
(
idtbl_docsg1ProcEntr
INT(6) NOT NULL AUTO_INCREMENT,
numDocumento
INT(6) NULL DEFAULT NULL,
ano
INT(4) NULL DEFAULT NULL,
tipoDoc
INT(1) NULL DEFAULT NULL,
pastaDoc
VARCHAR(1) NULL DEFAULT NULL COLLATE ‘utf8_general_ci’,
juridico
INT(1) NULL DEFAULT NULL,
dataCad
DATE NULL DEFAULT NULL,
descrDoc
VARCHAR(125) NULL DEFAULT NULL COLLATE ‘utf8_general_ci’,
assist
INT(2) NULL DEFAULT NULL,
dataSaida
DATE NULL DEFAULT NULL,
depto
VARCHAR(2) NULL DEFAULT NULL COLLATE ‘utf8_general_ci’,
obs
VARCHAR(60) NULL DEFAULT NULL COLLATE ‘utf8_general_ci’,
PRIMARY KEY (idtbl_docsg1ProcEntr
) USING BTREE
)
Nesse caso o campo numDocumento deve ser zerado para o inicio do próximo ano, mas não estou acertando
muito bem, agora fica mais claro e podemos te ajudar.
Solução em Scriptcase:
No evento onbeforeinsert:
$select = "select max(numDocumento)+1 from tbl_sgqprocentr where ano = year(currdate())";
sc_lookup(ds, $select);
if ($rs) {
{numDocumento} = $ds[0][0];
}else{
{numDocumento} = 1;
}
Veja bem, em uma aplicação muito concorrente isso por gerar problemas.
Outras soluções existem mas requer cada vez mais conhecimento avançado.
Eu criaria uma índice exclusivo para as colunas ano + numDocumento
Agradeço a paciência e atenção.
Vou quebrar um pouco a cabeça, então retornarei.
criando o índice que sugeri evita a duplicidade de número de documento dentro do mesmo ano.
Verifique no teu banco de dados e utilize Triggers que é mais garantido.
Utilizo a geração no no ajax do campo, passando o código:
$anonovo=date(‘Y’);
$novo_numero=str_pad({numero}, 4, “0”, STR_PAD_LEFT);
{numCompleto}=$novo_numero."-".$anonovo;
Já utilizo a algum tempo e funciona sem problema com cerca de 20 pessoas utilizado o gerador de numeros.
///criei o metodo PHP com o codigo abaixo:
$ano_atual = date(“Y”);
sc_lookup(rs, “SELECT tipo FROM tipo_documentos WHERE idtipo={tipo}”);
$tipoNome={rs[0][0]};
sc_lookup(ds, “SELECT numero FROM numerodocumento WHERE tipo={tipo} and ano=$ano_atual ORDER BY id DESC LIMIT 1”);
$num= {ds[0][0]};
if($num==Null){
sc_ajax_message("Primeiro número do(a) <br><strong>".$tipoNome."</strong> do ano: <strong>".$ano_atual."</strong>. <br>Informe manualmente no campo <strong>'Número'</strong>: o valor <strong>'1'</strong>", "Aviso", "type=error");
}
elseif($num!=Null){
$i=$num;
do{
$i++;
}while ($i <=$num);
$novonumero=$i;
{numero}=$novonumero;
$novonumero=str_pad($novonumero, 4, "0", STR_PAD_LEFT);
$data_atual = date("Y");
{numCompleto}=$novonumero."-".$data_atual;
sc_ajax_message("Número gerado com sucesso!<br> <h2><strong>".$tipoNome." Nº: ".{numCompleto}, "</strong></h2> Confirmação", "type=success");
}