Ir para conteúdo
  • Cadastre-se

dev botao

Assinatura apaga XML


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

Recommended Posts

Boa tarde.

Já tenho desenvolvido o XML do evento S-1000 e gostaria de usar o componente para assinar e enviar.

Montei o codigo, só para testes, desta forma:

  ACBreSocial1.SSL.SelecionarCertificado;
  ACBreSocial1.Configuracoes.Arquivos.PathSalvar := gsAppPath + 'XML';
  ACBreSocial1.Configuracoes.Arquivos.PathSchemas := gsAppPath + 'Schemas\eSocial\v2_04_02';

  ACBreSocial1.Eventos.LoadFromFile('c:\1.xml');
  ACBreSocial1.AssinarEventos;
  ACBreSocial1.Eventos.SaveToFiles;

Meu componente esta configurado com os certificados assim:

image.png.7ef8a18038f21a1b938cb0374f961682.png

Mesmo mexendo nestas configurações dá o mesmo erro.

Após o ACBresocial1.AssinarEventos acontece o erro abaixo:

image.png.d6118d273a9345985dcbf03c954b0ee9.png

Analisando aparentemente esta faltando informação na tag cpfCtt porém antes do AssinarEventos esta tag como as demais estavam informadas, após o AssinarEventos as tag estão vazias, como se tive sobreposto o arquivo incompleto.

XML antes do AssinarEventos

image.thumb.png.8c9885c22ec4d532b60363503a36461b.png

XML depois do AssinarEventos

image.thumb.png.3494fe3cfa3ec1a49d5e8b70f27f4a9d.png

Alguma sugestão ?

image.png

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde emarcolongo,

O XML foi gerado pelo componente ACBreSocial?

Ou você esta usando o componente apenas para assinar o XML gerado por uma rotina própria sua?

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

16 horas atrás, Joceandro Perin disse:

Boa tarde, esse erro é relativo a validação com o schema, vc tem dois campos que são obrigatórios e que estão vazios no teu XML, inclusive existem outros erros, em um dos XML está com a versão 2.4.02 e outro 2.4.01 campos com valores diferentes...

image.png.af1dc400fe02522d51ff1099a030e6f4.png

Joceandro, bom dia.

O problema é este, o arquivo antes da assinatura esta todo completo, depois de assinado fica assim.

16 horas atrás, Italo Jurisato Junior disse:

Boa tarde emarcolongo,

O XML foi gerado pelo componente ACBreSocial?

Ou você esta usando o componente apenas para assinar o XML gerado por uma rotina própria sua?

Italo, bom dia.

O XML não foi gerado pelo componente. Estou usando o componente apenas para assinar.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia emarcolongo,

Porque você não utiliza o componente para tudo?

O grande problema é que o componente ACBreSocial não possui uma procedure que alimenta os campos de um evento através da leitura de um XML.

Ao carregar o XML através do método LoadFromFile pressupõe que o mesmo já esteja assinado, bastando apenas ser incluído no lote para ser enviado.

Sendo assim o meu conselho é: ou você utiliza o componente para todas as etapas ou em vez de gerar o XML, gere um arquivo texto no formato INI (na pasta: ...\Exemplos\ACBrDFe\ACBreSocial\ArqINI temos um arquivo INI de exemplo para cada evento), ao carregar esse arquivo o componente se encarrega de gerar e assinar o XML, deixando-o pronto para o envio.

Você pode testar esse recurso através do programa exemplo.

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

  • Consultores

Bom dia Rogério,

Esse erro ocorre ao carregar o programa exemplo no Delphi e executa-lo, correto?

Ao aparecer a mensagem de falha você clicou no botão Continuar?

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

  • Membros Pro

Prezado Italo,

Quando clico no botão continuar aparece a seguinte mensagem:

Falha na validação dos dados do evento: evtInfoEmpregador

erro: Schema invalido

