Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa Tarde
Devido algumas solicitações de clientes identifiquei um probleminha na consulta de manifestos não encerrados e se possivél gostaria de uma ajuda.

No arquivo ACBrDFeWebService.pas temos a procedure "TDFeWebService.DefinirEnvelopeSoap", a mesma é preenchida corretamente, porém na tag xServ, está sendo preenchida a Frase "CONSULTAR NÃO ENCERRADOS", e ao realizar a conversão para UTF8 na procedure "TDFeWebService.EnviarDados", devido o carácter com acentuação a aplicação altera a frase para "CONSULTAR NÃO ENCERRADOS" . Tentei alterar diretamente a raiz removendo o acento porém sem sucesso, de imediado utilizei a função ParseText para converter novamente e remover o carácter especial mais creio que não esteja correto, alguém teria alguma solução ?

 

Agradeço desde já !

Abraço.

Postado (editado)

Bom Dia Ítalo,

Atualizei os fontes,e infelizmente o problema persiste.

No Trunk1 a consulta está funcionando, para o Trunk2, após a conversão para UTF-8 o problema ocorre, vou continuar verificando para localizar o problema com exatidão e informar melhor.

Se alguém encontrar alguma solução agradeço.

Obrigado desde já !

Abraço.

Editado por Jemison Vidal
Postado

Olá Sr. Daniel Bom dia,

Os Fontes estão atualizados e não foram modificados, realizei a exclusão dos arquivos e baixei novamente sem sucesso.

Efetuamos uma alteração no SetCodePage, colocando o parâmetro Convert para True, dessa maneira o processo foi efetuado com sucesso.

Dentro desse ambiente oque podemos fazer para resolver, sendo que essa function está no ACBrUtil ? lembrando que estou utilizando o Delphi XE6;

function ACBrStrToUTF8( AString : String ) : AnsiString;
{$IFNDEF FPC}
{$IFDEF UNICODE}
var
  RBS: RawByteString;
{$ENDIF}
{$ENDIF}
begin
  {$IFNDEF FPC}
   {$IFDEF UNICODE}
    RBS := UTF8Encode(AString);
    SetCodePage(RBS, 0, False);
    Result := AnsiString(RBS);
   {$ELSE}
    Result := UTF8Encode(AString);
   {$ENDIF}
  {$ELSE}
   Result := AString;
  {$ENDIF}
end;

 

Realizando outro teste utilizei a mesma forma que estava sendo preenchida no trunk1 e funcionou corretamente, lembrando que no trunk1 a conversão não é necessária porque os valores estão sendo passados corretamente para o envelopSoap, segue abaixo código utilizado no trunk1.

procedure TWebServicesBase.DefinirEnvelopeSoap;
var
  Texto: AnsiString;
begin
  { Sobrescrever apenas se necessário }

  Texto := '<?xml version="1.0" encoding="UTF-8"?>';
  Texto := Texto + '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
                                   ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"' +
                                   ' xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">';
  Texto := Texto +   '<soap12:Header>';
  Texto := Texto +     '<mdfeCabecMsg xmlns="' + Servico + '">';
  Texto := Texto +       GerarUFSoap;
  Texto := Texto +       GerarVersaoDadosSoap;
  Texto := Texto +     '</mdfeCabecMsg>';
  Texto := Texto +   '</soap12:Header>';
  Texto := Texto +   '<soap12:Body>';
  Texto := Texto +     '<mdfeDadosMsg xmlns="' + Servico + '">';
  Texto := Texto +       DadosMsg;
  Texto := Texto +     '</mdfeDadosMsg>';
  Texto := Texto +   '</soap12:Body>';
  Texto := Texto + '</soap12:Envelope>';

  FEnvelopeSoap := Texto;
end;

Se alguém teve ou estiver com o mesmo problema e possui alguma solução.

Desde Já Agradeço, Abrado.

 

Postado (editado)

Certo, o problema segundo a minha análise está ocorrendo durante a conversão para UTF-8, devido a acentuação, retirando a necessidade de conversão a consulta é realizada com sucesso, não sei dizer se o problema está relacionado com o compilador(Delphi XE6), apenas esse processo está com problema. segue sugestão e arquivo para analise;

Código Atual:

procedure TDFeWebService.DefinirEnvelopeSoap;
var
  Texto: String;
