refresh tsbrowse

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

refresh tsbrowse

Mensagem por Amparo »

ola amigos

tenho 3 pessoas acessando o sistema os 3 estão com a tela de pedidos aberta, nesta tela não existe nenhum pedido lançado, o usuário "A" digita um pedido e salva, automaticamente a grid do TSBROWSE do usuário "B" e "C" é alimentada com o novo registro, se excluir o registro a tela dos 3 usuários volta a ficar em branco tudo sem o usuário mexer uma palha, isso acontece com um sistema feito em HARBOUR 3.2.0 DEV (REV. 18738)

agora em Harbour MiniGUI Extended Edition 2.3.3 - 2014.03.20, isso não acontece, para o registro aparecer tenho que fazer uma nova consulta, se tivesse uns 5 registros no TSBROWSE só aparece se: fizer uma consulta ou descendo com a seta para baixo ate chegar no registro novo.

alguém sabe como resolver este problema , abaixo posto parte do prg

Código: Selecionar todos

DEFINE TBROWSE CRIATABSBROW AT 100,005 OF CRIATABFORM ALIAS TALIAS WIDTH FWIDTH - 15 ;
 HEIGHT FHEIGHT - 160 FONT "Arial" SIZE 08 ;
 ON CHANGE { SETPROPERTY( "CRIATABFORM" , "LBREGATU" , "VALUE" , STRZERO( KEYNO(),6 ) + "/" + STRZERO( KEYCOUNT(),6 ) ) } ;
 ON DBLCLICK EDIT_INSERT( 2, "CRIATABFORM", "CRIATABSBROW", AFUNC ) ;
 CELLED ON HEADCLICK { &CABECALHO. }

 f := LEN( COLUNA_FIELDS )

 SET( _SET_DELETED, IIF( ALLTRIM( NOME_NOVO_LAYOUTS )==' Layout natural (Ctrl+F6)' .AND. lAdmin,.F.,.T. ) )

 FOR W := 1 TO f STEP 1
   IF ALLTRIM(NOME_NOVO_LAYOUTS) == ' Layout natural (Ctrl+F6)'
      ADD COLUMN TO CRIATABSBROW HEADER COLUNA_TITULO[W] SIZE COLUNA_TAMANHO[W] FOOTER "";
      3DLOOK TRUE DATA FieldWBlock( COLUNA_FIELDS[W],Select( TALIAS ) );
      ALIGN DT_LEFT , nMakeLong( DT_CENTER, 3 ) 
   ELSE 
      IF COLUNA_TABELA[W] == 'Calculada'
         NUM := W

         bMacro:=&( "{ || IIF( " + COLUNA_FIELDS[NUM]+ "," +COLUNA_CONDY[NUM]+ "," +COLUNA_CONDZ[NUM]+")}" )

	 ADD COLUMN TO CRIATABSBROW HEADER COLUNA_TITULO[W] SIZE COLUNA_TAMANHO[W] FOOTER "";
         PICTURE COLUNA_PICTURE[W] 3DLOOK TRUE DATA bMacro ;
         ALIGN IIF(COLUNA_TIPO[W] == "C",DT_LEFT , IIF( COLUNA_TIPO[W] == "N", DT_RIGHT , DT_CENTER ) ) , ;
         nMakeLong( DT_CENTER, 3 )
      ELSE
	 ADD COLUMN TO CRIATABSBROW HEADER COLUNA_TITULO[W] SIZE COLUNA_TAMANHO[W] FOOTER "";
	 PICTURE IIF( COLUNA_TIPO[W] == "N", COLUNA_PICTURE[W], "@!" ) ;
         3DLOOK TRUE DATA FIELDWBLOCK( COLUNA_FIELDS[W], SELECT( COLUNA_TABELA[W] ) ) ;
         ALIGN IIF( COLUNA_TIPO[W] == "C", DT_LEFT , IIF( COLUNA_TIPO[W] == "N", DT_RIGHT , DT_CENTER ) ) , ;
         NMAKELONG( DT_CENTER, 3 )
      ENDIF
   ENDIF
 END FOR

 CRIATABSBROW:SetColor( { 1,3,4,6 } , { COR_PRETA, COR_PRETA, COR_AZULCLARO , COR_LARANJA } )
 CRIATABSBROW:nHeightCell = 20                    // altura de celula do browse
 CRIATABSBROW:nHeightHead = 30                    // altura do texto das colunas
 CRIATABSBROW:GODOWN()
 CRIATABSBROW:GOUP()

 RefreshBrowse( CRIATABSBROW )
 
 CRIATABSBROW:UPSTABLE( )
 CRIATABSBROW:lNoResetPos := .t. 
 CRIATABSBROW:SETFOCUS( .T.)
 CRIATABSBROW:DRAWSELECT( )
 CRIATABSBROW:lHasChanged := .T.
 CRIATABSBROW:Paint()
 CRIATABSBROW:ResetVScroll(.F.)
