Página 1 de 1

refresh tsbrowse

Enviado: 05 Jun 2014 08:22
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

refresh tsbrowse

Enviado: 09 Jun 2014 09:48
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

refresh tsbrowse

Enviado: 20 Jun 2014 09:01
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

refresh tsbrowse

Enviado: 20 Jun 2014 13:20
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,

refresh tsbrowse

Enviado: 24 Jun 2014 11:10
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