begin
  { Sobrescrever apenas se necessário }

  {$IFDEF FPC}
   Texto := '<' + ENCODING_UTF8 + '>';    // Envelope já está sendo montado em UTF8
  {$ELSE}
   Texto := '';  // Isso forçará a conversão para UTF8, antes do envio
  {$ENDIF}

  Texto := Texto + '<' + FPSoapVersion + ':Envelope ' + FPSoapEnvelopeAtributtes + '>';
  if NaoEstaVazio(FPHeaderElement) then
  begin
    Texto := Texto + '<' + FPSoapVersion + ':Header>';
    Texto := Texto + '<' + FPHeaderElement + ' xmlns="' + Servico + '">';
    Texto := Texto + GerarCabecalhoSoap;
    Texto := Texto + '</' + FPHeaderElement + '>';
    Texto := Texto + '</' + FPSoapVersion + ':Header>';
  end;
  Texto := Texto + '<' + FPSoapVersion + ':Body>';
  Texto := Texto + '<' + FPBodyElement + ' xmlns="' + Servico + '">';
  Texto := Texto + DadosMsg;
  Texto := Texto + '</' + FPBodyElement + '>';
  Texto := Texto + '</' + FPSoapVersion + ':Body>';
  Texto := Texto + '</' + FPSoapVersion + ':Envelope>';

  FPEnvelopeSoap := Texto;
end;

Código com Alteração:

procedure TDFeWebService.DefinirEnvelopeSoap;
var
  Texto: String;
begin
  { Sobrescrever apenas se necessário }
  Texto := '<?xml version="1.0" encoding="UTF-8"?>';
  Texto := Texto + '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
                                   ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"' +
                                   ' xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">';
  Texto := Texto +   '<soap12:Header>';
  Texto := Texto +     '<mdfeCabecMsg xmlns="' + Servico + '">';
  Texto := Texto +       GerarUFSoap;
  Texto := Texto +       GerarVersaoDadosSoap;
  Texto := Texto +     '</mdfeCabecMsg>';
  Texto := Texto +   '</soap12:Header>';
  Texto := Texto +   '<soap12:Body>';
  Texto := Texto +     '<mdfeDadosMsg xmlns="' + Servico + '">';
  Texto := Texto +       DadosMsg;
  Texto := Texto +     '</mdfeDadosMsg>';
  Texto := Texto +   '</soap12:Body>';
  Texto := Texto + '</soap12:Envelope>';

  FPEnvelopeSoap := Texto;
end;

 

 

 

ACBrDFeWebService.pas

Editado por Jemison Vidal
Postado

Olá, estou com erro na consulta dos não encerrados, segue o erro:

---------------------------
Error
---------------------------
Rejeição: Falha no schema XML
---------------------------
OK   
---------------------------

Baixei hoje os Schemas atualizado. Poderia me ajudar?

  • Fundadores
Postado

pmdfeConsMDFeNaoEnc.pas

6 horas atrás, Jemison Vidal disse:

Certo, o problema segundo a minha análise está ocorrendo durante a conversão para UTF-8, devido a acentuação, retirando a necessidade de conversão a consulta é realizada com sucesso, não sei dizer se o problema está relacionado com o compilador(Delphi XE6), apenas esse processo está com problema. segue sugestão e arquivo para analise;

Modificações no núcleo do DFe devem ser evitadas a todo custo... pois elas podem afetar todos os WebServices

Notei que em "pmdfeConsMDFeNaoEnc.pas", havia uma conversão de Encoding para o acento... porém todo o Envelope será convertido novamente antes da transmissão... e isso está ocasionando o problema (dupla conversão da String)

Por favor tente com a Unit em anexo.. substitua a mesma, na pasta "ACBr\Fontes\ACBrDFe\ACBrMDFe\PCNMDFe"

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • 2 semanas depois ...
Postado

Boa Tarde @Daniel Simoes,

Desculpa, mais o problema não foi resolvido, foi testado apenas com a unit errada.

a uma maneira que encontrei seria retirar a necessidade de conversão para UTF8, Porém não reconheço a real necessidade do IFDEF FPC, saberia me dizer para que serve esse IFDEF ?, Obrigado e desculpa novamente;

Abaixo código para evitar a conversão para UTF8;

Antes: 

procedure TDFeWebService.DefinirEnvelopeSoap;
var
  Texto: String;
begin
  { Sobrescrever apenas se necessário }

  {$IFDEF FPC}
   Texto := '<' + ENCODING_UTF8 + '>';    // Envelope já está sendo montado em UTF8
  {$ELSE}
   Texto := '';  // Isso forçará a conversão para UTF8, antes do envio
  {$ENDIF}
  Texto := Texto + '<' + FPSoapVersion + ':Envelope ' + FPSoapEnvelopeAtributtes + '>';
  if NaoEstaVazio(FPHeaderElement) then
  begin
    Texto := Texto + '<' + FPSoapVersion + ':Header>';
    Texto := Texto + '<' + FPHeaderElement + ' xmlns="' + Servico + '">';
    Texto := Texto + GerarCabecalhoSoap;
    Texto := Texto + '</' + FPHeaderElement + '>';
    Texto := Texto + '</' + FPSoapVersion + ':Header>';
  end;
  Texto := Texto + '<' + FPSoapVersion + ':Body>';
  Texto := Texto + '<' + FPBodyElement + ' xmlns="' + Servico + '">';
  Texto := Texto + DadosMsg;
  Texto := Texto + '</' + FPBodyElement + '>';
  Texto := Texto + '</' + FPSoapVersion + ':Body>';
  Texto := Texto + '</' + FPSoapVersion + ':Envelope>';

  FPEnvelopeSoap := Texto;
