Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Consultores
Postado

Bom bia Gabriel,

Abra a unit pmdfeConversaoMDFe que esta na pasta: ...\Fontes\ACBrDFe\ACBrMDFe, altere a string 'LayMDFeEvento' por 'RecepcaoEvento' nas functions LayIOutToServico e ServicoToLayOut.

Compile a sua aplicação com a opção Build e tente novamente.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom bia Gabriel,

Abra a unit pmdfeConversaoMDFe que esta na pasta: ...\Fontes\ACBrDFe\ACBrMDFe, altere a string 'LayMDFeEvento' por 'RecepcaoEvento' nas functions LayIOutToServico e ServicoToLayOut.

Compile a sua aplicação com a opção Build e tente novamente.

 

Olá Italo

fiz o que vc sugeriu, porem ao tentar encerrar o mdfe recebo a seguinte mensagem:

ERRO: 
Erro Interno: 0
Erro HTTP: 4Erro: Requisição não enviada.
0 - A operação foi concluída com êxito

att

Fiz o mesmo, mas o problema persiste. 

  • Consultores
Postado

Bom dia a todos,

A alteração que eu sugeri em ambas as funções foi essa:

    ['MDFeRecepcao', 'MDFeRetRecepcao', 'MDFeConsultaProtocolo',
     'MDFeStatusServico', 'RecepcaoEvento', 'MDFeConsNaoEnc',
     'MDFeDistribuicaoDFe'],
    [ LayMDFeRecepcao, LayMDFeRetRecepcao, LayMDFeConsulta,
      LayMDFeStatusServico, LayMDFeEvento, LayMDFeConsNaoEnc,
      LayMDFeDistDFeInt ] );

 

Foi o que vocês fizeram?

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado (editado)

Bom dia Italo

Alterei os arquivos ACBrMDFe.pas e o ACBrMDFeWebServices.pas, mas não consegui anexar aqui no post, deu erro de upload.

enviei no seu email.

Teste o envio, cancelamento e encerramento, funcionou perfeitamente

Abraços

ACBrMDFe.pas

no arquivo ACBrMDFeWebservice.pas

alterei a função:

procedure TMDFeEnvEvento.DefinirDadosMsg;
var
  EventoMDFe: TEventoMDFe;
  I, F: integer;
  Lote, Evento, Eventos, EventosAssinados, AXMLEvento: String;
  EventoEhValido: Boolean;
  SchemaEventoMDFe: TSchemaMDFe;
begin
  EventoMDFe := TEventoMDFe.Create;
  try
    EventoMDFe.idLote := FidLote;

    for I := 0 to TMDFeEnvEvento(Self).FEvento.Evento.Count - 1 do
    begin
      with EventoMDFe.Evento.Add do
      begin
        infEvento.tpAmb      := FPConfiguracoes.WebServices.Ambiente;
        infEvento.CNPJ       := FEvento.Evento[i].InfEvento.CNPJ;
        infEvento.chMDFe     := FEvento.Evento[i].InfEvento.chMDFe;
        infEvento.dhEvento   := FEvento.Evento[i].InfEvento.dhEvento;
        infEvento.tpEvento   := FEvento.Evento[i].InfEvento.tpEvento;
        infEvento.nSeqEvento := FEvento.Evento[i].InfEvento.nSeqEvento;

        case InfEvento.tpEvento of
          teCancelamento:
          begin
            SchemaEventoMDFe := schevCancMDFe;
            infEvento.detEvento.nProt := FEvento.Evento[i].InfEvento.detEvento.nProt;
            infEvento.detEvento.xJust := FEvento.Evento[i].InfEvento.detEvento.xJust;
          end;
          teEncerramento:
          begin
            SchemaEventoMDFe := schevEncMDFe;
            infEvento.detEvento.nProt := FEvento.Evento[i].InfEvento.detEvento.nProt;
            infEvento.detEvento.dtEnc := FEvento.Evento[i].InfEvento.detEvento.dtEnc;
            infEvento.detEvento.cUF   := FEvento.Evento[i].InfEvento.detEvento.cUF;
            infEvento.detEvento.cMun  := FEvento.Evento[i].InfEvento.detEvento.cMun;
          end;
          teInclusaoCondutor:
          begin
            SchemaEventoMDFe := schevIncCondutorMDFe;
            infEvento.detEvento.xNome := FEvento.Evento[i].InfEvento.detEvento.xNome;
            infEvento.detEvento.CPF   := FEvento.Evento[i].InfEvento.detEvento.CPF;
          end;
        end;
      end;
    end;

    EventoMDFe.Versao := FPVersaoServico;
    EventoMDFe.GerarXML;

    // Separa os grupos <evento> e coloca na variável Eventos
