Boa tarde!
Como vi vários posts referente este assunto abri este como dica de melhoramento podendo ser aplicado em outros bancos.
Enfrentei diversas vezes problema com a geração da remessa para a CEF cnab240 com a instrução de protesto, a maneira que o o sistema está calculando a informação se é dias úteis ou corridos e os dias de protesto.
O problema acontece quando o vencimento da duplicata é em sexta e tem 3 dias corridos, exemplo vencimento em 05/01/2018 onde a data de protesto é na quarta 10/01/18 e na remessa gera o campo 221 = 1 e o campo 222/224 = 05 como se o protesto seria na sexta 12/01/18.
No meu código para a geração do boleto informo as propriedades "DiasDeProtesto" e "TipoDiasProtesto".
Fiz o ajuste utilizando as varáveis onde fica bem explicito a informação alterando as linhas 684 e 685:
IfThen((DataProtesto <> 0) and (DiasDeProtesto <= 5), '1', '3') + //221 - Código de protesto: Protestar em XX dias corridos
IfThen((DataProtesto <> 0) and (DiasDeProtesto > 0),
PadLeft(IntToStr(DiasDeProtesto), 2, '0'), '00') + //222 a 223 - Prazo para protesto (em dias corridos)
onde antes constava:
IfThen((DataProtesto <> 0) and (DataProtesto > Vencimento), '1', '3') + //221 - Código de protesto: Protestar em XX dias corridos
IfThen((DataProtesto <> 0) and (DataProtesto > Vencimento),
PadLeft(IntToStr(DaysBetween(DataProtesto, Vencimento)), 2, '0'), '00') + //222 a 223 - Prazo para protesto (em dias corridos)
Em anexo a unit alterada.
Marcos
Softbox Informática Ltda
ACBrBancoCaixa.pas