Ir para conteúdo
  • Cadastre-se

dev botao

Obter Xml Da Dpec Antes Do Envio Para O Webservice.


Delphi in Delphi
  • Este tópico foi criado há 3852 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Prezados, me corrijam se eu estiver errado, mas a DPEC é o único método que não onera ao enviar a nota por contingência por falha na internet no cliente. E a única forma de fazer isso é obtendo o XML de envio assinado e então carregar no site da sefaz pelo smartphone ou qualquer outro método que torne possível seu upload pelo site da sefaz.

 

Sendo a informação acima coerente se concluí que é importante que a classe da ACBR responsável por gerar e enviar a DPEC tenha uma rotina para obter o XML da DPEC assinado, gostaria de saber se existe alguma forma "oficial" de fazer isso, visto que não encontrei método parecido dentro da classe "TNFeEnvDPEC" ?

 

No momento como alternativa estou herdando a classe citada acima, e visto que o procedimento que gera o xml e assina tanto como o objeto repositor estão na cláusula PROTECTED foi possível fazer isso. Segue exemplo para quem tiver alguma dúvida do procedimento informado:

uses
  ACBrNFeWebServices,
  pcnEnvDPEC;

type
  TXMLNFeEnvDPEC = class( TNFeEnvDPEC )
  public
    function ObtemXmlDPECEnv: string;
  end;

implementation

{ TFixNFeEnvDPEC }

function TXMLNFeEnvDPEC.ObtemXmlDPECEnv: string;
begin
  LoadMsgEntrada;
  Result := FDadosMsg;
end;





Exemplo de uso:

var
  XML:string;
begin
  XML := TXMLNFeEnvDPEC( ACBRNFe1.WebServices.EnviarDPEC ).ObtemXmlDPECEnv;
end;

É obvio que para utilizar o exemplo acima é necessário que os dados da nota fiscal estejam carregados no componente ACBRNfe, via suas funções ou LoadFromFile para o XML.

Link para o comentário
Compartilhar em outros sites

Chegou a abrir o demo do ACBrNFe, pois lá existe um botão mostrando como utilizar o DPEC com tudo que é necessário.

 

Opa Régys, tudo bem ? então olhei sim o código, também verifiquei que ele tenta realizar o envio correto ?

var
 vAux : String;
begin
if not(InputQuery('WebServices DPEC', 'Numero da Nota', vAux)) then
    exit;

  ACBrNFe1.NotasFiscais.Clear;

  GerarNFe(vAux);

  ACBrNFe1.NotasFiscais.SaveToFile();
  if ACBrNFe1.WebServices.EnviarDPEC.Executar then
   begin
     //protocolo de envio ao DPEC e impressão do DANFE
     ACBrNFe1.DANFE.ProtocoloNFe:=ACBrNFe1.WebServices.EnviarDPEC.nRegDPEC+' '+
                                  DateTimeToStr(ACBrNFe1.WebServices.EnviarDPEC.DhRegDPEC);
     ACBrNFe1.NotasFiscais.Imprimir;

     ShowMessage(DateTimeToStr(ACBrNFe1.WebServices.EnviarDPEC.DhRegDPEC));
     ShowMessage(ACBrNFe1.WebServices.EnviarDPEC.nRegDPEC);
   end;  

  MemoResp.Lines.Text := UTF8Encode(ACBrNFe1.WebServices.EnviarDPEC.RetWS);
  memoRespWS.Lines.Text := UTF8Encode(ACBrNFe1.WebServices.EnviarDPEC.RetornoWS);  
  LoadXML(MemoResp, WBResposta);

  ACBrNFe1.NotasFiscais.Clear;
end;

Porém existe uma rotina no software do meu cliente que realiza uma analise da melhor contingência a ser utilizada dentre avaliação da internet e demais itens, então é interessante que não ocorra o envio sendo que o software já sabe que não é possível realizar esta tarefa.

Link para o comentário
Compartilhar em outros sites

