Ir para conteúdo
  • Cadastre-se

dev botao

Impressão De Carta De Correção


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

Recommended Posts

Boa tarde, estou implementando uma nova versão de meu Software e as seguintes rotinas geram a Carta de Correção:

 

function TUnt_Ctrl_Nfe.Carta_Correcao: Boolean;
Var
  nSeqEvento, vLote: Integer;
  vCorrecao: AnsiString;
begin
  //Conferindo a NFE
  if Assigned(Vo_Venda) and ( Vo_Venda.NFE_CHAVE <> '' ) and ( Vo_Venda.CODIGO_FAT_STATUS_NFE = 100 ) then
    begin
      //Texto da Correção
      vCorrecao := Trim(Copy( Digita_String('Correção', '', true, 800),1,300));

      If vCorrecao <> '' then
        begin
          //Criar carta de Correção para esta NFE
          NFe.EventoNFe.Evento.Clear;

          //Numero do Próximo Evento
          nSeqEvento := Ctrl_Cartas.Ultimo_Evento( Vo_Venda.Codigo ) + 1;

          with NFe.EventoNFe.Evento.Add do
           begin
             infEvento.chNFe      := Vo_Venda.NFE_CHAVE;
             infEvento.CNPJ       := SohNumeros(Controler.Obj_Empresa.Eps_Cnpj);
             infEvento.dhEvento   := Now;
             infEvento.tpEvento   := teCCe;
             infEvento.nSeqEvento := nSeqEvento;
             infEvento.detEvento.xCorrecao := vCorrecao;
           end;

          vLote := Lote_Atual;

          If NFe.EnviarEventoNFe( vLote ) then
            begin
               //Anota no Banco de dados as informações do retorno
               Anotar_Retorno_CCe( NFe.WebServices.EnvEvento, vCorrecao );
            end else begin
              Result := False;

              with NFe.WebServices.EnvEvento do
              begin
                raise Exception.Create(
                  'Ocorreram erros ao enviar a Carta de Correção:' + sLineBreak +
                  'Lote: '     + IntToStr(EventoRetorno.idLote) + sLineBreak +
                  'Ambiente: ' + TpAmbToStr(EventoRetorno.tpAmb) + sLineBreak +
                  'Orgao: '    + IntToStr(EventoRetorno.cOrgao) + sLineBreak +
                  sLineBreak +
                  'Status: '   + IntToStr(EventoRetorno.cStat) + sLineBreak +
                  'Motivo: '   + EventoRetorno.xMotivo
                );
              end;
            end;
        end else result := False;
    end
    else begin
      MessageDlg('A Venda Não está Assinalada corretamente, confira a Chave da Nfe e o Status', mtError, [mbOK],0);
    end;
end;
 

procedure TUnt_Ctrl_Nfe.Anotar_Retorno_CCe(pEvento: TNFeEnvEvento; pCorrecao: AnsiString);
Var
  Vo: TFAT_VENDAS_CARTA_CORRECAOVO;
  NomeArq, vMotivo, vPath, NumeroProtocolo: string;
  CodStat, nSeqEvento: Integer;
  DataHoraEvento: TDateTime;
begin
    with pEvento do
    begin
      if not(EventoRetorno.retEvento.Items[0].RetInfEvento.cStat in [135, 136]) then
      begin
        raise EDatabaseError.CreateFmt(
          'Ocorreu o seguinte erro ao enviar a carta de correção:'  + sLineBreak +
          'Código:%d' + sLineBreak +
          'Motivo: %s', [
            EventoRetorno.retEvento.Items[0].RetInfEvento.cStat,
            EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo ]);
      end;

      // retornos

      //Nome do Arquivo XML da Carta de Correção
      nSeqEvento := EventoRetorno.retEvento.Items[0].RetInfEvento.nSeqEvento;

      NomeArq := '\' + Vo_Venda.NFE_CHAVE + EventoRetorno.InfEvento.TipoEvento +
        Format('%.2d', [nSeqEvento]) + '-procEventoNFe.xml';

      //Anotar os dados do Evento
      CodStat := EventoRetorno.retEvento.Items[0].RetInfEvento.cStat;
      vMotivo := EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo;
      vPath   := Nfe.Configuracoes.Arquivos.GetPathEvento( teCCe ) + NomeArq;

      DataHoraEvento  := EventoRetorno.retEvento.Items[0].RetInfEvento.dhRegEvento;
      NumeroProtocolo := EventoRetorno.retEvento.Items[0].RetInfEvento.nProt;

      Vo := TFAT_VENDAS_CARTA_CORRECAOVO.create;

      try
        Vo.Codigo := 0;
        vo.Eps_Codigo := Cod_Emp;
        Vo.CODIGO_FAT_VENDAS := Vo_Venda.Codigo;
        Vo.CARTA_CHAVE := Vo_Venda.NFE_CHAVE;
        vo.CARTA_DATA_HORA := DataHoraEvento;
        vo.CARTA_SEQUENCIAL := nSeqEvento;
        vo.CARTA_CORRECAO := pCorrecao;
        vo.CARTA_LOTE := EventoRetorno.idLote;
        Vo.CARTA_PATH_XML := vPath;
        Vo.CARTA_PROTOCOLO := NumeroProtocolo;
        vo.CODIGO_FAT_STATUS_EVENTO := CodStat;

        If Ctrl_Cartas.Insere_Ctrl( Vo ) > 0 then
          //Imprime a Carta de correção
          Imprimir_Evento ( Vo_Venda.NFE_PATH_XML, vPath );
      finally
        FreeAndNil( Vo );

        Atualiza_Lote;

        Carregar_Memos( NFE.WebServices.EnvEvento.RetWS, '' );
      end;
    end;
