Newsgroup: it.comp.lang.delphi
Titolo: ESPORTA RIBA - FREE

ciao a tutti, sono riuscito a generare i file CBI per le riba, sono pure
disposto a mettere su questo newsgroup anche il sorgente, visto che è stata
una faticaccia.... vorrei però chiedere se qualcuno mi può controllare il
file .RIB ottenuto
Simone

come promesso allego il source della procedura che ho sviluppato, spero sia
utile a qualcuno!!! l'esempio fatto visualizza una QueryRiba contenente le
riba da esportare in home banking, ci sono 3 button (genera testa, genera
riga riba, genera coda) e un pulsante che salva su file il memo in cui viene
impaginato il file
Simone
unit unExportRiba;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Grids, DBGrids, Db, DBTables;
type
  TFormExportRIBA = class(TForm)
    Panel1: TPanel;
    MemoCBI: TMemo;
    DataRiba: TDataSource;
    QueryRiba: TQuery;
    DBGrid1: TDBGrid;
    Splitter1: TSplitter;
    Button1: TButton;
    Panel2: TPanel;
    Memo2: TMemo;
    ScrollBox1: TScrollBox;
    Panel3: TPanel;
    Edit5: TEdit;
    Label5: TLabel;
    Edit4: TEdit;
    Label4: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Edit1: TEdit;
    Label1: TLabel;
    Edit6: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Edit7: TEdit;
    Label8: TLabel;
    Edit8: TEdit;
    Label9: TLabel;
    Edit9: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FormExportRIBA: TFormExportRIBA;
  cRecord:string;
  nRiba,nRecord,nTotale,nDispo:integer;
implementation
{$R *.DFM}
function RiempiSize(cStr:string;nLun:integer):string;
var
 cRet:string;
begin
 cRet:=copy(cStr,1,nLun);
 while length(cRet)<nLun do
  begin
   cRet:=cRet+' ';
  end;
 RiempiSize:=cRet;
end;
function RiempiNum(n:integer;nLun:integer):string;
var
 cRet:string;
begin
 cRet:=trim(inttostr(n));
 while length(cRet)<nLun do
  begin
   cRet:='0'+cRet;;
  end;
 RiempiNum:=cRet;
end;
procedure TFormExportRIBA.Button1Click(Sender: TObject);
begin
 // righello
 memocbi.Lines.clear;
 //memocbi.Lines.add('         1         2         3         4         5
6         7         8         9        10         11       12');
//memocbi.Lines.add('1234567890123456789012345678901234567890123456789012345
67890123456789012345678901234567890123456789012345678901234567890');
 // genera riba
 cRecord:='';
//--------------------------------------------------------------------------
---
 // record di testa IB (tot 120)
//--------------------------------------------------------------------------
---
 // 1 filler
 cRecord:=' ';
 // 2-3 IB
 cRecord:=cRecord+'IB';
 // 4-8 codice SIA
 cRecord:=cRecord+riempisize(edit1.text,5);
 // 9-13 abi ricevente
 cRecord:=cRecord+riempisize(edit2.text,5);
 // 14-19 data creazione
 cRecord:=cRecord+formatdatetime('ddmmyy',date);
 // 20-39 nome supporto
 cRecord:=cRecord+riempisize(edit3.text,20);
 // 40-45 disponibile
 cRecord:=cRecord+riempisize(' ',6);
 // 46-113 blank
 cRecord:=cRecord+riempisize(' ',68);
 // 114 divisa EURO=E
 cRecord:=cRecord+'E';
 // 115 filler
 cRecord:=cRecord+' ';
 // 116-120 non usato
 cRecord:=cRecord+riempisize(' ',5);
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
 nDispo:=0;
 nTotale:=0;
 nRiba:=0;
end;
procedure TFormExportRIBA.Button2Click(Sender: TObject);
begin
//--------------------------------------------------------------------------
---
 // record 14
 nDispo:=nDispo+1;
 nTotale:=nTotale+round((QueryRiba.fieldbyname('Importo').asFloat*100));
 nRiba:=nRiba+1;
 // 1 filler
 cRecord:=' ';
 // 2-3 14
 cRecord:=cRecord+'14';
 // 4-10 progressivo riba
 cRecord:=cRecord+RiempiNum(nRiba,7);
 // 11-22 blank
 cRecord:=cRecord+RiempiSize(' ',12);
 // 23-28 data scadenza
