Arquivo Retorno do AcbrnfeMonitor para clipper
Moderador: Moderadores
-
marciotullio
- Usuário Nível 1

- Mensagens: 16
- Registrado em: 28 Ago 2009 15:17
- Localização: Joao Pessoa
Arquivo Retorno do AcbrnfeMonitor para clipper
Boa tarde a todos.
Alguem tem alguma função para ler o retorno do AcbrNfeMonitor , estou com grande dificuldade em como fazer , isso ja achei aqui no forum uma função mas e para Fivewin , e estou com clipper então tem um monte de chamadas externas que não existem no clipper, Qualquer ajuda e bem vinda.
Alguem tem alguma função para ler o retorno do AcbrNfeMonitor , estou com grande dificuldade em como fazer , isso ja achei aqui no forum uma função mas e para Fivewin , e estou com clipper então tem um monte de chamadas externas que não existem no clipper, Qualquer ajuda e bem vinda.
Editado pela última vez por Toledo em 03 Jun 2010 22:25, em um total de 1 vez.
Razão: O presente tópico foi movido da seção CA-Clipper, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o Clipper.
Razão: O presente tópico foi movido da seção CA-Clipper, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o Clipper.
-
anacatacombs
- Membro Master

- Mensagens: 472
- Registrado em: 12 Jul 2005 16:53
- Localização: Cianorte-Paraná
- Contato:
Re: Arquivo Retorno do AcbrnfeMonitor para clipper
Você começou alguma coisa ?
Eu tenho essa rotina implementada, mas é bem focada ao sistema, talvez você nem consiga aproveitar..
Dificuldades em que?
[]'s
Ana
Eu tenho essa rotina implementada, mas é bem focada ao sistema, talvez você nem consiga aproveitar..
Dificuldades em que?
[]'s
Ana
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Arquivo Retorno do AcbrnfeMonitor para clipper
Márcio, segue abaixo uma função que criei para tratar o arquivo de retorno do ACBrNFeMonitor, mas como eu uso MiniGui, tive que fazer algumas alterações, que não testei, mas acho que vai funcionar no Clipper, somente dê uma olhada nas variáveis que estão com mais de 10 caracteres, que não é aceito pelo Clipper.
Declarar as seguintes variáveis:
Exemplo de uso:
Esta minha função também está bem focada para o meu sistema, então vai servir apenas como base para você.
Abraços,
Código: Selecionar todos
FUNC ESP_RET(v_pro)
LOCAL ret:=.T.,nContador:=0
PRIV v_aOk:={}
DO WHILE !FILE(cArqSAI)
nContador+=1
inkey(.5)
IF nContador>120
msgNFE:="COMUNICACAO COM SEFAZ;Favor verificar se sua Conexão com a Internet esta ativa."
IF ALERT(msgNFE,{"Tentar Novamente","Cancelar"})==1
nContador=0
LOOP
ELSE
if file(cArqENT)
delete file (cArqENT)
endif
AADD(v_aOk,.F.)
AADD(v_aOk,"99-Falta de Comunicacao")
RETU (v_aOk)
ENDIF
ENDIF
ENDDO
nFileHandle = FOPEN( cArqSAI )
nFileSize = FSEEK( nFileHandle, 0, 2 )
FSEEK( nFileHandle, 0, 0 )
nBytesRead = 0
aLinha = ReadLin( nFileSize )
FCLOSE( nFileHandle )
IF LEN(aLinha)>0
v_l:=aLinha[1]
IF "OK:" $ v_l
IF v_pro="AdicionarNFe"
v_chv:=RIGHT(ALLTRIM(v_l),52)
AADD(v_aOk,.T.)
AADD(v_aOk,LEFT(v_chv,44))
ENDIF
IF v_pro="StatusServico"
AADD(v_aOk,.T.)
ENDIF
IF v_pro="ConsultarNFe"
AADD(v_aOk,.T.)
FOR vli=1 TO LEN(aLinha)
v_l:=aLinha[vli]
IF LEFT(v_l,6)="CStat="
AADD(v_aOk,"CStat="+ALLTRIM(SUBS(v_l,7)))
ENDIF
IF LEFT(v_l,8)="XMotivo="
AADD(v_aOk,"XMotivo="+ALLTRIM(SUBS(v_l,9)))
ENDIF
IF LEFT(v_l,9)="DhRecbto="
AADD(v_aOk,"DhRecbto="+ALLTRIM(SUBS(v_l,10)))
ENDIF
IF LEFT(v_l,6)="NProt="
AADD(v_aOk,"NProt="+ALLTRIM(SUBS(v_l,7)))
ENDIF
IF LEFT(v_l,7)="DigVal="
AADD(v_aOk,"DigVal="+ALLTRIM(SUBS(v_l,8)))
ENDIF
NEXT
ENDIF
IF v_pro="CancelarNFe"
IF "Rejeição:" $ v_l
AADD(v_aOk,.F.)
FOR vli=1 TO LEN(aLinha)
v_l:=aLinha[vli]
IF LEFT(v_l,6)="CStat="
AADD(v_aOk,"Código = "+ALLTRIM(SUBS(v_l,7)))
ENDIF
IF LEFT(v_l,8)="XMotivo="
AADD(v_aOk,"Motivo = "+ALLTRIM(SUBS(v_l,9)))
ENDIF
NEXT
ELSE
AADD(v_aOk,.T.)
FOR vli=1 TO LEN(aLinha)
v_l:=aLinha[vli]
IF LEFT(v_l,6)="CStat="
AADD(v_aOk,"CStat="+ALLTRIM(SUBS(v_l,7)))
ENDIF
IF LEFT(v_l,8)="XMotivo="
AADD(v_aOk,"XMotivo="+ALLTRIM(SUBS(v_l,9)))
ENDIF
IF LEFT(v_l,9)="DhRecbto="
AADD(v_aOk,"DhRecbto="+ALLTRIM(SUBS(v_l,10)))
ENDIF
IF LEFT(v_l,6)="NProt="
AADD(v_aOk,"NProt="+ALLTRIM(SUBS(v_l,7)))
ENDIF
IF LEFT(v_l,7)="DigVal="
AADD(v_aOk,"DigVal="+ALLTRIM(SUBS(v_l,8)))
ENDIF
NEXT
ENDIF
ENDIF
IF v_pro="EnviarLoteNFe"
AADD(v_aOk,.T.)
vTag=1
vNRec=""
FOR vli=14 TO LEN(aLinha)
v_l:=aLinha[vli]
IF LEFT(v_l,5)="NRec="
vNRec=ALLTRIM(SUBS(v_l,6))
AADD(v_aOk,vNRec)
ENDIF
IF LEFT(v_l,6)="CStat="
IF vTag>2
AADD(v_aOk,"CStat="+ALLTRIM(SUBS(v_l,7)))
ELSE
vTag+=1
ENDIF
ENDIF
IF LEFT(v_l,8)="XMotivo="
IF vTag>2
AADD(v_aOk,"XMotivo="+ALLTRIM(SUBS(v_l,9)))
ELSE
vTag+=1
ENDIF
ENDIF
IF LEFT(v_l,9)="DhRecbto="
IF vTag>2
AADD(v_aOk,"DhRecbto="+ALLTRIM(SUBS(v_l,10)))
ELSE
vTag+=1
ENDIF
ENDIF
IF LEFT(v_l,4)="[NFE"
v_temp=STRTRAN(SUBS(v_l,5),"]","")
v_n_nfe:=STRZERO(VAL(v_temp),6)
AADD(v_aOk,"NFE"+v_n_nfe)
ENDIF
IF LEFT(v_l,6)="NProt="
AADD(v_aOk,"NProt="+ALLTRIM(SUBS(v_l,7)))
ENDIF
IF LEFT(v_l,7)="DigVal="
AADD(v_aOk,"DigVal="+ALLTRIM(SUBS(v_l,8)))
ENDIF
NEXT
ENDIF
ELSE
AADD(v_aOk,.F.)
FOR vli=1 TO LEN(aLinha)
AADD(v_aOk,aLinha[vli])
NEXT
ENDIF
ELSE
AADD(v_aOk,.F.)
AADD(v_aOk,"98-Arquivo de retorno vazio")
ENDIF
IF FILE(cArqSAI)
DELETE FILE (cArqSAI)
ENDIF
RETU v_aOk
FUNCTION ReadLin(nFileSize)
PRIV v_L:={}
cAccumText:=""
DO WHILE nBytesRead<=nFileSize
cSingle = FREADSTR( nFileHandle, 1 )
nBytesRead = nBytesRead + 1
IF cSingle = CHR(13)
cSingle = FREADSTR( nFileHandle, 1 )
nBytesRead = nBytesRead + 1
IF cSingle = CHR(10)
cSingle = FREADSTR( nFileHandle, 1 )
nBytesRead = nBytesRead + 1
IF !(cSingle = CHR(26) .OR. ASC(cSingle) = 0)
FSEEK( nFileHandle, -1, 1 )
nBytesRead = nBytesRead - 1
ENDIF
ELSE
IF !(cSingle = CHR(26) .OR. ASC(cSingle) = 0)
FSEEK( nFileHandle, -1, 1 )
nBytesRead = nBytesRead - 1
ENDIF
ENDIF
AADD(v_L,cAccumText)
cSingle = ""
cAccumText = ""
ELSE
cAccumText = cAccumText + cSingle
ENDIF
ENDDO
RETURN v_LCódigo: Selecionar todos
Private cArqENT:="C:\ACBrNFeMonitor\ENTNFE.TXT"
Private cArqSAI:="C:\ACBrNFeMonitor\SAINFE.TXT"Código: Selecionar todos
aOk2=ESP_RET("ConsultarNFe")
IF aOk2[1]
FOR v_i=2 TO LEN(aOk2)
IF LEFT(aOk2[v_i],6)="CStat="
vSCAL5_40:=SUBS(aOk2[v_i],7)
ENDIF
IF LEFT(aOk2[v_i],8)="XMotivo="
vSCAL5_32:=SUBS(aOk2[v_i],9)
ENDIF
IF LEFT(aOk2[v_i],9)="DhRecbto="
vSCAL5_42:=SUBS(aOk2[v_i],10)
ENDIF
IF LEFT(aOk2[v_i],6)="NProt="
vSCAL5_34:=SUBS(aOk2[v_i],7)
ENDIF
IF LEFT(aOk2[v_i],7)="DigVal="
vSCAL5_43:=SUBS(aOk2[v_i],8)
ENDIF
NEXT
//AQUI GRAVA OS DADOS NO DBF
ELSE
vMsg:="Ocorreu um Erro da Consulta!"
FOR i=2 TO LEN(aOk2)
vMsg+=";"+aOk2[i]
NEXT
TONE(1000)
ALERT(vMsg)
ENDIFAbraç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
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
-
marciotullio
- Usuário Nível 1

