Olá pessoal, boa tarde!
Estamos implementando o novo componente ACBrNFSeX para um cliente na cidade de Indaiatuba/SP (provedor DeISS). Porém, estamos enfrentando um problema quando ao controle da tag <ValorIss>:
Se a NFSe é emitida a um cliente que retém ISS, acontece o seguinte erro na transmissão:
---------
Código : X999
Mensagem: Erro de Conexão: soap:Server - javax.xml.ws.WebServiceException: Verifique sua mensagem SOAP e a passagem desses parâmetros necessários. Não conseguiu obter a mensagem XML do cabeçalho ou dos dados.
Verifique a passagem desses parâmetros pela mensagem SOAP.
---------
Segundo suporte do WebService, foi nos dito que, nesses casos, é necessário passar o valor do ISS através da tag <ValorIss>. Por padrão, essa tag não é gerada para esse provedor pois, no arquivo "ACBrNFSeXServicos.ini", tem o seguinte parâmetro ativo:
Params=NaoGerarTag:ValorIss
Ao removermos manualmente esse parâmetro, a NFSe para cliente que retém ISS passa a ser transmitida com sucesso. Porém, se emitirmos daí para um cliente que não retém ISS, caímos no seguinte erro:
--------
Código : E220
Mensagem: Valor do ISSQN informado indevidamente.
Correção: O valor do ISSQN será calculado pela Prefeitura e não deve ser informado pelo contribuinte.
---------
Em resumo, temos:
- Se o cliente Retém ISS, tem que ter valor de ISS (parâmetro "Params=NaoGerarTag:ValorIss" desativado). Senão, erro X999
- Se o cliente não Retém ISS, não pode haver valor de ISS (parâmetro "Params=NaoGerarTag:ValorIss" ativado). Senão, erro E220 (e também o E221 caso seja informada alguma alíquota)
@Juliomar Marchetti, através do Discord, nos orientou a procurarmos por alguma opção que controlasse a impressão ou não da referida TAG, mas nós não encontramos. Também nos orientou a não passar a TAG e assim já tínhamos feito, mas também sem sucesso. A TAG aparece com o valor padrão 0. Acredito que o preenchimento, inclusive, se dê nesse trecho (Unit "ACBrNFSeXLerXml_ABRASFv2", procedure "TNFSeR_ABRASFv2.LerServicos", linha 938):
if Valores.IssRetido = stRetencao then
begin
Valores.ValorIssRetido := Valores.ValorIss;
Valores.ValorIss := 0;
end
else
Valores.ValorIssRetido := 0;
Notem que sempre que for caso de retenção, o valor 0 é atribuído ao "ValorIss", o que impede a emissão para cliente que não retém ISS neste provedor (mesmo removendo o parâmetro do .ini). Então, até o presente momento, estamos sem saber como tratar a referida situação.
Muito obrigado, em antecipado, pela atenção!