ps: baixei todos os schemas do site do eSocial para uma pasta e na execução do exemplo aponto para essa pasta

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Rogerio,

No programa exemplo, configure ele para usar a versão 2.04.02

Configure o caminho dos Schemas (PathSchema) para: ...\Exemplos\ACBrDFe\Schemas\eSocial\v2_04_02

E faça novos testes.

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

  • Consultores

Boa tarde Rogério,

Alem de configurar a versão, você passou o caminho correto dos Schemas na propriedade PathSchemas?

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

  • Consultores

Rogério,

Abra o arquivo de configuração do programa exemplo: ExemploEsocial.ini e veja como esta o campo PathSchemas.

O meu esta assim:

PathSchemas=C:\ACBr\trunk2\Exemplos\ACBrDFe\Schemas\eSocial\v2_04_02
 

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

  • Consultores

Bom dia Rogério,

Acabei de fazer um teste com o programa exemplo do ACBreSocial, configurado para a versão 2.04.02

Mandei carregar o arquivo INI do evento 1000 que consta na pasta: ...\Exemplos\ACBrDFe\ACBreSocial\ArqINI, ao realizar a assinatura ocorreu o erro de não ter encontrado o nó, cliquei no botão continuar, o XML foi validado sem nenhum problema, depois cliquei no botão Enviar e o evento foi enviado também sem nenhum problema.

Alguma coisa esta errada na sua configuração, ou esta faltando esquemas dentro da pasta: C:\ACBr\Exemplos\ACBrDFe\Schemas\eSocial\v2_04_02

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

  • Membros Pro

Emarcolongo, Bom dia.

Verifique que no exemplo do eSocial, na unit pcesS1000 a function TevtInfoEmpregador.LerArqIni esta gravaando todas as tags do leiaute.

function TevtInfoEmpregador.LerArqIni(const AIniString: String): Boolean;
var
  INIRec: TMemIniFile;
  Ok: Boolean;
  sSecao, sFim: String;
  I: Integer;