end;
 

procedure TUnt_Ctrl_Nfe.Imprimir_Evento(pPath_Xml, pPath_Xml_Evento: string);
begin
  if FileExists(pPath_Xml_Evento) and FileExists( pPath_Xml ) then
    begin
      NFe.NotasFiscais.Clear;
      NFe.NotasFiscais.LoadFromString( pPath_Xml );

      NFe.EventoNFe.Evento.Clear;
      NFe.EventoNFe.LerXMLFromString( pPath_Xml_Evento );

      NFe.ImprimirEvento;
    end
    else
      MessageDlg('Os Arquivos passados para Impressão não foram encontrados, verifique!', mtError, [mbOK],0);
end;

 

No momento da Impressão aparecem os seguintes erros:

 

Não encontrei Inicio do URI: id =

 

e Após isso o seguinte erro:

 

Campo cOrgao não informado.

 

O que poderia ser, alguém já passou por isso?
 

Link para o comentário
Compartilhar em outros sites

Estou passando pelo mesmo problema. Já fiz algumas pesquisas no fórum e em outras fontes na internet, sem sucesso. A mensagem "Campo cOrgao não informado" aparece quando pego o XML da CCe e tento imprimir. Segue abaixo o arquivo XML e também o código implementado.

 

O código que escrevi foi baseado no artigo do Régys Silveira.
http://www.regys.com.br/como-imprimir-um-evento-utilizando-o-acbrnfe/

 

Meu código:

procedure TFNFe.btnImprimeCCeClick(Sender: TObject);
begin
  OpenDialog1.Title := 'Selecione o XML da CCe';
  OpenDialog1.DefaultExt := '*.XML';
  OpenDialog1.Filter := '*'+DM.cdsPedidoNUCHAVEACESSONFE.Text+'*.XML';
  OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Geral.PathSalvar;
  if OpenDialog1.Execute then
  begin
    ACBrNFeDANFERave1.MostrarPreview := True;

    ACBrNFe1.NotasFiscais.Clear;
    ACBrNFe1.NotasFiscais.LoadFromString(DM.cdsPedidoNUCHAVEACESSONFE.Text+'-NFe.XML');//<XML Nota Eletrônica>

    ACBrNFe1.EventoNFe.Evento.Clear;
    ACBrNFe1.EventoNFe.LerXMLFromString(OpenDialog1.FileName);//<XML Evento>

    ACBrNFe1.ImprimirEvento;
  end;

end;

4213110811038100017355001000004807100004807811011010-procEventoNFe.xml

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

  • Consultores

Bom dia a todos,

 

Por favor quando postar rotinas, incluas em um arquivo TXT e coloque esse arquivo como anexo.

 

Desta forma o post fica curto. 

 

Softcom e Drezius, ambos dizem que o problema é na impressão, mas não informaram qual Report estão utilizando para imprimir a CC-e.

 

Drezius note que no XML que você anexou o campo cOrgao existe, sendo assim tudo me leva a crer que o problema esta no Report de impressão da CC-e que você esta utilizando.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Italojjr, boa tarde,

 

Acho que estou com dificuldade no entendimento do procedimento de impressão. No meu projeto delphi eu tenho o componente ACBrNFeDANFERave1. O código de impressão é aquele descrito acima. E na minha pasta de reports tenho o arquivo "NotaFiscalEletronica.rav". Pelo jeito está faltando alguma coisa, mas não consegui entender ainda o que. Pode me esclarecer?

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

A que uso é a versão ACBrDANFeRaveCB, mas me parece que a versão para FastReport, Fortes e Quick tbm tem suporte.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Coloquei o componente ACBrDANFeRaveCB1 no meu projeto e percebi que ao contrário do ACBrDANFeRave1, o ACBrDANFeRaveCB1 não possui a propriedade 'RavFile' para selecionar qual arquivo .rav será usado. O ACBrDANFeRaveCB1 assume automaticamente o arquivo que usa?

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Senhores, boa tarde,

 

