Ir para conteúdo
  • Cadastre-se

dev botao

Acbrspedfiscal - Format '%a' Invalid


Ver Solução Respondido por Isaque Pinheiro,
  • Este tópico foi criado há 3602 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado (editado)

Caros, estou tendo um pequeno contra tempo ao gerar um arquivo spedfiscal

mensagem: Format '%a' invalid or incompatible with argument.

 

Abrir as querys olhei os registro pensando que podia ser algum tipo de caractere inválido, mais não obtive sucesso.

 

No aguardo.

Editado por jadielson
Postado

Qual o registros exatamente o erro ocorre? Debug e veja também qual a informação ele está validando e dando como inválido para da essa mensagem, a partir dai posso te ajudar, mas sem essas informações não dá.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

  • Solution
Postado

Debug e veja em qual linha exatamente.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

  • Consultores
Postado

Você consegue reproduzir o problema com o programa de exemplo do ACBrSPEDFiscal?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

Comigo aconteceu algo parecido e consegui simular o erro passando uma alíquota com decimais.

 

Nessa função do ACBrUtil ela não consegue entender um numero com decimais.

 

function IsNumber(const Value: Variant): Boolean;
var
valResult: Extended;
valCode: Integer;
begin
  Val(Value, valResult, valCode);
  if valCode = 0 then
     Result := True
  else
     Result := False;
end ;
 
Fiz uma alteração nela
 
Mudei para:
 
function IsNumber(const Value: Variant): Boolean;
 var
  dc : char;
  V : Extended;
begin
 dc := DecimalSeparator;
 try
  DecimalSeparator := ',';
  try
    Result := TryStrToFloat( Value, V);
  except
    DecimalSeparator := '.';
    Result := TryStrToFloat( Value, V);
  end;
  finally
   DecimalSeparator := dc;
  end;
end;
 

Com isso ela entende um numero com decimais e não gera o erro.

 

Espero que ajude a entender o que acontece.

  • Membros Pro
Postado

O meu problema foi justamente a quantidade de casas decimais, que eu estava passando na alíquota de icms 17,000% ao invés de 17,00% ( CAMPO: VLFILL). 

 

Então quando fui debugar o sistema de a cordo com a orientação do Isaque, acabei descobrindo o erro e corrigindo direto no banco de dados.

 

Mais seria bem mais simples se o aviso fosse mais claro.

 

Bem, ufa, consegui resolver.

 

Obrigado a Todos. :)

  • 1 mês depois ...
Postado

Olá pessoal,

 

Só pra constar, no meu caso quando encontrei esse erro, eram campo do layout que tornaram obrigatórios e que eu não inicializava valores nos mesmo. Apenas abasteci os campos e tudo funcionou.

 

Como a validação desses campos são feitas sob a parametrização de um valor do tipo Variant e quando o mesmo não é abastecido ele fica como "Unssigned", a implementação que usa o Format para exibir a mensagem neste método gera uma exceção não haver com o campo não preenchido.

 

Sugiro ao pessoal do ACBr que ajuste esse método. Pois, essa exceção deveria dizer qual campo deveria estar abastecido, porém devido a essa má implementação usando o Format acaba gerando uma exceção não muito explicativa "Format '%a' invalid or incompatible with argument."

 

Espero ter ajudado com alguma coisa.

 

Abraço!

Postado

Olá, fique a vontade a colaborar com a implementação para informar qual campo deve ser preenchido, em seguida anexe o código aqui que irei avaliar e subir para o repositório.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Postado

Olá Isaque,

 

De ante-mão gostaria de salientar que o meu processo de desenvolvimento difere do processo seguido pelo ACBr, cito isto, pois nesta situação eu teria testes de unidade para esse método que fiz a alteração e assim eu saberia 100% a que ele se propõe. Portanto, o ajuste que fiz pode ferir a intenção do método. Sendo assim, peço que pondere sua análise e estou disposto pra discutir a situação para chegarmos em uma boa solução. Também não sei se o ajuste deveria ser feito no método que alterei.

 

Implementei duas propostas para ajuste deste erro e peço que analise. Repare que preferi não gerar qualquer Exception pois a mensagem que poderia ser exibida ficaria muito fora de contexto, assim como a mensagem já citada anteriormente, e assim não direcionar nem um pouco quem quer que seja a encontrar o problema. Visto que, para achar esse erro empenhei um tempo em debug. Minhas propostas estão baseadas em retornar um valor que faria com que o validador EFD e/ou o analista contábil fizesse a crítica.

 

Espero ajudar!

Abraço.

propostas.zip

Postado

Vamos levar em consideração sua implementação tentando leva-la para o padrão ACBr, se vermos que é possível, bastando para isso pequenos ajustes podemos acatar o recurso.

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

  • 4 semanas depois ...
  • 2 semanas depois ...
  • Consultores
Postado

Essa parte do código

 

Olá pessoal,

 

Só pra constar, no meu caso quando encontrei esse erro, eram campo do layout que tornaram obrigatórios e que eu não inicializava valores nos mesmo. Apenas abasteci os campos e tudo funcionou.

 

Como a validação desses campos são feitas sob a parametrização de um valor do tipo Variant e quando o mesmo não é abastecido ele fica como "Unssigned", a implementação que usa o Format para exibir a mensagem neste método gera uma exceção não haver com o campo não preenchido.

Essa parte foi alterado devido a como havia sido implementada. Note o tópico:

A comparação de tipos Variant deve ser feita com cautela. Uma variant com valor inteiro atribuído zero ao ser comparado com uma Variant do tipo Unassigned retorna True. Isso pode ser visto no pequeno programa console abaixo.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Variants;

var
 v1, v2: Variant;
begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Writeln('v1 eh nula?');
    if VarIsNull(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Clear?');
    if VarIsClear(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Empty?');
    if VarIsEmpty(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 = unassigned?');
    if v1 = unassigned then Writeln('sim')
    else Writeln('no');

    Writeln('----');
    Writeln('atribuindo valor zero a v1...');
    v1 := 0;

    Writeln('v1 eh nula?');
    if VarIsNull(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Clear?');
    if VarIsClear(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Empty?');
    if VarIsEmpty(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 = unassigned?');
    if v1 = unassigned then Writeln('sim')
    else Writeln('no');

    Writeln('----');
    Writeln('atribuindo valor Unassigned a v1...');
    v1 := Unassigned;

    Writeln('v1 eh nula?');
    if VarIsNull(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Clear?');
    if VarIsClear(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Empty?');
    if VarIsEmpty(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 = unassigned?');
    if v1 = unassigned then Writeln('sim')
    else Writeln('no');

    Writeln('----');
    Writeln('atribuindo valor Null a v1...');
    v1 := Null;

    Writeln('v1 eh nula?');
    if VarIsNull(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Clear?');
    if VarIsClear(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 eh Empty?');
    if VarIsEmpty(v1) then Writeln('sim')
    else Writeln('no');

    Writeln('v1 = unassigned?');
    if v1 = unassigned then Writeln('sim')
    else Writeln('no');

    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Os métodos VarIsClear e VarIsEmpty existem para evitar esse tipo de problema. Assim estou subindo uma correção para resolver esse problema. Também estou adicionando testes unitários para mais essa situação.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 3602 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.