- Mensagens: 16
- Registrado em: 28 Ago 2009 15:17
- Localização: Joao Pessoa
Re: Arquivo Retorno do AcbrnfeMonitor para clipper
Blz Obrigado ja deu uma luz no fim do tunel , vou começar a verificar os retornos e fazer os ajustes.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Arquivo Retorno do AcbrnfeMonitor para clipper
Amiguinho,
Voce deve olhar o tópico *** Presente de Ano Novo **** Gerenciamento de ECFS.
Neste tópico eu abordo como gerenciar vários tipos de ECF usando apenas um código de impressão, ou seja, uma rotina de impressão de cupoms generalizada com suporte aos ECFs conhecidos no mercado sem tanta programação.
O mesmo possui um sub-módulo para uso do ACBr. Pelo exposto basta que voce tenha uma variavel publica com o nome do motor que vai usar:
O codigo para uso da impressão:
Simples né, agora é só analisar, fazer as alterações necessárias e usar sem susto.
Se precisar de apoio abra um tópico que as células pensantes do forum começarão a funcionar.
Voce deve olhar o tópico *** Presente de Ano Novo **** Gerenciamento de ECFS.
Neste tópico eu abordo como gerenciar vários tipos de ECF usando apenas um código de impressão, ou seja, uma rotina de impressão de cupoms generalizada com suporte aos ECFs conhecidos no mercado sem tanta programação.
O mesmo possui um sub-módulo para uso do ACBr. Pelo exposto basta que voce tenha uma variavel publica com o nome do motor que vai usar:
Código: Selecionar todos
PUBLIC ECF_Driver = "MATRICIAL" // Pode ser também "URANO","DARUMA","BEMATECH","MECAF","SWEDA","SCHALTER","QUATTRO","ACBR"
Código: Selecionar todos
ECF_AbreCupom( cCNPJ )
do while not. eof()
ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde,
skip
enddo
ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor )
ECF_EfetuaFormaPagamento( cForma, cValor )
ECF_FechaCupom( cForma, cValor )
Se precisar de apoio abra um tópico que as células pensantes do forum começarão a funcionar.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
marciotullio
- Usuário Nível 1

