Dica sobre Lixeira de registros deletados.

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Gente, seguinte...
Aproveitando o topico.. hoje justamente estive em um cliente que quer aplicar o conceito de ativo e inativo para produtos e clientes...
Alguem pode me dar uma dica de como proceder???
Ele quer que inative o produto, mas nao remova da tabela... uso um dbedit para pesquisa de produtos na compra, venda, orcamento... se eu colocar um flag, vai ficar lento essa pesquisa (ja aqui ele nao quer que o produto apareça) mas quando ele for no cadastro/tabela de produtos tem que aparecer como inativo...
Para a tabela de consulta (dbedit) nao ficar lenta o que eu poderia fazer ???

Obrigado...
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Caro Rubens, faça como o Eder, utilize o TBROWSE de MATRIZ caso que você precise edita ainda tais registros, fica bom dê uma olha neste tópico:

https://pctoledo.org/forum/viewto ... 9302d11cc7

Acho que você deveria utilizar um campo FLAG onde deferencie o que seria INATIVO, mas observe que você faz uma pré seleção desses registros sem utilizar filtro algum.

Agora se esses registros você vai apenas exibir em tela e não serem editados, faça uma função utilizando o SAY concatenando tais campos.

Um clip-abraço :)Pos
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem por Poka »

Olá a todos,

Interessante esse assunto, pois veio num momento em que estou fazendo justamente isso, com arquivos referente a controle bancário. Em controle bancário eu nunca permito fazer alterações, e muito menos exclusões, por motivos obvios, se o usuario precisar excluir ou alterar, tem que fazer um estorno do lançamento , e lançar novamente. Com isso o arquivo ficava muito sujo, com estornos, estornos do estornos, e por aí vai. Agora tenho um arquivo idêntico que salvo as exclusões, e qualqer alteração efetuada, tenho um campo de controle para cada registro na conta bancaria e principalmente um campo " motivo da alteração/exclusao " tendo que ser digitado pelo menos 10 caracteres", o usuario pode até preencher com "wxyxyxyuuu" , mas tem que preencher. Nesse arquivo salvo tambem a senha e o nome do usuario. Quero ver o usuário falar agora que não mexeu.

Um abraço

Poka
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Poka escreveu:Quero ver o usuário falar agora que não mexeu.
Cuidado com os usuários espertinhos que sabem usar o FoxBase. :)

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Poka escreveu:Quero ver o usuário falar agora que não mexeu.
Maligno escreveu:Cuidado com os usuários espertinhos que sabem usar o FoxBase. :)
É mesmo... acho que para esses casos poderia colocar mais um campo "autenticando" tal operação, digamos o uso do MD5CALC(), talvez seria essa uma boa saída Maligno ?

Um clip-abraço :)Pos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Pablo César escreveu:É mesmo... acho que para esses casos poderia colocar mais um campo "autenticando" tal operação, digamos o uso do MD5CALC(), talvez seria essa uma boa saída Maligno ?
Sim. Ou então CRC32, que é mais leve.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

rubens escreveu:Gente, seguinte...
Aproveitando o topico.. hoje justamente estive em um cliente que quer aplicar o conceito de ativo e inativo para produtos e clientes...
Alguem pode me dar uma dica de como proceder???
Ele quer que inative o produto, mas nao remova da tabela... uso um dbedit para pesquisa de produtos na compra, venda, orcamento... se eu colocar um flag, vai ficar lento essa pesquisa (ja aqui ele nao quer que o produto apareça) mas quando ele for no cadastro/tabela de produtos tem que aparecer como inativo...
Para a tabela de consulta (dbedit) nao ficar lenta o que eu poderia fazer ???

Obrigado...
1- Primeiro vc tem que criar o CAMPO na tabela de produtos... tipo FLGUSO - S (ativo) - N (inativo)

2- Depois criar uma chave no índice da tabela FLGUSO + DESCRI ... tipo

Código: Selecionar todos

         USE A03PRD EXCLUSIVE
            PACK
            INDEX ON CODIGO                              TAG CHAVE1
            INDEX ON FLGUSO + DESCRI               TAG CHAVE2
            INDEX ON DESCRI                               TAG CHAVE3
