Fórum gerar arquivo txt para enviar para o boa vista #600394
07/02/2019
0
Camilo Raposo
Curtir tópico
+ 0Posts
08/02/2019
Hélio Devmedia
É difícil postar pra você aqui algo completo até porque eu não tenho idéia do layout utilizado, mas normalmente usamos o objeto TStringGrid para montar um arquivo TXT.
s:= TStringGrid.Create;
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.saveToFile('c:\\pastaBoletos\\arquivo01.txt');
Este código simplesmente cria um objeto StringList e permite adicionar linhas de texto pelo add();
para salvar em TXT usa-se SaveToFile(caminho do arquivo);
para fazer o layout, e colocar tamanho dos campos específicos você pode usar vários comandos de formatação,
Por exemplo, imagine que na linha o nome tem que ter 20 posições, o endereço 30 posições, o código 10 posições com zero e o valor 16 posições com duas casas decimais
nome:='Hélio Carlos';
endereco:='Rua Maria Ortiz';
codigo:=2565;
valor:=200.00;
nome :=Format('%-20s',[nome]);
endereco:=Format('%-30s',[endereco]);
codigoS :=Format('%10.10d',[codigo]);
valorS :=FormatFloat('00000000000000.00',valor);
s.add(nome+endereco+codigoS+valorS);
lembrado que se você quiser saber tudo o que o comando format tem a oferecer digite Format no delphi, clique em cima da palavra e aperte F1 que será mostrado a documentação completa do comando.
Se o seu delphi for uma versão mais recente é possível usar também o PadLeft e o PadRigth para preencher espaços a direita e a esquerda:
nome.PadLeft(10,' '); //" Hélio Carlos";
nome.PadLeft(10,' 0'); //"00000000Hélio Carlos";
nome.PadRigth(10,' '); //"Hélio Carlos ";
nome.PadRigth(10,'0 '); //"Hélio Carlos00000000";
a mesma coisa para numeros...
Espero ter ajudado. Um forte abraço e fique com Deus.
Gostei + 0
14/02/2019
Camilo Raposo
https://1drv.ms/b/s!AoTEmtd6yZSBuVfjHsyNvjUb-Yvr
É difícil postar pra você aqui algo completo até porque eu não tenho idéia do layout utilizado, mas normalmente usamos o objeto TStringGrid para montar um arquivo TXT.
s:= TStringGrid.Create;
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.add('texto');
s.saveToFile('c:\\\\pastaBoletos\\\\arquivo01.txt');
Este código simplesmente cria um objeto StringList e permite adicionar linhas de texto pelo add();
para salvar em TXT usa-se SaveToFile(caminho do arquivo);
para fazer o layout, e colocar tamanho dos campos específicos você pode usar vários comandos de formatação,
Por exemplo, imagine que na linha o nome tem que ter 20 posições, o endereço 30 posições, o código 10 posições com zero e o valor 16 posições com duas casas decimais
nome:='Hélio Carlos';
endereco:='Rua Maria Ortiz';
codigo:=2565;
valor:=200.00;
nome :=Format('%-20s',[nome]);
endereco:=Format('%-30s',[endereco]);
codigoS :=Format('%10.10d',[codigo]);
valorS :=FormatFloat('00000000000000.00',valor);
s.add(nome+endereco+codigoS+valorS);
lembrado que se você quiser saber tudo o que o comando format tem a oferecer digite Format no delphi, clique em cima da palavra e aperte F1 que será mostrado a documentação completa do comando.
Se o seu delphi for uma versão mais recente é possível usar também o PadLeft e o PadRigth para preencher espaços a direita e a esquerda:
nome.PadLeft(10,' '); //" Hélio Carlos";
nome.PadLeft(10,' 0'); //"00000000Hélio Carlos";
nome.PadRigth(10,' '); //"Hélio Carlos ";
nome.PadRigth(10,'0 '); //"Hélio Carlos00000000";
a mesma coisa para numeros...
Espero ter ajudado. Um forte abraço e fique com Deus.
Gostei + 0
14/02/2019
Daniel Araújo
https://www.devmedia.com.br/criando-e-gravando-dados-em-txt-com-delphi/22630
Nele ensina como gerar arquivos. Aí tu só adapta ao teu layout.
Gostei + 0
14/02/2019
Camilo Raposo
uma duvida sobre o codigo:
nome :=Format('%-20s',[nome]);
endereco:=Format('%-30s',[endereco]);
codigoS :=Format('%10.10d',[codigo]);
valorS :=FormatFloat('00000000000000.00',valor);
ai o campo nome tem 20 posições se eu colocar um nome com apenas 10 posições ele vai completar o restante com espaço em branco?
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
https://www.devmedia.com.br/criando-e-gravando-dados-em-txt-com-delphi/22630
Nele ensina como gerar arquivos. Aí tu só adapta ao teu layout.
Gostei + 0
14/02/2019
Daniel Araújo
Aí em cada informação que tu for adicionar na linha, tu chama essa função passando o texto e a quantidade de caracteres informada no layout. Essa função deve completar com espaços em branco.
Chamaria assim:
Nome := CompletarComEspacos('Camilo', 20)
Entendeu?
Gostei + 0
14/02/2019
Camilo Raposo
segue os codigos que estou usando:
private
{ Private declarations }
function calculaespaco(tamanho_campo,campo:integer): String;
function geralinha(numero_linha:String) : String;
function zeroesquerda(value, tamanho:String):String;
function gerarcabecalho:String;
function gerarodape(linha:string):String;
const
tliv_protesto=6;
tfol_protesto=4;
tespec_titulo=3;
tvalor_tit=14;
tNM_SACADO=45;
tCPFCGC_SACADO=9;
ted_sacado=45;
tcid_sacado=20;
tuf_sacado=2;
function TForm1.geralinha(numero_linha: String): String;
var
tamanho,tcampo,itamanho, i : Integer;
espaco,espacoantes,espaco25, linha,dado,vltit,filial,ncontrole,cep_sacado,protocolo : String;
liv_protesto,fol_protesto,espec_titulo,valor_tit,dt_protesto,tpessoa,tdoc,
NM_SACADO,CPFCGC_SACADO,ed_sacado,cid_sacado,uf_sacado,cartorio,
dt_cancel,tipo_protesto,dt_emissao,dt_vencimento,espaco3,espaco10,espaco20,espaco91 : String;
begin
//FORMATAR DATA DDMMYYYY
if not cdsdadodt_cancel.IsNull then
dt_cancel:= FormatDateTime('ddmmyyyy',cdsdadodt_cancel.AsDateTime)
else
dt_cancel:= '00000000';
if not cdsdadodt_emissao.IsNull then
dt_emissao:=FormatDateTime('ddmmyyyy',cdsdadodt_emissao.AsDateTime);
if not cdsdadodt_vencimento.IsNull then
dt_vencimento:= FormatDateTime('ddmmyyyy',cdsdadodt_vencimento.AsDateTime);
if not cdsdadodt_protesto.IsNull then
dt_protesto:= FormatDateTime('ddmmyyyy',cdsdadodt_protesto.AsDateTime);
//livro protesto
espacoantes :='';
espaco:='';
espaco25 := calculaespaco(25,0);
espaco3 := calculaespaco(3,0);
espaco10 := calculaespaco(10,0);
espaco20 := calculaespaco(20,0);
espaco91 := calculaespaco(91,0);
espacoantes := calculaespaco(223,0);
cartorio :='01';
//espaco := calculaespaco(tliv_protesto,Length(cdsdadoliv_protesto.AsString));
liv_protesto:=espacoantes+zeroesquerda(cdsdadoliv_protesto.AsString,'6')+cdsdadoliv_protesto.AsString;
//folha livro
espacoantes:=' ';
espaco := calculaespaco(tfol_protesto,Length(cdsdadofol_protesto.AsString));
fol_protesto:=espacoantes+cdsdadofol_protesto.AsString+espaco;
//especie titulo
espaco := calculaespaco(tespec_titulo,Length(cdsdadoespec_titulo.AsString));
espec_titulo:= cdsdadoespec_titulo.AsString+espaco;
//valor titulo
vltit := CDSDADOvalor_tit.AsString;
While pos('.', vltit) <> 0 Do
delete(vltit,pos('.', vltit),1);
//vltit := cdsdadovalor_tit.AsString;
vltit := zeroesquerda(vltit,'14')+vltit;
espaco := calculaespaco(tvalor_tit,Length(vltit));
valor_tit:=cdsdadovalor_tit.AsString+espaco;
//nome sacado
espaco := calculaespaco(tNM_SACADO,Length(cdsdadoNM_SACADO.AsString));
NM_SACADO:=cdsdadoNM_SACADO.AsString+espaco;
//ENDERECO SACADO
espaco := calculaespaco(ted_sacado,Length(cdsdadoed_sacado.AsString));
ed_sacado:=cdsdadoed_sacado.AsString+espaco;
//CIDADE SACADO
espaco := calculaespaco(tcid_sacado,Length(cdsdadocid_sacado.AsString));
cid_sacado:=cdsdadocid_sacado.AsString+espaco;
uf_sacado:=cdsdadouf_sacado.AsString;
cartorio:= '01';
tipo_protesto:= cdsdadotipo_protesto.AsString;
{filial
tpessoa,tdoc
ncontrole }
if Length(CDSDADOCPFCGC_SACADO.AsString) = 11 then
begin
tpessoa := 'F';
tdoc := '2';
//CPF CNPJ SACADO
espaco := calculaespaco(tCPFCGC_SACADO,9);
CPFCGC_SACADO:= COPY(cdsdadoCPFCGC_SACADO.AsString,0,8);
ncontrole := copy(CDSDADOCPFCGC_SACADO.AsString,10,2);
filial := '0000';
end else if Length(CDSDADOCPFCGC_SACADO.AsString) = 14 then
begin
tpessoa := 'J';
tdoc := '1';
espaco := calculaespaco(tCPFCGC_SACADO,9);
CPFCGC_SACADO:= COPY(cdsdadoCPFCGC_SACADO.AsString,0,8)+'000';
ncontrole := '';
filial := '';
//ncontrole := copy(CDSDADOCPFCGC_SACADO.AsString,13,2);
//filial := copy(CDSDADOCPFCGC_SACADO.AsString,9,4);
end;
cep_sacado := CDSDADOcep_sacado.AsString;
protocolo := CDSDADOnm_protoc.AsString;
linha := '1PIMAVFR'+liv_protesto+fol_protesto+espec_titulo+valor_tit+dt_protesto+tpessoa+tdoc+'00'+espaco25+
NM_SACADO+espaco3+CPFCGC_SACADO+filial+ncontrole+espaco10+ed_sacado+cep_sacado+cid_sacado+uf_sacado+cartorio+protocolo+espaco20+
dt_cancel+
tipo_protesto+dt_emissao+dt_vencimento+espaco91+numero_linha;
result := linha;
function TForm1.zeroesquerda(value,tamanho : String): String; var i,t : integer; zero : String; begin zero:=''; t := StrToInt(tamanho)-Length(value); i := 0; zero :=''; while i <t do begin zero:= zero+'0'; i:=i+1; end; Result:= zero; end;
function TForm1.gerarcabecalho : String;
var espaco43,espaco5,espaco9,espaco22,espaco40,espaco272,espaco60,servico,telefonecartorio,versaosoft,tenvio: String;
retorno,dataatual,cnpj,nomecontato,cep,remessa : String;
begin
espaco43:= calculaespaco(43,0);
espaco9 := calculaespaco(9,0);
espaco40:= calculaespaco(40,0);
espaco272:= calculaespaco(272,0);
espaco60:=calculaespaco(60,0);
espaco5:= calculaespaco(5,0);
espaco22:= calculaespaco(7,0);
cnpj:='00000000';
nomecontato:= 'xxxxxxxx';
nomecontato:= nomecontato + calculaespaco(70,length(nomecontato));
servico:='Boavistaservicos-ProtestoE98 ';
telefonecartorio:='36551059';
versaosoft:='2';
tenvio:='M';
dataatual := FormatDateTime('ddmmyyyy',now);
cep:='65320000';
remessa :='8888';
retorno:= '0'+espaco43+dataatual+espaco9+'008888'+espaco22+'1'+cnpj+servico+
telefonecartorio+'0000'+nomecontato+versaosoft+espaco5+tenvio+espaco40+espaco272+espaco60+'0000001';
result := retorno;
end
function TForm1.gerarodape(linha : String) : String; var espaco :String; begin espaco := calculaespaco(592,0); result := '9'+espaco+linha; end;
function TForm1.calculaespaco(tamanho_campo,campo : Integer): String; var tamanho,i : integer; espaco : String; begin espaco:=''; tamanho := tamanho_campo - campo; i := 0; espaco :=''; while i <tamanho do begin espaco:= espaco+' '; i:=i+1; end; Result:= espaco; end;
procedure TForm1.Button1Click(Sender: TObject); var F: TextFile; linha, numero_registro : string; registro: integer; begin registro := 2; cdsdado.Open; cdsdado.First; AssignFile(f,'DTVENC.p1.txt'); Rewrite(f); //abre o arquivo para escrita Writeln(f,gerarcabecalho); while not cdsdado.Eof do begin numero_registro := zeroesquerda(IntToStr(registro),'7')+IntToStr(registro); registro := registro+1; linha := geralinha(numero_registro); Writeln(f,linha); //escreve no arquivo e desce uma linha cdsdado.Next; end; numero_registro := zeroesquerda(IntToStr(registro),'7')+IntToStr(registro); registro := registro+1; linha := gerarodape(numero_registro); Writeln(f,linha); //escreve no arquivo e desce uma linha Closefile(f); //fecha o handle de arquivo end;
=========================================================================================================
Aí em cada informação que tu for adicionar na linha, tu chama essa função passando o texto e a quantidade de caracteres informada no layout. Essa função deve completar com espaços em branco.
Chamaria assim:
Nome := CompletarComEspacos('Camilo', 20)
Entendeu?
Gostei + 0
14/02/2019
Daniel Araújo
Gostei + 0
15/02/2019
Ricardo Diniz
Amigo você terá de ver o layout para ir colocando posição por posição para geração do arquivo de modo que fique no padrão do boa vista / serasa.
At,
Gostei + 0
15/02/2019
Camilo Raposo
Amigo você terá de ver o layout para ir colocando posição por posição para geração do arquivo de modo que fique no padrão do boa vista / serasa.
At,
Gostei + 0
16/02/2019
Camilo Raposo
JEFFERSON COSTA DE CASTRO ALIMENTOS-------------179648700000183
VANDERLEY VIEIRA SOARES-------------------------874920673000072
VIVIANE DOS SANTOS COSTA------------------------020459803000067
MARIA NILZENIR PIMENTEL MACEDO 450391-----------210345770000194
JOSE FAUSTINO DE CARVALHO NEVES-----------------907692013000034
Gostei + 0
18/02/2019
Natanael Ferreira
Em fontes mono-espaçadas cada letra/caracter ocupa o mesmo espaço na horizontal.
Exemplo de fontes mono-espaçadas mais conhecidas são:
- Lucida Console;
- Courier;
- Courier New;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)