Olá pessoal,
Com a NT 2018.005 foi introduzida uma nova rejeição para NFe: 938 - Rejeição: Não informada vBCSTRet, pST, vICMSSubstituto e vICMSSTRet.
Os detalhes dessa rejeição foram alterados nas várias versões da NT, mas infelizmente isso já está causando algum problema (como podem ver nesse tópico aqui).
Como é uma rejeição facultativa e cada UF tem uma legislação, tivemos que adicionar uma nova propriedade no componente ACBrNFe para lidar com a situação. A nova propriedade se chama ForcarGerarTagRejeicao938.
Após atualizar os componentes, não esqueça de reinstalar.
Vamos a uma explicação mais longa...
O problema
Como a descrição da rejeição explica, algumas UFs podem exigir a informação de algumas tags, como vICMSSubsituto, isso mesmo quando o valor da tag for zero. Por padrão o ACBrNFe não gera tags facultativas que são informadas com valor zero. E esse é o caso da tag vICMSSubstituto.
Mas como essa é uma tag facultativa, não devia ser obrigatório para algumas UFs informá-la. E por isso, não podemos obrigar o ACBrNFe informar sempre. Assim a ideia é termos uma configuração que você possa alterar. Poderemos com essa propriedade forçar gerar a tag de acordo com a necessidade de seu cliente ou da UF dele.
A solução
A propriedade (ou configuração) criada ForcarGerarTagRejeicao938 foi adicionada no ACBrNFe de modo que pode ser acessada como no código abaixo:
ACBrNFe1.Configuracoes.Geral.ForcarGerarTagRejeicao938:= fgtNunca;
Ou talvez no Object Inspector como abaixo:
Importante: Embora a propriedade esteja disponível para ser alterada no Object Inspector, você provavelmente vai querer parametrizar isso no seu aplicativo. Afinal, talvez você precise alterar essa propriedade de um cliente para outro, ou de uma data para outra.
As opções são:
fgtNunca -> Se o valor for zero, não vai forçar a geração da tag nunca;
fgtSomenteProducao -> Força a tag ser gerada no ambiente de produção mesmo que o valor seja zero;
fgtSomenteHomologacao -> Força a tag ser gerada no ambiente de homologação mesmo que o valor seja zero;
fgtSempre -> mesmo que o valor seja zero, a tag será gerada sempre;
A configuração padrão é fgtNunca conforme o comportamento do componente antes dessas alterações.
Qual opção eu devo escolher?
Como explicado, essa configuração foi necessária por causa de problemas em certas UFs. Então para escolher a melhor opção você precisa saber o que está sendo exigido no Webservice que você está acessando.
Por exemplo, se você não está recebendo a rejeição, não há necessidade de alterar a configuração.
Mas se está recebendo somente em homologação, quer dizer, a tag está sendo exigida somente em homologação, use a opção fgtSomenteHomologacao.
E assim por diante.