Arquivo de remessa CNAB 240
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
Curtidas 0
Respostas
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!
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
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
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.
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
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
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...
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
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.
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.
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
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
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
03/07/2006
Alguém já tem algo pronto?
GOSTEI 0