Atualizacao de componentes

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Atualizacao de componentes

Mensagem por rubens »

Bom dia...

Estou tendo um problema com atualização de componentes que não estou conseguindo resolver...
Não está atualizando o componente em tempo real...
Na imagem abaixo quando termina o processamento eu clico no msginfo() gostaria que a barra de progresso zerasse.
Erro Minigui.png
Também quando é um processamento com muitos registros no dbf, testei com 3000 registros, o sistema congela a tela e a barra de progresso não atualiza... somente quando termina o processamento...
Podem dar uma olhada pra ver se estou fazendo algo errado?

Obrigado

Rubens

Fonte

Código: Selecionar todos

#include <minigui.ch>
#include "fileio.ch"
#include "directry.ch"

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST DBFCDX

FUNCTION Main         

	CLS

	PUBLIC cDirProg:=  GetCurrentFolder()
	PUBLIC cDirAcbr:= 'C:\ACBrNFe2\NFE'	 
  	PUBLIC PI9 		:= "@KE 99,999.99"
  	  	
   AMBIENTE()
  
   RDDSETDEFAULT('DBFCDX')
   DBSETDRIVER('DBFCDX')
	   
   LOAD WINDOW TESTANFC
   TESTANFC.Center
   TESTANFC.Activate

   
RETURN( NIL )

********************************************************************************
FUNCTION VERIFICA()
// PASTA DO PROGRAMA  DATASAC  PDVLITE 
cDIRPROG 	:= ALLTRIM(TESTANFC.TEXTBOX_1.VALUE)
// PASTA ONDE ESTAO OS XMLS 
cDIRACBR 	:= ALLTRIM(TESTANFC.TEXTBOX_2.VALUE)

cANO 		:= LEFT( RIGHT( cDIRACBR,10),4 ) 
nMES 		:= VAL(LEFT( RIGHT( cDIRACBR,6 ),2 ))  
dDATAINI := CTOD('01'+'/'+STRZERO(nMES,2)+'/'+cANO )
dDATAFIM := CTOD(DIAVALIDO(nMES)+'/'+STRZERO(nMES,2)+'/'+cANO )
nCONTADOR:= 0.00

SETPROPERTY( 'TESTANFC', 'LABEL_4','VALUE', DTOC( dDATAINI ) )
SETPROPERTY( 'TESTANFC', 'LABEL_5','VALUE', DTOC( dDATAFIM ) )

ABREARQ()

cFILEERRO := cDIRPROG+'\ERRONFC'+STRZERO( nMES, 2 )+'.TXT'

IF FILE(cFILEERRO)
	FERASE(cFILEERRO)
ENDIF
SET PRINTER TO &cFILEERRO

DBSelectArea('NFC')
DBSetOrder(1)
NFC->(ORDSCOPE(0, dDATAINI ))
NFC->(ORDSCOPE(1, dDATAFIM ))
SET FILTER TO EMPTY(NFC->CSTAT)
NFC->(DBGoTop())

nCONTADOR:= 0
nINUTIL	:= 0

nENVIADAS		:= 0
nCANCELADAS 	:= 0
nINUTILIZADAS 	:= 0
nOUTRAS			:= 0 

nFIM := 0
WHILE !EOF()
	nFIM ++ 
	NFC->(DBSKIP())
ENDDO
DBGoTop()
TESTANFC.PROGRESSBAR_1.RANGEMAX 	:= nFIM
TESTANFC.PROGRESSBAR_1.VALUE		:= 0 
TESTANFC.PROGRESSBAR_1.REFRESH

// VERIFICA STATUS NO DBF NOTAFC
VER_DBF()

// VERIFICA FALTA DE XMLS NA PASTA
SET FILTER TO 
* VER_XML_FALTA()

// VERIFICA SOBRA XMLS NA PASTA
NFC->(ORDSCOPE(0,))
NFC->(ORDSCOPE(1,))
SET FILTER TO 
* VER_XML_SOBRA()

SET PRINTER TO

* RUN NOTEPAD &cFILEERRO
IF nFIM > 0
	ShellExecute( 0, "open", 'NOTEPAD', cFILEERRO , , 1 )
ELSE
	FERASE( cFILEERRO )
ENDIF

CLOSE ALL
MSGINFO('Testes nos XML e NFCe verificados...')
TESTANFC.PROGRESSBAR_1.VALUE		:= 0 
TESTANFC.PROGRESSBAR_1.REFRESH
TESTANFC.BUTTON_4.SETFOCUS
RETURN NIL


********************************************************************************
FUNCTION VER_DBF()

// PEGA NUMERO DO CGC NO ARQUIVO DE PERSONAL
cFILEPERS := cDIRPROG+'\PERSONAL.DBF'
USE &cFILEPERS ALIAS PERS NEW SHARE
cCNPJ := PERS->CGC
USE 
DBSelectArea('NFC')

