olá edvaniojancy,
Subi suas alterações para o SVN na Revisão 5913.
Pelo que vi está tudo certo.
Favor testar e reportar qualquer problema.
Obrigado.
Mas vou lhe explicar qual é o problema, e talvez você mesmo possa me ajudar nas próximas correções.
O que acontece é que o método LFill é sobrecarregado (overloaded) para vários tipos de parâmetros. O compilador então fica confuso quando encontra um parâmetro inteiro e acaba chamando o método para data.
Para corrigir basta que nós acabemos com a ambiguidade no método. No caso do LFill isso é facilmente corrigido passando o segundo parâmetro para o método.
Como fazer isso no caso dos registros do SEF2? Veja como exemplo o caso acima onde corrigi o registro E080.
Primeiro você precisa localizar o método que escreve o registro que é geralmente chamado WriteRegistroXXXX. No nosso caso o método é o WriteRegistroE080, que se encontra na unit ACBrSEF2_BlocoE_1.pas linhas a partir da 1052 na revisão atual. Veja a parte importante dele abaixo:
procedure TBloco_E.WriteRegistroE080(RegE001: TRegistroSEFE001);
var
intFor : Integer;
RegE080: TRegistroSEFE080;
begin
for intFor := 0 to RegE001.RegistroE080.Count - 1 do
begin
RegE080 := TRegistroSEFE080(RegE001.RegistroE080.Items[intFor]);
with RegE080 do
begin
Add( LFill('E080') +
LFill(IND_TOT) +
LFill(COD_MOD) +
LFill(NUM_MR) +
LFill(DT_DOC) +
LFill(VL_BRT,2) +
....
Segundo localize a definição deste registro no manual do SEF2 e veja o tamanho do campo analisado. No nosso caso, as definições deste registro se encontram no arquivo SEF II - LFPD 06 - SEF_LA-ICMS.xlsx conforme imagem abaixo e o tamanho do IND_TOT é 1 e o do NUM_MR não está definido.
Terceiro, de posse dessas informações basta alterar o método WriteRegistroXXXX adicionando à chamada do LFill o parâmetro que estava faltando. Veja abaixo:
procedure TBloco_E.WriteRegistroE080(RegE001: TRegistroSEFE001);
var
intFor : Integer;
RegE080: TRegistroSEFE080;
begin
for intFor := 0 to RegE001.RegistroE080.Count - 1 do
begin
RegE080 := TRegistroSEFE080(RegE001.RegistroE080.Items[intFor]);
with RegE080 do
begin
Add( LFill('E080') +
LFill(IND_TOT, 1) +
LFill(COD_MOD) +
LFill(NUM_MR, Length(inttostr(NUM_MR)) +
LFill(DT_DOC) +
LFill(VL_BRT,2) +
Note que no caso do NUM_MR eu acabei usando um artifício (Length(inttostr(NUM_MR)) para descobrir em run-time o tamanho do campo visto que o método LFill não aceitaria uma indefinição do tamanho.
Se você, ou qualquer outra pessoa, encontrar mais desses erros, pode corrigir conforme explicado e anexar o arquivo alterado aqui. Isso vai dar mais agilidade para o processo.