Perguntas Atualização do mBrowse por tempo

Mais
3 anos 4 semanas atrás #33188 por Wanderson
Bom dia Pessoal,

Tenho uma Mbrowse que está gerando um certo desconforto para o usuário, pois todo vez ele tem que fechar a tela e abrir novamente para que a tela seja atualizada.

Como faço para deixar isso de forma automatica exemplo a cada 5 segundos a tela se auto atualizar se que o usuário precisa fechar e abrir novamente.

Segue o fonte caso vocês possam me ajudar.



User Function MFAT001()

Local aCores := {}

Private aRotina := { { "Pesquisar" , "AxPesqui" , 0, 1, 0, .F.},; // Pesquisar
{ "Imprimir" , "U_MFAT001I()", 0, 3, 0, NIL},; // Impressao
{ "Legenda" , "U_MFAT001L()", 0, 5, 0, NIL} } // Legenda

PRIVATE cCadastro := "Impressao da Lista de Separação"
Private cOrcAnt := ""
Private nOrc
Private cCliOrc


aCores := {{'Empty(CJ_PEDIDO).and.Empty(CJ_PEDF2)', 'BR_AMARELO' },; //Orcamento nao Liberado
{'U_MFAT001CR()', 'BR_AZUL'},; //Bloqueio de Crédito
{'CJ_IMPOS==" "', 'ENABLE' },; //Orcamento nao impresso
{'CJ_IMPOS=="S"', 'DISABLE'}} //Orcamento ja impresso

//Filtra apenas os orçamentos que não foram impressos
dbSelectArea("SCJ")
SCJ->( DbGoTop() )
cIndexSCJ := CriaTrab(nil,.f.)
cKey :="CJ_FILIAL+CJ_NUM"
cFilter := "CJ_FILIAL = '" + xFilial("SCJ") + "' .And. "
cFilter += "CJ_STATUS <> 'A' .And. CJ_STATUS <> 'C' .And. "
cFilter += "CJ_IMPOS <> 'S'"

IndRegua("SCJ",cIndexSCJ,cKey,,cFilter,"Selecionando Registros...")//"Selecionando Registros..."
dbSetOrder(1)
DbGoTop()

// Atualizado por Wanderson Fernandes de Souza em 22/10/2021
// Teste de atualização do Browser automatico
MBrowse(06, 01, 22, 75, 'SCJ',,,,,, aCores,,,,,,,,, 2000, {|| o := GetMBrowse(), o:GoBottom(), o:GoTop(), o:Refresh() })

// Funcao desativada temporariamente para testar a atualização acima
//mBrowse( 6, 1, 22, 75, "SCJ", , , , , , aCores )

Return( .T. )

Por favor Acessar ou Registrar para participar da conversa.

Mais
3 anos 4 semanas atrás - 3 anos 4 semanas atrás #33189 por admin
Respondido por admin no tópico Atualização do mBrowse por tempo
Cara pra solucionar o seu problema, o ideal é vc partir para um listbox, para montar a tela de tempos em tempos, abaixo segue um exemplo.

Objeto oTimer
#INCLUDE "APWIZARD.CH"
#INCLUDE "FILEIO.CH"
#INCLUDE "APWEBSRV.CH"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "rwmake.ch"
#INCLUDE "TOPCONN.CH"
#include "msgraphi.ch"
#INCLUDE "Ap5Mail.ch"

User Function MONNFSE()
Private aCabNfse   := {'','RPS','Serie','Emissao','Cliente','NFse','Status Atual'}
Private cQueryCad := ''
Private oPedis
Private oDlgPeds
Private cEOL    := "CHR(13)+CHR(10)"
cEOL := Trim(cEOL)
cEOL := &cEOL

