Boa tarde,
Existem inúmeras factoring's e "financeiras" espalhadas pelo Brasil.
Normalmente elas recebem informações via arquivo, que é na maioria das vezes a cópia de algum formato de boleto já existente(ex: banco bradesco) com pequenas modificações..
Para não perder tempo reescrevendo tudo, uso a técnica de "herança", por exemplo se a base do formato do arquivo for o bradesco eu escrevo um herdeiro do mesmo, com alterações que quero:
TRICABancoGrafeno = class(TACBrBancoBradesco)
private
public
Constructor create(AOwner: TACBrBanco);
procedure GerarRegistroHeader400(NumeroRemessa : Integer; ARemessa:TStringList); override;
procedure GerarRegistroTransacao400(ACBrTitulo : TACBrTitulo; aRemessa: TStringList); override;
end;
TRICABancoAnnex = class(TACBrBancoBradesco)
private
public
procedure GerarRegistroHeader400(NumeroRemessa : Integer; ARemessa:TStringList); override;
procedure GerarRegistroTransacao400(ACBrTitulo : TACBrTitulo; aRemessa: TStringList); override;
end;
Como "novo banco" não é 'nativo' do acbr, preciso alteralo em tempo de execução, usando a técnica de class hack:
TBoletoHack = class(TACBrBanco)
public
end;
........................... na implementação .................
if pSQL.FieldByName('N_BANCO').AsString = '274' then
begin
TBoletoHack(fGeradorBoleto.Banco).fBancoClass := nil;
TBoletoHack(fGeradorBoleto.Banco).fBancoClass := TRICABancoGrafeno.create(fGeradorBoleto.Banco);
end;
if pSQL.FieldByName('FORMATO_EXTRA').AsString = '001' then
begin
TBoletoHack(fGeradorBoleto.Banco).fBancoClass := nil;
TBoletoHack(fGeradorBoleto.Banco).fBancoClass := TRICABancoAnnex.create(fGeradorBoleto.Banco);
end;
porém para funcionar eu preciso ainda ter que ir no fonte do acbr para alterar a visibilidade do fbancoclass de private para "protected" toda vez que resintalo.
Seria de grande ajuda se esse campo ja viesse no "protected" ao invés de "private", creio que não prejudicaria ninguém.