begin
  Result := False;

  INIRec := TMemIniFile.Create('');
  try
    LerIniArquivoOuString(AIniString, INIRec);

    with Self do
    begin
      sSecao := 'evtInfoEmpregador';
      Id             := INIRec.ReadString(sSecao, 'Id', '');
      Sequencial     := INIRec.ReadInteger(sSecao, 'Sequencial', 0);
      ModoLancamento := eSStrToModoLancamento(Ok, INIRec.ReadString(sSecao, 'ModoLancamento', 'inclusao'));

      sSecao := 'ideEvento';
      ideEvento.TpAmb   := eSStrTotpAmb(Ok, INIRec.ReadString(sSecao, 'tpAmb', '1'));
      ideEvento.ProcEmi := eSStrToProcEmi(Ok, INIRec.ReadString(sSecao, 'procEmi', '1'));
      ideEvento.VerProc := INIRec.ReadString(sSecao, 'verProc', EmptyStr);

      sSecao := 'ideEmpregador';
      ideEmpregador.OrgaoPublico := (TACBreSocial(FACBreSocial).Configuracoes.Geral.TipoEmpregador = teOrgaoPublico);
      ideEmpregador.TpInsc       := eSStrToTpInscricao(Ok, INIRec.ReadString(sSecao, 'tpInsc', '1'));
      ideEmpregador.NrInsc       := INIRec.ReadString(sSecao, 'nrInsc', EmptyStr);

      sSecao := 'idePeriodo';
      infoEmpregador.idePeriodo.IniValid := INIRec.ReadString(sSecao, 'iniValid', EmptyStr);
  //    infoEmpregador.idePeriodo.FimValid := INIRec.ReadString(sSecao, 'fimValid', EmptyStr);

      if (ModoLancamento <> mlExclusao) then
      begin
        sSecao := 'infoCadastro';
        infoEmpregador.infoCadastro.NmRazao          := INIRec.ReadString(sSecao, 'nmRazao', EmptyStr);
        infoEmpregador.infoCadastro.ClassTrib        := StrTotpClassTrib(Ok, INIRec.ReadString(sSecao, 'classTrib', '00'));
        infoEmpregador.infoCadastro.NatJurid         := INIRec.ReadString(sSecao, 'natJurid', EmptyStr);
        infoEmpregador.infoCadastro.IndCoop          := eSStrToIndCooperativa(Ok, INIRec.ReadString(sSecao, 'indCoop', '0'));
        infoEmpregador.infoCadastro.IndConstr        := eSStrToIndConstrutora(Ok, INIRec.ReadString(sSecao, 'indConstr', '0'));
        infoEmpregador.infoCadastro.IndDesFolha      := eSStrToIndDesFolha(Ok, INIRec.ReadString(sSecao, 'indDesFolha', '0'));
        infoEmpregador.infoCadastro.IndOptRegEletron := eSStrToIndOptRegEletronico(Ok, INIRec.ReadString(sSecao, 'indOptRegEletron', '0'));
        infoEmpregador.infoCadastro.IndEntEd         := eSStrToSimNao(Ok, INIRec.ReadString(sSecao, 'indEntEd', 'S'));
        infoEmpregador.infoCadastro.IndEtt           := eSStrToSimNao(Ok, INIRec.ReadString(sSecao, 'indEtt', 'S'));
        infoEmpregador.infoCadastro.nrRegEtt         := INIRec.ReadString(sSecao, 'nrRegEtt', EmptyStr);


   {  retirei daqui 
        sSecao := 'dadosIsencao';
        infoEmpregador.infoCadastro.DadosIsencao.IdeMinLei    := INIRec.ReadString(sSecao, 'ideMinLei', EmptyStr);
        infoEmpregador.infoCadastro.DadosIsencao.nrCertif     := INIRec.ReadString(sSecao, 'nrCertif', EmptyStr);
        infoEmpregador.infoCadastro.DadosIsencao.dtEmisCertif := StringToDateTime(INIRec.ReadString(sSecao, 'dtEmisCertif', '0'));
        infoEmpregador.infoCadastro.DadosIsencao.dtVencCertif := StringToDateTime(INIRec.ReadString(sSecao, 'dtVencCertif', '0'));
        infoEmpregador.infoCadastro.DadosIsencao.nrProtRenov  := INIRec.ReadString(sSecao, 'nrProtRenov', EmptyStr);
        infoEmpregador.infoCadastro.DadosIsencao.dtProtRenov  := StringToDateTime(INIRec.ReadString(sSecao, 'dtProtRenov', '0'));
        infoEmpregador.infoCadastro.DadosIsencao.dtDou        := StringToDateTime(INIRec.ReadString(sSecao, 'dtDou', '0'));
        infoEmpregador.infoCadastro.DadosIsencao.pagDou       := INIRec.ReadString(sSecao, 'pagDou', EmptyStr);
    }  até aqui


        sSecao := 'contato';
        infoEmpregador.infoCadastro.Contato.NmCtt    := INIRec.ReadString(sSecao, 'nmCtt', EmptyStr);
        infoEmpregador.infoCadastro.Contato.cpfCtt   := INIRec.ReadString(sSecao, 'cpfCtt', EmptyStr);
        infoEmpregador.infoCadastro.Contato.foneFixo := INIRec.ReadString(sSecao, 'foneFixo', EmptyStr);
        infoEmpregador.infoCadastro.Contato.foneCel  := INIRec.ReadString(sSecao, 'foneCel', EmptyStr);
        infoEmpregador.infoCadastro.Contato.email    := INIRec.ReadString(sSecao, 'email', EmptyStr);


    { retirei daqui
        sSecao := 'infoOP';
        infoEmpregador.infoCadastro.InfoOp.nrSiafi := INIRec.ReadString(sSecao, 'nrSiafi', EmptyStr);

        sSecao := 'infoEFR';
        infoEmpregador.infoCadastro.InfoOp.infoEFR.ideEFR  := eSStrToSimNao(Ok, INIRec.ReadString(sSecao, 'ideEFR', 'S'));
        infoEmpregador.infoCadastro.InfoOp.infoEFR.cnpjEFR := INIRec.ReadString(sSecao, 'cnpjEFR', EmptyStr);

        sSecao := 'infoEnte';
        infoEmpregador.infoCadastro.InfoOp.infoEnte.nmEnte    := INIRec.ReadString(sSecao, 'nmEnte', EmptyStr);
        infoEmpregador.infoCadastro.InfoOp.infoEnte.uf        := eSStrTouf(Ok, INIRec.ReadString(sSecao, 'uf', 'SP'));
        infoEmpregador.infoCadastro.InfoOp.infoEnte.codMunic  := INIRec.ReadInteger(sSecao, 'codMunic', 0);
        infoEmpregador.infoCadastro.InfoOp.infoEnte.indRPPS   := eSStrToSimNao(Ok, INIRec.ReadString(sSecao, 'indRPPS', 'S'));
        infoEmpregador.infoCadastro.InfoOp.infoEnte.subteto   := eSStrToIdeSubteto(Ok, INIRec.ReadString(sSecao, 'subteto', '1'));
        infoEmpregador.infoCadastro.InfoOp.infoEnte.vrSubteto := StringToFloatDef(INIRec.ReadString(sSecao, 'vrSubteto', ''), 0);

        sSecao := 'infoOrgInternacional';
        infoEmpregador.infoCadastro.InfoOrgInternacional.IndAcordoIsenMulta := eSStrToIndAcordoIsencaoMulta(Ok, INIRec.ReadString(sSecao, 'indAcordoIsenMulta', '0'));

    } até aqui

        I := 1;
        while true do
        begin
          // de 01 até 99
          sSecao := 'softwareHouse' + IntToStrZero(I, 2);
          sFim   := INIRec.ReadString(sSecao, 'cnpjSoftHouse', 'FIM');

          if (sFim = 'FIM') or (Length(sFim) <= 0) then
            break;

          with infoEmpregador.infoCadastro.SoftwareHouse.Add do
          begin
            CnpjSoftHouse := sFim;
            nmRazao       := INIRec.ReadString(sSecao, 'nmRazao', '');
            nmCont        := INIRec.ReadString(sSecao, 'nmCont', '');
            telefone      := INIRec.ReadString(sSecao, 'telefone', '');
            email         := INIRec.ReadString(sSecao, 'email', '');
          end;

          Inc(I);
        end;

        sSecao := 'infoComplementares';
        infoEmpregador.infoCadastro.InfoComplementares.SituacaoPJ.IndSitPJ := eSStrToIndSitPJ(Ok, INIRec.ReadString(sSecao, 'indSitPJ', '0'));
        infoEmpregador.infoCadastro.InfoComplementares.SituacaoPF.IndSitPF := eSStrToTpIndSitPF(Ok, INIRec.ReadString(sSecao, 'indSitPF', '0'));

        if ModoLancamento = mlAlteracao then
        begin
          sSecao := 'novaValidade';
          infoEmpregador.novaValidade.IniValid := INIRec.ReadString(sSecao, 'iniValid', EmptyStr);
          infoEmpregador.novaValidade.FimValid := INIRec.ReadString(sSecao, 'fimValid', EmptyStr);
        end;
      end;
    end;

    GerarXML;

    Result := True;
  finally
     INIRec.Free;
  end;
end;


Também retire do aquivo .ini que vc está importando essas mesmas tags

 

Emarcolongo,

retirei porque a empresa não necessita das mesmas

No seu caso vc deve analisar se precisa das tags ou não

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Rogério,

Em vez de remover parte do código, não seria mais interessante checar se a seção existe caso negativo não tentar ler os seus dados?

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

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