Dúvidas Manutenção ReservaID
Como fazer bloqueio de número (NF-e, pedido, orçamento, pessoa)
Caminho
Ir em utilitários/Módulos avulsos – Dataplus/Manutenção ReservaID.
Orientações
Nessa tela é possível Bloquear/Desbloquear os números, lembrando que esse ajuste deve ser utilizado como último recurso, como por exemplo, caso o número esteja bloqueado por um usuário e o mesmo não aparece para ser desbloqueado.
Ao abrir a entidade é possível selecionar qual módulo será feita a liberação, exemplo: nota fiscal, pedido, etc.
A coluna ID corresponde ao Número da nota (pedido, nota, orçamento, etc), confirme qual número precisa ajustar, clique sobre a linha, e clique no botão de Bloquear Número ou Liberar Número.
Nessa tela há dois tipos de uso: Uso do Usuário e Uso do Sistema.
Uso do usuário: Caso libere ou bloqueie o número através dele, ficará gravado o usuário que realizou a liberação ou o bloqueio, dessa forma, caso abra, por exemplo, a tela da nota, será mostrado o número bloqueado pelo usuário.
Uso do Sistema: Caso libere ou bloqueie o número através dele, não ficará vinculado a nenhum usuário, sendo assim, caso precise por exemplo, bloquear números que foram indevidamente liberados, utilize esse tipo, já que não ficará mostrando a mensagem de liberação dos números para os usuários.
Obs.: Vale lembrar que por conta desse recurso, agora aparecem todos os registros e devem tomar cuidado para não liberar números que não devem, como as notas canceladas.
Intervalo
Caso necessário bloquear um intervalo é possível fazer via banco com o seguinte comando:
Função: ReservaIdCriaIntervalo (@IdIni int, @IdFin int, @Tabela nVarChar(100), @ChaveCompl nVarChar(300), @Reserva bit, @SemUso bit, @ContrSistema bit)
Parâmetros: @IdIni => Número inicial
@IdFin => Número Final
@Tabela => Nome da tabela que deseja criar o intervalo de numeração
@ChaveCompl => Chave complementar que identifica a série de numeração. Essa informação deve ser copiada da própria tabela ReservaId, identificando o registro pelo campo Tabela e a ChaveComplementar desejada, por exemplo, para criar um intervalo no pedido da empresa 3, a chave será ‘EmpresaCodigo= 3 ‘, mas deve ser copiado de um registro já criado pelo sistema, pois envolve espaços e outros detalhes que podem ficar errado.
@Reserva => Define se os números criados ficarão bloqueados ou não – 0 = Liberado e 1 = Bloqueado
@SemUso => Tambem ajuda a definir se o número ficará bloqueado, definindo se esta sendo usado ou não. – 0 = Em uso – 1 = Sem uso (para bloquear deverá ser 0 (zero))
@ContrSistema = Define se o número poderá ser liberado pelo usuário. 0 = Sem controle do sistema, podendo ser liberado – 1 = Controlado pelo sistema, não podendo ser liberado pelo usuário.
Exemplo de Sintaxe: exec dbo.ReservaIdCriaIntervalo 1, 100, 'Pedidos', ' EmpresaCodigo= 3 ', 1, 0, 1
Nesse exemplo será criado um intervalo de números do pedido de 1 a 100 bloqueados para os usuários.
OBS
Identifiquei dois erros no procedimento, sendo o primeiro que o comando só cria os registros se ainda não existir, dessa forma tem que excluir os existentes antes e o outro é a chave complementar que está errada e no wiki está orientando a copiar a chave de um registro já existente e não tem nenhum na tabela com a chave que estava usando. Segue comandos para resolver o problema do cliente:
Delete ReservaId Where Tabela='NotaFiscal' And ChaveComplementar='#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#1##' And Id Between 275 And 2012
exec dbo.ReservaIdCriaIntervalo 275, 2012, 'NotaFiscal', '#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#1##', 0, 1, 0
Delete ReservaId Where Tabela='NotaFiscal' And ChaveComplementar='#EmpresaCodigo=#2###AND##SerieEmpresaCodigo=#2##AND#SerieCodigo=#1##' And Id Between 140 And 1212
exec dbo.ReservaIdCriaIntervalo 140, 1212, 'NotaFiscal', '#EmpresaCodigo=#2###AND##SerieEmpresaCodigo=#2##AND#SerieCodigo=#1##', 0, 1, 0
SINTAXE: Foi inserido o caractere # no lugar dos espaços porque na página do wiki é suprimido espaços repetidos, dessa forma os caracteres # deverão ser substituídos por espaços para executar o comando
Para sugerir uma numeração
--Empresa 1 - Serie 1 - Sugerir 2021 Delete ReservaId Where Tabela='NotaFiscal' And ChaveComplementar='#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#1##' And Id Between 275 And 2030
exec dbo.ReservaIdCriaIntervalo 275, 2020, 'NotaFiscal', '#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#1##', 1, 0, 1
--Empresa 1 - Convencional - Sugerir 278 Delete ReservaId Where Tabela='NotaFiscal' And ChaveComplementar='#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#2##' And Id Between 278 And 1686
Delete ReservaId Where Tabela='NotaFiscal' And ChaveComplementar='#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#2##' And Id = 1688
exec dbo.ReservaIdCriaIntervalo 278, 1686, 'NotaFiscal', '#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#2##', 0, 1, 0
exec dbo.ReservaIdCriaIntervalo 1688, 1688, 'NotaFiscal', '#EmpresaCodigo=#1###AND##SerieEmpresaCodigo=#1##AND#SerieCodigo=#2##', 0, 1, 0
--Empresa 2 - Serie 1 - Sugerir 729 => Ja existia notas até 1214, ficou com 1215 para a próxima Delete ReservaId Where Tabela='NotaFiscal' And ChaveComplementar='#EmpresaCodigo=#2###AND##SerieEmpresaCodigo=#2##AND#SerieCodigo=#1##' And Id <= 670
exec dbo.ReservaIdCriaIntervalo 1, 670, 'NotaFiscal', '#EmpresaCodigo=#2###AND##SerieEmpresaCodigo=#2##AND#SerieCodigo=#1##', 1, 0, 1
SINTAXE: Foi inserido o caractere # no lugar dos espaços porque na página do wiki é suprimido espaços repetidos, dessa forma os caracteres # deverão ser substituídos por espaços para executar o comando
