gerar arquivo txt para enviar para o boa vista
07/02/2019
0
Camilo Raposo
Posts
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.
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.
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.
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.
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?
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?
14/02/2019
Daniel Araújo
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,
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,
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
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;
Clique aqui para fazer login e interagir na Comunidade :)