Private    oSinal1   := LoadBitmap(GetResources(),"BR_MARROM")
Private    oSinal2   := LoadBitmap(GetResources(),"BR_VERMELHO")
Private    oSinal3   := LoadBitmap(GetResources(),"BR_PRETO")
Private    oSinal4   := LoadBitmap(GetResources(),"BR_AZUL")
Private    oSinal5   := LoadBitmap(GetResources(),"BR_ROSA")
Private    oSinal6   := LoadBitmap(GetResources(),"BR_CINZA")
Private    oSinal7   := LoadBitmap(GetResources(),"BR_BRANCO")
Private    oSinal8   := LoadBitmap(GetResources(),"BR_LARANJA")
Private    oSinal9   := LoadBitmap(GetResources(),"BR_VERDE")
Private    oOk		 := LoadBitmap(GetResources(),"LBTIK")
Private    oNo  	 := LoadBitmap(GetResources(),"LBNO")
Private oRecs
Private cRecs := ''
Private oCnf1,oCnf2,oCnf3,oCnf4,oCnf5
Private cCnf1:='',cCnf2:='',cCnf3:='',cCnf4:='',cCnf5:=''
Private cPerg := PadR("MONNFSE",10)
Private oRpsC
Private oRPSV
Private nRpsC := 0
Private nRpsV := 0               
Private nTempo := 100
Private aNfse := {{'','','','','','',0,.f.,''}}
                  
ValidaPerg()

If !Pergunte(cPerg,.t.)
	Return 
Endif

  	DEFINE MSDIALOG oDlgPeds TITLE "Monitor RPS´s Transmitidas - " + DtoC(dDataBase) FROM 000, 000  TO 550, 1000 COLORS 0, 16777215 PIXEL


	@ 090,450 SAY "Canceladas:"   SIZE 80,10
	@ 100,450 SAY oRpsC VAR nRpsC Picture "@E 999,999" SIZE 70,15 OF oDlgPeds PIXEL
	@ 110,450 SAY "Validadas:"   SIZE 80,10
	@ 120,450 SAY oRPSV VAR nRpsV Picture "@E 999,999" SIZE 70,15 OF oDlgPeds PIXEL

	MsAguarde({|| aNfse := MontaQ(1,1)	},"Aguarde...") //"Selecionando Registros..."
	
	nTot := Len(aNfse)

	@ 130,450 SAY "Total RPS´s:"   SIZE 80,10
	@ 140,450 SAY oTotal VAR nTot Picture "@E 999,999" SIZE 70,15 OF oDlgPeds PIXEL
	
	@ 010,003  LISTBOX oPedis FIELDS HEADER "" SIZE 440,260  OF oDlgPeds PIXEL
	oPedis:aColumns  := aCabNfse
	oPedis:aHeaders  := oPedis:aColumns

	oPedis:SetArray(aNfse)
	oPedis:bLine:= {|| {Iif(!Empty(aNfse[oPedis:nAt,5]) .And. !aNfse[oPedis:nAt,8],oSinal9,Iif(aNfse[oPedis:nAt,8],oSinal2,oSinal3)),;
	aNfse[oPedis:nAt,1],;
	aNfse[oPedis:nAt,2],;
	aNfse[oPedis:nAt,3],;
	aNfse[oPedis:nAt,4],;
	aNfse[oPedis:nAt,5],;
	aNfse[oPedis:nAt,6]}}
		

	oTimer := TTimer():New(nTempo, {|| aNfse := MontaQ(2,oPedis:nAt) }, oDlgPeds )
	oTimer:Activate() 

	oPedis:nAt := 1
	oPedis:refresh()
	oDlgPeds:Refresh()

	@ 030, 450 BUTTON "Consulta"  		  			      SIZE 040,015 PIXEL OF oDlgPeds ACTION  Processa( {|| ConsNfse(oPedis:nAt) }, "Comunicando WebService Aguarde..." )	OF oDlgPeds
	@ 050, 450 BUTTON "Legenda"  		  			      SIZE 040,015 PIXEL OF oDlgPeds ACTION legenda()	OF oDlgPeds
	@ 070, 450 Button "Sair" 							  Size 040,015 PIXEL OF oDlgPeds Action {||oDlgPeds:End()} OF oDlgPeds

  ACTIVATE MSDIALOG oDlgPeds CENTERED
 
Return .t.



Static Function MontaQ(nVez,nPos)
Local cSerieRps := '13'

_cQuery := " SELECT F2_DOC, F2_SERIE, F2_EMISSAO, F2_CLIENTE, F2_LOJA, F2_NFSEELE, F2_NFSESTA, R_E_C_N_O_ REG, D_E_L_E_T_ APAGA "
_cQuery += " FROM " + RetSqlName("SF2")+ " AS SF2 "
_cQuery += " WHERE SF2.F2_FILIAL = '" + xFilial("SF2") + "' "
_cQuery += "   AND SF2.F2_EMISSAO >= '" + Dtos(mv_par01) + "' "
_cQuery += "   AND SF2.F2_EMISSAO <= '" + Dtos(mv_par02) + "' "
_cQuery += "   AND SF2.F2_DOC >= '" + mv_par03 + "' "
_cQuery += "   AND SF2.F2_DOC <= '" + mv_par04 + "' "
_cQuery += "   AND SF2.F2_SERIE = '" + mv_par05 + "' "
//_cQuery += "   AND SF2.D_E_L_E_T_ = ' ' "
_cQuery += "   AND SF2.F2_NFSEELE <> '' "
_cQuery += "   AND SF2.F2_NFSESTA <> '' "
_cQuery += "   AND SF2.F2_NFSECDV <> '' "
_cQuery += "   ORDER BY F2_DOC "
_cQuery := ChangeQuery(_cQuery)
DbUseArea(.T.,"TOPCONN",TCGenQry(,,_cQuery),'TRAF2',.F.,.T.)

TcSetField('TRAF2','F2_EMISSAO','D')

TRAF2->(DbGoTop())

Count To nPeds

nRpsC := 0
nRpsV := 0

aNfse := {}

ProcRegua(nPeds)    

DbSelectArea("TRAF2")
dbGoTop()
While TRAF2->(!Eof())
	IncProc("NF: "+TRAF2->F2_DOC + Chr(13) + ' Validadas: ' + TransForm(nRpsV,"9999") + ' Canceladas: ' + TransForm(nRpsC,"9999") + " de: " + TransForm(nPeds,"9999"))
	
	SA1->(dbSetOrder(1), dbSeek(xFilial("SA1")+TRAF2->F2_CLIENTE+TRAF2->F2_LOJA))
	
	If !Empty(TRAF2->F2_NFSEELE) .And. Empty(TRAF2->APAGA)
		nRpsV++
	ElseIf !Empty(TRAF2->APAGA)
		nRpsC++
	Endif


	AAdd(aNfse,{	TRAF2->F2_DOC,;
					TRAF2->F2_SERIE,;
					DtoC(TRAF2->F2_EMISSAO),;
					Left(SA1->A1_NOME,40),;
					TRAF2->F2_NFSEELE,;
					TRAF2->F2_NFSESTA,;
					TRAF2->REG,;
					!Empty(TRAF2->APAGA),;
					SA1->A1_CGC})

	TRAF2->(dbSkip(1))
Enddo                 
             
If Empty(Len(aNfse))
	aNfse := {{'','','','','','',0,.f.,''}}
Endif

TRAF2->(dbCloseArea())

	

If nVez <> 1
	oPedis:SetArray(aNfse)
	
	oPedis:bLine:= {|| {Iif(!Empty(aNfse[oPedis:nAt,5]) .And. !aNfse[oPedis:nAt,8],oSinal9,Iif(aNfse[oPedis:nAt,8],oSinal2,oSinal3)),;
	aNfse[oPedis:nAt,1],;
	aNfse[oPedis:nAt,2],;
	aNfse[oPedis:nAt,3],;
	aNfse[oPedis:nAt,4],;
	aNfse[oPedis:nAt,5],;
	aNfse[oPedis:nAt,6]}}

	oPedis:nAt := Iif(nPos<=Len(aNfse),nPos,1)
	oPedis:refresh()
	oDlgPeds:Refresh()
Endif
	

nTempo := 8000	
oRpsC:Refresh()
oRpsV:Refresh()
Return aNfse					

******************************************
Static Function Legenda()
aCorDesc := {{'BR_VERMELHO','RPS Não Processado' },;
			 {'BR_VERDE'   ,'RPS Validado Com Sucesso'},;
			 {'BR_PRETO'   ,'RPS Apresenta Erro'}}

BrwLegenda( 'Legenda', 'Status', aCorDesc ) //"Legenda"###"Status"
Return




//------------------------------------------------------------------------
Static Function ValidaPerg()
Local aPerg := {}
Local i := 0

// aPerg[n,01] := SX1->X1_GRUPO
// aPerg[n,02] := SX1->X1_ORDEM   
// aPerg[n,03] := SX1->X1_PERGUNT 
// aPerg[n,04] := SX1->X1_VARIAVL 
// aPerg[n,05] := SX1->X1_TIPO    
// aPerg[n,06] := SX1->X1_TAMANHO 
// aPerg[n,07] := SX1->X1_DECIMAL 
// aPerg[n,08] := SX1->X1_PRESEL  
// aPerg[n,09] := SX1->X1_GSC     
// aPerg[n,10] := SX1->X1_VALID   
// aPerg[n,11] := SX1->X1_VAR01   
// aPerg[n,12] := SX1->X1_DEF01   
// aPerg[n,13] := SX1->X1_DEF02   
// aPerg[n,14] := SX1->X1_F3      

AADD(aPerg, {cPerg, "01", "Emissao",              "Mv_ch1", "D",  8, 0, 0, "G", "", "mv_par01", "", "", "", ""})
AADD(aPerg, {cPerg, "02", "Ate Emissao",          "Mv_ch2", "D",  8, 0, 0, "G", "", "mv_par02", "", "", "", ""})
AADD(aPerg, {cPerg, "03", "Documento de",         "Mv_ch3", "C", 09, 0, 0, "G", "", "mv_par03", "", "", "", ""})
AADD(aPerg, {cPerg, "04", "Documento Ate",        "Mv_ch4", "C", 09, 0, 0, "G", "", "mv_par04", "", "", "", ""})
AADD(aPerg, {cPerg, "05", "Serie",                "Mv_ch5", "C", 03, 0, 0, "G", "", "mv_par05", "", "", "", ""})

For i := 1 To Len(aPerg)           
  DbSelectArea("SX1")
  DbSetOrder(1)
  If ! DbSeek(cPerg + aPerg[i,2],.t.)
     Reclock("SX1",.t.)
     SX1->X1_GRUPO   := cPerg
     SX1->X1_ORDEM   := aPerg[i,2]
     SX1->X1_PERGUNT := aPerg[i,3]
     SX1->X1_VARIAVL := aPerg[i,4]
     SX1->X1_TIPO    := aPerg[i,5]
     SX1->X1_TAMANHO := aPerg[i,6]
     SX1->X1_DECIMAL := aPerg[i,7]
     SX1->X1_PRESEL  := aPerg[i,8]
     SX1->X1_GSC     := aPerg[i,9]
     SX1->X1_VALID   := aPerg[i,10]
     SX1->X1_VAR01   := aPerg[i,11]
     SX1->X1_DEF01   := aPerg[i,12]
     SX1->X1_DEF02   := aPerg[i,13]
     SX1->X1_F3      := aPerg[i,14]
     SX1->X1_DEF03   := aPerg[i,15]
  EndIf
Next i

Return(.T.)

Ultima edição: 3 anos 4 semanas atrás por admin.

Por favor Acessar ou Registrar para participar da conversa.

Mais
3 anos 4 semanas atrás #33190 por Wanderson
Respondido por Wanderson no tópico Atualização do mBrowse por tempo
Obrigado pelo Retorno.

Por favor Acessar ou Registrar para participar da conversa.

Mais
3 anos 4 semanas atrás #33191 por admin
Respondido por admin no tópico Atualização do mBrowse por tempo
Só usar este exemplo brother que a cada 8 minutos senão me engano ele dá um refresh na tela e reprocessa a query e o listbox, qualquer dúvidas estamos ai ok.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.093 segundos
Joomla templates by a4joomla