nATUAL   	:= 0
nFIM 			:= 0
nINUTIL		:= 0
cARQXML 		:= ''

// SET ACBR PARA MODELO=65 E VERSAO=3.10
COMANFE( 'NFe.SetModeloDF', '65' )
COMANFE( 'NFe.SetVersaoDF', '3.10' )
  
WHILE !EOF()

	nATUAL ++
	
	SET DEVICE TO PRINT
	@ PRow()+1,00 SAY 'PROBLEMA: '+NFC->NUMERO + '-' + 'CSTAT:' + NFC->CSTAT + '-' + NFC->XML   
	SET DEVICE TO SCREEN
	 
	TESTANFC.PROGRESSBAR_1.VALUE 	:= nATUAL
	TESTANFC.PROGRESSBAR_1.REFRESH
	SETPROPERTY( 'TESTANFC', 'LABEL_1','VALUE', 'VERIFICANDO NFCE: '+NFC->NUMERO )
 	
	// VERIFICA SE TEM XML 
	// SE TIVER CONSULTA E PEGA O RETORNO
	
	
	ALTD()
	IF !EMPTY(NFC->XML)
	
		// CONSULTA CHAVE DA NFCE
		SETPROPERTY( 'TESTANFC', 'LABEL_1','VALUE', 'CONSULTANDO NFCE: '+NFC->NUMERO+' CHAVE: '+NFC->XML )
		
		// PEGA CHAVE XML
		cARQXML 	:= cDIRACBR+'\'+NFC->XML+'.XML'
		
		IF !FILE( cARQXML )
			cARQXML  := LEFT(NFC->XML,44)
		ENDIF
		
		// ENVIA COMANDO DE CONSULTAR A NFE
		// LE O RETORNO DO ACBR   
		cRETORNO	:= COMANFE( 'NFe.ConsultarNFe','"'+cARQXML+'"' )
		cTIT		:= '[CONSULTA]'
		cCSTAT 	:= PEGACSTAT( cRETORNO, cTIT )

   	// SE CSTAT VAZIO NAO CONSEGUIU CONSULTAR
		IF EMPTY(cCSTAT)
		
			SET DEVICE TO PRINT
			@ PRow()+1,00 SAY NFC->NUMERO + '-'+cCSTAT+' - Nao foi possivel Consultar a nota'   
			SET DEVICE TO SCREEN
			
		ELSEIF '217'$cCSTAT
		
			// NOTA PODE ESTAR INUTILIZADA
			// VOU MANDAR INUTILIZAR NOVAMENTE PARA CONFERIR 
		
			INUTILIZA()
		
		ELSEIF '561'$cCSTAT .OR. '100'$cCSTAT

			SET DEVICE TO PRINT
			@ PRow()+1,00 SAY NFC->NUMERO + '-'+cCSTAT+' - Nota ja autorizada'   
			SET DEVICE TO SCREEN
		
			SALVACONFE( cTIT )
			
		ENDIF
		
		// NOTA PODE ESTAR INUTILIZADA
		// VOU MANDAR INUTILIZAR NOVAMENTE PARA CONFERIR 

		
	ELSE
	
		INUTILIZA()
	
	ENDIF
	
	IF NFC->CSTAT = '100'
		nENVIADAS++
	ELSEIF NFC->CSTAT = '102'
		nINUTILIZADAS++
	ELSEIF NFC->CSTAT='101' .OR. NFC->CSTAT='135'
		nCANCELADAS++
	ELSE
		nOUTRAS++
	ENDIF

	DBSelectArea('NFC')		
	DBSkip()
ENDDO

SET DEVICE TO PRINT
@ PROW()+1,00 SAY REPL('-',80)
@ PROW()+1,00 SAY 'AUTORIZADAS......: '+STR(nENVIADAS)
@ PROW()+1,00 SAY 'INUTILIZADAS.....: '+STR(nINUTILIZADAS)
@ PROW()+1,00 SAY 'CANCELADAS.......: '+STR(nCANCELADAS)
@ PROW()+1,00 SAY 'OUTRAS...........: '+STR(nOUTRAS)
SET DEVICE TO SCREEN

RETURN NIL

********************************************************************************
FUNCTION INUTILIZA()

SETPROPERTY( 'TESTANFC', 'LABEL_1','VALUE', 'INUTILIZANDO NFCE: '+NFC->NUMERO+' !!! AGUARDE...')