- Mensagens: 16
- Registrado em: 28 Ago 2009 15:17
- Localização: Joao Pessoa
Re: Arquivo Retorno do AcbrnfeMonitor para clipper
Ja uso o Acbr para ECF , a minha duvida era para usar o ACBR NFE MONITOR , pra nfe eletronica.
mas agradecido pela dica.
mas agradecido pela dica.
Re: Arquivo Retorno do AcbrnfeMonitor para clipper
Toledo,
Achei bem legal sua função de tratamento de retorno do AcbrNfeMonitor.
Para eu poder fechar aqui minha rotina gostaria q vc mostrasse um EXEMPLO DE USO para ENVIO da Nfe e também para CANCELAMENTO da Nfe.
É possível?
Obrigado
Achei bem legal sua função de tratamento de retorno do AcbrNfeMonitor.
Para eu poder fechar aqui minha rotina gostaria q vc mostrasse um EXEMPLO DE USO para ENVIO da Nfe e também para CANCELAMENTO da Nfe.
É possível?
Obrigado
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Arquivo Retorno do AcbrnfeMonitor para clipper
janio, segue abaixo os exemplos:
Cancelamento de NFe:
Envio de NFe:
No meu caso, eu não envio as NFes individualmente, envio por lote. Então, no meu exemplo da mensagem anterior, depois da linha 94, acrescente:
Abraços,
Cancelamento de NFe:
Código: Selecionar todos
aOk2=ESP_RET("CancelarNFe")
IF aOk2[1]
FOR v_i=2 TO LEN(aOk2)
IF LEFT(aOk2[v_i],6)="CStat="
vSCAL5_40:=SUBS(aOk2[v_i],7)
ENDIF
IF LEFT(aOk2[v_i],8)="XMotivo="
vSCAL5_32:=SUBS(aOk2[v_i],9)
ENDIF
IF LEFT(aOk2[v_i],9)="DhRecbto="
vSCAL5_42:=SUBS(aOk2[v_i],10)
ENDIF
IF LEFT(aOk2[v_i],6)="NProt="
vSCAL5_34:=SUBS(aOk2[v_i],7)
ENDIF
IF LEFT(aOk2[v_i],7)="DigVal="
vSCAL5_43:=SUBS(aOk2[v_i],8)
ENDIF
NEXT
// Aqui voce grava os dados
vMsg:="Código Stat: "+vSCAL5_40+Local1+;
"Situação: "+vSCAL5_32
MsgInfo(vMsg,"Resultado do Cancelamento da NFe "+NFS_100->SCAL5_01)
ELSE
vMsg:="Ocorreu um Erro no Cancelamento!"
FOR i=2 TO LEN(aOk2)
vMsg+=Local1+aOk2[i]
NEXT
PlayExclamation()
MsgInfo(vMsg,"Resultado do Cancelamento da NF-e "+NFS_100->SCAL5_01)
ENDIFCódigo: Selecionar todos
aOk2=ESP_RET("EnviarNFe")
IF aOk2[1]
FOR v_i=3 TO LEN(aOk2)
IF LEFT(aOk2[v_i],6)="CStat="
vSTATUS:=SUBS(aOk2[v_i],7)
ENDIF
IF LEFT(aOk2[v_i],8)="XMotivo="
vXMOTIVO:= SUBS(aOk2[v_i],9,50)
ENDIF
IF LEFT(aOk2[v_i],6)="NProt="
vNPROT:= SUBS(aOk2[v_i],7)
ENDIF
IF LEFT(aOk2[v_i],7)="DigVal="
vDIGVAL:= SUBS(aOk2[v_i],8)
ENDIF
IF LEFT(aOk2[v_i],9)="DhRecbto="
vDHRECBTO:= SUBS(aOk2[v_i],10)
ENDIF
IF LEFT(aOk2[v_i],6)="ChNFe="
vCHAVE:=SUBS(aOk2[v_i],7)
ENDIF
IF LEFT(aOk2[v_i],5)="NRec="
vRECIBO:= SUBS(aOk2[v_i],6)
ENDIF
NEXT
//Aqui voce grava os dados
ELSE
v_Erros+=1
AADD(aErro,"Criar e Enviar NFe")
AADD(aErro,"NFe: "+N_NOTA)
FOR v_i=2 TO LEN(aOk2)
AADD(aErro,aOk2[v_i])
NEXT
ENDIFCódigo: Selecionar todos
IF v_pro="EnviarNFe"
AADD(v_aOk,.T.)
vTag=1
vNRec=""
FOR vli=14 TO LEN(aLinha)
v_l:=aLinha[vli]
IF LEFT(v_l,5)="NRec="
vNRec=ALLTRIM(SUBS(v_l,6))
AADD(v_aOk,"NRec="+vNRec)
ENDIF
IF LEFT(v_l,6)="CStat="
IF vTag>2
AADD(v_aOk,"CStat="+ALLTRIM(SUBS(v_l,7)))
ELSE
vTag+=1
ENDIF
ENDIF
IF LEFT(v_l,8)="XMotivo="
IF vTag>2
AADD(v_aOk,"XMotivo="+ALLTRIM(SUBS(v_l,9)))
ELSE
vTag+=1
ENDIF
ENDIF
IF LEFT(v_l,9)="DhRecbto="
IF vTag>2
AADD(v_aOk,"DhRecbto="+ALLTRIM(SUBS(v_l,10)))
ELSE
vTag+=1
ENDIF
ENDIF
IF LEFT(v_l,6)="NProt="
AADD(v_aOk,"NProt="+ALLTRIM(SUBS(v_l,7)))
ENDIF
IF LEFT(v_l,7)="DigVal="
AADD(v_aOk,"DigVal="+ALLTRIM(SUBS(v_l,8)))
ENDIF
IF LEFT(v_l,6)="ChNFe="
AADD(v_aOk,"ChNFe="+ALLTRIM(SUBS(v_l,7)))
ENDIF
NEXT
ENDIF
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
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
