Clipper On Line • Ver Tópico - Uso da classesefaz

Uso da classesefaz

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

 

Uso da classesefaz

Mensagempor JoséQuintas » 12 Ago 2016 19:10

Autorizei nota hoje, com a rotina acima.
Parece piada, mas minha rotina estava errada.

   IF oSefaz:cStatus == "101"
      hb_MemoWrit( "NFE\NF" + jpnota->nfNotFis + "-06-Autorizado.xml", oSefaz:cXmlAutorizado )
      RUN ( "start d:\unidanfe\unidanfe.exe NFE\NF" + jpnota->nfNotFis + "-06-Autorizado.xml" )


Pois é... errei na parte mais simples.... rs

Mas foi só olhar o XML de protocolo .
Aquele gravado como NFE\TMP\NF000094246-05-Protocolo.xml
É exatamente a resposta da Fazenda.

protocolo.png


Classe errada?
Não.
Eu é que errei... rs
Nota autorizada é status 100, e não 101.

É o que dá fazer de cabeça, sem conferir manual.... rs

Nota:
Os temporários acabam sendo interessantes nessa situação, quando algo dá errado.
O autorizado oficial estava gerado (a rotina acima também gravou).
Foi só a checagem do status que errei mesmo, e apresentei a mensagem que não tinha sido autorizada.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Uso da classesefaz

Mensagempor JoséQuintas » 12 Ago 2016 19:15

Aproveitando...

A nota autorizada não é nada mais além da nota enviada, junto com o protocolo que está nessa resposta.
Só somar as strings: "<infNFe ...>" + nota enviada + protocolo + "</infNFe>"

A coisa toda é simples assim.

A complicação dos componentes pra NFe é converter TXT, converter INI, "conversar" com seu aplicativo, etc.

A classe apenas envia, pega resposta, nada extraordinário, e tudo através de strings diretas, sem arquivo intermediário.
A gravação de temporário, se quiser, é boa pra conferência.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Uso da classesefaz

Mensagempor JoséQuintas » 16 Ago 2016 16:42

A rotina atualizada:

#include "jpa.ch"