cRecord:=cRecord+formatdatetime('ddmmyy',QueryRiba.fieldbyname('DataScad').a
sDatetime);
 // 29-33 30000 fisso
 cRecord:=cRecord+'30000';
 // 34-46 importo
cRecord:=cRecord+riempinum(round(QueryRiba.fieldbyname('Importo').asFloat*10
0),13);
 // 47 fisso -
 cRecord:=cRecord+'-';
 // 48-52 abi assuntrice
 cRecord:=cRecord+RiempiSize(edit2.text,5);
 // 48-52 cab assuntrice
 cRecord:=cRecord+RiempiSize(edit4.text,5);
 // 58-69 conto
 cRecord:=cRecord+riempinum(strtoint(edit5.text),12);
 // 70-74 abi riba
 cRecord:=cRecord+riempisize(queryriba.fieldbyname('codabicl').asString,5);
 // 75-79 cab riba
 cRecord:=cRecord+riempisize(queryriba.fieldbyname('codcabcl').asString,5);
 // 80-91 riferimento
 cRecord:=cRecord+riempisize(' ',12);
 // 92-96 sia cliente
 cRecord:=cRecord+riempinum(0,5);
 // 97 fisso 4
 cRecord:=cRecord+'4';
 // 98-113 codice cliente
 cRecord:=cRecord+riempisize(' ',16);
 // 114 flag tipo debitore banca=B
 cRecord:=cRecord+'0';
 // 115-119 blank
 cRecord:=cRecord+riempisize(' ',5);
 // 120 divisa E
 cRecord:=cRecord+'E';
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
//--------------------------------------------------------------------------
---
 // record 20
 // 1 filler
 cRecord:=' ';
 // 2-3 20
 cRecord:=cRecord+'20';
 // 4-10 progressivo riba
 cRecord:=cRecord+RiempiNum(nRiba,7);
 // 11-34   1°segmento da 24 car - descrizione debitore NOME
 cRecord:=cRecord+Riempisize(edit6.text,24);
 // 35-58   2°segmento da 24 car - descrizione debitore INDIRIZZO+CIVICO+CAP
 cRecord:=cRecord+Riempisize(edit7.text,24);
 // 59-82   3°segmento da 24 car - descrizione debitore COMUNE
  cRecord:=cRecord+Riempisize(edit8.text,24);
 // 83-106  4°segmento da 24 car - descrizione debitore PROVINCIA
 cRecord:=cRecord+Riempisize(edit9.text,24);
 // 107-120 filler
 cRecord:=cRecord+Riempisize(' ',14);
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
//--------------------------------------------------------------------------
---
 // record 30
 // 1 filler
 cRecord:=' ';
 // 2-3 30
 cRecord:=cRecord+'30';
 // 4-10 progressivo riba
 cRecord:=cRecord+RiempiNum(nRiba,7);
 // 11-40 debitore 1
 cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('denom1').asString,30);
 // 41-70 debitore 2
 cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('denom2').asString,30);
 // 71-86 codice fiscale / piva debitore
cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('codfiscpiva').asString,16
);
 // 87-120 filler
 cRecord:=cRecord+RiempiSize(' ',34);
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
//--------------------------------------------------------------------------
---
 // record 40
 // 1 filler
 cRecord:=' ';
 // 2-3 40
 cRecord:=cRecord+'40';
 // 4-10 progressivo riba
 cRecord:=cRecord+RiempiNum(nRiba,7);
 // 11-40 indirizzo debitore
 cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('indir').asString,30);
 // 41-45 cap
 cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('cap').asString,5);
 // 46-70 comune
 cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('local').asString,25);
 // 71-120 banca / sport. domic.
cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('BancaAppogg').asString,50
);
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
//--------------------------------------------------------------------------
---
 // record 50
 // 1 filler
 cRecord:=' ';
 // 2-3 50
 cRecord:=cRecord+'50';
 // 4-10 progressivo riba
 cRecord:=cRecord+RiempiNum(nRiba,7);
 // 11-50 1° segmento da 40 car. rif debito
cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('descrCred1').asString,40)
;
 // 51-90 2° segmento da 40 car. rif debito
cRecord:=cRecord+RiempiSize(queryriba.fieldbyname('descrCred2').asString,40)
;
 // 91-120 filler
 cRecord:=cRecord+RiempiSize(' ',30);
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
//--------------------------------------------------------------------------
---
 // record 51
//--------------------------------------------------------------------------
---
 // 1 filler
 cRecord:=' ';
 // 2-3 51
 cRecord:=cRecord+'51';
 // 4-10 progressivo riba
 cRecord:=cRecord+RiempiNum(nRiba,7);
 // 11-20 numero ricevuta
 cRecord:=cRecord+Riempinum(nRiba,10);
 // 21-40 nome creditore (mittente ricevuta)
 cRecord:=cRecord+RiempiSize(edit6.text,20);
 // 41-55 provincia
 cRecord:=cRecord+RiempiSize(' ',15);
 // 56-65 num autor.
 cRecord:=cRecord+RiempiSize(' ',10);
 // 66-71 data autor.
 cRecord:=cRecord+RiempiSize(' ',6);
 // 72-120 filler
 cRecord:=cRecord+RiempiSize(' ',49);
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
 // record 70
 // 1 filler
 cRecord:=' ';
 // 2-3 70
 cRecord:=cRecord+'70';
 // 4-10 progressivo riba
 cRecord:=cRecord+RiempiNum(nRiba,7);
 // 11-88 blank
 cRecord:=cRecord+riempiSize(' ',78);
 // 89-100 indicatori circuito
 cRecord:=cRecord+riempiSize(' ',12);
 // 101-103 indi. rich. incasso
 cRecord:=cRecord+riempiSize(' ',3);
 // 104-120 chiavi di controllo
 cRecord:=cRecord+riempiSize(' ',17);
 MemoCBI.Lines.Add(cRecord);
//--------------------------------------------------------------------------
---
end;
procedure TFormExportRIBA.Button3Click(Sender: TObject);
begin
//--------------------------------------------------------------------------
---
 // record di coda EF (tot 120)
 //------------------
 nRecord:=(7*nDispo)+2;
 // 1 filler
 cRecord:=' ';
 // 2-3 EF
 cRecord:=cRecord+'EF';
 // 4-8 codice SIA
 cRecord:=cRecord+riempisize(edit1.text,5);
 // 9-13 abi ricevente
 cRecord:=cRecord+riempisize(edit2.text,5);
 // 14-19 data creazione
 cRecord:=cRecord+formatdatetime('ddmmyy',date);
 // 20-39 nome supporto
 cRecord:=cRecord+riempisize(edit3.text,20);
 // 40-45 disponibile
 cRecord:=cRecord+riempisize(' ',6);
 // 46-52 n. disposizioni
 cRecord:=cRecord+riempinum(nDispo,7);
 // 53-67 n negativi
 cRecord:=cRecord+riempinum(nTotale,15);
 // 68-82 n positivi
 cRecord:=cRecord+riempinum(0,15);
 // 83-89 n record
 cRecord:=cRecord+riempinum(nRecord,7);
 // 90-113 blank
 cRecord:=cRecord+riempisize(' ',24);
 // 114- divisa
 cRecord:=cRecord+'E';
 // 115-120 blank
 cRecord:=cRecord+riempisize(' ',6);
 MemoCBI.Lines.Add(cRecord);
 memoCBI.Lines.Delete(MemoCBI.Lines.Count);
//--------------------------------------------------------------------------
---
end;
procedure TFormExportRIBA.Button4Click(Sender: TObject);
begin
 if SaveDialog1.execute then
  begin
   MemoCBI.Lines.SaveToFile(SaveDialog1.FileName);
   showmessage('FILE ESPORTATO CORRETTAMENTE');
  end
  else
     showmessage('OPERAZIONE ANNULLATA');
end;
end.

  file://------------------

file://---------------------------------------------------------------------
