Ir para conteúdo
  • Cadastre-se

dev botao

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


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

Recommended Posts

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
Link para o comentário
Compartilhar em outros sites

  • Consultores

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 !!

Link para o comentário
Compartilhar em outros sites

  • Consultores

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.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Consultores

Ademar,

Muito obrigado pela colaboração, já inclui na minha lista de tarefas. TK-3568

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

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.

 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

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 / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...