Problema esquisito num tbrowse

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema esquisito num tbrowse

Mensagem por JoséQuintas »

Por mais que eu procure, não consigo encontrar o problema.

Código: Selecionar todos

   LOCAL mResp
   LOCAL oTBrowse := { ;
      { "NOME",       { || templocador->Nome } }, ;
      { "LOCADOR",    { || templocador->Locador } }, ;
      { "CIC",        { || templocador->Cic } }, ;
      { "DIMOB",      { || LocadorDimob( templocador->Locador ) } }, ;
      { "IMOVEL.SIM", { || LocadorImovelDimob( templocador->Locador, "S" ) } }, ;
      { "IMOVEL.NÃO", { || LocadorImovelDimob( templocador->Locador, "N" ) } }, ;
      { "IMOVEL.OUT", { || LocadorImovelDimob( templocador->Locador, "?" ) } }, ;
      { "IMOVEL.EXC", { || LocadorImovelDimob( templocador->Locador, "E" ) } }, ;
      { "RATEIO",     { || LocadorImovelRateio( templocador->Locador ) } } }

   Cls()
   SELECT templocador
   GOTO TOP
   DO WHILE .T.
      FazBrowse( oTBrowse )
      IF LastKey() == K_ESC
         EXIT
      ENDIF
      mResp := Mensagem( "Locador:" + Trim( templocador->Nome ) + " <S>Dimob Sim, <N>Dimob Não, <L>Locatários deste locador, <ESC> Sai", "S,N,L, 27" )
      DO CASE
      CASE mResp == " 27"
      CASE mResp $ "SN"
         IF Encontra( templocador->Locador, "locad00", "xloc00" )
            SELECT locad00
            RecLock()
            REPLACE locad00->ldDimob WITH mResp
            RecUnlock()
         ELSEIF Encontra( templocador->Locador, "dlocad00", "xloc00" )
            SELECT dlocad00
            RecLock()
            REPLACE dlocad00->ldDimob WITH mResp
            RecUnlock()
         ENDIF
         SELECT templocador
         LOOP
      CASE mResp == "L"
         LocatariosLocador( templocador->Locador )
      ENDCASE
   ENDDO
   RETURN NIL
Se bloquear as linhas de REPLACE, tudo ok.
Se ativar as linhas de REPLACE, o conteúdo da tela de altera pra vários locadores.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema esquisito num tbrowse

Mensagem por JoséQuintas »

Apenas num resumo:

O TBrowse é em um arquivo temporário, e é refeito SEMPRE, com ou sem replace.
Se apresenta os resultados corretos, significa que está montando as colunas de acordo com o conteúdo.
É uma lista de locadores.
As colunas são feitas a partir da pesquisa do código de locador aonde está posicionado.

A parte do replace é feita em dois arquivos de cadastro de locador.
São usados pelo tbrowse pra exibir as últimas colunas.

O REPLACE altera um único código de locador, mas está afetando todo o tbrowse.

Possibilidades:
- Registro desposicionado: se estivesse desposicionado, o tbrowse também não funcionaria na primeira vez
- Área errada: se estivesse em área errada, o tbrowse estaria sempre errado, com ou sem modificação, porque ele está em LOOP.
- Índice errado: idem
- Se desativar os replaces, tudo continua normal

Detalhe adicional: Quando o replace é feito, não tem tbrowse, já que é feito ao sair dele, e depois recarrega.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema esquisito num tbrowse

Mensagem por JoséQuintas »

Em todo caso....
Coluna ref. LocadorDimob()

Código: Selecionar todos

STATIC FUNCTION LocadorDimob( nLocador )

   LOCAL mDimob := "?"

   IF Encontra( nLocador, "locad00", "xloc00" )
      mDimob := locad00->ldDimob
   ELSEIF Encontra( nLocador, "dlocad00", "xloc00" )
      mDimob := dlocad00->ldDimob
   ENDIF
   RETURN iif( mDimob == "S", "Sim", iif( mDimob == "N", "Não", "???" ) )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema esquisito num tbrowse

Mensagem por JoséQuintas »

Coluna LocadorImovelDimob()

Código: Selecionar todos

STATIC FUNCTION LocadorImovelDimob( nLocador, mDimob )

   LOCAL nQtd, nQtdSim := 0 , nQtdNao := 0, nQtdOut := 0, nQtdExc := 0
   LOCAL nSelect := Select()

   IF LocadorDimob( nLocador ) != "Sim"
      RETURN Space(3)
   ENDIF
   SELECT templocatario
   SEEK Str( nLocador, 4 )
   DO WHILE templocatario->Locador == nLocador .AND. .NOT. Eof()
      IF Encontra( templocatario->Locatario, "locat00", "xlot00" )
         DO CASE
         CASE locat00->ltDimob == "S" ; nQtdSim += 1
         CASE locat00->ltDimob == "N" ; nQtdNao += 1
         OTHERWISE                    ; nQtdOut += 1
         ENDCASE
      ELSE
         nQtdExc += 1
         //IF Encontra( templocatario->Locatario, "dlocat00", "xlot00" )
            //IF mDimob $ "SN"
               //IF dlocat00->ltDimob == mDimob
                  //nQtd += 1
               //ENDIF
            //ELSE
               //IF .NOT. dlocat00->ltDimob $ "SN"
                  //nQtd += 1
               //ENDIF
            //ENDIF
         //ENDIF
      ENDIF
      SKIP
   ENDDO
   SELECT ( nSelect )
   DO CASE
   CASE mDimob == "S" ; nQtd := nQtdSim
   CASE mDimob == "N" ; nQtd := nQtdNao
   CASE mDimob == "E" ; nQtd := nQtdExc
   OTHERWISE          ; nQtd := nQtdOut
   ENDCASE
   RETURN Str( nQtd, 5 )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problema esquisito num tbrowse