FUNCTION P0600NFE()

   LOCAL nSelect, cNfeTxt, cNfeXml, oSefaz := SefazClass():New(), cStatusAssinatura, cComando

   MEMVAR m_Prog
   PRIVATE m_Prog := "P0600NFE"

   DirMake( "NFE\TMP" )

   nSelect := Select()

   IF .NOT. Encontra( jppedi->pdPedido, "jpnota", "pedido" )
      MsgStop( "Inválido! Não tem nota emitida para esse pedido" )
      RETURN .F.
   ENDIF
   IF jpnota->nfDatEmi != Date()
      MsgStop( "Inválido! Nota fiscal não foi emitida hoje" )
      RETURN .F.
   ENDIF
   IF jpnota->nfStatus == "C"
      MsgStop( "Inválido! Nota fiscal cancelada, não há o que fazer" )
      RETURN .F.
   ENDIF
   IF jpnota->nfPedido != jppedi->pdPedido
      MsgStop( "Erro interno! Posicionado em NF diferente do pedido atual" )
      RETURN .F.
   ENDIF
   Mensagem( "Autorizando nota" )
   NFDbfToXml( @cNfeTxt, @cNfeXml, "1", Date(), Time(), , "1" )
   cStatusAssinatura := AssinaXml( @cNfeXml, AppEmpresaApelido() )
   IF cStatusAssinatura != "OK"
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-01-SemAssinatura.xml", cNfeXml )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-02-Assinado.xml", cNfeXml )
      MsgExclamation( "Problema na assinatura " + cStatusAssinatura )
      RETURN .F.
   ENDIF
   oSefaz:cCertificado := NomeCertificado( AppEmpresaApelido() )
   oSefaz:cAmbiente    := "1"
   oSefaz:NfeLoteEnvia( cNfeXml )
   IF oSefaz:cStatus $ "100,101,202,302"
      hb_MemoWrit( hb_cwd() + "IMPORTA\" + jpnota->nfNotFis + "-" + oSefaz:cStatus + "-Autorizado.xml", oSefaz:cXmlAutorizado )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-" + oSefaz:cStatus + "-Autorizado.xml", oSefaz:cXmlAutorizado )
      cComando :=  [arquivo="] + hb_cwd() + [NFE\TMP\] + jpnota->nfNotFis + [-] + oSefaz:cStatus + [-Autorizado.xml"]
      IF File( "d:\unidanfe\" + SoNumeros( jpempre->emCnpj ) + ".jpg" )
         cComando += [ logotipo="d:\unidanfe\] + SoNumeros( jpempre->emCnpj ) + [.jpg"]
      ENDIF
      cComando += [ visualizar=1]
      wapi_ShellExecute( NIL, NIL, "d:\unidanfe\unidanfe.exe", cComando, SW_SHOWNORMAL )
      MsgExclamation( iif( oSefaz:cStatus == "100", "Nota autorizada", "Nota Denegada" ) )
   ELSE
      hb_MemoWrit( hb_cwd() + "NFE\"     + jpnota->nfNotFis + ".txt",                  cNfeTxt )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-01-SemAssinatura.xml", cNfeXml )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-02-Assinado.xml",      cNfeXml )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-03-Envelope.xml",      oSefaz:cXmlSoap )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-04-Recibo.xml",        oSefaz:cXmlRecibo )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-05-Protocolo.xml",     oSefaz:cXmlProtocolo )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-06-Erro.xml",          oSefaz:cXmlRetorno )
      hb_MemoWrit( hb_cwd() + "NFE\TMP\" + jpnota->nfNotFis + "-07-Autorizado.xml",    oSefaz:cXmlAutorizado )
      MsgExclamation( "Erro desconhecido " + Pad( oSefaz:cXmlProtocolo, 1000 ) )
   ENDIF
   SELECT ( nSelect )

   RETURN NIL


Por enquanto acertando a impressora padrão pro Unidanfe (não havia nenhuma instalada e o unidanfe reclamou)

E surgiu outra necessidade:
Pelo emissor da Fazenda, eram gerados XMLs e PDFs pra envio ao armazém externo, pra separação e posterior retirada de mercadoria.
Com o detalhe de que o emissor gera um PDF único contendo todas as notas.
Por enquanto ainda resolvendo a impressora padrão.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Uso da classesefaz

Mensagempor gu_bf » 24 Ago 2016 15:24

Boa tarde,
Desculpe pela demora em responder mas, conformado o funcionamento da rotina de validação.
Comecei a testar cancelamento da NFe que no momento é que mais me importa então, encontrei um pequeno problema no código, mais especificamente
no method NFeEventoCancela na linha 561 tem a notação ( versão "1.00" ) que alterei para ( versao="1.00" ) e na linha 562
que está assim a declaração do id ( Id="ID110111" ) e eu alterei para ( Id="ID110111] ). Depois disso esse method passou sem problema, agora
está dando um erro na assinatura que estou verificando. Na imagem em anexo é ilustrado o problema que encontrei ate agora.
Obrigado
Gustavo
Anexos
cancelaNFE.jpg
gu_bf
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 01 Ago 2016 07:36
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Uso da classesefaz

Mensagempor gu_bf » 24 Ago 2016 15:48

Depois de regularizado o erro acima, o processo de cancelamento de NFe foi concluído sem maiores problemas como pode perceber pela imagem em anexo de consulta no SEFAZ SP.
e continuam os testes mas já está funcional pelo menos na base que preciso.
Obrigado.
Gustavo,
Anexos
cancelaNFE2.jpg
gu_bf
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 01 Ago 2016 07:36
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Uso da classesefaz

Mensagempor JoséQuintas » 24 Ago 2016 16:19

Valeu.

Me confundi um pouco na hora de entender o post, mas confirmei e corrigi.

No primeiro faltou o sinal de igual.

versao "1.00"

versao="1.00"


E no segundo, era pra fechar com colchete, e estava fechado com aspas.
Não deu erro de compilação, porque o compilador considerou string tudo até o próximo fecha colchete.

[<infEvento Id="ID110111]

[<infEvento Id="ID110111"


E isso causou erro de assinatura, porque a assinatura usa o ID do documento que estava errado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Uso da classesefaz

Mensagempor gu_bf » 24 Ago 2016 19:17

Boa noite
Eu não sei se é mais viável, mas, se for possível declarar a função FUNCTION MsgExclamation( cText ) do modulo ze_xmlfun.prg como STATIC, para não conflitar
como no meu caso a MINIGUI, está ai a sugestão.
Muito obrigado
Gustavo.
gu_bf
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 01 Ago 2016 07:36
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Uso da classesefaz

Mensagempor JoséQuintas » 24 Ago 2016 19:58

Melhor ainda, eliminar de vez.

É usada num exemplo que está embutido na rotina de validação.
Deixar o exemplo comentado.
Pode ser substituída por qualquer rotina que mostre o resultado na tela
Assim não prende a recursos de tela, que variam conforme console/LIB gráfica.
Inclusive o Inkey(0) foi pra poder entrar no debug, e esqueci de retirar... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18009
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Uso da classesefaz

Mensagempor gu_bf » 25 Ago 2016 08:13

Bom dia
Acho que está faltando algum aquivo .ch

---------------------------
Program Error
---------------------------
Error BASE/1003 Vari vel nÆo existe: DOW_DOMINGO

Called from HORARIOVERAOINICIO(153)
Called from DATETIMEXML(109)
Called from (b)SEFAZCLASS(111)

Obrigado
Gustavo.
gu_bf
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 01 Ago 2016 07:36
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Uso da classesefaz

Mensagempor gu_bf » 25 Ago 2016 08:25

Ops
Ignore meu post anterior, acabei de atualizar a LIB e vi que ja está declarado a variavel.
Obrigado.
gu_bf
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 01 Ago 2016 07:36
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Uso da classesefaz

Mensagempor malcarli » 26 Ago 2016 15:35

Boa tarde, estou iniciando, não encontrei esta rotina NFDbfToXml( @cNfeTxt, @cNfeXml, "1", Date(), Time(), , "1" ). Poderia informar onde? obrigado
malcarli
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 181
Data de registro: 20 Ago 2015 18:14
Cidade/Estado: marilia/sp
Curtiu: 81 vezes
Mens.Curtidas: 4 vezes

Uso da classesefaz

Mensagempor gu_bf » 26 Ago 2016 19:13

Boa noite Quintas,
Estou com problema estranho. Com sistema pronto e funcionando na minha maquina, resolvi fazer um teste com certificado de outra empresa e no micro
deles.
O problema ocorre no momento da assinatura do XML, que devolve o erro ( Erro: Problemas pra assinar XML ) que é a descrição padrão, como se não
tivesse passado em nenhum filtro e o arquivo não está assinado.
Refiz o teste com certificado que estava usando até agora e não da erro nenhum, o processo valida sem qualquer problema.
A única diferença além das informações cadastrais da empresa são os certificados, ambos A3 dentro da validade e de emissão de empresas diferentes.
como imagem em anexo.
O que apresenta problema e de emissão da AC SINCOR RFB G4.
Poderia me dar alguma dica?
Obrigado
Gustavo.
Anexos
Certificado2.jpg
Certificado1.jpg
gu_bf
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 01 Ago 2016 07:36
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Uso da classesefaz

Mensagempor gilbertosilverio » 27 Ago 2016 06:54

Ola Gustavo,

Tive um problema parecido com o seu, em minha maquina os dois certificados funcionavam, mais quando instalei no servidor, um dos certificados dava erro na assinatura da NFe, usando o UNINFE.

Para resolver, desinstalei os certificados e todos os componentes dos tokens, baixei os instaladores de cada certificado, fornecidos pela própria autorizadora, no meu caso CERTISING e SERASA, e os dois certificados funcionaram perfeitamente, não dando mais erro de assinatura.

Creio que este teu erro e devido a falta de alguma cadeia de certificados da autorizadora.
gilbertosilverio
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 332
Data de registro: 18 Jan 2009 09:39
Cidade/Estado: Ribeirao Pires - SP
Curtiu: 1 vez
Mens.Curtidas: 23 vezes

Uso da classesefaz

Mensagempor gu_bf » 27 Ago 2016 12:12

Ola Gilberto, obrigado pela dica.
Deixa eu relatar aqui o que aconteceu pois se alguém tiver algum problema similar não caia nesse meu erro idiota.
Eu tenho um script .BAT que registra as dlls de uso com capicom e esse script executa o registro no modo silencioso com /S, então a mensagem de erro
de que não foi possível registrar as DLLs não apareciam e para mim estava tudo normal.
Removi esse parâmetro do regsvr32.exe fiz o registro com ADMINISTRADOR e beleza.
Viu que bobeira que minha?!?!? levei 2 dias para descobrir, pensei que estivesse no codigo que escrevi, então fiquem esperto com esse tipo de rotina para não marcar dessa maneira.
Muito obrigado.
Gustavo.
gu_bf
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 13
Data de registro: 01 Ago 2016 07:36
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 1 vez

Uso da classesefaz

Mensagempor malcarli » 26 Set 2016 11:35

Bom dia José, por acaso teria algum exemplo básico de como gerar xml, usando a classe ze_spedxmlClass.prg.

obrigado
malcarli
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 181
Data de registro: 20 Ago 2015 18:14
Cidade/Estado: marilia/sp
Curtiu: 81 vezes
Mens.Curtidas: 4 vezes

Anterior Próximo



Retornar para Projeto hbNFe

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro