Olá pessoal, tudo bem?
Na especificação do Padrão Nacional da NFSe, conforme definido pela Prefeitura, os tributos federais, estaduais e municipais podem ser apresentados tanto em valores (R$) quanto em percentual (%). No entanto, na implementação atual da unit TfrlXDANFSeRLPadraoNacional.pas no ACBr, esses valores estão sendo tratados apenas em valores absolutos (R$). Seria interessante ajustar a implementação para também permitir o tratamento e a exibição dos valores em percentual (%), de acordo com o que é exigido na especificação?
procedure TfrlXDANFSeRLPadraoNacional.rlbBanda12_TotaisAproximadosBeforePrint(
Sender: TObject; var PrintIt: Boolean);
begin
inherited;
if fpNFSe.Servico.Valores.totTrib.vTotTribFed > 0 then
rllTotaisAproxTribFed.Caption := 'R$ ' + FormatFloatBr(fpNFSe.Servico.Valores.totTrib.vTotTribFed)
else
rllTotaisAproxTribFed.Caption := '-';
if fpNFSe.Servico.Valores.totTrib.vTotTribEst > 0 then
rllTotaisAproxTribEst.Caption := 'R$ ' + FormatFloatBr(fpNFSe.Servico.Valores.totTrib.vTotTribEst)
else
rllTotaisAproxTribEst.Caption := '-';
if fpNFSe.Servico.Valores.totTrib.vTotTribMun > 0 then
rllTotaisAproxTribMun.Caption := 'R$ ' + FormatFloatBr(fpNFSe.Servico.Valores.totTrib.vTotTribMun)
else
rllTotaisAproxTribMun.Caption := '-';
end;
Outra observação em relação à mesma rotina diz respeito às informações complementares. Grande parte do procedimento está comentada, e não há nenhum outro local que preencha essas informações, o que pode impactar no preenchimento correto, novamente conforme o que é exigido na especificação.
procedure TfrlXDANFSeRLPadraoNacional.rlbBanda13_InformacoesComplementaresBeforePrint(
Sender: TObject; var PrintIt: Boolean);
begin
inherited;
rlmDadosAdicionais.Lines.BeginUpdate;
rlmDadosAdicionais.Lines.Clear;
if fpNFSe.Servico.CodigoNBS <> '' then
rlmDadosAdicionais.Lines.Append(ACBrStr('NBS: ') + fpNFSe.Servico.CodigoNBS);
{
if fpNFSe.Servico.MunicipioIncidencia <> 0 then
rlmDadosAdicionais.Lines.Add('Cod/Municipio da incidencia do ISSQN: ' +
IntToStr(fpNFSe.Servico.MunicipioIncidencia) + ' / ' +
fpNFSe.Servico.xMunicipioIncidencia);
if fpDANFSe.OutrasInformacaoesImp <> '' then
rlmDadosAdicionais.Lines.Add(StringReplace(fpDANFSe.OutrasInformacaoesImp,
FQuebradeLinha, #13#10, [rfReplaceAll]))
else
if fpNFSe.OutrasInformacoes <> '' then
rlmDadosAdicionais.Lines.Add(StringReplace(fpNFSe.OutrasInformacoes,
FQuebradeLinha, #13#10, [rfReplaceAll]));
if fpNFSe.InformacoesComplementares <> '' then
rlmDadosAdicionais.Lines.Add(StringReplace(fpNFSe.InformacoesComplementares,
FQuebradeLinha, #13#10, [rfReplaceAll]));
}
rlmDadosAdicionais.Lines.EndUpdate;
rllMsgTeste.Visible := (fpDANFSe.Producao = snNao);
rllMsgTeste.Enabled := (fpDANFSe.Producao = snNao);
if fpDANFSe.Cancelada or (fpNFSe.NfseCancelamento.DataHora <> 0) or
(fpNFSe.SituacaoNfse = snCancelado) or (fpNFSe.StatusRps = srCancelado) then
begin
rllMsgTeste.Caption := 'NFS-e CANCELADA';
rllMsgTeste.Visible := True;
rllMsgTeste.Enabled := True;
end;
rllMsgTeste.Repaint;
// Exibe canhoto
// rlbCanhoto.Visible := fpDANFSe.ImprimeCanhoto;
end;
Obs.: Em anexo, está um print da NFSe impressa pelo provedor.