Atualizacao de componentes
Enviado: 06 Abr 2015 10:11
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. 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
Formulario
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. 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
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