Ir para conteúdo
  • Cadastre-se

dev botao

Manter A Chave Informada Manualmente


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

Recommended Posts

Boa tarde,

 

Fiz uma alteração na Unit pmdfeMDFeW adicionando a condição na function GerarXml


  if trim(MDFe.infMDFe.ID) = '' then
    MDFe.infMDFe.ID := chave;

Ficou assim


function TMDFeW.GerarXml: boolean;
var
  chave: AnsiString;
  Gerar: boolean;
  xProtMDFe: String;
begin
  chave := '';

  if not GerarChave(Chave, MDFe.ide.cUF, MDFe.ide.cMDF, StrToInt(MDFe.ide.modelo), MDFe.ide.serie,
    MDFe.ide.nMDF, StrToInt(TpEmisToStr(MDFe.ide.tpEmis)), MDFe.ide.dhEmi, MDFe.emit.CNPJ) then
    Gerador.wAlerta('#001', 'infMDFe', DSC_CHAVE, ERR_MSG_GERAR_CHAVE);

  chave           := StringReplace(chave,'NFe','MDFe',[rfReplaceAll]);

  if trim(MDFe.infMDFe.ID) = '' then
    MDFe.infMDFe.ID := chave;
  MDFe.ide.cDV    := RetornarDigito(MDFe.infMDFe.ID);
  MDFe.Ide.cMDF   := RetornarCodigoNumerico(MDFe.infMDFe.ID, 2);

  // Carrega Layout que sera utilizado para gera o txt
  Gerador.LayoutArquivoTXT.Clear;
  Gerador.ArquivoFormatoXML := '';
  Gerador.ArquivoFormatoTXT := '';

  Gerador.wGrupo(ENCODING_UTF8, '', False);

  if MDFe.procMDFe.nProt <> ''
   then Gerador.wGrupo('mdfeProc versao="' + MDFeEnviMDFe + '" ' + NAME_SPACE_MDFe, '');

  Gerador.wGrupo('MDFe ' + NAME_SPACE_MDFe);
  Gerador.wGrupo('infMDFe Id="' + MDFe.infMDFe.ID + '" versao="' + MDFeEnviMDFe + '"');
  GerarInfMDFe;
  Gerador.wGrupo('/infMDFe');

  if FOpcoes.GerarTagAssinatura <> taNunca then
  begin
    Gerar := true;
    if FOpcoes.GerarTagAssinatura = taSomenteSeAssinada then
      Gerar := ((MDFe.signature.DigestValue <> '') and (MDFe.signature.SignatureValue <> '') and (MDFe.signature.X509Certificate <> ''));
    if FOpcoes.GerarTagAssinatura = taSomenteParaNaoAssinada then
      Gerar := ((MDFe.signature.DigestValue = '') and (MDFe.signature.SignatureValue = '') and (MDFe.signature.X509Certificate = ''));
    if Gerar then
    begin
      FMDFe.signature.URI := somenteNumeros(MDFe.infMDFe.ID);
      FMDFe.signature.Gerador.Opcoes.IdentarXML := Gerador.Opcoes.IdentarXML;
      FMDFe.signature.GerarXML;
      Gerador.ArquivoFormatoXML := Gerador.ArquivoFormatoXML + FMDFe.signature.Gerador.ArquivoFormatoXML;
    end;
  end;
  Gerador.wGrupo('/MDFe');

  if MDFe.procMDFe.nProt <> '' then
   begin
     xProtMDFe :=
           '<protMDFe versao="' + MDFeEnviMDFe + '">' +
             '<infProt>'+
               '<tpAmb>'+TpAmbToStr(MDFe.procMDFe.tpAmb)+'</tpAmb>'+
               '<verAplic>'+MDFe.procMDFe.verAplic+'</verAplic>'+
               '<chMDFe>'+MDFe.procMDFe.chMDFe+'</chMDFe>'+
               '<dhRecbto>'+FormatDateTime('yyyy-mm-dd"T"hh:nn:ss',MDFe.procMDFe.dhRecbto)+'</dhRecbto>'+
               '<nProt>'+MDFe.procMDFe.nProt+'</nProt>'+
               '<digVal>'+MDFe.procMDFe.digVal+'</digVal>'+
               '<cStat>'+IntToStr(MDFe.procMDFe.cStat)+'</cStat>'+
               '<xMotivo>'+MDFe.procMDFe.xMotivo+'</xMotivo>'+
             '</infProt>'+
           '</protMDFe>';

     Gerador.wTexto(xProtMDFe);
     Gerador.wGrupo('/mdfeProc');
   end;

  Gerador.gtAjustarRegistros(MDFe.infMDFe.ID);
  Result := (Gerador.ListaDeAlertas.Count = 0);
end;

Espero ter contribuído

 

 

Abraços

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Roberson,

 

Muito obrigado pela colaboração, já esta disponível.

 

Lembre-se de quando postar fragmentos de códigos longos, colocar em um bloco de notas e postar como anexo.

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

Olá,

 

Estou gerado uns MDFe para homologar a atualização do ACBr e me deparei um com problema que pode estar relacionado a este post.

Ao validar o XML apresenta o erro:

 

"'42141211111111111111580010000000201003358722' violates pattern constraint of 'MDFe[0-9]{44}'.

The attribute 'Id' with value '42141211111111111111580010000000201003358722' failed to parse."

 

Avaliando XML pude verificar que o atributo "Id" da tag "infMDFe" foi gerado sem o prefixo "MDFe".

 

Acredito que a unit "pmdfeMDFeR" tbm precise de ajustes.
Ao executar o load de um XML, esta lendo o atributo ID da seguinte forma:

MDFe.infMDFe.ID := SomenteNumeros(Leitor.rAtributo('Id=')); 

Desta forma lê somente os nros e não o prefixo MDFe;

 

Minha forma de trabalho é a seguinte:

1º Carrego o componente com as informações;

     Atribuindo os valores ao atributos;

2º Gerado o XML;

3º Carrego o componente através da leitura do XML;

4º Solicito a validação;

     Neste ponto apresenta o erro.

 

 

Não tenho ideia de como resolver isso.

 

Avaliando os commits na revisão 7173 foi adicionado o uso do método "SomenteNumeros" ao obter o valor o atributo ID, e adicionado um tratamento para verificar se o campo esta preenchido.

 

Valeu.

Editado por carlosmarian

Carlos H. Marian

Analista de Sistemas

|/-\|

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Carlos,

 

Em vez de:

 

1º Carrego o componente com as informações;

     Atribuindo os valores ao atributos;

2º Gerado o XML;

3º Carrego o componente através da leitura do XML;

4º Solicito a validação;

 

Porque não:

1º Carrego o componente com as informações;

     Atribuindo os valores ao atributos;

2º Enviar;

 

Lembre-se que o Enviar: Gera o XML, Assina, Valida, se OK Envia.

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 mês depois ...
  • Consultores

Boa noite Graça,

 

Sinceramente, até hoje eu não entendi porque foi feite desta forma no ACBrNFe e que agora deixei igual no ACBrCTe e ACBrMDFe.

 

No meu entendimento o componente deveria ignorar qualquer dado atribuído a propriedade ID assim que a chave for gerada pelo próprio componente.

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

  • 3 semanas depois ...
  • Consultores

Boa noite,

 

Qual a diferença em possuir a chave antes de gerar o XML ou obtê-lo após após ter gerado o XML?

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 Solla,

 

Para que executar o Gerar se você pode executar o Assinar, desta forma alem do XML ser gerado já fica assinado.

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á 3352 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.