Ajuda com TBrowse
Enviado: 14 Dez 2007 14:05
Pessoal mais uma vez pesso a ajuda de voces pois nao estou conseguindo resolver sozinho. É o Seguinte: Tenho um cadastro de clientes que compram a credito e alguns autorizam algumas pessoa a comprar em seu nome, preciso cadastrar esses autorizados para esse clientes, no cadastro informo a matricula do titular, ai eu faço inclusao, exclusao, alteracao, acontece que na exclusao o filtro nao esta funcionando esta permitido excluir dependetes de outros clientes, segue codigo para se possivel analise:
Código: Selecionar todos
/*
TITULO : CAIXA
DATA : 03/12/07
PROGRAMA : CAIXAC10.PRG
COMENTARIO : MANUTENCAO EM DEPENDESNTES
*/
#include "CAIXA.CH"
COR( "MENU" )
@ LIN_MENU, 00
@ LIN_MENU, 01 SAY "Cadastro ³ Cadastro de Dependesntes"
PRIVATE CD_CLIENTE := SPACE(06)
Cor("JANELA")
DispBOX( 02, 0, 23, 79, '°°°°°°°°°°', 'W/N*')
JANELA( 03, 03, 21, 77, "Tela Geral" )
TELA_AUTOR()
LERGET(05,16,"M->CD_CLIENTE","@R 99999-9","CRIT_CLIENTE(M->CD_CLIENTE)")
@ 05,16 SAY M->CD_CLIENTE PICTURE "@R 99999-9" COLOR("GR+/BG")
CRIT_CLIENTE()
Cor("JANELA")
Movto()
RESTSCREEN(LIN_MENU+1,00,24,79,TELA_PRI)
Return
*************************************************************
*************************************************************
STATIC Function Movto()
PRIVATE oTAB, oCol, nKey, nRow, nCol, cTela, cArea
aCab := {"Nome" ,;
"Limite" ,;
"Parentesco"}
aCamp := {"NM_AUTORIZ" ,;
"LM_CREDITO" ,;
"GR_PARENTE"}
Botao("Incluir -> INS",18,4,"OFF")
Botao("Alterar -> ENTER",18,29,"OFF")
Botao("Deletar -> DELETE",18,56,"OFF")
DBSELECTAREA("20")
DBSETORDER(1)
DBGOTOP()
DBSEEK(M->CD_CLIENTE)
setcursor(0)
cArea := savescreen( 00, 00, 24, 79 )
set color to "N/W,W/B,,,N/W"
DispBOX( 09, 04, 17, 76, 'ÚÄ¿³ÙÄÀ³ ', 'N/W')
oTab := TBrowseDB( 10, 05, 17, 75 )
// Define os separadores horizontais e verticais padrao
oTab:headSep := TB_SEP_CAB
oTab:colSep := TB_SEP_LIN
oTab:footSep := TB_RODAPE
FOR I = 1 TO LEN( aCamp )
if valtype(aCamp[I]) == "B"
oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
else
oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
endif
oTab:addColumn( oCol )
next
nCol_Reg := (oTab:nRight-oTab:nLeft+2) / LEN(aCamp)
do while .T.
IF Lastkey()=27
RETURN
ENDIF
nRow := ROW()
nCol := COL()
oTab:SKIPBLOCK := {|x| SKIPWHIL(x, {||SCA07000->CD_CLIENTE==M->CD_CLIENTE})}
oTab:GOTOPBLOCK := {| | SKIPWHIL((LASTREC()* -1),{||SCA07000->CD_CLIENTE==M->CD_CLIENTE})}
oTab:GOBOTTOMBLOCK := {| | SKIPWHIL((LASTREC()* 1), {||SCA07000->CD_CLIENTE==M->CD_CLIENTE})}
nCol_ := oTab:nLeft+IF(ROUND((nCol_Reg*(oTab:colpos-1)),0)<=0,0,IF(oTab:colpos>=LEN(aCamp),LEN(aCamp)*nCol_Reg,ROUND(nCol_Reg*(oTab:colpos-1),0)))
oTab:colorRect({oTab:rowPos, oTab:freeze + 1, oTab:rowPos,oTab:colCount},{1, 1})
do while !oTab:Stabilize() ; enddo
oTab:colorRect({oTab:rowPos, oTab:freeze + 1, oTab:rowPos,oTab:colCount}, {5, 2})
oTAB:hilite()
setpos( nRow, nCol )
nKey := inkey()
IF oTAB:stable
nKey := Inkey(0)
endif
if nKey == T_F1
elseif nKey == T_F2
elseif nKey == T_F3
elseif nKey == T_F4
elseif nKey == T_F5
elseif nKey == T_F6
elseif nKey == T_F7
elseif nKey == K_INS
INCLUIR_ALTERAR()
elseif nKey == K_RETURN
INCLUIR_ALTERAR()
elseif nKey == K_DEL
DELETAR()
elseif nKey == K_UP ; oTab:UP()
elseif nKey == K_DOWN ; oTab:DOWN()
elseif nKey == K_LEFT ; oTab:LEFT()
elseif nKey == K_CTRL_LEFT ; oTab:PANLEFT()
elseif nKey == K_RIGHT ; oTab:RIGHT()
elseif nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
elseif nKey == K_PGUP ; oTab:PAGEUP()
elseif nKey == K_CTRL_PGUP ; oTab:GOTOP()
elseif nKey == K_PGDN ; oTab:PAGEDOWN()
elseif nKey == K_CTRL_PGDN ; oTab:GOBOTTOM()
elseif nKey == K_HOME ; oTab:HOME()
elseif nKey == K_CTRL_HOME ; oTab:PANHOME()
elseif nKey == K_END ; oTab:END()
elseif nKey == K_CTRL_END ; oTab:PANEND()
elseif nKey == K_ESC ; EXIT
endif
enddo
restscreen(00,00,24,79,cArea)
setcursor(1)
return nil
***************************************************************************
STATIC Function Botao
***************************************************************************
Para Descr_b,Lin_b,Col_b,Estatu_b
If Estatu_b="OFF"
Set color to w+/w
@lin_b,col_b Say "ÚÄ"+repl("Ä",len(trim(descr_b)))+"Ä"
@lin_b+1,Col_b Say "³ "
@lin_b+2,Col_b Say "À "
Set color to b+/w+,b+
@lin_b+1,Col_b+2 Say trim(descr_b)+space(01)
Set color to /w
@lin_b,Col_b+3+len(trim(descr_b)) Say "¿"
@lin_b+1,Col_b+3+len(trim(descr_b)) Say "³"
@lin_b+2,Col_b+1 Say "Ä"+repl("Ä",len(trim(descr_b)))+"ÄÙ"
Elseif Estatu_b="ON"
Set color to /w
@lin_b,col_b Say "ÚÄ"+repl("Ä",len(trim(descr_b)))+"Ä"
@lin_b+1,Col_b Say "³ "
@lin_b+2,Col_b Say "À "
Set color to b/w,b
@lin_b+1,Col_b+2 Say trim(descr_b)
Set color to w+/w
@lin_b,Col_b+3+len(trim(descr_b)) Say "¿"
@lin_b+1,Col_b+3+len(trim(descr_b)) Say "³"
@lin_b+2,Col_b+1 Say "Ä"+repl("Ä",len(trim(descr_b)))+"ÄÙ"
Endif
********************************************************************************
FUNCTION INCLUIR_ALTERAR()
********************************************************************************
LOCAL Ok := .T.
SAL_EDIREG=Savescreen(9,09,15,69)
DispBOX( 10, 09, 16, 69, 'ÚÄ¿³ÙÄÀ³ ', 'W*/B')
@11,10 Say " Nome...........:" COLOR('W*/B')
@12,10 Say " Identidade.....:" COLOR('W*/B')
@13,10 Say " Dt. Nascimento.:" COLOR('W*/B')
@14,10 Say " Parentesco.....:" COLOR('W*/B')
@15,10 Say " Limite Credito.:" COLOR('W*/B')
Cor("GET")
IF nKey == K_INS
Botao("Incluir -> INS",18,4,"ON")
M->NM_AUTORIZ := SPACE(40)
M->NR_IDENTID := SPACE(10)
M->DT_NASCIME := CTOD(" ")
M->GR_PARENTE := SPACE(8)
M->LM_CREDITO := 0.00
ELSE
Botao("Alterar -> ENTER",18,29,"ON")
M->NM_AUTORIZ := SCA07000->NM_AUTORIZ
M->NR_IDENTID := SCA07000->NR_IDENTID
M->DT_NASCIME := SCA07000->DT_NASCIME
M->GR_PARENTE := SCA07000->GR_PARENTE
M->LM_CREDITO := SCA07000->LM_CREDITO
ENDIF
Do While .t.
SET CURSOR ON
@11,28 Get M->NM_AUTORIZ Pict "@!" VALID !EMPTY(M->NM_AUTORIZ) COLOR("R+/BG")
@12,28 Get M->NR_IDENTID Pict "@" COLOR("R+/BG")
@13,28 Get M->DT_NASCIME Pict "DD/MM/AAAA" VALID !EMPTY( M->DT_NASCIME ) COLOR("R+/BG")
@14,28 Get M->GR_PARENTE Pict "@" VALID IFU00001() COLOR("R+/BG")
@15,28 Get M->LM_CREDITO PICTURE "@E 999,999.99" COLOR("R+/BG")
READ
Set cursor off
If Lastkey()=27
Exit
Endif
BEEP()
IF PERG( "Confirma a Oper‡Æo ?" ) = "S"
IF nKey == K_INS
If !(Adireg(0))
Ok := .F.
ENDIF
ENDIF
IF Ok
IF REGLOCK( 0 )
Replace SCA07000->CD_CLIENTE with M->CD_CLIENTE
Replace SCA07000->NM_AUTORIZ with M->NM_AUTORIZ
Replace SCA07000->NR_IDENTID with M->NR_IDENTID
Replace SCA07000->DT_NASCIME with M->DT_NASCIME
Replace SCA07000->GR_PARENTE WITH LTRIM(M->GR_PARENTE)
Replace SCA07000->LM_CREDITO WITH M->LM_CREDITO
ENDIF
Unlock
Endif
Endif
Mensagem(" ",)
*OTab:refreshall()
OTab:refreshcurrent()
RETURN
Enddo
*************************************************************
PROCEDURE TELA_AUTOR()
*************************************************************
Cor("JANELA")
// 1 2 3 4 5 6 7 8
// 678901234567890123456789012345678901234567890123456789012345678901234567890
@ 04,04 SAY "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"
@ 05,04 SAY "³ Codigo...[ - ] Nome [ ] ³"
@ 06,04 SAY "³ Endere‡o.[ ] ³"
@ 07,04 SAY "³ Cidade...[ ] ³"
@ 08,04 SAY "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"
RETURN
*************************************************************
*************************************************************
FUNCTION DELETAR()
Botao("Deletar -> DELETE",18,56,"ON")
IF REGLOCK( 0 )
DELETE
ELSE
MENSAGEM( "Delete <SCV03000.DBF> NÆo Foi Bem Sucedido" )
WAIT
RETURN
ENDIF
*OTab:refreshall()
OTab:refreshcurrent()
*************************************************************
********************************************************************************
FUNCTION IFU00001( VALIDA )
IF VALIDA = NIL; VALIDA := .T.; ENDIF
//
// -> Funcao que cria uma tabela para o campo "SEXO"
TA_BELA := {}
AADD( TA_BELA, {" "+"PAI/MAE"+" " } )
AADD( TA_BELA, {" "+"FILHO(A)" } )
AADD( TA_BELA, {" "+"TIO(A)"+" " } )
AADD( TA_BELA, {" "+"IRMAO(A)" } )
AADD( TA_BELA, {" "+"AMIGO(A)" } )
AADD( TA_BELA, {" "+"PRIMO(A)" } )
ES_COLHA := 0
FOR CONTAR := LEN( TA_BELA ) TO 1 STEP -1
IF M->GR_PARENTE = TA_BELA[ CONTAR ][ 1 ]
@ 14, 28 SAY TA_BELA[ CONTAR ][ 1 ] COLOR CONTECOR[ 8 ]
M->ES_COLHA := -1
EXIT
ENDIF
NEXT
IF M->ES_COLHA = 0
@ 14, 28 SAY SPACE( 9 ) COLOR CONTECOR[ 8 ]
IF VALIDA
BAR_RA := {}
FOR CONTAR := 1 TO LEN( TA_BELA )
*AADD( BAR_RA, " [" + TA_BELA[ CONTAR ][ 1 ] + "] " + TA_BELA[ CONTAR ][ 2 ] )
AADD( BAR_RA, TA_BELA[ CONTAR ][ 1 ] )
NEXT
SOMBRA( L_TAB := L_SOM, C_TAB := C_SOM, .T. )
SAVE SCREEN TO TELA_TABELA
JANELA( 07, 28, 17, 51 )
COR( "MENU" )
KEYBOARD CHR( 65 )
M->ES_COLHA := ACHOICE( 10, 35, 16, 44, BAR_RA )
RESTORE SCREEN FROM TELA_TABELA
SOMBRA( L_TAB, C_TAB )
IF M->ES_COLHA != 0
M->GR_PARENTE = TA_BELA[ M->ES_COLHA ][ 1 ]
@ 14, 28 SAY TA_BELA[ M->ES_COLHA ][ 1 ] COLOR CONTECOR[ 8 ]
ENDIF
COR( "GETS" )
RETURN .F.
ENDIF
ENDIF
RETURN .T.
/*
*
* SKIPWHIL ()
* Esta funcao 'e auxiliar dos browsers, e serve para fazer filtros...
*
*/
function SKIPWHIL (x,key_val)
*************************************************************
local i := 0
if lastkey() == 0
return i
endif
if (x > 0 .and. recno() <> lastrec()+1)
do while (i < x)
DBSKIP(1)
if eof() .or. !(eval(key_val))
DBSKIP(-1)
exit
endif
i++
enddo
elseif (x < 0)
do while (i > x)
DBSKIP(-1)
if bof()
exit
endif
if !(eval(key_val))
DBSKIP(1)
exit
endif
i--
enddo
endif
return i
*************************************************************