Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Saudações!

Estou obtendo alguns erros estranhos no meu emissor de nf-e. Os erros ocorrem aleatoriamente. Algumas vezes, o usuário autoriza várias notas normal, outras ocorrem erros estranhos coo por exemplo: "Falha no schema".

Na minha aplicação sempre antes de cada envio executo um procedimento que reseta as configurações do componente:

procedure TFmNotaFisc.ConfiguraACBR();
var
    arqlogo : string;
begin
    // Tipo de Danfe 1-Fortes / 2-Fast
    if tipo_danfe='1' then
       begin
       // Fortes
       ACBrNFe1.DANFE := ACbrNfeDanfeRL1;
       end
    else
       begin
       // Fast
       ACBrNFe1.DANFE := ACbrNfeDanfeFR1;
       ACBrNFeDANFEFR1.FastFile := ExtractFileDir(application.ExeName)+'\Report\DANFERetratoNovo.fr3';
       end;

    // Carrega Logomarca
    arqlogo := DM.CDSConfigLOGO_PATH.AsString;
    if Trim(arqlogo)<>'' then
       if FileExists(arqlogo) then
          ACBrNFe1.DANFE.Logo := arqlogo;

    // Forma de Emissão
    //   TpcnTipoEmissao = (teNormal, teContingencia, teSCAN, teDPEC, teFSDA, teSVCAN, teSVCRS, teSVCSP, teOffLine);
    if rgFormaEmissao.ItemIndex=0 then
       ACBrNFe1.Configuracoes.Geral.FormaEmissao := teNormal
    else if rgFormaEmissao.ItemIndex=1 then
       ACBrNFe1.Configuracoes.Geral.FormaEmissao := teSVCAN
    else if rgFormaEmissao.ItemIndex=2 then
       ACBrNFe1.Configuracoes.Geral.FormaEmissao := teSVCRS;

    ACBrNFe1.Configuracoes.Geral.Salvar   := True;
    ACBrNFe1.Configuracoes.Geral.ModeloDF := moNFe;

    // Nfe 4.00
    ACBrNFe1.Configuracoes.Geral.VersaoDF      := ve400;
    ACBrNFe1.Configuracoes.Geral.SSLLib        := libWinCrypt;
    ACBrNFe1.Configuracoes.Geral.SSLCryptLib   := cryWinCrypt;
    ACBrNFe1.Configuracoes.Geral.SSLHttpLib    := httpWinhttp;
    ACBrNFe1.Configuracoes.Geral.SSLXmlSignLib := xsLibXML2;
    ACBrNFe1.Configuracoes.WebServices.SSLType := LT_TLSv1_2;

    // Controle do grupo de faturas
    if CamposFatObrigatorios='Sim' then
       ACBrNFe1.Configuracoes.Geral.CamposFatObrigatorios := True
    else
       ACBrNFe1.Configuracoes.Geral.CamposFatObrigatorios := False;

    ACBrNFe1.Configuracoes.Certificados.NumeroSerie := z_nserie;
    ACBrNFe1.Configuracoes.Certificados.Senha       := z_senha;

    ACBrNFe1.Configuracoes.WebServices.UF           := DM.CDSConfig.FieldByName('UF').AsString;

    if DM.CDSConfig.FieldByName('TIPO_AMBIENTE').AsString='P' then
       ACBrNFe1.Configuracoes.WebServices.Ambiente  := taProducao
    else
       ACBrNFe1.Configuracoes.WebServices.Ambiente  := taHomologacao;

    ACBrNFe1.Configuracoes.WebServices.Visualizar   := False;

    ACBrNFe1.Configuracoes.Arquivos.PathNFe    := ExtractFilePath(Application.ExeName)+'XML\';
    ACBrNFe1.Configuracoes.Arquivos.PathInu    := ExtractFilePath(Application.ExeName)+'XML\';
    ACBrNFe1.Configuracoes.Arquivos.PathEvento := ExtractFilePath(Application.ExeName)+'XML\';

    ACBrNFe1.Configuracoes.Arquivos.PathSchemas := ExtractFilePath(Application.ExeName)+'Schemas';
end;

Gostaria de uma sugestão dos colegas se essa é a melhor forma de fazer isso.

O que desejo é minimizar esses erros para o cliente.

Agradeço desde já.

 

Aloisio Pires Neto.

 

Postado

Bom Dia! Aloisio, 

   Não sei se entendi bem sua dúvida,  
mas que para mais usuários possam te ajudar, seria interessante você anexar o erro do completo que aparece(Exception.Message),  e nos casos em que gere o XML mas apresente falha de schemas você anexe o XML para validação.
   Erros de Schemas podem ocorrer pelos  mesmos estarem desatualizados ou os dados os quais você esta informado na nota difere do formato esperado(nivel tag, tamanho do campo, valor...).

Ex:

Citar

Erro! Falha no schema!

Exception: Falha na validação dos dados da nota: 3344
Campo:Razão Social ou Nome - Tamanho maior que o máximo permitido [EMPRESA TESTE DE SCHEMA DE INDUSTRIA E COMERCIO DE PRODUTOS DO RAMO DE PRODUTOS ALIMENTICIOS LTDA]

Erro: Falha na validação dos dados da nota: 3344
Campo:Razão Social ou Nome - Tamanho maior que o máximo permitido [EMPRESA TESTE DE SCHEMA DE INDUSTRIA E COMERCIO DE PRODUTOS DO RAMO DE PRODUTOS ALIMENTICIOS LTDA]

Erro Completo: Falha na validação dos dados da nota: 3344
Campo:Razão Social ou Nome - Tamanho maior que o máximo permitido [EMPRESA TESTE DE SCHEMA DE INDUSTRIA E COMERCIO DE PRODUTOS DO RAMO DE PRODUTOS ALIMENTICIOS LTDA]

