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