Esportazione su file e uso di file temporaneo
git-svn-id: svn://10.65.10.50/trunk@5334 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ef2621c2c3
commit
3ae649194c
128
sv/sv1200.cpp
128
sv/sv1200.cpp
@ -2,12 +2,14 @@
|
||||
#include <mask.h>
|
||||
#include <progind.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
#include <xvtility.h>
|
||||
|
||||
#include "../mg/mglib.h"
|
||||
#include "sv1.h"
|
||||
#include "sv1200a.h"
|
||||
#include "sv1200b.h"
|
||||
#include "sv1200c.h"
|
||||
#include "svlib01.h"
|
||||
|
||||
#include "svriep.h"
|
||||
@ -31,6 +33,7 @@
|
||||
|
||||
|
||||
#define FORMWIDTH 150
|
||||
#define DEFAULT_OUTFILE "outstat0"
|
||||
///////////////////////////////////////////////////////////
|
||||
// TPeriodo
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -311,8 +314,7 @@ class TStampa_stat : public TPrint_application
|
||||
|
||||
enum { LINEA_DATI='D', LINEA_RAFFRONTI='R', LINEA_TARGET='T'}; // codici per le righe
|
||||
|
||||
TMask * _msk,*_print_msk;
|
||||
|
||||
TMask * _msk, *_print_msk,*_export_msk;
|
||||
TStats_agg _stats;
|
||||
TFrequenza_colonne _freq;
|
||||
TCodart_livelli* _liv_art;
|
||||
@ -320,14 +322,14 @@ class TStampa_stat : public TPrint_application
|
||||
TRecord_cache *_magazz,*_tipodoc,*_catven,*_zone,*_ums;
|
||||
TLocalisamfile * _umart,*_anamag,*_clifor,*_agenti;
|
||||
|
||||
//TLocalisamfile * _outstat;
|
||||
|
||||
TToken_string _key;
|
||||
TString _last_key;
|
||||
TArray _files;
|
||||
|
||||
bool _ragg_per_um;
|
||||
|
||||
// ******************
|
||||
// costruzione file di Output
|
||||
TStat_cache * _cache; // cache R/W per le statistiche
|
||||
|
||||
int _last_lev_grp, // livello dell'ultimo raggruppamento incontrato
|
||||
@ -345,28 +347,30 @@ class TStampa_stat : public TPrint_application
|
||||
bool _st_totr; // flag stampa totali di riga
|
||||
bool _st_totc; // flag stampa totali di colonna
|
||||
static TString s_park; // stringa di lavoro
|
||||
// ******************
|
||||
// stampa file di Output
|
||||
TString wrk_row; // stringa di lavoro per le righe di stampa
|
||||
TRelation * _rel; // relazione per la stampa
|
||||
private:
|
||||
|
||||
void set_ragg_per_um();
|
||||
|
||||
void put_column(TRectype & statrec,int col,TSVriep_record& curr);
|
||||
const real fc_um(TRectype & statrec,const TSVriep_record& rieprec);
|
||||
void invalid_columns(TRectype & statrec);
|
||||
void standardize_um(TSVriep_record& rieprec, bool force=FALSE);
|
||||
|
||||
void azzera_file();
|
||||
void update_file(const char * key, const char * code,const char tipo, const int level, const int col, TSVriep_record& curr);
|
||||
void genera_file();
|
||||
void esporta_file();
|
||||
|
||||
// generazione del file di output
|
||||
void set_ragg_per_um();
|
||||
bool filtro_chiavi(TSVriep_record &curr);
|
||||
void update_file(const char * key, const char * code,const char tipo, const int level, const int col, TSVriep_record& curr);
|
||||
void genera_file(TLocalisamfile *f);
|
||||
|
||||
// handler per i campi di maschera
|
||||
static bool chiave_notify(TSheet_field& f, int r, KEY k);
|
||||
static bool chiave_handler(TMask_field& f, KEY k);
|
||||
static bool campo_handler(TMask_field& f, KEY k);
|
||||
|
||||
static bool filename_handler(TMask_field& f, KEY k);
|
||||
static bool codice_handler(TMask_field& f, KEY k);
|
||||
static bool multiplo_handler(TMask_field& f, KEY k);
|
||||
static bool numero_handler(TMask_field& f, KEY k);
|
||||
@ -391,7 +395,6 @@ protected:
|
||||
virtual void on_config_change();
|
||||
|
||||
int handle_levchange(int row,const int level);
|
||||
int set_header_colonne(int row);
|
||||
int set_rows_colonne(int row, TRectype &strec);
|
||||
void set_row_atpos(char section,int row,const char * f,int pos);
|
||||
void reset_grplevels();
|
||||
@ -420,6 +423,7 @@ protected:
|
||||
public:
|
||||
TMask& selmask() { return *_msk; }
|
||||
TMask& printmask() { return *_print_msk; }
|
||||
TMask& expmask() { return *_export_msk; }
|
||||
virtual bool menu(MENU_TAG);
|
||||
};
|
||||
|
||||
@ -474,10 +478,6 @@ bool TStampa_stat::set_print(int i)
|
||||
return (ok);
|
||||
}
|
||||
|
||||
int TStampa_stat::set_header_colonne(int row) // to remove
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void TStampa_stat::postclose_print()
|
||||
{
|
||||
@ -512,7 +512,7 @@ void TStampa_stat::preprocess_header()
|
||||
lastrow=row;
|
||||
for (int c=0; c < _numcol; c++) // colonne
|
||||
{
|
||||
if (_st_totr && (((c)%_col_anno)==0 || c== _numcol_dati) )
|
||||
if (_st_totr && c && (((c)%_col_anno)==0 || c== _numcol_dati) )
|
||||
{
|
||||
set_row_atpos('H',row,nome_totale(int(c/_col_anno)),POS_PRIMACOL+c*_largcol+_largcol/2 );
|
||||
} else {
|
||||
@ -562,6 +562,7 @@ const TString& TStampa_stat::nome_colonna1(int c)
|
||||
} else {
|
||||
switch (code_freq)
|
||||
{
|
||||
case 'A':
|
||||
default:
|
||||
s_park.format("%d^%s",1+(start+c-1)%lastp,(const char *)char2freqname(code_freq));
|
||||
}
|
||||
@ -592,8 +593,16 @@ const TString& TStampa_stat::nome_colonna2(int c)
|
||||
|
||||
const TString& TStampa_stat::nome_totale(int c)
|
||||
{
|
||||
s_park = "Totale ";
|
||||
s_park << c+1;
|
||||
const char code_freq=selmask().get(F_MULTIPLO)[0];
|
||||
s_park="";
|
||||
{
|
||||
switch (code_freq)
|
||||
{
|
||||
case 'A':
|
||||
default:
|
||||
s_park.format("Totale %d",c);
|
||||
}
|
||||
}
|
||||
return s_park;
|
||||
}
|
||||
|
||||
@ -835,7 +844,8 @@ void TStampa_stat::reset_grplevels()
|
||||
|
||||
bool TStampa_stat::user_create()
|
||||
{
|
||||
_print_msk= NULL;
|
||||
// ************
|
||||
// maschere
|
||||
_msk = new TMask("sv1200a");
|
||||
_msk->set_handler(F_CODICE, codice_handler);
|
||||
_msk->set_handler(F_MULTIPLO, multiplo_handler);
|
||||
@ -850,15 +860,15 @@ bool TStampa_stat::user_create()
|
||||
TMask& sm = _msk->sfield(F_CHIAVE).sheet_mask();
|
||||
sm.set_handler(S_CAMPO, campo_handler);
|
||||
|
||||
_print_msk= new TMask("sv1200b");
|
||||
_print_msk = new TMask("sv1200b");
|
||||
|
||||
_export_msk = new TMask("sv1200c");
|
||||
_export_msk->set_handler(F_FILENAME, filename_handler);
|
||||
// ************
|
||||
// files
|
||||
_files.add(new TLocalisamfile(LF_SVRIEP));
|
||||
_files.add(new TLocalisamfile(LF_SVSTAT));
|
||||
|
||||
// cache R/W per le statistiche
|
||||
_cache= new TStat_cache();
|
||||
|
||||
// ************
|
||||
// oggetti per la gestione delle parti del codice
|
||||
_liv_art = new TCodart_livelli;
|
||||
_liv_giac = new TCodgiac_livelli;
|
||||
@ -873,15 +883,15 @@ bool TStampa_stat::user_create()
|
||||
_clifor = new TLocalisamfile(LF_CLIFO);
|
||||
_agenti = new TLocalisamfile(LF_AGENTI);
|
||||
|
||||
//_outstat = new TLocalisamfile(LF_SVSTAT);
|
||||
// ************
|
||||
// cursore di stampa
|
||||
add_file(LF_SVSTAT);
|
||||
add_cursor(new TCursor(new TRelation(LF_SVSTAT)));
|
||||
|
||||
// cache per l'output
|
||||
_cache=NULL;
|
||||
|
||||
// impone force setpage
|
||||
//force_setpage();
|
||||
set_real_picture("");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -889,18 +899,19 @@ bool TStampa_stat::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _print_msk;
|
||||
delete _export_msk;
|
||||
|
||||
delete _liv_art;
|
||||
delete _liv_giac;
|
||||
// cancella le cache
|
||||
delete _cache;
|
||||
delete _ums;
|
||||
// cancella i files
|
||||
delete _umart;
|
||||
delete _anamag;
|
||||
delete _clifor;
|
||||
delete _agenti;
|
||||
//delete _outstat;
|
||||
|
||||
delete current_cursor()->relation();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -926,10 +937,21 @@ bool TStampa_stat::menu(MENU_TAG )
|
||||
if (k == K_SAVE)
|
||||
{
|
||||
set_ragg_per_um();
|
||||
genera_file();
|
||||
esporta_file();
|
||||
if (expmask().run()!=K_ESC)
|
||||
{
|
||||
TFilename fn(expmask().get(F_FILENAME));
|
||||
TIsamtempfile * f=new TIsamtempfile(LF_SVSTAT,fn,TRUE);
|
||||
genera_file(f);
|
||||
}
|
||||
} else {
|
||||
TFilename fn;
|
||||
fn.temp();
|
||||
fn.insert("%");
|
||||
genera_file(new TIsamtempfile(LF_SVSTAT,fn,TRUE));
|
||||
set_printmask();
|
||||
TIsamtempfile * f=new TIsamtempfile(LF_SVSTAT,fn,FALSE);
|
||||
f->set_autodel();
|
||||
current_cursor()->relation()->replace(f);
|
||||
do_print(1);
|
||||
}
|
||||
}
|
||||
@ -1311,7 +1333,7 @@ void TStampa_stat::set_ragg_per_um()
|
||||
_ragg_per_um=TRUE;
|
||||
}
|
||||
|
||||
void TStampa_stat::genera_file()
|
||||
void TStampa_stat::genera_file(TLocalisamfile *f)
|
||||
{
|
||||
|
||||
TString key; // chiave per il record del file statistiche
|
||||
@ -1323,6 +1345,10 @@ void TStampa_stat::genera_file()
|
||||
TSheet_field & s_chiave = m.sfield(F_CHIAVE);
|
||||
|
||||
|
||||
// file di OUTPUT
|
||||
_cache= new TStat_cache(f);
|
||||
|
||||
// file di INPUT
|
||||
TLocalisamfile riep(LF_SVRIEP);
|
||||
riep.set_curr(new TSVriep_record);
|
||||
|
||||
@ -1340,8 +1366,7 @@ void TStampa_stat::genera_file()
|
||||
TProgind statusbar(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status
|
||||
, "Creazione del file di output", FALSE, TRUE, 60);
|
||||
|
||||
azzera_file();
|
||||
_cache->clear();
|
||||
_cache->zap();
|
||||
|
||||
// **********************
|
||||
// ciclo principale: scorre il riepilogo statistiche per anno+periodo
|
||||
@ -1396,6 +1421,7 @@ void TStampa_stat::genera_file()
|
||||
} // ciclo
|
||||
statusbar.setstatus(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status);
|
||||
_cache->flush();
|
||||
delete _cache;
|
||||
}
|
||||
|
||||
|
||||
@ -1429,23 +1455,6 @@ void TStampa_stat::set_printmask()
|
||||
}
|
||||
}
|
||||
|
||||
void TStampa_stat::esporta_file()
|
||||
{}
|
||||
|
||||
|
||||
void TStampa_stat::azzera_file()
|
||||
{
|
||||
TLocalisamfile stat(LF_SVSTAT);
|
||||
int err=NOERR;
|
||||
while (err==NOERR)
|
||||
{
|
||||
err=stat.first();
|
||||
if (err==NOERR)
|
||||
err=stat.remove();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
const TString& TStampa_stat::partkey_name(const char *lev_code)
|
||||
{
|
||||
@ -1799,6 +1808,21 @@ bool TStampa_stat::codice_handler(TMask_field& f, KEY k)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStampa_stat::filename_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
TFilename fn(f.get());
|
||||
if (k==K_TAB && !fn.empty())
|
||||
{
|
||||
if (!fexist(fn.path()))
|
||||
return f.error_box("Directory %s non trovato",(const char *)fn.path());
|
||||
else
|
||||
if (fexist(fn))
|
||||
return f.yesno_box("File %s esistente: sovrascrivo",(const char *)fn);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool TStampa_stat::chiave_notify(TSheet_field& s, int r, KEY k)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user