END TBROWSE

Código: Selecionar todos

*----------------------------------------------------------------------------------------------------------------
FUNCTION REFRESHBROWSE( browse )
LOCAL nRecno    := RECNO()
LOCAL nSkip     := browse:nRowPos
LOCAL nRowCount := browse:nRowCount
LOCAL nRowPos   := 1
LOCAL nPrevRec

DBSKIP( -1 )
nPrevRec := IF( BOF(), 0, RECNO() )
DBGOTO( nRecno )

DO WHILE nSkip > 1
   DBSKIP( -1 )

   IF BOF()
      EXIT
   ENDIF

   nSkip--
   nRowPos++
ENDDO

DO WHILE nRowPos < nRowCount
   DBSKIP( -1 )

   IF BOF()
      EXIT
   ENDIF

   nRowPos++
ENDDO

browse:lHitTop    := .f.
browse:lHitBottom := .f.
browse:nRowPos    := nRowPos
browse:nLastPos   := nRecno
browse:nPrevRec   := nPrevRec
browse:refresh(.t., .t.)
browse:resetVScroll()
dbGoto(nRecno)

RETURN browse
abraços
Amparo
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

refresh tsbrowse

Mensagem por Amparo »

ola amigos

existe algum parâmetro que deva ser ajustado para atualizar os dados do TSBROWSE executado nas estações de trabalho quando houver uma alteração em uma tabela DBF em uso?

abraços
Amparo
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

refresh tsbrowse

Mensagem por Amparo »

ola amigos

ninguém utiliza o TSBROWSE em seu sistema? o que os colegas estão utilizando? e como estão fazendo para que o registro inserido em uma estação apareça nas estações em rede?

abraços
Amparo
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

refresh tsbrowse

Mensagem por Toledo »

Amparo, tente o seguinte:

1 - Crie uma variável Private no programa principal para controlar o refresh do Browse (por exemplo: lRefresh:=.T.)
2 - Depois de montar o TSBrowse(), coloque um timer para fazer o refresh em determinado tempo:

Código: Selecionar todos

DEFINE TIMER Timer_1 OF Form_1 INTERVAL 1000 ACTION FazRefresh()
Form_1 é o nome da janela onde está o TSBrowse().
3 - Crie a função que vai controlar o refresh:

Código: Selecionar todos

Func FazRefresh()
If lRefresh
  CRIATABSBROW:Refresh(.T.)
endif
Return Nil
Não testei, mas acho que vai funcionar.

A variável lRefresh vai servir para você determinar quando pode ser feito o FazRefresh(), então quando o TSBrowse() estiver aberto e você estiver em uma rotina que não vai precisar fazer o refresh (inclusão, alteração, relatório), então mude o valor da variável lRefresh:=.F., ai quando sair da rotina e para voltar a fazer o FazRefresh, mude novamente para lRefresh:=.T.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Amparo
Usuário Nível 3
Usuário Nível 3
Mensagens: 342
Registrado em: 20 Ago 2010 10:38
Localização: caieiras / sao paulo

refresh tsbrowse

Mensagem por Amparo »

ola amigos

Toledo, obrigado por sua ajuda.

o time funcionou já o refresh não, vou explicar, tem duas estações de trabalho usando a mesma tela, a estação A e a estação B, quando o usuário da estação A insere um novo registro automaticamente aparece em sua tela, a TARJA COR DE ABÓBORA é o FOCUS do tsbrowse independente da ordem do registro, só que na estação B o registro inserido em A não aparece automaticamente, para que isso aconteça o usuário da estação B precisa descer com a seta ate o ultimo registro ou teclar PageDown ai então vai aparecer, isso se o cadastro estiver em sequencia, agora se na tabela tiver o código LOJA 5 e depois o LOJA 9 ou mais, ai quando vc descer com a seta começa a bagunçar a tela.

isso também vai acontecer quando um usuário de qualquer estação excluir um registro.
local de estoque.png

abraços
Amparo
Responder