3- No Cadastro do Produto vai ser o único lugar onde vc irá mostrar TODOS OS PRODUTOS - ativos e inativos. Então para a procura do produto utilize a CHAVE 3 do índice como acima mostrado.

Código: Selecionar todos

vCODPRD = 0

@ li+02,ci+11 GET vCODPRD PICT "@E 9,999" WHEN EDITPRO() 
READ

*--------------------------------*
STATIC FUNCTION EDITPRO(PNOM,PVAR)
*--------------------------------*

PRIVATE PROCURA

PROCURA=""
MENSAGEM(lf,ci,cf,"Digite o Produto:")
@ lf-01,ci+20 SAY "                                      " COLOR('&vCOR_GET')

SAVE SCRE TO TELA

SELECT PRODUTO
DBSETORDER(3)
DBGOTOP()

declare vetcampo[5]
vetcampo[1]="DESCRI"
vetcampo[2]="UNIPRD"
vetcampo[3]="PRCMER"
vetcampo[4]="SLDSTK"
vetcampo[5]="FLGUSO"

declare vetpict[5]
vetpict[1]="@!"
vetpict[2]="@!"
vetpict[3]="@E 9,999.99"
vetpict[4]="@E 99,999.999"
vetpict[5]="!"

declare vetcab[5]
vetcab[1]="Produto"
vetcab[2]="Un"
vetcab[3]="Prc.Venda"
vetcab[4]="Estoque"
vetcab[5]="U"

KEYBOARD CHR(255)
WIN(05,02,18,78,'Produtos Cadastrados', vCOR_DBE, vCOR_DB1)
CORES(4)
dbedit(06,03,17,77,VETCAMPO,'FUNC04',vetpict,VETCAB)

restore screen from TELA
CORES(1)

IF LASTKEY() = 27
   SET KEY -1 TO EDITPRO
   SET KEY -2 to EDITPRO5
   MENSAGEM(lf,ci,cf,"<F02> PROCURA PRODUTO -- <ENTER> INCLUI NOVO PRODUTO")
   return .T. 
ENDIF

vCODPRD = PRODUTO->CODIGO 
KEYBOARD CHR(13)
RETURN .T.

*---------------*
FUNCTION FUNC04
*---------------*
PARAM A, C

local B:=LASTKEY()
Local nret := 1

B=LASTKEY()
IF A=1
   TONE(77,5)
   INKEY(.7)
ELSEIF A=2
   TONE(77,5)
   INKEY(.7)
ELSEIF A=3
   TONE(77,5)
   INKEY(.7)
ELSEIF A=4

   IF B>31 .AND. B<126 .OR. B=8

      CURSOR=SETCURSOR()
      SETCURSOR(1)
      MENSAGEM(lf,ci,cf,"Digite o Produto:")
      @ lf-01,ci+20 SAY "                                      " COLOR('&vCOR_GET')

      IF LASTKEY()=8
         TAM=LEN(PROCURA)-1
         PROCURA=SUBSTR(PROCURA,1,TAM)
         @ lf-01,ci+20 SAY "                                      " COLOR('&vCOR_GET')
      ELSE
         PROCURA+=UPPER(CHR(B))
      ENDIF

      @ lf-01,ci+20 SAY PROCURA Color('&vCOR_GET')
      DBSEEK( PROCURA,.T.)
      KEYBOARD CHR(255)
      INKEY(0)
      nret := 1
   
   ENDIF
   SETCURSOR(0)

   IF B==13
      vCODPRD = PRODUTO->CODIGO 
      PROCURA=""
      MENSAGEM(lf,ci,cf,"")
      KEYBOARD CHR(13)
      nret := 0
   ENDIF
   IF B=27
      PROCURA=""
      nret := 0
   ENDIF

ENDIF

return nret 
4- Nas outras partes do programa onde vc QUER QUE APAREÇA somente os PRODUTOS ATIVOS, use a CHAVE 2 (FLGUSO + DESCRI).

Código: Selecionar todos

vCODPRD = 0

@ li+02,ci+11 GET vCODPRD PICT "@E 9,999" WHEN EDITPRO() 
READ

*--------------------------------*
STATIC FUNCTION EDITPRO(PNOM,PVAR)
*--------------------------------*

PROCURA=""
MENSAGEM(lf,ci,cf,"Digite o Produto:")
@ lf-01,ci+20 SAY "                                      " COLOR('&vCOR_GET')