Mensagem por Itamar M. Lins Jr. »

Ola!
Tire o SELECT locad00
Use/mude p/ passar o alias RecLock(cAlias)
Aqui eu uso +- assim:

Código: Selecionar todos

Do While .T.

   If (cAlias)->(rlock())
      exit
   Else
      If hwg_MsgYesNo('Tentando Bloquear o Registro, '+cAlias+' Tentar Novamente ?')
      Else
         lRet := .F.
         Exit
      EndIf
   EndIf

EndDo
...
Não fico usando select p/ lá e pra cá. Abro os DBF´s e pronto, não uso select para nada. Para isso existe alias.

(cAlias)->(DbrLock())
(cAlias)->nome := "JOSE"
No browse eu uso (hwgui)... sorry periphery...

Código: Selecionar todos

oBrw:Alias := cAlias
...
   Add columnEx FieldBlock("nome") to oBrw ;
   Header 'Cliente' Type 'C' Length 60 ;
   Justify Line DT_LEFT  Justify Head DT_LEFT
...
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problema esquisito num tbrowse

Mensagem por Itamar M. Lins Jr. »

Essa sintaxe mesmo... nem a pau Juvenal...

Código: Selecionar todos

	   SELECT templocatario
	   SEEK Str( nLocador, 4 )
Eu uso assim:
(cAlias)->(DbSeek(str(...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema esquisito num tbrowse

Mensagem por JoséQuintas »

E a tapa buraco da coluna LocadorImovelRateio()

Código: Selecionar todos

STATIC FUNCTION LocadorImovelRateio( nLocador )

   RETURN iif( LocadorDimob( nLocador ) == "Sim", "---", Space(3) )

Considerações, talvez ajude:

- O arquivo temporário é criado a partir da movimentação, pra ter somente os locadores necessários
- Pra atualizar conforme exista alguma alteração, os demais campos são atualizados na navegação.

São usados:
- templocador -> temporário criado com locadores
- locad00 -> cadastro de locadores ativos
- dlocad00 -> locadores excluídos (aff)
- templocatario -> temporário criado com locatários
- locat00 -> cadastro de locatários ativos
- dlocat00 -> locatários excluídos (aff)

O problema ocorre nesta parte do LocadorImovelDimob()

Código: Selecionar todos

   IF LocadorDimob( nLocador ) != "Sim"
      RETURN Space(3)
   ENDIF
Olhando o fonte, esse código é passado pelo tbrowse, a partir do arquivo em navegação.

Mas... como já disse, o tbrowse é sempre criado do zero.
A alteração é fora do tbrowse.
Não consigo entender como alterar um locador pode alterar todo tbrowse.

Já testei também a possibilidade do ALIAS ter mais de 10 caracteres, mas nenhum resultado.
Por enquanto esgotei as possibilidades.

Itamar,
Talvez até faça isso depois.
Costumo usar assim, pra ficar visível pra mim em que área o fonte está trabalhando.
Mas talvez seja questão de costume.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema esquisito num tbrowse

Mensagem por JoséQuintas »

Ainda não descobri o que é, mas não tem a ver com o replace.
Ao ficar posicionado em um que não seja SIM, todos os locadores são considerados como o atual, para todas as linhas.

Uma vez que cada coluna recebe o código de locador exatamente do mesmo jeito, ficou esquisito.
Mais esquisito ainda, se verificar que a coluna que funciona é exatamente a usada na que não funciona.

Código: Selecionar todos

LocadorDimob( nLocador ) 
...
   RETURN iif( mDimob == "S", "Sim", iif( mDimob == "N", "Não", "???" ) )

[code]
LocadorImovelDimob( nLocador, mDimob )
...
IF LocadorDimob( nLocador ) != "Sim"
O primeiro ok.
O segundo que usa o primeiro, é onde ocorre o problema.
O problema fica visível ao teclar ENTER em algum que não seja Sim.
Como ENTER sai do tbrowse...

Podemos dizer que o problema é iniciar o tbrowse em alguém diferente de sim - agora que deixou confuso, já que limita ao código acima.

Antes pareceu o replace, porque percebi ao alterar de Sim pra não.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema esquisito num tbrowse

Mensagem por JoséQuintas »

PONTE QUE CAIU!!!

Achei.

Código: Selecionar todos

IF LocadorDimob( nLocador ) != "Sim"
   RETURN Space(3)
 ENDIF
...
   RETURN Str( nQtd, 5 )
Quando o primeiro não é sim, a coluna fica definida com apenas 3 caracteres, por isso corta os valores.
Como o tamanho visível da coluna é pelo título, não deu pra perceber essa diferença apenas olhando na tela.

Vou alterar por precaução, pra um único local de retorno, e usar a picture do zé. rs.
Transform( nQtd, "@ZE 99999" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder