Olá Pessoal,
Na versão 2 do layout da ABRASF temos o método SubstituirNFSe que tem por finalidade cancelar uma determinada nota e emitir outra que vira a ser a nota substituirá a que foi cancelada.
Por outro lado na versão 1 do layout da ABRASF não temos esse método, mas existe uma outra maneira de se fazer isso.
No programa exemplo do componente ACBrNFSeX na procedure Alimentar_Componente_layout_ABRASF temos o seguinte fragmento de código:
{=========================================================================
Numero, Série e Tipo do Rps que esta sendo substituido por este
=========================================================================}
{
RpsSubstituido.Numero := FormatFloat('#########0', i);
RpsSubstituido.Serie := 'UNICA';
// TnfseTipoRPS = ( trRPS, trNFConjugada, trCupom );
RpsSubstituido.Tipo := trRPS;
}
Esta previsto no layout do RPS da versão 1 do layout da ABRASF um grupo chamado RpsSubstituido e dentro dele temos 3 campos: Numero, Serie e Tipo.
Ao alimentar o componente com os dados de um novo RPS e alimentarmos esses 3 campos conforme exemplo acima com o numero/serie/tipo de um RPS que já foi convertido em NFS-e, teremos um RPS com um "pedido de substituição".
Ao enviar esse RPS e o mesmo for processado com sucesso, ou seja, se transformou em uma NFS-e o provedor providenciará o cancelamento da nota referente ao RPS informado no grupo RpsSubstituido.
É dessa forma que realizamos a substituição de uma NFS-e por outra quando o provedor segue a versão 1 do layout da ABRASF.
Para quem utiliza o ACBrMonitor no arquivo INI basta incluir a seção:
[RpsSubstituido]
Numero=<numero do rps a ser substituido>
Serie=<serie do rps a ser substituido>
Tipo=1
A dica acima também pode ser utilizada para quem utiliza o arquivo INI juntamente com o ACBrLibNFSe.