Ir para conteúdo
  • Cadastre-se

dev botao

Problemas com a homologação do IPM e parâmetros do NFSeX


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

Recommended Posts

Postado

Bom dia, estava realizando alguns testes e notei que haviam alguns detalhes com relação ao componente ACBRNFSeX, o primeiro deles é com relação aos parâmetros, ACBrNFSeXParametros, o método "TemParametero" utilizava o método IndexOfName e mesmo contendo o parâmetro ele retornava o contrário, portanto alterei para IndexOf e funcionou corretamente.
O outro detalhe é com relação ao provedor IPM, no GravarXML a homologação só estava ativa para a versão 1.0 (não encontrei no código nada sobre essa condição), porém estudando os manuais não encontrei razão para esse condição e a removi, deixando apenas a validação se o ambiente é homologação.

Apesar de serem alterações triviais anexei os arquivos aqui de uma vez.

ACBrNFSeXParametros.pasIPM.GravarXml.pas

  • Curtir 1
  • Consultores
Postado

Bom dia @Ademar DC!
Primeiro de tudo, muito obrigado pela colaboração. Toda contribuição é sempre mais do que bem vinda!
 

Citar

O outro detalhe é com relação ao provedor IPM, no GravarXML a homologação só estava ativa para a versão 1.0 (não encontrei no código nada sobre essa condição), porém estudando os manuais não encontrei razão para esse condição e a removi,

Veja bem, não é que ele está ativo homologação para a versão 1.00, note que a condição é:

if (VersaoNFSe = ve100) and (Ambiente = taHomologacao) then
  NFSeNode.AppendChild(AddNode(tcStr, '#3', 'nfse_teste', 1, 1, 1, '1', ''));

Isso quer dizer que quando estiver em homologação e a versão for 1.00, vai ser inserido no XML uma tag nfse_teste. Isso é feito porque na versão 1.00 desse provedor, as URLs de produção e homologação são as mesmas e por isso é preciso adicionar essa tag para diferenciar se está fazendo o envio em produção ou em homologação.
Isso já não acontece em outras versões desse mesmo provedor que possuem URLs diferentes para os ambientes de homologação e de produção.
Então essa parte precisa ser assim mesmo.

 

Citar

 o primeiro deles é com relação aos parâmetros, ACBrNFSeXParametros, o método "TemParametero" utilizava o método IndexOfName e mesmo contendo o parâmetro ele retornava o contrário, portanto alterei para IndexOf e funcionou corretamente.

Por favor, pode citar um exemplo de Parâmetro que não esteja encontrando na TemParametro mesmo tendo no arquivo INI?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado
6 horas atrás, Diego Foliene disse:

Bom dia @Ademar DC!
Primeiro de tudo, muito obrigado pela colaboração. Toda contribuição é sempre mais do que bem vinda!
 

Veja bem, não é que ele está ativo homologação para a versão 1.00, note que a condição é:

if (VersaoNFSe = ve100) and (Ambiente = taHomologacao) then
  NFSeNode.AppendChild(AddNode(tcStr, '#3', 'nfse_teste', 1, 1, 1, '1', ''));

Isso quer dizer que quando estiver em homologação e a versão for 1.00, vai ser inserido no XML uma tag nfse_teste. Isso é feito porque na versão 1.00 desse provedor, as URLs de produção e homologação são as mesmas e por isso é preciso adicionar essa tag para diferenciar se está fazendo o envio em produção ou em homologação.
Isso já não acontece em outras versões desse mesmo provedor que possuem URLs diferentes para os ambientes de homologação e de produção.
Então essa parte precisa ser assim mesmo.

 

Por favor, pode citar um exemplo de Parâmetro que não esteja encontrando na TemParametro mesmo tendo no arquivo INI?

Compreendo, no arquivo realmente consta os dois links, contudo contatei a IPM pois já tivemos alguns problema com a anteriormente e fui respondido da seguinte forma: (segue em anexo o print do email), o exemplo sobre o parâmetro será citado em resposta ao comentário do Italo.

 

EmailIpm.thumb.png.f71bf25ed048ef3198bbab6e747e844f.png

Postado
43 minutos atrás, Italo Giurizzato Junior disse:

