Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Ajuda com incremento de número Bom dia a todos, pessoal estou criando um sistema para elaboração de CI´s e Ofícios entre outros, preciso de uma ideia para que eu possa gerar a codificação por tipo de documentos, tipo: Ofício nº 0001/2020-SEMAM, já para outro tipo de documento, também iniciaria com o 001, tipo: CI nº 0001/2020-SEMAM. Eu teria que ter uma tabela só pra isso? Estou sem ideia, alguém poderia me ajudar?...
MO
Ajuda com incremento de número  
Bom dia a todos, pessoal estou criando um sistema para elaboração de CI´s e Ofícios entre outros, preciso de uma ideia para que eu possa gerar a codificação por tipo de documentos, tipo: Ofício nº 0001/2020-SEMAM, já para outro tipo de documento, também iniciaria com o 001, tipo: CI nº 0001/2020-SEMAM. Eu teria que ter uma tabela só pra isso? Estou sem ideia, alguém poderia me ajudar?

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (4)


JS

Marcos,

Eu acrescentaria o tipo do documento na codificação, ex:

OF_0001/2020-SEMAM (para Ofícios)
CI_0001/2020-SEMAM (para as CI´s)

e na tabela acrescentaria o código do tipo de documento, ex: tipo_doc_id

e criaria uma tabela de Tipos de Documento, ex

id, int
tipo_documento, varchar(30)

1 - Ofício
2 - Circulação Interna

MG

Marcos
Você não poderia usar auto incremento nesta coluna, certo.
Eu criarei um método no model que tivesse um filtro por tipo de documento e sempre retornaria o último registro e a este somaria 1.

Seria +/- isso:

  1. <?php
  2. public static function numera($tipo)
  3. {
  4.     try {
  5.     .... // abre transacao
  6.     $obj Documento::where('tipo_doc','=',$tipo)->load()->last();
  7.     $num $obj->numero 1;
  8.     return $num
  9.     cach (Exception $e) {
  10.     }
  11. }
  12. ?>
RL

Bom dia Marcos,
Eu não vejo outra maneira de fazer isso sem uma tabela de controle, é o mesmo que controlar o número de nota por série. A única solução que encontrei foi criando uma tabela de controle.
No seu caso seria algo como:

create table controle_doc (
id int/bigint primary key auto_increment
,tp_doc int/smallint/tinyint.. # o tipo de documento (1 - Oficio, 2 - CI, 3 - Outros)
,nr_doc int/bigint # o número do documento em si
);
alter table controle_doc add constraint "controle_doc_key" unique (tp_doc, nr_doc); # cria uma chave única de tp_doc + nr_doc

Espero ter ajudado!
JC

Saudações,
Como fazer para ter o controle 001 com a virada de ano?