//    I := Pos('<eventoMDFe ', EventoMDFe.Gerador.ArquivoFormatoXML);
//    Lote := Copy(EventoMDFe.Gerador.ArquivoFormatoXML, 1, I - 1);
//    Eventos := SeparaDados(EventoMDFe.Gerador.ArquivoFormatoXML, 'envEvento');
//    I := Pos('<eventoMDFe ', Eventos);
//    Eventos := Copy(Eventos, I, length(Eventos));

    Eventos := EventoMDFe.Gerador.ArquivoFormatoXML;
    EventosAssinados := '';

    // Realiza a assinatura para cada evento
    while Eventos <> '' do
    begin
      F := Pos('</eventoMDFe>', Eventos);

      if F > 0 then
      begin
        Evento := Copy(Eventos, 1, F + 12);
        Eventos := Copy(Eventos, F + 13, length(Eventos));

        AssinarXML(Evento, 'eventoMDFe', 'infEvento', 'Falha ao assinar o Envio de Evento ');

        EventosAssinados := EventosAssinados + StringReplace(
          FPDadosMsg, '<?xml version="1.0"?>', '', []);
      end
      else
        Break;
    end;

//    F := Pos('?>', EventosAssinados);
//    if F <> 0 then
//      FPDadosMsg := copy(EventosAssinados, 1, F + 1) + Lote +
//        copy(EventosAssinados, F + 2, Length(EventosAssinados)) + '</envEvento>'
//    else
//      FPDadosMsg := Lote + EventosAssinados + '</envEvento>';

    // Separa o XML especifico do Evento para ser Validado.
    AXMLEvento := '<?xml version="1.0" encoding="UTF-8" ?>' +
                  SeparaDados(FPDadosMsg, 'detEvento');

    with TACBrMDFe(FPDFeOwner) do
    begin
      EventoEhValido := SSL.Validar(FPDadosMsg,
                                    GerarNomeArqSchema(FPLayout,
                                                       StringToFloatDef(FPVersaoServico, 0)),
                                    FPMsg) and
                        SSL.Validar(AXMLEvento,
                                    GerarNomeArqSchemaEvento(SchemaEventoMDFe,
                                                             StringToFloatDef(FPVersaoServico, 0)),
                                    FPMsg);
    end;

    for I := 0 to FEvento.Evento.Count - 1 do
      FEvento.Evento[I].InfEvento.id := EventoMDFe.Evento[I].InfEvento.id;
  finally
    EventoMDFe.Free;
  end;
end;

 

Editado por Emerson Teixeira
Postado

Olá Italo.

Altererei tbm o arquivo ACBrMDFeDAMDFeClass.pas, não estava criando o path do pdf

function TACBrMDFeDAMDFeClass.GetPathPDF(Data: TDateTime = 0; CNPJ : String = ''): String;
begin
  Result := TACBrMDFe(FACBrMDFe).Configuracoes.Arquivos.GetPath(FPathPDF, 'MDFe', CNPJ, Data);

//  if EstaVazio(FPathPDF) then
//     if Assigned(FACBrMDFe) then
//        FPathPDF := TACBrMDFe(FACBrMDFe).Configuracoes.Arquivos.PathSalvar;

  if NaoEstaVazio(Result) then
     if not DirectoryExists(Result) then
        ForceDirectories(Result);

//  Result := PathWithDelim(FPathPDF);
end;

Attl, abraços

  • Consultores
Postado

Boa tarde Emerson,

Isso é estranho, pois na function GetPath que encontra-se em ACBrDFeConfiguracoes no final ela cria a pasta.

function TArquivosConf.GetPath(APath: String; ALiteral: String; CNPJ: String;
  Data: TDateTime): String;

(...)


  if not DirectoryExists(Dir) then
    ForceDirectories(Dir);

  Result := Dir;
end;

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Este tópico foi criado há 3407 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.