Alô colegas,
preciso das suas experiências para saber como proceder.
Estou criando um sistema que, inicialmente, gera automaticamente o código para os registros manipulados pelo mesmo.
Esse código é armazenado em um arquivo texto à parte, que vai sendo incrementando conforme o número de registros válidos incluídos.
Ao apresentar os "primeiros passos" desse sistema, com codificação automática de registros, sugeriram que o código dos registros fossem facultativos.
Como o sistema é jurídico, por exemplo, ao invés de relacionar o código 000001 a uma AÇÃO TRABALHISTA, o usuário poderia usar algo mais amistoso e facilmente "lembrável", do tipo ACATRA, ACAOTR, TRABAL, etc.
Sugeriram também que a codificação automática fosse mantida no caso do código ficar em branco (numa inclusão por exemplo), para poder ser eventual e futuramente mudado.
Fácil!?
Não sei. O sistema funciona em rede e a duplicidade de códigos, detonando os relacionamentos pode ocorrer.
Alguém pode me ajudar a decidir?
Informem suas experiências, isso pode me ajudar, bem como aos demais integrantes do forum.
Atenciosamente.
MGS
Código automático ou facultativo
Moderador: Moderadores
-
gransoft
- Usuário Nível 3

- Mensagens: 321
- Registrado em: 06 Jul 2004 17:48
- Localização: UBERLÂNDIA-MG
- Contato:
Controle de Numeração
ARAGUARI-MG, 3 de agosto de 2005.
Prezado Marcelo,
Segue uma sugestão:
Crie um arquivo, DOC.DBF com apenas um campo alfanumérico com 6 dígitos:
NUMLAN, C,6
Para solicitar um novo número, utilize esta chamada:
cDocumento := GeraNDoc("I",SPACE(06))
Ao excluir um documento, para aproveitar o número para próximo documento:
GeraNDoc("E",cDocumento)
Observe que será criado uma seqüência, e armazenado no primeiro registro o número atual. Em caso de exclusões, os demais registros serão utilizados nas próximas chamadas da função.
Como o arquivo é chamado rapidamente em modo EXCLUSIVO, não haverá duplicidades na seqüência.
PS: "Código Facultativo" é problema premeditado ...
Atenciosamente,
Janis Peters Grants.
Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br
Prezado Marcelo,
Segue uma sugestão:
Crie um arquivo, DOC.DBF com apenas um campo alfanumérico com 6 dígitos:
NUMLAN, C,6
Para solicitar um novo número, utilize esta chamada:
cDocumento := GeraNDoc("I",SPACE(06))
Ao excluir um documento, para aproveitar o número para próximo documento:
GeraNDoc("E",cDocumento)
Código: Selecionar todos
/*
FUNCTION PARA GERAR NUMERO SEQUENCIAL DE DOCUMENTOS, REAPROVEITANDO
OS QUE EVENTUALMENTE FOREM EXCLUIDOS, SEM REPETICAO.
*/
FUNCTION GeraNDoc(cVar,cNL)
*
LOCAL nArq, nNl, cNumLan := SPACE(06) && 700000 ...
*
IF (VALTYPE(cVar) <> "C") .OR. (cVar == NIL)
RETURN(cNumLan)
END
*
cVar := ALLTRIM(cVar)
*
IF (cVar <> "I") .AND. (cVar <> "E")
RETURN(cNumLan)
END
IF (cVar == "E") .AND. ((VALTYPE(cNL) <> "C") .OR. (cNL == NIL))
RETURN(cNumLan)
END
*
nArq := Arquivo("NUMDOC")
*
IF Abre_Dbf(aDbfNtx[nArq,01],aAlias[nArq],lMono,5)
&& Abre_Ntx(nArq)
ELSE
SETCOLOR(cCor5)
Mensagem("*** O "+aMsgArq[nArq,01]+" NAO ESTA DISPONIVEL ***")
Retorno()
RETURN(cNumLan)
END
*
IF cVar = "I" && Inclusao ...
IF LASTREC() = 0
GOTO BOTTOM
nNl := 1
cNumLan := STRZERO(nNl,6)
APPEND BLANK
REPLACE NUMLAN WITH CD(cNumLan)
ELSEIF LASTREC() = 1
GOTO 1
nNl := VAL(DC(NUMLAN))+1
cNumLan := STRZERO(nNl,6)
REPLACE NUMLAN WITH CD(cNumLan)
ELSEIF LASTREC() >= 2
GOTO 2
nNl := VAL(DC(NUMLAN))
cNumLan := STRZERO(nNl,6)
DELETE
PACK
END
ELSEIF cVar = "E" && Exclusao ...
GOTO BOTTOM
APPEND BLANK
REPLACE NUMLAN WITH CD(cNL)
END
*
COMMIT
CLOSE NUMDOC
*
RETURN(cNumLan)
***
Como o arquivo é chamado rapidamente em modo EXCLUSIVO, não haverá duplicidades na seqüência.
PS: "Código Facultativo" é problema premeditado ...
Atenciosamente,
Janis Peters Grants.
Skype: gransoft
http://www.gransoft.com.br
gransoft@zipmail.com.br
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Olá,
Concordo com Janis qdo ele diz que código facultativo é problema premeditado!!
Quando um cliente pede algo deste tipo, eu particularmente, trabalho inserindo o código automático, em geral numerico e em ordem sequencial crescente, e deixando a opção para ele cadastrar um segundo código, o "código interno", de uso da empresa.
Certo cliente me pediu ha pouco tempo para sempre que excluir um produto ou cliente ( ou algum registro de outro arquivo ) reutilizar seu código para o próximo a ser cadastrado... Só pensei comigo "Nada bom isso..."
Concordo com Janis qdo ele diz que código facultativo é problema premeditado!!
Quando um cliente pede algo deste tipo, eu particularmente, trabalho inserindo o código automático, em geral numerico e em ordem sequencial crescente, e deixando a opção para ele cadastrar um segundo código, o "código interno", de uso da empresa.
Certo cliente me pediu ha pouco tempo para sempre que excluir um produto ou cliente ( ou algum registro de outro arquivo ) reutilizar seu código para o próximo a ser cadastrado... Só pensei comigo "Nada bom isso..."
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
- vagucs
- Membro Master

- Mensagens: 1480
- Registrado em: 10 Jul 2004 10:45
- Localização: Ipanema - MG
- Contato:
Vou na do Stanis,
Eu tambem tive problemas com a questão de reutilização de código, pois se houver algum dado do cliente antigo no sistema ou em backup, ai vem uma confusão, sempre uso um codigo onde pego o RECCOUNT e procuro pelo codigo, no caso dele existir incremento até achar um codigo que não esteja cadastrado, este codigo nunca muda e nunca está disponivel para o usuario, é apenas interno para o programa relacionar as informações referentes a este cliente.
Um outro campo codigo fica a disposição do cliente, sendo incrementado como ele escolher.
Eu tambem tive problemas com a questão de reutilização de código, pois se houver algum dado do cliente antigo no sistema ou em backup, ai vem uma confusão, sempre uso um codigo onde pego o RECCOUNT e procuro pelo codigo, no caso dele existir incremento até achar um codigo que não esteja cadastrado, este codigo nunca muda e nunca está disponivel para o usuario, é apenas interno para o programa relacionar as informações referentes a este cliente.
Um outro campo codigo fica a disposição do cliente, sendo incrementado como ele escolher.