end;

 

Possível solução:

procedure TDFeWebService.DefinirEnvelopeSoap;
var
  Texto: String;
begin
  { Sobrescrever apenas se necessário }

  Texto := '<' + ENCODING_UTF8 + '>';
  Texto := Texto + '<' + FPSoapVersion + ':Envelope ' + FPSoapEnvelopeAtributtes + '>';
  if NaoEstaVazio(FPHeaderElement) then
  begin
    Texto := Texto + '<' + FPSoapVersion + ':Header>';
    Texto := Texto + '<' + FPHeaderElement + ' xmlns="' + Servico + '">';
    Texto := Texto + GerarCabecalhoSoap;
    Texto := Texto + '</' + FPHeaderElement + '>';
    Texto := Texto + '</' + FPSoapVersion + ':Header>';
  end;
  Texto := Texto + '<' + FPSoapVersion + ':Body>';
  Texto := Texto + '<' + FPBodyElement + ' xmlns="' + Servico + '">';
  Texto := Texto + DadosMsg;
  Texto := Texto + '</' + FPBodyElement + '>';
  Texto := Texto + '</' + FPSoapVersion + ':Body>';
  Texto := Texto + '</' + FPSoapVersion + ':Envelope>';

  FPEnvelopeSoap := Texto;
end;

 

  • Consultores
Postado

Bom dia José,

Você esta com todos os fontes de todas as pastas atualizados?

Recompilou a sua aplicação com a opção Build?

Tem algum fonte cujo ícone possui uma bolinha vermelha ou triangulo amarelo?

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 dia, Italo!

Você esta com todos os fontes de todas as pastas atualizados?

R: Sim, foi deletado e baixado tudo novamente!. 

Recompilou a sua aplicação com a opção Build?

R: Sim, dei um Clear e na sequencia um Make e Build.

Tem algum fonte cujo ícone possui uma bolinha vermelha ou triangulo amarelo?

R: Estão todos verdes!

Obrigado pela atenção!

 

 

Postado

Acredito que o problema deriva da seguinte função localizada em "ACBrUtil", de acordo com a Observação ela converte de acordo com o compilador segue o font, no trunk1 não era necessário a conversão, pois era preenchido a string:

'<?xml version="1.0" encoding="UTF-8"?>'

Ao seguir as modificação do usuário @Jemison Vidal, obtive sucesso, porem conforme dito pelo Daniel o problema ja foi encerrado, devo entender que se refere realmente ao meu compilador?  

{-----------------------------------------------------------------------------
  Converte a AString nativa do Compilador, para UTF8, de acordo o suporte a
  UNICODE/UTF8 do Compilador
 -----------------------------------------------------------------------------}
function ACBrStrToUTF8( AString : String ) : AnsiString;
{$IFNDEF FPC}
{$IFDEF UNICODE}
var
  RBS: RawByteString;
{$ENDIF}
{$ENDIF}
begin
  {$IFNDEF FPC}
   {$IFDEF UNICODE}
    RBS := UTF8Encode(AString);
    SetCodePage(RBS, 0, False);
    Result := AnsiString(RBS);
   {$ELSE}
    Result := UTF8Encode(AString);
   {$ENDIF}
  {$ELSE}
   Result := AString;
  {$ENDIF}
end;
  • Fundadores
Postado

Acabei de testar com o Demo do ACBr, em um XE7 e tudo funcionou a contento... 

Modifiquei o demo existente no SVN, já que a opção para rodar o "CONSULTAR NÃO ENCERRADOS", ainda não existia...

Favor atualizar os fontes e testar com o Demo atual... "Demo_ACBrMDFe"

Atentar para a seguinte modificação:

ACBrMDFe1.Configuracoes.Geral.RetirarAcentos = False

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • 1 mês depois ...
Postado

Boa Tarde, Apenas para Finalizar o Tópico.

Verificando as diferenças entre o Demo_ACBrMDFe, foi identificado que o mesmo está setando a propriedade SSLLib com libCapicom, e minha aplicação estava  pegando conforme as diretivas do ACBr no create do componente o modo  libCapicomDelphiSoap;

O modo libCapicomDelphiSoap, deve possuir algo que interfira nesta consulta, estou alterado para  libCapicom apenas para realizar está consulta e retornando para libCapicomDelphiSoap;

Solução: ACBrMDFe1.Configuracoes.Geral.SSLLib := libCapicom

 

Obrigado pela ajuda, Abraço !

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