Página 1 de 2
Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 09:46
por Ale SB
Esta semana vi uma situaçao que achei que nunca iria acontecer e muito menos ver um Usuario fazer...
Tenho um Sistema Simples para Salao de Beleza...Sistema Local...soh um Usuario Administra-o...
o cara pegou alguns registros de Clientes antigos q nao Frequentava mais o Salao e resolveu Reaproveitar ele para Cadastrar Novos clientes....heheheh...eh móle...
Eu nao costumo ter a opçao de Exclusao em Cadastro apenas deixo o cara Desabilitar/Bloquear/Desativar...enfim...em vez do cara Desativar o cliente o cara faz um Novo cadastro aproveitado a Ficha do cliente antigo.
Alguem teria alguma ideia de como poderia resolver isso...para evitar q o cara...reutilize um registro para novos cadastro ?
Pensei em Bloquear pelo menos o Nome do cliente apos feito o Cadastro...mas...se o cara errar o nome do cliente e precisar corrigir ?
Usuario faz cada proeza q ate Deus Duvida...heheh.
Se alguem tiver alguma Dica..agradeço.
@braços Ale
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 10:21
por asimoes
Ale,
Quais campos compõe o cadastro de clientes?
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 10:26
por Ale SB
asimoes;
Eh um cadastro basico,
Nome, Endereço, Cidade, cep, UF, Fone's, Cpf, RG, Dt.nasc, Dt cadastro...
Eu havia pensado em ter o CPF como base, da mesma forma q eu faço com sistema para empresas, onde o CPF eh obrigatorio....
...mas..por se tratar de salao de beleza..o CPF nao eh obrigatorio...ate foi uma exigencia deles.
@braços Ale
Re: Reutilizar Registro de Cadastro...Resolvido
Enviado: 11 Fev 2011 13:36
por Ale SB
Soluçao:
Se nao tiver movimento, o cara pode alterar o cadastro..se tiver Movimento...somente com minha Senha...poderá fazer alguma correçao no campo Nome.
Nao adianta se matar muito em perfeiçao com Sistemas..onde o Proprio Dono do Sistema...faz kestao de deixar Brechas.
Se o Cpf fosse campo obrigatorio..seria diferente..eu ate ja expliquei isso a ele....mas...o cara nao ker...entao..soh vou dificultar um pouco.
@braços Ale
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 13:43
por asimoes
Você pode ter um campo do tipo data para controle destas alterações, onde:
O usuário fez um novo cadastro, o sistema grava a data do dia.
Quando o usuário for alterar, se a data for o mesmo dia, o sistema irá permitir a alteração de qualquer campo, virou a data, somente os campos que você definir, por exemplo o nome do cliente, os campos endereço, cidade, cep, UF ficam só para consulta.
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 15:43
por rochinha
Amiguinhos,
Vejamos o seguinte:
Se o sistema tem um limite de registros para cadastro, o ideal é deixar o cliente manusear os registros como quizer, é problema dele não encontrar dados de um cliente depois.
Sugestão:
Criar campo para critica de situacoes que deverá ser avaliado sempre numa alteração, etc.
Quando o cliente for excluso este registro deverá conter a marca "X" por exemplo e sempre que avaliado, quando for encontrado o "X" nunca poderá ser manipulado, anão ser, através de senha.
Definir opções de critica, exemplos:
X-Excluso
I-Inativo
N-Novo
A-Assiduo
Etc, como der na imaginação.
Mas a regra é clara. Registro deletado só pode ser reutilizado se houver uma politica de controle como código não repetidos, etc.
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 16:07
por Ale SB
@Rochinha
Eu tenho um controle ja para Alteraçoes e exclusao...o problema eh esse o cara nao tava Excluindo o registro, ele simplismente...cadastrava outra pessoa naquele registro...ker dizer todo movimento do cliente antigo...ficava vinculado ao Novo...pq ele reutilizou um cadastro Ativo.
@aesimoes
eh +- o q eu fiz.
Se o Cliente nao tiver movimento, ele pode alterar/reaproveitar aquele cadastro, se ja tiver movimento...soh com minha senha eh possivel fazer alguma alteraçao no campo Nome.
Agora ele fica mais esperto...heheh..
mas valew pessoal pela Colaboraçao.
@braços Ale
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 16:15
por MARCELOG
Olá combatente,
a utilização de código único facilita a programação na medida em que permite uma identificação simples e exclusiva do registro para manipulação e vinculação de dados.
Alguns utilizam como código único, o cpf ou cnpj, outros a combinação do nome e cpf/cnpj, outros o nome e data de nascimento, outros uma sequência, etc.
Mas a finalidade é uma só, ou seja, permitir uma identificação simples e exclusiva do registro para manipulação e vinculação de dados.
Eu, particularmente, quando necessário, adoto o sistema de código único composto de 6 caracteres e um dígito verificador.
Como não gosto de ver uma sequência "furada" (acho esteticamente ruim), reutilizo códigos.
O único inconveniente é o efeito cascata, ou seja, se o código for excluído, todos os registros dependentes que fazem menção ao mesmo também devem ser excluídos ou tratados.
Assim, se o cliente de código "000001-6" for excluído, os pedidos vinculados ao mesmo devem ser excluídos também, ou ter o código do cliente alterado, por exemplo, para "EXCLUI-D".
Essa situação impede que um novo cliente incluído com o código "000001-6" já tenha pedidos cadastrados/ vinculados ao mesmo.
Por outro lado, ainda é possível acessar informações e verificar pedidos e itens de pedidos que tiveram o cliente excluído, se for o caso.
De se ressaltar que, não pretendendo a alteração de dados nos registros dependentes é só gravar a inclusão literalmente. Ex:
O usuário cadastra o cliente 1, de nome Roberto, e lança o pedido 1.
O pedido 1 contém o campo cliente para fazer referência código do cliente.
Logo, se o usuário trocar o nome do cliente 1 de Roberto para Paulo, o pedido, continua fazendo referência ao cliente 1, seja ele Roberto, como originalmente cadastrado, ou Paulo, se tiver sido atualizado.
Para contornar o problema, e eu acho que isso não é problema, é só criar mais um campo para registrar o nome originalmente utilizado no pedido e não permitir a sua edição.
MarceloG
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 11 Fev 2011 22:27
por sygecom
Eu trabalho dessa maneira, tem movimento não pode alterar o nome mais, não tem movimento altera a vontade.
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 12 Fev 2011 09:58
por Ale SB
Entao Pessoal, no caso deste Sistema, teve q ser assim tb..ja q eu nao posso Ter nenhum campo do cadastro para amarrar.
Ja em outros sistema para Empresas, onde o CPF/CNPJ sao obrigatorios...ja nao tenho este problema...na hora do cadastro, ja faço uma consulta do CPF/CNPJ;.... após salvar, ja travo este campo,...e se mesmo assim cadastrar errado...tem um Administrador do Sistema na Empresa..treinado para fazer a correçao...caso haja necessidade.
@braços Ale
Reutilizar Registro de Cadastro...problema!
Enviado: 12 Fev 2011 11:27
por Pablo César
Este realmente é um assunto muito interessante. Eu também faço como oo Leonardo disse, tem movimento: pode alterar NOME sem restrição mas se tem eu ainda permito dando uma mensagem em tela explicando a implicações que poderão ocorrer na mudança completa do NOME. E claro antes passo por uma função que verificará os caracteres que compunham o nome e compara com o novo, se a mudança foi de tantos porcentos: dê a mensagem mas se a mudança for apenas um caracters apenas (por exemplo): não dê mensagem nenhuma. Pois assim consigo permitir que arrume o nome quando este tenha sido mal escrito por problemas de digitação (ou falta de atenção, digamos).
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 12 Fev 2011 11:50
por Ale SB
Pois eh Pablo;
Meu problema eh exatamente este...Muitas vezes o cara ker alterar..1 ou 2 caracter, por erro de Digitaçao.
Travar o Campo Nome, nao eh uma grande soluçao na minha opiniao....mas..foi a unica q encontrei.
Imagina...agora..toda vezes q o cara Kizer trocar 1 caracter...vai me ligar...pois vai precisar de minha senha...vai ser muito chato.
Eu havia pensando nisso..em fazer um esquema de porcentagem...acho q seria mais correto..neste caso.
Como vc ja tem ai a funçao..hehehe...pode disponibilizar ela ?..se nao for abusar muito..ehhe
@braços Ale
Reutilizar Registro de Cadastro...problema!
Enviado: 12 Fev 2011 12:15
por Pablo César
Não custa muito... só uns 500 mil dólares... kakaka
Só que o código você terá que entende-lo, pois eu não adaptei nada para você, você mesmo terá que fazer as adaptações cabíveis. O código que estou passando apenas servirá de referência, ok ?
Código: Selecionar todos
@ 06,08 SAY " Nome Completo.........:" GET v_nome PICT "@!" WHEN FGMSG("Digite o nome completo") VALID (IF(VINI=.T.,VAL_NOM(v_nome),.T.))
read
FUNCTION VAL_NOM(v_nome)
VRET=.T.
IF EMPTY(ALLTRIM(v_nome))
MENSAGEM("Informe o nome. N„o pode ficar em branco !",3)
RETURN .F.
ENDIF
TELA_SEL:=SAVESCREEN(00,00,24,79)
VQREC=RECNO()
SET CURSOR OFF
SET ORDER TO 2
SEEK v_nome
DO WHILE (1->NOME)=v_nome
IF (RECNO()=VQREC)
SKIP
LOOP
ENDIF
IF (1->NOME)=v_nome
BEEP()
MOSTRA_FICHA(" Ficha do Cliente (Nome Repetido)")
RES_POSTA="S"
PER_COR := SETCOLOR()
CURSOR( DESLIGA )
SIM_NAO := 1
SETCOLOR(CONTECOR[11])
@ 15,12 CLEAR TO 19,68
SOMBRA(15,13,19,70)
@ 16,15 SAY "Existe cliente com mesmo nome. o mesmo cliente ?" COLOR CONTECOR[11]
botao:ADD( 18, 25, "Sim " )
botao:ADD( 18, 46, "N„o " )
SIM_NAO := botao:RODA()
RESTSCREEN(00,00,24,79,TELA_SEL)
SETCOLOR( PER_COR )
IF SIM_NAO=1
KEYBOARD CHR(25)
READUPDATED(.F.)
VRET=.F.
EXIT
ELSE
VRET=.T.
ENDIF
SKIP
ENDIF
ENDDO
SELE 3
SET ORDER TO 2
SEEK v_nome
DO WHILE (3->NOME)=v_nome
BEEP()
MOSTRA_FICHA(" Ficha do Cliente (Inativos)")
RES_POSTA="S"
PER_COR := SETCOLOR()
CURSOR( DESLIGA )
SIM_NAO := 1
SETCOLOR(CONTECOR[11])
@ 15,12 CLEAR TO 20,68
SOMBRA(15,13,20,70)
@ 16,15 SAY "Existe cliente com mesmo nome no arquivo de INATIVOS." COLOR CONTECOR[11]
@ 17,20 SAY "Se ‚ o mesmo cliente, deseja recuperar ?" COLOR CONTECOR[11]
botao:ADD( 19, 25, "Sim " )
botao:ADD( 19, 46, "N„o " )
SIM_NAO := botao:RODA()
RESTSCREEN(00,00,24,79,TELA_SEL)
SETCOLOR( PER_COR )
IF SIM_NAO=1
SELE 1
VQR=RECNO()
XCLI=VCLI
VCL=(3->CLIENTE)
VCLI=STRZERO(VCL,4,0)
VARQ1:=VDIR+"\INATIVOS\MEMOS\OBS_"+VCLI+".TXT"
VARQ2:=VDIR+"\MEMOS\OBS_"+VCLI+".TXT"
IF FILE(VARQ1)
COPY FILE (VARQ1) TO (VARQ2)
DELETE FILE (VARQ1)
ENDIF
VARQ1:=VDIR+"\INATIVOS\MEMOS\REC_"+VCLI+".TXT"
VARQ2:=VDIR+"\MEMOS\REC_"+VCLI+".TXT"
IF FILE(VARQ1)
COPY FILE (VARQ1) TO (VARQ2)
DELETE FILE (VARQ1)
ENDIF
VQREC=RECNO()
SELE 1
SET ORDER TO 1
SEEK STRZERO(VCL,4,0)
IF FOUND()
JATEM=XCLI
ELSE
JATEM=STRZERO(VCL,4,0)
ENDIF
RECUPCLI(VCL,JATEM)
RECUPAUT(VCL,JATEM)
VNCL=VAL(XCLI)
VSUBDIR1="\FICH"+STRZERO((IF(((CEILING((VCL/100)))*100)>9999,0,((CEILING((VCL/100)))*100))),4,0)
VSUBDIR2="\FICH"+STRZERO((IF(((CEILING((VNCL/100)))*100)>9999,0,((CEILING((VNCL/100)))*100))),4,0)
DIRMAKE(VDIR+VSUBDIR2)
VARQ1:=VDIR+"\INATIVOS"+VSUBDIR1+"\MOV"+STRZERO(VCL,4,0)+".DBF"
VARQ2:=VDIR+VSUBDIR2+"\MOV"+STRZERO(VNCL,4,0)+".DBF"
IF FILE(VARQ1)
COPY FILE (VARQ1) TO (VARQ2)
DELETE FILE (VARQ1)
ENDIF
VARQ1:=VDIR+"\INATIVOS"+VSUBDIR1+"\LOCA"+STRZERO(VCL,4,0)+".DBF"
VARQ2:=VDIR+VSUBDIR2+"\LOCA"+STRZERO(VNCL,4,0)+".DBF"
IF FILE(VARQ1)
COPY FILE (VARQ1) TO (VARQ2)
DELETE FILE (VARQ1)
ENDIF
SELE 3
IF BLOQREG(20)
DELETE
DESBLOQ()
ENDIF
// KEYBOARD CHR(25)
// READUPDATED(.F.)
VRET=.F.
ALERT("Recupera‡„o do cliente, com sucesso !.")
KEYBOARD CHR(27)+CHR(27)+CHR(27)
EXIT
ELSE
VRET=.T.
ENDIF
SKIP
ENDDO
SELE 1
SET ORDER TO 1
SET CURSOR ON
GOTO VQREC
IF VRET=.T.
v_nome=v_nome+CHR(255)
ENDIF
RETURN VRET
==============
IF VQMUDOU(XTIT1,XTIT2)=.F.
JANELA(06,08,19,72,"Mudan‡a de t¡tulo interrompida")
@ 19,16 SAY "Pressione qualquer tecla ou <F10> efetiva mudan‡a" COLOR CONTECOR[05]
@ 07,09 SAY PADR(" Este t¡tulo j foi locado "+(IF(VVEZES=1,"uma vez",ALLTRIM(STR(VVEZES))+" vezes"))+", e a mudan‡a deste t¡tulo",63) COLOR "W+/R"
@ 08,09 SAY " pode implicar em resultados incorretos. " COLOR "W+/R"
@ 09,09 SAY " Como por exemplo, avisar que o filme j foi locado e n„o ser " COLOR "W+/R"
@ 10,09 SAY " o mesmo filme. " COLOR "W+/R"
@ 11,09 SAY " " COLOR "W+/R"
@ 12,09 SAY " Devido que o sistema considera que o t¡tulo est sendo mudado " COLOR "W+/R"
@ 13,09 SAY " radicalmente e caso deseje efetivar esta mudan‡a, pressione " COLOR "W+/R"
@ 14,09 SAY " <F10> para confirmar esta opera‡„o. " COLOR "W+/R"
@ 15,09 SAY " Por‚m, se o seu objetivo ‚ substituir este t¡tulo por outro, " COLOR "W+/R"
@ 16,09 SAY " aconselhamos a deletar este t¡tulo e fazer a inclus„o do " COLOR "W+/R"
@ 17,09 SAY " outro, para que o sistema execute o procedimento de " COLOR "W+/R"
@ 18,09 SAY " aproveitamento dos n£meros. " COLOR "W+/R"
VK:=INKEY(0)
IF !(VK=-9)
XTIT2:=""
ENDIF
ENDIF
IF !(XTIT1==XTIT2) .AND. !EMPTY(ALLTRIM(XTIT2))
IF BLOQREG(20)
REPLACE TITULO WITH XTIT2
DESBLOQ()
ENDIF
ELSE
IF !(XTIT1==XTIT2)
BEEP()
MENSAGEM("Aten‡„o: N„o ‚ mais poss¡vel alterar este T¡tulo !",5)
ENDIF
ENDIF
ELSE
IF (14->NIVEL)=2
IF BLOQREG(20)
REPLACE TITULO WITH XTIT2
DESBLOQ()
ENDIF
ELSE
BEEP()
MENSAGEM("Altera‡„o do t¡tulo, n„o autorizada !",3)
ENDIF
ENDIF
FUNCTION VQMUDOU(VTIT1,VTIT2)
Local VPALA1,VPALA2,VQNEN,VTXT,VQTM
/*
Separar em palavras e contar as letras que nao coincidem
nas palavras nao achadas
*/
VQNEN:={}
VPALA1:={}
VENQUAN=.T.
VTXT:=ALLTRIM(VTIT1)
DO WHILE VENQUAN
VP:=AT(" ",VTXT)
IF VP=0
VENQUAN=.F.
IF LEN(VTXT)>0
AADD(VPALA1,VTXT)
AADD(VQNEN,0)
EXIT
ENDIF
ENDIF
AADD(VPALA1,SUBSTR(VTXT,1,VP-1))
AADD(VQNEN,0)
VTXT:=ALLTRIM(SUBSTR(VTXT,VP,LEN(VTXT)))
ENDDO
VPALA2:={}
VENQUAN=.T.
VTXT:=ALLTRIM(VTIT2)
DO WHILE VENQUAN
VP:=AT(" ",VTXT)
IF VP=0
VENQUAN=.F.
IF LEN(VTXT)>0
AADD(VPALA2,VTXT)
IF LEN(VPALA2)>LEN(VPALA1)
// AADD(VQNEN,LEN(VPALA2))
AADD(VQNEN,0)
ENDIF
EXIT
ENDIF
ENDIF
AADD(VPALA2,SUBSTR(VTXT,1,VP-1))
IF LEN(VPALA2)>LEN(VPALA1)
// AADD(VQNEN,LEN(VPALA2))
AADD(VQNEN,0)
ENDIF
VTXT:=ALLTRIM(SUBSTR(VTXT,VP,LEN(VTXT)))
ENDDO
FOR VQ1=1 TO LEN(VPALA1)
FOR VQ2=1 TO LEN(VPALA2)
IF VPALA2[VQ2]=VPALA1[VQ1] .AND. VQNEN[VQ2]=0
VQNEN[VQ1]:=VQ2
EXIT
ENDIF
NEXT
NEXT
VQTM:=0
FOR VQI=1 TO LEN(VQNEN)
IF VQNEN[VQI]=0
VQQ=0
FOR VQM=1 TO LEN(VPALA2[(LEN(VPALA2))])
IF LEN(VPALA1)>=VQI .AND. LEN(VPALA2)>=VQI
IF SUBSTR(VPALA1[VQI],1,VQM) $ VPALA2[VQI]
VQQ:=VQQ+1
ENDIF
ENDIF
NEXT
IF LEN(VPALA1)>=VQI
IF (LEN(VPALA1[VQI])/2)>1
IF (LEN(VPALA1[VQI])/2)>=VQQ
VQNEN[VQI]:=VQI
ELSE
VQTM:=VQTM+1
ENDIF
ELSE
VQTM:=VQTM+1
ENDIF
ELSE
VQTM:=VQTM+1
ENDIF
ENDIF
NEXT
IF (LEN(VQNEN)/4)>=VQTM
VRET:=.T.
ELSE
VRET:=.F.
ENDIF
RETURN VRET
O código acima, na verdade trata o nome do titulo de filmes para locadoras. Pode ver que tem dois partes de código mas os dois compõe o que tínhamos falado.
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 12 Fev 2011 12:19
por Ale SB
Blz Pablo...ta xique cara...
Vou adpatar ele aki...valew...
@braços Ale
Re: Reutilizar Registro de Cadastro...problema!
Enviado: 12 Fev 2011 12:21
por Pablo César
Chick ? kakaka Chick está o Opala seu na assinatura, mas o burrinho de chapeu... kakaka