Ir para conteúdo
  • Cadastre-se

Eduardo Andrade_9326

Membros
  • Total de ítens

    2
  • Registro em

  • Última visita

Posts postados por Eduardo Andrade_9326

  1. Estou gerando o xml  com os eventos do esocial no meu sistema, depois importo no acbresocial para que ele faça a assinatura e envie. Eu gero o xml da forma que ele deve ir para a fazenda, como na estrutura abaixo:

    <eventos><evento id="1"><esocial>...</esocial><evento id="2"><esocial>...</esocial>....</eventos>

    Quando tento realizar o load deste xml para o acbresocial ele dá erro: falha ao interpretar xml xmlparsedoc.

    Analisando o código do acbresocialeventos.pas, ele parece não esperar a estrutura acima, ele espera que venha uma  lista de <esocial></esocial>, sem as tags de<evventos> e <evento>. Eu fiz um ajuste no código para que ele consiga realizar a leitura do xml com as tags <eventos> e <evento> basta substituir a função abaixo no código acbresocialeventos.pas

     

    function TEventos.LoadFromString(AXMLString: String): Boolean;
    var
    //  AXML: AnsiString;
      AXML: String;
      P: integer;

      function PoseSocial: integer;
      begin
        Result := pos('</eSocial>', AXMLString);
      end;

    begin
      Result := False;

      AXMLString := copy(AXMLString, pos('<eSocial', AXMLString), length(AXMLString));
      P := PoseSocial;

      while P > 0 do
      begin
        AXML := copy(AXMLString, 1, P + 9);
        AXMLString := Trim(copy(AXMLString, P + 10, length(AXMLString)));
        AXMLString := copy(AXMLString, pos('<eSocial', AXMLString), length(AXMLString));
        Result := Self.Iniciais.LoadFromString(AXML);
        Result := Self.Tabelas.LoadFromString(AXML) or Result;
        Result := Self.NaoPeriodicos.LoadFromString(AXML) or Result;
        Result := Self.Periodicos.LoadFromString(AXML) or Result;

        SaveToFiles;

        P := PoseSocial;
      end;
    end;
     

     

    Se os moderadores puderem fazer o ajuste seria legal, até entendo que não é um problema comum, mas outros usuários podem sofre com este problema.

     

  2. Estava com  o mesmo e consegui resolver. Veja se o erro de vocês é igual o meu. 

    Por algum motivo, meu arquivo de eventos estava salvo como "envevento_v1.00.xsd" e não "envEvento_v1.00.xsd". 

    Temos o seguinte método no arquivo ACBrDFe.pas :

    TACBrDFe.AchaArquivoSchema(NomeSchema: String; var AVersao: Double;  var ArqSchema: String);

    Este método verifica qual a versão que deve ser usado para o serviço. No caso do envio de evento ele recebe em NomeSchema = "envEvento" e AVersao = 4.  O método verifica se existe um arquivo de schema para AVersao = 4 e como não existe procura o arquivo de schema menor e mais próximo do AVersao, depois de encontrar ele seta ArqSchema com o nome do arquivo e AVersao com a versão do arquivo mais próximo. No nosso caso deveria ser ArqSchema="envEvento_v1.00.xsd" e AVersao=4.

    A seguinte linha faz o teste para encontrar o arquivo:

          if (copy(ArqAtual, 1, LenNome) = NomeSchema) then

    Como o meu arquivo estava salvo como "envevento_v1.00.xsd" e o nome do esquema vem como "envEvento", eles não ficavam igual, então ArqSchema ficava vazio e AVersao ficava igual a 0, dando o erro de schema.

    A solução foi mudar esta linha para:

          if (uppercase(copy(ArqAtual, 1, LenNome)) = uppercase(NomeSchema)) then

    Passando toda comparação para minúsculo com o uppercase ele funciona.

    Note que antes de fazer a alteração eu tentei renomear o arquivo, deixando como "envEvento_v1.00.xsd", não sei se por algum problema de cache do servidor de arquivos, na busca do arquivo ele continuava trazendo "envevento_v1.00.xsd".

    Eu também estava com problema na carta de correção e foi resolvido com este método.


     

     

×
×
  • 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...