Página 1 de 1

Ajuda com TBrowse

Enviado: 14 Dez 2007 14:05
por Sergio_ASSilva
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
*************************************************************

Enviado: 17 Dez 2007 19:04
por alaminojunior
Desculpe colega, mas sou meio preguiçoso em analisar estes montes de linhas, até mesmo em meus sistemas acabo apagando tudo e fazendo de novo (um tanto contraditório não ?).

Mas vamos ao que interessa:
Parece que vc esta tentando fazer uma atualização em cascata, certo ?
Apagando o cliente, o sistema deverá apagar também os autorizados.

A lógica é muito simples

guarda codigo do cliente
deleta cliente
busca autorizados relativos àquele cliente (segundo seu código) e apaga

se está apagando o que não deve, é porque existe um equivoco na busca pelo autorizado

Espero ter dado uma luz

Enviado: 18 Dez 2007 08:11
por Pablo César
Sergio, confesso também que é pouco motivador o análise do código-fonte principalmente sem ter os arquivos necessário para RODAR o seu exemplo. Desculpe, deve ser as vésperas das festas/ano novo... que metem uma certa preguisa, mas eu prometo que eu analisaria se você ao menos dsiponibilisasse todos arquivos de dados que precisa para ser executado sem erros. Não precisa ter tantos registros mas existe uma forma para disponibilizá-los aqui (caso não tenha hospedagem de site), você poderá encontrar uma forma aqui: https://pctoledo.org/forum/viewtopic.php?t=6616

Mas resumidamente, você pode abrir um TBROWSE dos seus clientes com outro TBROWSE (mas este de vetores) contendo os autorizados. è assim que eu faço. Mas se precisar exemplificações, coloque seu BD para que possamos estar falando da mesma coisa.

Enviado: 18 Dez 2007 10:46
por Dudu_XBase
Mude sua função deletar como abaixo teste e nos retorne.

Código: Selecionar todos

*************************************************************
        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         
         DBSEEK(M->CD_CLIENTE)        
	 oTab:refreshall ()
	 oTab:gotop ()
         

        ************************************************************* 


Enviado: 18 Dez 2007 11:59
por Sergio_ASSilva
Obrigado a todos pelas respostas, consegui resolvar com a sugestao de Dudu.

Felis natal e prospero ano novo para todos!

Ps. Nao consegui acessar as reposta de voces atraves do fomum, só consegui atraves do link que foi enviado para meu e-mail, acho que tem algo errado com o portal.

Sds

Sérgio