Boa tarde Ademar,

Não compreendi: "método IndexOfName e mesmo contendo o parâmetro ele retornava o contrário".

Explique melhor esse: retornava o contrário, citando um exemplo.

Boa tarde, o "contrário" realmente foi um erro meu, porém quis dizer que ele informava negativo para a presença do parâmetro quando nesse caso deveria informar positivo pois ele estava informado no arquivo.

Fiz essa pequena POC estática apenas para ilustrar o que quis dizer:

procedure TForm1.Button1Click(Sender: TObject);
var
  fs : TStringList;
  i : Integer;
begin
  //
  i := 99;
  fs := TStringList.Create();
  fs.Add('teste_de_insert');

  i := fs.IndexOfName(Trim('teste_de_insert'));
  if i >= 0 then
    showmessage('IndexOfName');

  i := fs.IndexOf(Trim('teste_de_insert'));

  if i >= 0 then
    showmessage('IndexOf');
end;

No primeiro caso (IndexOfName) ele retorna -1, esquivando da condição, já com o indexOf ele já encontra a palavra no TStringList e retorna a posição (no caso 0), então durante o debug no componente notei que o stringlist estava preenchido com a string "NaoGerarGrupoRps", porém na hora de verificar utilizava o IndexOfName, e assim o código seguia como se não tivesse informado o parâmetro.

Compilei algumas vezes (tanto a POC quanto o ACBR) e o resultado se manteve igual na execução.

  • Curtir 1
Postado (editado)
1 hora atrás, Italo Giurizzato Junior disse:

Boa tarde Ademar,

Faça uma copia da sua alteração e atualize os fontes mantendo-os conforme estão no SVN.

Reinstale o ACBr e faça novos testes.

Acredito ter encontrado o problema.

 

Boa tarde, realizei os testes novamente e continua igual, se eu informar: "Params=NaoGerarGrupoRps" com a função IndexOfName, apesar do fSl conter a palavra ele não consegue identificar.

Porém, se eu informar "Params=NaoGerarGrupoRps:", com esses dois pontos no final, ele reconheceu o parâmetro, vi o commit com relação a outras cidades e resolvi experimentar, ai ele reconheceu a presença do parâmetro, porém acredito que ele esperava uma chave=valor, no debug aparece "NaoGerarGrupoRps=" apenas, mas funciona.

Editado por Ademar DC
  • Consultores
  • Solution
Postado

Ademar,

Se um Params possui um valor este é informado após os dois pontos, veja o que esta escrito no inicio do arquivo INI.

; Campo Params tem a seguinte sintaxe:

;   Params=Chave1:Valor1[|Chave2:Valor2|Chave3:Valor31,Valor32...]

; Podemos ter 1 ou mais Chaves sepadas por "|"
; Toda Chave deve conter o caracter ":" no final
; Se a Chave for Booleana não precisa informar o seu valor, pois a presença desse tipo de Chave
; em Params já indica que o seu valor é True
; Se a Chave for string ou numerica devemos informar o seu valor
; A Chave poderá ter valores pré definidos (enumerados), caso venha ser informado um valor 
; diferente o mesmo será ignorado.
; A Chave poderá ter 1 ou mais valores que devem estar separados por virgula

 

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
13 horas atrás, Italo Giurizzato Junior disse:

Ademar,

Se um Params possui um valor este é informado após os dois pontos, veja o que esta escrito no inicio do arquivo INI.

; Campo Params tem a seguinte sintaxe:

;   Params=Chave1:Valor1[|Chave2:Valor2|Chave3:Valor31,Valor32...]

; Podemos ter 1 ou mais Chaves sepadas por "|"
; Toda Chave deve conter o caracter ":" no final
; Se a Chave for Booleana não precisa informar o seu valor, pois a presença desse tipo de Chave
; em Params já indica que o seu valor é True
; Se a Chave for string ou numerica devemos informar o seu valor
; A Chave poderá ter valores pré definidos (enumerados), caso venha ser informado um valor 
; diferente o mesmo será ignorado.
; A Chave poderá ter 1 ou mais valores que devem estar separados por virgula

 

Entendi, obrigado.

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