Arquivo de remessa CNAB 240

Delphi

03/07/2006

Tenho que implementar arquivo de remessa no padrão CNAB 240 num sistema, só que não tenho a mínima idéia de como fazer isso. Já tenho o layout do banco (CEF), só que nunca trabalhei com esse tipo de arquivo complicado e não sei como proceder. Já tentei achar exemplos de código em Delphi para ter uma idéia, mas sem sucesso. Tentei usar tb o tal Delphi-Boleto, mas não sei quais campos devo preencher (já que inclui boleto junto). O que tb confunde é o fato que os exemplos que acho são do tipo empresa emite arquivo para outra pessoa pagar, mas nesse caso o emissor do arquivo é que irá pagar (dinheiro depositado nas contas de várias pessoas), então não sei como preencher os campos adequadamente (quem é o sacado e cedente nesse caso). Quem puder me ajudar, fico grata. Preciso com urgência disso.


Gandalf.nho

Gandalf.nho

Curtidas 0

Respostas

Weber

Weber

03/07/2006

Sei muito bem do que você esta falando, os manuais da Caixa e do Banco do Brasil são no nojentos.

Infelizmente você não vai conseguir resolver seu problema utilizando os componentes atuais de emissao de boletos como o Delphi-Boleto, Free-Boleto e RLBoleto, você deverá desenvolver sua propria rotina.

O arquivo é um TXT normal, porém é todo formatado e deve conter informações específicas em cada posição dele.
O melhor a fazer é baixar o manual de cobrança e ler inteirinho.

Dependendo da ´influencia´ que seu cliente tem junto ao banco o gerente da conta pode te ajudar, não com o código mas sim lhe fornecendo informações importantes sobre o manual.

Boa Sorte!


GOSTEI 0
Adriano Santos

Adriano Santos

03/07/2006

Sei muito bem do que você esta falando, os manuais da Caixa e do Banco do Brasil são no nojentos. Infelizmente você não vai conseguir resolver seu problema utilizando os componentes atuais de emissao de boletos como o Delphi-Boleto, Free-Boleto e RLBoleto, você deverá desenvolver sua propria rotina. O arquivo é um TXT normal, porém é todo formatado e deve conter informações específicas em cada posição dele. O melhor a fazer é baixar o manual de cobrança e ler inteirinho. Dependendo da ´influencia´ que seu cliente tem junto ao banco o gerente da conta pode te ajudar, não com o código mas sim lhe fornecendo informações importantes sobre o manual. Boa Sorte!


É isso ai Weber, você está correto. Este tipo de CNAB é bem chatinho e tem que ser feito no braço mesmo. Bom, vai precisar usar o ´esquemão´ de gravação de arquivo texto. WriteLn, num tem jeito.

Precisa ser CNAB 240 mesmo? Pq mesmo o banco do Brasil já tem o padrão 400 que é mais fácil.


GOSTEI 0
Gandalf.nho

Gandalf.nho

03/07/2006

[quote:84ec4674d5=´Adriano Santos´]Precisa ser CNAB 240 mesmo? Pq mesmo o banco do Brasil já tem o padrão 400 que é mais fácil.[/quote:84ec4674d5]
Infelizmente sim, foi o padrão que a própria Caixa passou para nós.
Pelo jeito vou ter que me virar mesmo, obrigada pela ajuda.


GOSTEI 0
Adriano Santos

Adriano Santos

03/07/2006

[quote:0c99588f2a=´Adriano Santos´]Precisa ser CNAB 240 mesmo? Pq mesmo o banco do Brasil já tem o padrão 400 que é mais fácil.

Infelizmente sim, foi o padrão que a própria Caixa passou para nós.
Pelo jeito vou ter que me virar mesmo, obrigada pela ajuda.[/quote:0c99588f2a]

Estranho eles passarem este padrão, a muitos anos já os bancos estão optando pelo formato 400, pois o 240 trabalha com 1 header, 2 details e 1 trailler, deixando bastante trabalhosa a programação.


GOSTEI 0
Gandalf.nho

Gandalf.nho

03/07/2006

