Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

Bom dia Italo.

Não altero o xml apos assinar.

uso na seguinte sequencia:

ACBrNFe1.NotasFiscais.Assinar;

ACBrNFe1.NotasFiscais.Validar;

ACBrNFe1.NotasFiscais.Enviar;

Outro detalhe, tenho esta versão em outro cliente que usa o certificado A3 e funciona perfeitamente.

att.

Editado por Emerson Teixeira
Postado (editado)

Olá Italo.

Usando a função verificarassinatura recebi a seguinte mensagem: 'Falha na validação da assinatura da nota: 28046'#$D#$A'Não foi possível carregar ou ler a assinatura.'#$D#$A

Acredito que o componente não esta carregando o certificado A1 usando o capicom, lembrando que se usar o A3 funciona.

Att

Editado por Emerson Teixeira
Postado

Boa tarde, aproveitando o topico.

Atualizei o meu acbr para a versão trunk2 e quando vou gerar a nota ele aparece o mesmo erro, no meu caso é A3, voltei a versão que tinha no cliente para uma antes de atualizar o acbr e gerou normalmente.

 

Att

 

João Victor

Postado

Daniel, debugando vi que ele para no processo abaixo:

 

function TWebServices.Envia(ALote: String; const ASincrono: Boolean): Boolean;
begin
  FEnviar.FLote := ALote;
  FEnviar.FSincrono := ASincrono;

  if not Enviar.Executar then
    Enviar.GerarException( Enviar.Msg );

  if not ASincrono then
  begin
    FRetorno.Recibo := FEnviar.Recibo;
    if not FRetorno.Executar then  >>>>>>>>  Ele para nessa linha
      FRetorno.GerarException( FRetorno.Msg );
  end;

  Result := True;
end;

  • Fundadores
Postado

Lógico.. essa linha que faz todo o Processo de Envio...

Vamos por partes...

  • Qual é exatamente o erro ?
  • O que é esperado funcionar e o que não funciona ?
  • Como reproduzir o erro usando o Demo do ACBR ?

Sem essas informações fica difícil efetuarmos qualquer analise...

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.

  • Fundadores
Postado

Não fui capaz de reproduzir o problema... Usando os fontes do Trunk2...  e o WebService de SP, enviando uma NFe

Modifiquei o Demo do ACBr, usando o botão "Criar e Enviar",

Observe no final do bloco abaixo, que usei os mesmos comandos (Assinar e Validar)

Em tempo... "ACBrNFe1.Enviar" já Assina e Valida todas as notas (não precisa chamá-los antes)

procedure TForm1.btnCriarEnviarClick(Sender: TObject);
var
 vAux, vNumLote : String;
begin
  if not(InputQuery('WebServices Enviar', 'Numero da Nota', vAux)) then
    exit;

  if not(InputQuery('WebServices Enviar', 'Numero do Lote', vNumLote)) then
    exit;

  vNumLote := OnlyNumber(vNumLote);

  if Trim(vNumLote) = '' then
   begin
     MessageDlg('Número do Lote inválido.',mtError,[mbok],0);
     exit;
   end;

  ACBrNFe1.NotasFiscais.Clear;

  ACBrNFe1.Configuracoes.Geral.ModeloDF := moNFe;
  ACBrNFe1.Configuracoes.Geral.VersaoDF :=  TpcnVersaoDF(cbVersaoDF.ItemIndex);
  GerarNFe(vAux);

  //ACBrNFe1.NotasFiscais.GerarNFe;

  ACBrNFe1.NotasFiscais.Assinar;
  ACBrNFe1.NotasFiscais.Validar;
  ACBrNFe1.Enviar(vNumLote,True);
.....

 

 

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.

Postado

Daniel, infelizmente não consegui resolver o problema, fiz a alteração no demo e mesmo assim o erro continua, vi em alguns foruns que poderia ser algum caracter invalido, mas não achei nada.

 

 

 

Postado (editado)

Eu já tive esse problema em cliente e realmente era a questão de caracter invalido nas informações complementares. Dependendo da operação eu envio o local de entrega nas informações complementares e caso o cliente envie uma "/" por exemplo em qualquer campo de endereço, esse erro acontece. 

Se não me engano, acento também da problema rs.

 

Editado por Rodrigo Couto
Postado

Verifique também se você não está enviando quebras de linhas nas informações complementares, se sim, remova-as e troque por ";" que é o separador de linha do componente, isso antes de assinar, validar, etc.

Olá Regys.

Obrigado pela dica, era isso mesmo, o problema ocorria quando o cliente dava enter no memo de infclp para pular a linha.

agora estou usando o seguinte codigo e esta funcionando corretamente.

InfAdic.InfCpl := UTF8Encode(ReplaceStr(INFORMACAOCOMPLEMENTAR, #13#10, ';'));

uma sugestão: não teria como o componente tratar essa informação?

Abraços

 

  • Fundadores
Postado

Acho que o próprio componente ACBrNFe pode tratar a mudança de LineBreak para ';'   vou  tentar implementar...

Também notei que você usa "UTF8Encode"... em teoria isso não deve ser feito nos fontes do Trunk2...

No Trunk2, a ideia é permitir que o programador use o modelo de String nativa de sua IDE (Ansi, UTF8, UTF16)... e o componente fará a conversão para UTF8, momentos antes da Assinatura do XML...

Quando receber a resposta do SEFAZ, o componente converte o XML recebido de UTF8, para a String nativa da IDE, antes de popular as propriedades de TNFe...

Ou seja, no Trunk2, a ideia é que o programador não precise se preocupar com "encoding"

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.

Postado

Olá Daniel.

Obrigado pela resposta.

Tem razão, usei o UTF8Encode somente para testes, mas já o removi.

Se puder fazer o proprio componente tratar o linebreak vai ser otimo e vai evitar futuros post no forum.

Att

Abraços

  • Fundadores
Postado

Oi REgys,

Apenas uma sugestão... CR (#13) não é sinônimo de quebra de linha (Carriage Return)

LF (#10) sim... é a quebra de Linha (Line Feed)

No Linux a quebra de linha é apenas LF ou #10

Minha proposta para essa function seria algo mais genérico e que pudesse estar na ACBrUtil

function AjustarQuebrasLinhas(const ATexto: String; NovaQuebraDeLinha: String = ';'): String;
begin
  Result := Trim(ATexto);
  
  if Result <> '' then
  begin
    if sLineBreak <> LF then
      Result := StringReplace(Result, sLineBreak, LF, [rfReplaceAll]);
	  
    Result := StringReplace(Result, LF, NovaQuebraDeLinha, [rfReplaceAll]);
  end
end;

 

  • Curtir 2
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.

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