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