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

