Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Assinatura apaga XML


emarcolongo
  • Este tópico foi criado há 1455 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 to comment
Share on other sites

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

Edited by Joceandro Perin
Link to comment
Share on other 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

Link to comment
Share on other 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 to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other sites

18 horas atrás, Rogerio Barbosa Ferreira disse:

Italo, 

Consegui enviar com sucesso.

Tive que retirar do exemplo algumas tags que não são obrigatórias.

  

Rogerio, bom dia.

 

Quais foram as tags que vc tirou ? poderia passar o exemplo modificado ?

Grato

Link to comment
Share on other sites

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 to comment
Share on other 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

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.