SAVE SCRE TO TELA

// aqui vc FILTRA somente os produtos ATIVOS
SELECT PRODUTO
DBSETORDER(2)
DBGOTOP()
OrdScope( 0, "S" )
OrdScope( 1, "S" )
DBGOTOP()

PRIVATE VETCAMPO[1], VETCAB[1]
VETCAMPO[1]:="DESCRI + ' ' + UNIPRD + ' ' + TRANS(PRCCOM,'@E 9,999.99') + ' ' + TRANS(PRCMER,'@E 99,999.99') + '  ' + TRANS( (PRCMER - PRCCOM) / PRCCOM * 100,'@E 999.99') + ' %' "
VETCAB[1]  :="Produto                                  Un" 

KEYBOARD CHR(255)
WIN(06,02,20,77,'Produtos Cadastrados', vCOR_DBE, vCOR_DB1)
CORES(4)
DBEDIT(07,03,19,76,VETCAMPO,"FUNC01",,VETCAB,"=")

OrdScope( 0, NIL )
OrdScope( 1, NIL )

restore screen from TELA
CORES(1)

IF LASTKEY() = 27
   MENSAGEM(lf,ci,cf,"< F02 > PROCURA PRODUTO :--: < CTRL + END > FINALIZA VENDA")
   RETURN .T. 
ENDIF

vCODPRD = PRODUTO->CODIGO 
KEYBOARD CHR(13)
RETURN(vCODPRD)

*---------------*
FUNCTION FUNC01(a)
*---------------*
local B:=LASTKEY()
Local nret := 1

B=LASTKEY()
IF A=1
   TONE(77,5)
   INKEY(.7)
ELSEIF A=2
   TONE(77,5)
   INKEY(.7)
ELSEIF A=3
   TONE(77,5)
   INKEY(.7)
ELSEIF A=4

   IF B>31 .AND. B<126 .OR. B=8

      CURSOR=SETCURSOR()
      SETCURSOR(1)
      MENSAGEM(lf,ci,cf,"Digite o Produto:")
      @ lf-01,ci+20 SAY "                                      " COLOR('&vCOR_GET')

      IF LASTKEY()=8
         TAM=LEN(PROCURA)-1
         PROCURA=SUBSTR(PROCURA,1,TAM)
         @ lf-01,ci+20 SAY "                                      " COLOR('&vCOR_GET')
      ELSE
         PROCURA+=UPPER(CHR(B))
      ENDIF

      @ lf-01,ci+20 SAY PROCURA Color('&vCOR_GET')
      
      // procura incluindo o 'S' de ativo
      DBSEEK( "S" + PROCURA,.T.)
      KEYBOARD CHR(255)
      INKEY(0)
      nret := 1 //2
   
   ENDIF
   SETCURSOR(0)

   IF B==13
      vCODPRD = PRODUTO->CODIGO 
      PROCURA=""
      MENSAGEM(lf,ci,cf,"")
      KEYBOARD CHR(13)
      nret := 0
   ENDIF
   IF B=27
      PROCURA=""
      nret := 0
   ENDIF

ENDIF

return nret 
Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Mensagem por rubens »

Nossa...

Chegou a sair fumaça nos neuronios aqui.. heheh o tico e o teco ficaram doidinhos...

Seguinte...

andei verificando o que os colegas sugeriram e achei muita areia pro meu caminhaozinho no momento.. entao decidi o seguinte com o cliente (ele quer a alteracao para o mes passado)...
criamos um flag no dbf indicando ativo/inativo...
Quando o vendedor no balcao vai fazer a venda/pedido.. o produto continuara aparacendo... mas quando for selecionado se o flag estiver em inativo mostra a mensagem de produto inativo e volta para a consulta do dbedit... para o usuario escolher outro produto...
Não é tão sofisticado quanto os colegas sugeriram mas por enquanto resolve... no cadastro de produto adicionei uma coluna no tbrowse indicando ativo ou inativo... e criei uma opcao para mostrar so os inativos...
Ainda uso ntx entao algumas sugestoes dos colegas eram iviaveis no momento...

Por enquanto já valeu pessoal, obrigado pela ajuda...
"Eu e minha casa servimos ao Senhor e você ???"
Responder