Reativando o tópico, pois o problema persiste.

 

Mudei o componente e agora estou usando o ACBrNFeDANFERaveCB, mas ao tentar imprimir continua retornando a mesma mensagem, "Campo cOrgao não informado". Segue XML em anexo.

 

Aproveitando o tópico, percebi que a tag <verEvento> no XML da CCe não está recebendo a informação que passo via código. No XML da NFe mostra a versão correta do sistema, já na CCe aparece sempre 1.00. É assim mesmo?

4214050811038100017355001000000213100000213211011004-procEventoNFe.xml

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Boa tarde! Preciso da ajuda de vocês, pois não estou saindo do lugar...

Mudei agora a minha versão para o "Trunk2". 

1. O retorno e o xml da carta de correção -- que ao meu ver deveria ser apenas um xml -- agora retorna em 2 xmls(vide anexos), percebo que um complementa o outro, mas acredito que deveria ser apenas 1 arquivo. Estou enviando o evento conforme o Demonstração em Delphi. Como deixar tudo em apenas 1 xml ??

1.1 A impressão do evento carta de correção, usando o Fortes, está saindo sem o Status, Protocolo e Data/hora -- provavelmente devido ao xml não está completo(como relatei acima) ou a impressão tem erro.

Agradeço a ajuda!!!

 

125-eve.xml

0-ped-eve.xml

Link para o comentário
Compartilhar em outros sites

  • Membros

Boa tarde! Preciso da ajuda de vocês, pois não estou saindo do lugar...

Mudei agora a minha versão para o "Trunk2". 

1. O retorno e o xml da carta de correção -- que ao meu ver deveria ser apenas um xml -- agora retorna em 2 xmls(vide anexos), percebo que um complementa o outro, mas acredito que deveria ser apenas 1 arquivo. Estou enviando o evento conforme o Demonstração em Delphi. Como deixar tudo em apenas 1 xml ??

1.1 A impressão do evento carta de correção, usando o Fortes, está saindo sem o Status, Protocolo e Data/hora -- provavelmente devido ao xml não está completo(como relatei acima) ou a impressão tem erro.

Agradeço a ajuda!!!

 

125-eve.xml

0-ped-eve.xml

O retorno da CCe termina em -procEventoNFe.xml ... Veja como ta a configuração do PathEvento ... lá vai estar o arquivo.

Equipe ACBr Sérgio Assunção
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

[email protected]

Link para o comentário
Compartilhar em outros sites

Boa tarde! Preciso da ajuda de vocês, pois não estou saindo do lugar...

Mudei agora a minha versão para o "Trunk2". 

1. O retorno e o xml da carta de correção -- que ao meu ver deveria ser apenas um xml -- agora retorna em 2 xmls(vide anexos), percebo que um complementa o outro, mas acredito que deveria ser apenas 1 arquivo. Estou enviando o evento conforme o Demonstração em Delphi. Como deixar tudo em apenas 1 xml ??

1.1 A impressão do evento carta de correção, usando o Fortes, está saindo sem o Status, Protocolo e Data/hora -- provavelmente devido ao xml não está completo(como relatei acima) ou a impressão tem erro.

Agradeço a ajuda!!!

 

125-eve.xml

0-ped-eve.xml

O retorno da CCe termina em -procEventoNFe.xml ... Veja como ta a configuração do PathEvento ... lá vai estar o arquivo.

Obrigado, Sérgio pelo help, mas eu até encontro o retorno do evento, o problema é que vem em 2 arquivo(125-eve.xml e 0-ped-eve.xml e na hora de imprimir a Carta de Correção

não aparecem os campos: o status, protocolo e data/hora do registro

(estou usando o Fortes, não sei se tem algum erro, enfim)

 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Bom dia preciso da ajuda de vcs.

Estou utilizando a versão do AcBr Monitor Plus 1.11.10 e estou com dificuldades de envio de carta de correção NFe, abaixo o comando enviado e o o texto de retorno:

Comando:

NFE.CARTADECORRECAO("
[CCE]
idLote=201511260955
[EVENTO001]
chNFe=35151102750819000100550010000000391001000879
cOrgao=35
CNPJ=02750819000100
dhEvento=26/11/2015 09:55:31
nSeqEvento=1
xCorrecao=1 - TESTE DE CARTA DE CORREÇÃO, TESTE DE TESTES................")

Retorno:

ERRO: Rejeição: Versão dos Dados não suportada

Obrigado.

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Régys,

Será que o comando NFe.CartadeCorrecao não esta gerando de forma correta o XML de envio?

Desculpa se eu estiver escrevendo besteira, mas não seria interessante que esse comando simplesmente fosse um alias do EnviarEvento?

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • Este tópico foi criado há 2458 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.

The popup will be closed in 10 segundos...