[quote:e7ca9edb51=´Adriano Santos´]Estranho eles passarem este padrão, a muitos anos já os bancos estão optando pelo formato 400, pois o 240 trabalha com 1 header, 2 details e 1 trailler, deixando bastante trabalhosa a programação.[/quote:e7ca9edb51]
Pelo que o meu colega que tratou com os caras da Caixa falou, eles estão bem defasados nesse quesito e vai ter que ser esse padrão mesmo...


GOSTEI 0
Thiago Vidal

Thiago Vidal

03/07/2006

cara, tenho aqui algumas rotinas que talvez te ajudem.

antigamente, eu usava TStringList e no final dava .SaveToFile para criar o arquivo, mas como o conteudo ficava na memoria, o sistema começou a ficar pesado, então eu tive que desenvolver estas rotinas para gravar direto em TFileStream, STWrite e STWriteLN, mando também, rotinas para formatação dos dados:

Pic9 -> Numerico, alinhado à direita, preenchido com zeros à esquerda
PicX -> Alfanumerico, alinhado à esquerda, preenchido com zeros à direita
PicD -> Data
PicC -> Moeda, com casas decimais informadas.

uses
  Math, StrUtils, DateUtils;

const
  Espacos = ´                                                                                                  ´;
  Zeros = ´0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000´;

procedure STWrite(Stream: TStream; s: string);
begin
  Stream.Write(s[1], Length(s));
end;

procedure STWriteLN(Stream: TStream; s: string);
begin
  s := s + 1310;
  Stream.Write(s[1], Length(s));
end;

function Pic9(Tam: Integer; Num: Integer): string;
begin
  Result := Copy(IntToStr(Num), 1, Tam);
  while (Length(Result) < Tam) do
    Result := Copy(Zeros, 1, Tam - Length(Result)) + Result;
end;

function PicX(Tam: Integer; S: string): string;
begin
  Result := Copy(S, 1, Tam);
  while (Length(Result) < Tam) do
    Result := Result + Copy(Espacos, 1, Tam - Length(Result));
end;

function PicD(Data: TDateTime; Formato: string): string;
begin
  Result := FormatDateTime(Formato, Data);
end;

function PicC(Tam: Integer; Valor: Currency; CasasDec: Integer): string;
begin
  Result := Pic9(Tam, Round(Valor * IntPower(10, CasasDec)));
end;

procedure GravaLinha;
var
  Arquivo: string;
  fs: TFileStream;
begin
  fs := TFileStream.Create(Arquivo, fmCreate);
  try
    STWriteLN(fs, ´CTE´ +
      Pic9(4, Query.FieldByName(´Numero´).AsInteger)+
      PicX(30, Query.FieldByName(´Nome´).AsString)+
      PicD(Query.FieldByName(´Data´).AsDateTime, ´yyyymmdd´)+
      PicC(13, Query.FieldByName(´Valor´).AsCurrency, 2)+
    );
  finally
    fs.Free;
  end;
end;


Eu prefiro usar 2 constantes cheias de zeros e de espaços, pois a rotina fica bem mais rapida do que se vc fosse acrescentar um de cada vez por um loop while.

Espero ter ajudado.


GOSTEI 0
Gandalf.nho

Gandalf.nho

03/07/2006

Valeu pelas rotinas, vou ver o que consigo aproveitar. No layout aqui só tem pic9 e picX, mesmo para datas e valores monetários.


GOSTEI 0
Adriano Santos

Adriano Santos

03/07/2006

Valeu pelas rotinas, vou ver o que consigo aproveitar. No layout aqui só tem pic9 e picX, mesmo para datas e valores monetários.


O caminho que o [b:a2bcdc4592]thiago_vidal[/b:a2bcdc4592] falou é esse mesmo. Tem que ser no braço como eu falei. Mas depois que fizer o primeiro layout, o resto é moleza...rsrs...boa sorte, ser precisar de algo tô aqui e me ponho a disposição.


GOSTEI 0
Alex Sousa

Alex Sousa

03/07/2006

Alguém já tem algo pronto?
GOSTEI 0
POSTAR