Verificando com mais cuidado, também reparei que não existe a possibilidade de carregar o XML autorizado pelo site da SEFEZ diretamente para o componente e então analisar o retorno, sendo necessário abrir o xml e ler as tags, sendo que pela acbr é muito mais simples fazer isso se houvesse uma função LoadDPECRetFromFile ou coisa do tipo. No exemplo da ACBR somente é viável realizar a consulta via o webservice.

 

Logo o exemplo não atende a situação de contingência por falha na internet.

Editado por Macgayver Armini
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Você não está estudando tudo direitinho, primeiro o executar do DPEC não envia, ele executa as rotinas necessárias e retorna tudo pronto, segundo não existe a necessidade de ler nada a mão, tudo é automático, insisto, estude o demo do ACBrNFe para entender melhor o funcionamento.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Você não está estudando tudo direitinho, primeiro o executar do DPEC não envia, ele executa as rotinas necessárias e retorna tudo pronto, segundo não existe a necessidade de ler nada a mão, tudo é automático, insisto, estude o demo do ACBrNFe para entender melhor o funcionamento.

 

Realmente devo admitir minha confusão, não consegui visualizar a utilização da seguinte situação, e gostaria que se possível me passasse mais detalhes de como utilizar ela no ACBrNFe.

 

  1. Internet do usuário deixa de funcionar.
  2. Usuário gera dpec e armazena em um pendrive junto ao seu certificado.
  3. Usuário se dirige a um local com internet
  4. Usuário carrega o xml da dpec no site da sefaz.
  5. Usuário realiza o download do xml autorizado do site da sefaz.
  6. Usuário se dirige a sua empresa.
  7. Usuário carrega o xml no sistema.
  8. Sistema verifica validade do arquivo carregado além de seu status.
  9. Sistema imprimir o danfe em modo contigência tipo de emissão 4 junto ao número da autorização.
Link para o comentário
Compartilhar em outros sites

  • Moderadores

1-2, você chama o método executar para gerar tudo e salva o XML no pen-drive

5 em diante, pega o XML do qual fez download e carrega no componente usando o loadfromfile e efetua as gravações que achar necessárias lendo as propriedades.

 

Basicamente é isso.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

1-2, você chama o método executar para gerar tudo e salva o XML no pen-drive

5 em diante, pega o XML do qual fez download e carrega no componente usando o loadfromfile e efetua as gravações que achar necessárias lendo as propriedades.

 

Basicamente é isso.

 

Prezado, verificando mais afundo o que foi argumentado por mim em tópicos anteriores, diante a apresentação do exemplo da ACBRNfe e ainda o código de envio utilizado pela dpec no procedimento executar, fica evidente o "Envio" das informações, é claro, o arquivo DPEC é gerado antes, mas ele não deixa de executar a transmissão, e como apresentado a situação problema no post anterior fica claro que existe a situação em que o envio não se faz necessário.

 

Quanto ao procedimento LoadFromFile, eu devo estar enganado, porém só pude ver a existência do mesmo para o XML da nota fiscal eletrônica, em nenhum momento consegui visualizar um LoadFromFile para carregar o retorno da DPEC do site da sefaz, as classes que eu procurei foram:

  • TWebServicesBase
  • TNFeEnvDPEC
  • TRetDPEC

Sendo que a TRetDPEC traz a possibilidade da leitura do arquivo da seguinte forma, então pergunto será essa a forma mencionada ?

var
  RetDPEC: TRetDPEC;
begin
  RetDPEC := TRetDPEC.Create;
  try
    RetDPEC.Leitor.Arquivo := XMLRet;
    RetDPEC.LerXml;

    TACBrNFe( FACBrNFe ).SetStatus( stIdle );

//    verAplic := RetDPEC.verAplic;
//    cStat := RetDPEC.cStat;
//    xMotivo := RetDPEC.xMotivo;
//    ID := RetDPEC.ID;
//    TpAmb := RetDPEC.TpAmb;
//    DhRegDPEC := RetDPEC.DhRegDPEC;
//    nRegDPEC := RetDPEC.nRegDPEC;
//    NFeChave := RetDPEC.chNFe;
//    FMsg := RetDPEC.xMotivo;
finally
  RetDPEC.Free;
end;

Desde já agradeço a compreensão e paciência depositada, nas minhas dúvidas. 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3852 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.