cCOMANDO := '"'+TIRAPONTO(cCNPJ)+'","NUMERO DE NOTA FISCAL NAO UTILIZADO",'+STR(YEAR(DATE()),4)+','+'65,1,'+NFC->NUMERO+','+NFC->NUMERO
cRETORNO := COMANFE( 'NFe.InutilizarNFe', cCOMANDO )
cTIT		:= '[INUTILIZACAO]'
cCSTAT 	:= PEGACSTAT( cRETORNO, cTIT )

* MSGINFO( cCSTAT )
IF '563'$cCSTAT 
	// NOTA JA INUTILIZADA    
	// CORRIGE DADOS NO DBF
	cCSTAT := '102'
	SALVACONFE(cTIT)
	SET DEVICE TO PRINT
	@ PRow()+1,00 SAY NFC->NUMERO + '-' + 'CSTAT:' + cCSTAT + '-' + NFC->XML+' -JA INUTILIZADA' 
	SET DEVICE TO SCREEN
	
ELSEIF '241'$cCSTAT 
	// NOTA JA AUTORIZADA
	// MUDAR STATUS PARA 100 
	// CONSULTA NOTA E SALVA INFORMACOES
	IF EMPTY( cARQXML )
		cCSTAT := '100'
		SALVACONFE('[CONSULTA]')
	ELSE
		cRETORNO	:= COMANFE( 'NFe.ConsultarNFe','"'+cARQXML+'"' )
		cTIT		:= '[CONSULTA]'
		cCSTAT 	:= PEGACSTAT( cRETORNO, cTIT )
		IF '100'$cCSTAT .OR. '241'$cCSTAT 
			cCSTAT := '100' 
			SALVACONFE(cTIT)
			SET DEVICE TO PRINT
			@ PRow()+1,00 SAY NFC->NUMERO + '-' + 'CSTAT:' + cCSTAT + '-' + NFC->XML + '-NOTA JA AUTORIZADA' 
			SET DEVICE TO SCREEN
		ELSE
			SET DEVICE TO PRINT
			@ PRow()+1,00 SAY NFC->NUMERO + '-' + 'CSTAT:' + cCSTAT + '-' + NFC->XML + '-RET DESCONHECIDO' 
			SET DEVICE TO SCREEN
		ENDIF
	ENDIF
ELSEIF '100'$cCSTAT
	SALVACONFE('CONSULTA')
	SET DEVICE TO PRINT
	@ PRow()+1,00 SAY NFC->NUMERO + '-' + 'CSTAT:' + cCSTAT + '-' + NFC->XML + '-NOTA JA AUTORIZADA' 
	SET DEVICE TO SCREEN
ELSE
	SET DEVICE TO PRINT
	@ PRow()+1,00 SAY NFC->NUMERO + '-' + 'CSTAT:' + cCSTAT + '- ERRO DESCONHECIDO' 
	SET DEVICE TO SCREEN
ENDIF	 

RETURN NIL
********************************************************************************
// VERIFICA SE FALTA XML NA PASTA
FUNCTION VER_XML_FALTA()

nQTDENFC := 0
nATUAL 	:= 0

DBGoTop()
WHILE !EOF()

	@ 10,10 SAY 'Nota: '+NFC->NUMERO+' - XML: '+NFC->XML 
	nATUAL ++
 	TESTANFC.PROGRESSBAR_1.VALUE 	:= nATUAL
	SETPROPERTY( 'TESTANFC', 'LABEL_1','VALUE', 'VERIFICANDO XML DA NFCE: '+NFC->NUMERO )

	// NOTAS AUTORIZADAS
	IF NFC->CSTAT = '100' 
		nQTDENFC ++
	ENDIF
	
	// PULA INUTILIZADAS
	IF NFC->CSTAT = '102'
		DBSkip()
		LOOP
	ENDIF

	cARQXML 	:= cDIRACBR+'\'+NFC->XML+'.XML'
	IF !FILE( cARQXML ) // NAO ENCONTROU O XML NAS PASTA DO MES 
		cARQXMLR := 'C:\ACBRNFE2\RETORNO\'+NFC->XML+'.XML'
	   IF !FILE( cARQXMLR )  // NAO ENCONTROU XML NA PASTA RETORNO
	  		nCONTADOR++
	   	SET DEVICE TO PRINT
	   	@ PROW()+1,00 SAY 'FALTA XML DA NOTA: ' + NFC->NUMERO + '  CHAVE: ' + NFC->XML
			SET DEVICE TO SCREEN
		ELSE
			COPY FILE &cARQXMLR TO &cARQXML
	   	SET DEVICE TO PRINT
	   	@ PROW()+1,00 SAY 'XML COPIADO: ' + cARQXML
			SET DEVICE TO SCREEN
		ENDIF  
	ENDIF
	NFC->(DBSkip())
ENDDO