1824 - Element '{http://www.portalfiscal.inf.br/nfe}xNome': 'EMPRESA TESTE DE SCHEMA DE INDUSTRIA E COMERCIO DE PRODUTOS DO RAMO DE PRODUTOS ALIMENTICIOS LTDA' is not a valid value of the local atomic type.


   Esse erro ocorre porque o campo xNome que identifica a Razão Social do destinatário comporta valores entre 2 e 60 caracteres(Manual de Orientação do Contribuinte 6.0), ou seja o valor informado violou o tamanho esperado.Este erro só irá ocorrer quando o a Razão Social de um cliente informado em uma nota fosse menor que 2 ou maior que 60, podendo passar como "aleatório" caso você informe outros clientes que respeitem essa validação. Para que ele não ocorra você pode criar uma validação no próprio banco ou no cadastro de clientes ou até antes de emitir a nota(dá um pouco de trabalho tratar todos os campos 100% rsrs).

Como dica:

 -Manter atualizado os Arquivos Schemas e o ACBr
 -No demo do ACBr tem exemplo de usar a maração ExibirErroSchema(Default true) e FormatoAlerta para melhorar a visualização de erros de Schema, além da possibilidade de validar um XML.

E você pode validar a estrutura do XML nos sites :

https://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx

http://validadornfe.tecnospeed.com.br/

Sobre carregar as configurações no componente não vi nenhum erro aparente que possa estar gerando erro de falha de schemas.

Att,

Lucas L.

  • Curtir 1
Postado
Em 25/09/2018 at 08:52, Lucas L. disse:

Bom Dia! Aloisio, 

   Não sei se entendi bem sua dúvida,  
mas que para mais usuários possam te ajudar, seria interessante você anexar o erro do completo que aparece(Exception.Message),  e nos casos em que gere o XML mas apresente falha de schemas você anexe o XML para validação.
   Erros de Schemas podem ocorrer pelos  mesmos estarem desatualizados ou os dados os quais você esta informado na nota difere do formato esperado(nivel tag, tamanho do campo, valor...).

Ex:


   Esse erro ocorre porque o campo xNome que identifica a Razão Social do destinatário comporta valores entre 2 e 60 caracteres(Manual de Orientação do Contribuinte 6.0), ou seja o valor informado violou o tamanho esperado.Este erro só irá ocorrer quando o a Razão Social de um cliente informado em uma nota fosse menor que 2 ou maior que 60, podendo passar como "aleatório" caso você informe outros clientes que respeitem essa validação. Para que ele não ocorra você pode criar uma validação no próprio banco ou no cadastro de clientes ou até antes de emitir a nota(dá um pouco de trabalho tratar todos os campos 100% rsrs).

Como dica:

 -Manter atualizado os Arquivos Schemas e o ACBr
 -No demo do ACBr tem exemplo de usar a maração ExibirErroSchema(Default true) e FormatoAlerta para melhorar a visualização de erros de Schema, além da possibilidade de validar um XML.

E você pode validar a estrutura do XML nos sites :

https://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx

http://validadornfe.tecnospeed.com.br/

Sobre carregar as configurações no componente não vi nenhum erro aparente que possa estar gerando erro de falha de schemas.

Att,

Lucas L.

Obrigado por responder Lucas.

 

Pelo que lembro aparece apenas a mensagem de falha no Schema, mas tenho que ver se isso é minha aplicação que está truncando o erro ... talvez.

Me responde uma coisa: teria como criar um log pra salvar tudo que ocorre com o componente?

Isso ajudaria a resolver certos erros.

Agradeço desde já pela atenção!

 

Aloisio Pires Neto

 

Postado

Boa Tarde! Aloisio,

    O ACBrNFe tem o evento OnGerarLog, nele você pode adicionar uma função para gravar o Log em arquivo texto, mas essa função só grava os Log's de envio para a SEFAZ se não me falha a memória.

Ex:

procedure TForm1.ACBrNFe1GerarLog(const ALogLine: string; var Tratado: Boolean);
begin
   TLog.doSaveLog(ALogLine);
end;


Não sei se é a melhor alternativa, mas para gravar os Logs de Erros de Schemas  você poderia:

- Chamar a função de validação(ACBrNFe1.NotasFiscais.Validar) antes de realizar o envio do XML e gravar o Log.
- Colocar na própria rotina de envio para gravar o Log caso ocorra algum Exception junto com os outros tratamentos do envio.

Ex:

try

   {...} 
   //Carrega Configurações, XML....

   
   ACBrNFe1.Enviar(vNumLote,True){Aqui dentro tbm é chamada a função de Validar};
   
except on E: Exception do
   begin
       TLog.doSaveLog(E.Message);
	   //Outros Tratamentos de Envio.....
   end;
end;

{...}

class procedure TLog.doSaveLog(EMessage: string);
var
  loLista: TStringlist;
  lsFile: string;
begin
    try
       lsFile := FileNameLogErro;
       loLista:= TStringList.Create;
       try
         if FileExists(lsFile) then
           loLista.LoadFromFile(lsFile);
         loLista.Add('----------------------------------------');
         loLista.Add('Sistema: '+Application.ExeName);
         loLista.Add('Hora:    '+TimeToStr(Time));
         loLista.Add('Erro:    '+EMessage);

         loLista.SaveToFile(lsFile);
       finally
         loLista.Free;
       end;
    except

    end;
end;

 

É bem provável que outros usuário possam te indicar outras formas melhores de fazer isso.Recomendo até pesquisar no fórum sobre tópicos específicos sobre Log. Desejo-lhe  Boa Sorte!

Att,

Lucas L.

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