RETURN NIL
********************************************************************************
// VERIFICA SOBRA DE XML NA PASTA
FUNCTION VER_XML_SOBRA() 
aFILES := Directory( cDIRACBR+'\', '*.XML')

nQTDEXML := 0
nQTDENFC := 0
nATUAL 	:= 0
TESTANFC.PROGRESSBAR_1.RANGEMAX := Len( aFILES )

FOR X = 1 TO LEN( aFILES )

	nATUAL ++
	TESTANFC.PROGRESSBAR_1.VALUE 	:= nATUAL
	cXML 		:= LEFT( aFILES[X,1],48 )
	cARQXML 	:= cDIRACBR+'\'+cXML+'.XML'
	
	SETPROPERTY( 'TESTANFC', 'LABEL_1','VALUE', 'VERIFICANDO XML: '+cARQXML )
	
	DBSelectArea('NFC')
	DBSetOrder(2)  // XML
	DBGoTop()
	IF DBSEEK( cXML )
		// Encontrou o XML 
		IF NFC->CSTAT='102'
			WHILE(.T.)
				FERASE( cARQXML )
				IF !FILE( cARQXML )
					EXIT
				ENDIF
			ENDDO
		ENDIF	
	ELSE	
		ALTD()
		nQTDEXML ++
   	SET DEVICE TO PRINT
   	@ PROW()+1,00 SAY 'XML SOBRANDO: ' + NFC->NUMERO + '  CHAVE: ' + cARQXML+' -EXCLUIDO'
   	SET DEVICE TO SCREEN
		WHILE (.T.)
			FERASE( cARQXML )
			IF !FILE( cARQXML )
				EXIT
			ENDIF
		ENDDO
	ENDIF
NEXT

IF nQTDEXML > 0 
	SET DEVICE TO PRINT
	@ PROW()	 ,40 SAY 'QTDE XML: '+STR( nQTDEXML,5,0 )
	SET DEVICE TO SCREEN
ENDIF

RETURN NIL 	


********************************************************************************
FUNCTION COMANFE( cIndice, cDados, cTEXTO, lMOSTRA  )

// RESPOSTA DO ACBR
LOCAL RESP_ACBR:= ''
LOCAL nCONTADOR:= 0
LOCAL cDIRNFE	:= 'C:\ACBRNFE2'
cTEXTO	:= IF( cTEXTO=NIL, '', cTEXTO )
lMOSTRA	:= IF( lMOSTRA=NIL, .F. , lMOSTRA )

// NOME DO ARQUIVO TEMPORARIO
ARQTEMP	:= cDIRNFE+"\ENT.CMD"
ENTNFE	:= cDIRNFE+"\ENTNFE.TXT"
SAINFE	:= cDIRNFE+"\SAINFE.TXT"

TFIM	:= SECONDS()+30
// APAGA ULTIMA RESPOSTA SAINFE
WHILE FILE(SAINFE)
   // NAO APAGOU
   IF FERASE( SAINFE ) = -1
      // SE JA PASSOU TEMPO DE ESPERA
      IF (SECONDS() > TFIM)
         RESP_ACBR := 'ERRO: Nao foi possivel apagar o arquivo: ('+SAINFE+') '
      ELSE
			INKEY(0.5)         
      ENDIF
   ENDIF
ENDDO

TFIM 	:= SECONDS()+30
// APAGA ARQUIVO TEMPORARIO
WHILE FILE(ARQTEMP)
   // NAO APAGOU
   IF FERASE( ARQTEMP ) = -1
      // SE JA PASSOU TEMPO DE ESPERA
      IF (SECONDS() > TFIM )
         RESP_ACBR := 'ERRO: Nao foi possivel apagar o arquivo: ('+ARQTEMP+') '
      ELSE
         INKEY(0.5)
      ENDIF
   ENDIF
ENDDO

// SE TIVER ARQUIVO DE ENTRADA TB APAGA
TFIM := SECONDS()+30
// APAGA ARQUIVO DE ENTRADA
WHILE FILE( ENTNFE )
   IF FERASE( ENTNFE ) = -1
      IF (SECONDS() > TFIM)
         RESP_ACBR := 'ERRO: Nao foi possivel apagar o arquivo: ('+ENTNFE+') '
      ELSE
         INKEY(0.5)
      ENDIF
   ENDIF
ENDDO

// Criar arquivo de envio para o monitor e
// ver se ele responde em menos de 30 tentativas
cDados	:= iif(ValType(cDados)#"C","",cDados)
cBuffer	:= cIndice + iif( len( cDados )=0,"()","(" + cDados + ")")
TFIM		:= SECONDS()+30
WHILE SECONDS()<=TFIM
   errhandle := FCREATE(ARQTEMP, FC_NORMAL)
   IF ERRHANDLE > 0
      FWRITE(errhandle,cBuffer + chr(13) + chr(10))
      IF FERROR()=0
         FCLOSE(errhandle)
         EXIT
      ENDIF
   ENDIF
   // VERIFICA SE O TEMPO E MAIOR DO QUE TEMPO ESTIPULADO
   INKEY(0.5)
   IF ( SECONDS() > TFIM )
      RESP_ACBR := 'ERRO: Nao foi possivel criar o arquivo: ('+ARQTEMP+') '
      EXIT
   ENDIF
ENDDO

// Renomeando arquivo TEMPORARIO para
// ARQUIVO ENTNFE.TXT
TFIM	:= SECONDS()+30
WHILE SECONDS()<=TFIM
   IF FRENAME(ARQTEMP,ENTNFE) = 0
      EXIT
   ELSE
      IF ( SECONDS() > TFIM )
         RESP_ACBR := 'ERRO: Nao foi possivel criar o arquivo: ('+ENTNFE+') '
         EXIT
      ENDIF
   ENDIF
ENDDO

// Enviando comando para monitor
// se o arquivo existir após 30 tentativas
// e porque o monitor nao está ativo

nCONTADOR := 0

IF EMPTY( RESP_ACBR )
	WHILE FILE( ENTNFE ) // (.T.)
	   // AINDA EXISTE ARQUIVO ENVIADO
	   // ACBR NAO LEU E NÃO APAGOU
	   * IF !FILE( ENTNFE )
	   *   EXIT
	   * ENDIF
	   nCONTADOR ++
	   * MOSTRA(1,IF(lMOSTRA,cTEXTO,"Comunicando com monitor de NFCe...")+ "Aguarde !!! Tentativa: "+ STRZERO( nCONTADOR,2) , 'Comunicando com Monitor'  )
	   INKEY(0.5)
	   IF nCONTADOR >= 300
	   	* MOSTRA(0)
	      BEEP()
	      IF ALERT( 'Sem Comunicação com o Monitor de Cupom, Tenta Novamente ?',{'SIM','NAO'})=1
	         nCONTADOR := 0
	      ELSE
	         RESP_ACBR := 'ERRO: Monitor de Cupom Nao Esta Ativo'
	         EXIT
	      ENDIF                                                                               
	   ENDIF
	ENDDO
ENDIF

IF EMPTY( RESP_ACBR )
	// LENDO A RESPOSTA
	nCONTADOR := 0
	WHILE EMPTY(RESP_ACBR)
	   // SE RESP_ACBR ESTÁ VAZIO É PORQUE NAO HOUVE
	   // NENHUM ERRO NAS ETAPAS ANTERIORES
	   IF FILE(SAINFE)
	      RESP_ACBR := alltrim(memoread( SAINFE ))
	   ELSE
	      nCONTADOR ++
	      IF nCONTADOR <=500
				* MOSTRA(1,IF(lMOSTRA,cTEXTO,"Aguardando resposta da SEFAZ...")+ " Tentativa: "+ STRZERO( nCONTADOR,2) , 'Aguardando Sefaz'  )	      
	         INKEY(0.5)
	      ELSE
				* MOSTRA(0)  	
	         BEEP()
	         IF ALERT( 'Sem Resposta da SEFAZ, Tenta Novamente ?',{'SIM','NAO'})=1
	            nCONTADOR := 0
	         ELSE
	            RESP_ACBR := 'ERRO: Sem resposta da SEFAZ'
	            EXIT
	         ENDIF
	      ENDIF
	   ENDIF
	ENDDO
ENDIF

WHILE FILE(SAINFE)
   FERASE( SAINFE )
ENDDO

RETURN RESP_ACBR
********************************************************************************
FUNCTION ABREARQ()
// ABRE ARQUIVO DE NFCE
LOCAL ARQUIVO 	:= cDIRPROG+'\NOTAFC.DBF'
LOCAL INDICE 	:= cDIRPROG+'\NFCTEMP.CDX'
IF FILE( INDICE ) 
	FERASE( INDICE )
ENDIF  
USE &ARQUIVO ALIAS NFC NEW EXCL
INDEX ON DATAEMIS TAG DATAEMIS TO &INDICE
INDEX ON XML 		TAG XML 		 TO &INDICE
DBGOTOP()  
RETURN NIL 
*/
********************************************************************************
FUNCTION PEGACSTAT( cTEXTO, cGRUPO  )
LOCAL X, cSTRING, lPEGASTAT := .F.
LOCAL nQTDLIN := MLCOUNT( cTEXTO )
FOR X=1 TO nQTDLIN
   cSTRING := TRIM( MEMOLINE( CTEXTO, NIL, X ) )
   IF ( cGRUPO $ UPPER( cSTRING ) )
      lPEGASTAT := .T.
   ELSEIF lPEGASTAT .AND. ( "CSTAT=" $ UPPER( cSTRING ) )
      /*
      SE VOCÊ QUER QUE RETORNE A LINHA COMPLETA, EX: CSTAT=100
      REMOVA A LINHA DO STRTRAN ABAIXO. COM ELA RETORNA SÓ O 100
      */
      cSTRING := ALLTRIM(STRTRAN( UPPER( cSTRING ), "CSTAT=" ))
      EXIT // PEGA A LINHA E SAI...
   ENDIF
NEXT
IF EMPTY(cSTRING)
	cSTRING := ALLTRIM( cTEXTO )
ENDIF

// VERIFICA SE E INUTILIZACAO
IF cGRUPO='[INUTILIZACAO]'
	IF 'Verificar se existe NF-e utilizada'$cTEXTO
		// NOTA ENVIADA E AUTORIZADA
		cSTRING := '100'
	ELSEIF 'ja existe um Pedido de inutilizacao'$cTEXTO
		// NOTA JA INUTILIZADA
		cSTRING := '563'
	ENDIF
ENDIF

RETURN cSTRING
********************************************************************************
FUNCTION AMBIENTE()
SET TALK OFF
SET CENT ON
SET EPOC TO 1930
SET DATE BRIT
SET DATE FORMAT TO "DD/MM/YYYY"
SET STAT OFF
SET CURSOR OFF
SET DELETED ON
SET AUTOPEN ON 
SETBLINK(.F.)
/* SET AUTOADJUST ON
SET BROWSESYNC ON
SET MULTIPLE OFF WARNING
SET TOOLTIPBALLOON ON
SET NAVIGATION EXTENDED
SET CODEPAGE TO PORTUGUESE
SET LANGUAGE TO PORTUGUESE
*/
RETURN NIL    
********************************************************************************
// Gravar sem o Fim de arquivo do DOS Chr(26)
FUNCTION hb_MemoWrit( cFileName, cText )
 RETURN MemoWrit( cFileName, cText, .F. )

********************************************************************************
// CRLF
FUNCTION HB_EOL()
RETURN HB_OsNewLine()

********************************************************************************
// RETORNA O ULTIMO DIA VALIDO DE UM MES RECEBIDO
FUNCTION DIAVALIDO( nMES )
cDIA := ''
DO CASE
	// MES DE 31 DIAS
	// 1-3-5-7-8-10-12
	// JAN-MAR-MAI-JUL-AGO-OUT-DEZ   
	CASE nMES=1 .OR. nMES=3 .OR. nMES=5 .OR. nMES=7 .OR. nMES=8 .OR. nMES=10 .OR. nMES=12  
		cDIA := '31'
	// MES DE 30 DIAS
	// 4-6-9-11
	CASE nMES=4 .OR. nMES=6 .OR. nMES=9 .OR. nMES=11
		cDIA := '30'
	CASE nMES = 2
		cDIA := '28'
ENDCASE
RETURN cDIA

********************************************************************************
// SALVA OS DADOS DE UMA CONSULTA NFE
FUNCTION SALVACONFE(cIDNFC)

cNPROT	:= ALLTRIM( PEGATEXTO( cRETORNO, 'NProt='	  	, cIDNFC ) )
cDIGVAL	:= ALLTRIM( PEGATEXTO( cRETORNO, 'DigVal='  	, cIDNFC ) )
dDATAH	:= ALLTRIM( PEGATEXTO( cRETORNO, 'DhRecbto=' , cIDNFC ) ) 
cChNFe	:= ALLTRIM( PEGATEXTO( cRETORNO, 'ChNFe=' 	, cIDNFC ) ) 
cChNFe	:= IF( LEFT( cIDNFC,4)='[NFE',cChNFe, NFC->XML )  
cDHRECBTO:= CTOD(LEFT( dDATAH, 10 ))
cHORA		:= SUBSTR( dDATAH, 12, 8 )

WHILE(.T.)
   IF RLOCK()
      IF cCSTAT='101' .OR. cCSTAT='102' .OR. cCSTAT='135' .OR. cCSTAT='563'
      	cCSTAT := IF( cCSTAT = '563','102',cCSTAT )
         _FIELD->NPROTCANC  	:= cNPROT
         _FIELD->DATACANC		:= cDHRECBTO 
         _FIELD->HORACANC   	:= cHORA
         _FIELD->CSTAT  		:= cCSTAT
         _FIELD->XML				:= cChNFe
      ELSE //  cCSTAT == '100' .OR. cCSTAT = '110' .OR. cCSTAT = '301' .OR. cCSTAT = '302'
			cCSTAT := IF( cCSTAT = '241','100',cCSTAT )
			cCSTAT := IF( cCSTAT = '561','100',cCSTAT )    
      	_FIELD->DATACRIA 	:= IF( !EMPTY( cDHRECBTO )	,cDHRECBTO	, DATACRIA ) 
			_FIELD->DATAENVIO	:= IF( !EMPTY( cDHRECBTO )	,cDHRECBTO	, DATACRIA )
			_FIELD->HORA		:= IF( !EMPTY( cHORA )	,cHORA       	, HORA )
			_FIELD->NPROT  	:= IF( !EMPTY( cNPROT )	,cNPROT 	    	, NPROT )	
			_FIELD->DIGVAL 	:= IF( !EMPTY( cDIGVAL ),cDIGVAL     	, DIGVAL )
			_FIELD->CSTAT		:= IF( !EMPTY( cCSTAT ) ,cCSTAT			, CSTAT )
   		_FIELD->XML			:= cChNFe
      ENDIF
      DBCommit()
      DBUnlock()
      EXIT
   ENDIF
ENDDO

RETURN NIL

********************************************************************************
FUNCTION PEGATEXTO( cRETORNO, cCAMPO, cGRUPO  )
LOCAL X, cSTRING, lPEGASTAT := .F. 
LOCAL nQTDLIN := MLCOUNT( cRETORNO )

FOR X=1 TO nQTDLIN
   cSTRING := TRIM( MEMOLINE( cRETORNO, 254, X ) )
   IF ( cGRUPO $  cSTRING  )
      lPEGASTAT := .T.
   ELSEIF lPEGASTAT .AND. ( cCAMPO $  cSTRING  )
      /*
      SE VOCÊ QUER QUE RETORNE A LINHA COMPLETA, EX: CSTAT=100
      REMOVA A LINHA DO STRTRAN ABAIXO. COM ELA RETORNA SÓ O 100
      */
      cSTRING := STRTRAN(  cSTRING , cCAMPO )
      EXIT // PEGA A LINHA E SAI...
   ENDIF
NEXT

RETURN cSTRING

********************************************************************************
Function TiraPonto(vString)
vString:=vString
vString:=STRTRAN(vString,".","")
vString:=STRTRAN(vString,"-","")
vString:=STRTRAN(vString,"/","")
vString:=STRTRAN(vString,"(","")
vString:=STRTRAN(vString,")","")
vString:=STRTRAN(vString,"x","")
Return vString

********************************************************************************
FUNCTION BEEP()
RETURN NIL
Formulario

Código: Selecionar todos

*HMGS-MINIGUI-IDE Two-Way Form Designer Generated Code
*OPEN SOURCE PROJECT 2005-2013 Walter Formigoni http://sourceforge.net/projects/hmgs-minigui/

DEFINE WINDOW TEMPLATE AT 206 , 305 WIDTH 747 HEIGHT 410 TITLE "Sistema de verificação de NFc/NFCe" ICON "D:\PROGS\DATASAC\HMG\TESTANFC\MDV.ICO" MAIN BACKCOLOR {192,192,192}

     DEFINE STATUSBAR FONT "Arial" SIZE 12
            STATUSITEM "Verificacão de NFc/NFCe"
            KEYBOARD WIDTH 90
            DATE WIDTH 100
            CLOCK WIDTH 80
     END STATUSBAR

     DEFINE FRAME Frame_1
            ROW    10
            COL    10
            WIDTH  713
            HEIGHT 71
            FONTNAME 'Arial'
            FONTSIZE 10
            FONTBOLD .T.
            CAPTION "Escolha a pasta do Programa"
            OPAQUE .T.
     END FRAME  

     DEFINE BUTTON Button_1
            ROW    40
            COL    660
            WIDTH  43
            HEIGHT 30
            ACTION {|| TestaNfc.Textbox_1.Value := GetFolder("Selecione a pasta onde o programa está instalado",TestaNfc.Textbox_1.Value) }
            FONTNAME 'Arial'
            TOOLTIP ''
           PICTURE "OPEN.BMP"
     END BUTTON  

     DEFINE TEXTBOX Textbox_1
            ROW    40
            COL    20
            WIDTH  626
            HEIGHT 28
            FONTNAME 'Arial'
            VALUE cDirProg
     END TEXTBOX 

     DEFINE FRAME Frame_2
            ROW    90
            COL    10
            WIDTH  713
            HEIGHT 71
            FONTNAME 'Arial'
            FONTSIZE 10
            FONTBOLD .T.
            CAPTION "Escolha a pasta onde está instalado o ACBR"
            OPAQUE .T.
     END FRAME  

     DEFINE TEXTBOX TextBox_2
            ROW    120
            COL    20
            WIDTH  626
            HEIGHT 28
            FONTNAME 'Arial'
            VALUE cDirAcbr
     END TEXTBOX 

     DEFINE BUTTON Button_2
            ROW    120
            COL    660
            WIDTH  43
            HEIGHT 30
            ACTION {|| TestaNfc.Textbox_2.Value := GetFolder("Selecione a pasta onde o ACBR está instalado",TestaNfc.Textbox_2.Value) }
            FONTNAME 'Arial'
            TOOLTIP ''
           PICTURE "OPEN.BMP"
     END BUTTON  

     DEFINE FRAME Frame_3
            ROW    170
            COL    10
            WIDTH  711
            HEIGHT 90
            FONTNAME 'Arial'
            FONTSIZE 10
            FONTBOLD .T.
            OPAQUE .T.
     END FRAME  

     DEFINE BUTTON Button_3
            ROW    270
            COL    400
            WIDTH  153
            HEIGHT 69
            ACTION { || Verifica() }
            CAPTION "&Verificar"
            FONTNAME 'Arial'
            TOOLTIP ''
     END BUTTON  

     DEFINE PROGRESSBAR ProgressBar_1
            ROW    210
            COL    20
            WIDTH  692
            HEIGHT 38
            RANGEMIN 1
            RANGEMAX 10
            TOOLTIP ''
     END PROGRESSBAR  

     DEFINE BUTTON Button_4
            ROW    270
            COL    570
            WIDTH  153
            HEIGHT 69
            ACTION { || TESTANFC.RELEASE }
            CAPTION "&Sair"
            FONTNAME 'Arial'
            TOOLTIP ''
     END BUTTON  

     DEFINE LABEL Label_1
            ROW    185
            COL    20
            WIDTH  690
            HEIGHT 22
            VALUE ""
            FONTSIZE 10
            FONTBOLD .T.
            BACKCOLOR {192,192,192}
            CENTERALIGN .T.
     END LABEL  

     DEFINE LABEL Label_2
            ROW    280
            COL    20
            WIDTH  70
            HEIGHT 20
            VALUE "Data Inicial"
            BACKCOLOR {192,192,192}
     END LABEL  

     DEFINE LABEL Label_3
            ROW    310
            COL    20
            WIDTH  62
            HEIGHT 23
            VALUE "Data Final"
            BACKCOLOR {192,192,192}
     END LABEL  

     DEFINE LABEL Label_4
            ROW    280
            COL    90
            WIDTH  120
            HEIGHT 24
            VALUE ""
            FONTSIZE 10
            FONTBOLD .T.
            CENTERALIGN .T.
     END LABEL  

     DEFINE LABEL Label_5
            ROW    310
            COL    90
            WIDTH  120
            HEIGHT 24
            VALUE ""
            FONTSIZE 10
            FONTBOLD .T.
            CENTERALIGN .T.
     END LABEL  

END WINDOW

"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Atualizacao de componentes

Mensagem por Toledo »

Rubens, acho que o problema deve estar na propriedade RANGEMIN, que está com o valor 1, tente alterar para 0 e faça um teste.

Código: Selecionar todos

     DEFINE PROGRESSBAR ProgressBar_1
            ROW    210
            COL    20
            WIDTH  692
            HEIGHT 38
            RANGEMIN 0
            RANGEMAX 10
            TOOLTIP ''
     END PROGRESSBAR  
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
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Atualizacao de componentes

Mensagem por rubens »

Bom dia...

Então Toledo...

Fiz a alteração, setei a propriedade para zero como você sugeriu, mas num adiantou...
Observe na figura abaixo, esse arquivo de clientes tem 3284 registros e ele congela a tela no registro 1499 mas o processamento continua.. Na barra de título aparece que "Não está respondendo". Após alguns minutos finaliza todos os arquivos, aí quando finaliza atualiza a tela.
Observe também que no canto inferior esquerdo tem o arquivo de destino, nesse momento aí era para o value do Textbox ter sido atualizado para D:\DOIDAO\SQL\CLIENTE.SQL também não atualiza somente no final.

Sistema "congelado"
Erro Progressbar.jpg
Já quando os arquivos tem menos registros (menos que 1000) atualiza beleza... Tentei colocar um refresh depois que muda o value da barra de progresso e até mesmo do textbox mas quando o arquivo é grande não adianta...
Não faz muita diferença no processamento, mas você fica sem saber se congelou mesmo...

Processamento finalizado... Veja que ele atualiza a tela a barra de progresso e o Textbox com o nome do arquivo sql gerado.
final.jpg

Obrigado

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Atualizacao de componentes

Mensagem por Toledo »

rubens escreveu:Na barra de título aparece que "Não está respondendo".
Bom, se o problema é este, então veja está mensagem:

Aplicativo rodando (Não está respondendo)

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
Responder