From a46907a934f3434af5ba7530087bcd5e68f79abe Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 30 Apr 2001 15:10:48 +0000 Subject: [PATCH] Patch level : xx.7.054 Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 1.7 patch 054 aga sul main trunk git-svn-id: svn://10.65.10.50/trunk@9657 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- sv/sv0.url | 3 +- sv/sv1.url | 3 +- sv/sv1200.cpp | 277 ++++++++++++++++++++++++++++++++++---------------- sv/sv2.url | 3 +- sv/sv2100.cpp | 13 +++ 5 files changed, 203 insertions(+), 96 deletions(-) diff --git a/sv/sv0.url b/sv/sv0.url index edcf837eb..c09f821d4 100755 --- a/sv/sv0.url +++ b/sv/sv0.url @@ -2,5 +2,4 @@ #define QAPPNAME "campo" #define QFIRMNAME "A.G.A. Informatica Srl" -#include - +#include diff --git a/sv/sv1.url b/sv/sv1.url index edcf837eb..c09f821d4 100755 --- a/sv/sv1.url +++ b/sv/sv1.url @@ -2,5 +2,4 @@ #define QAPPNAME "campo" #define QFIRMNAME "A.G.A. Informatica Srl" -#include - +#include diff --git a/sv/sv1200.cpp b/sv/sv1200.cpp index 98743fabc..2a884bcb9 100755 --- a/sv/sv1200.cpp +++ b/sv/sv1200.cpp @@ -367,6 +367,8 @@ class TStampa_stat : public TPrint_application TToken_string _key; TString _last_key; + TRectype * _last_data; + TString_array _des_fld; TString_array _file_fld; TString_array _key_fld; @@ -381,12 +383,14 @@ class TStampa_stat : public TPrint_application int _last_lev_grp, // livello dell'ultimo raggruppamento incontrato _liv_riga; // livello della riga TArray _group_recs; // array dei record dei raggruppamenti + TArray _group_recs_raff; // array dei record dei raggruppamenti (raffronti) int _indent[MAX_ROWS];// array delle posizione di indentazione real _totval_riga[SVS_NUMCOLONNE]; //array dei totali degli "anni" della riga real _totqta_riga[SVS_NUMCOLONNE]; //array dei totali degli "anni" della riga int _colpage, // numero di pagina ripetuta per contenere in larghezza tutte le colonne _last_page; // ultima pagina della "prima copia" + int _larg[7]; int _largcol, // larghezza di una colonna _numcol_dati, // numero di colonne contenenti dati _numcol, // numero totale di colonne (dati+totali) @@ -480,6 +484,8 @@ public: TMask& printmask() const { return *_print_msk; } TMask& expmask() const { return *_export_msk; } virtual bool menu(MENU_TAG); + TStampa_stat() {} + virtual ~TStampa_stat() { } }; inline TStampa_stat& app() { return (TStampa_stat&)main_app(); } @@ -513,21 +519,69 @@ bool TStampa_stat::set_print(int i) _st_totc=printmask().get_bool(F_STTOTALICOL); _st_tota=printmask().get_bool(F_STTOTALIANNO); - _largcol = 0; + _largcol = 0; + for (int l = 0; l < 7; l++) + _larg[l] = 0; if (_st_val) { _largcol += LARG_COLVAL; + _larg[0] = LARG_COLVAL; + if (printmask().get_bool(F_STRAFFRONTO)) + { + switch (printmask().get(F_TIPORAFFRONTO)[0]) + { + case COMP_AS_DIFF: + _largcol += LARG_COLVAL; + _larg[1] = LARG_COLVAL; + break; + case COMP_AS_PERC: + _largcol += LARG_COLPERC; + _larg[1] = LARG_COLPERC; + break; + case COMP_AS_VALUE: + default: + break; + } + } if (_st_totr) + { _largcol += LARG_COLPERC; + _larg[2] = LARG_COLPERC; + } } if (_st_qta) { _largcol += LARG_COLQTA; + _larg[3] = LARG_COLVAL; + if (printmask().get_bool(F_STRAFFRONTO)) + { + switch (printmask().get(F_TIPORAFFRONTO)[0]) + { + case COMP_AS_DIFF: + _largcol += LARG_COLVAL; + _larg[4] = LARG_COLVAL; + break; + case COMP_AS_PERC: + _largcol += LARG_COLPERC; + _larg[4] = LARG_COLPERC; + break; + case COMP_AS_VALUE: + default: + break; + } + } if (_st_totr) + { _largcol += LARG_COLPERC; + _larg[5] = LARG_COLPERC; + } } if (_st_uni) + { _largcol += LARG_COLVAL; + _larg[6] = LARG_COLVAL; + } + if (_largcol <= 0) _largcol = 1; @@ -604,70 +658,114 @@ void TStampa_stat::preprocess_header() else { TString col1, col2; + int pos = POS_PRIMACOL+c*_largcol; + nome_colonna1(col, col1); nome_colonna2(col, col2); - _wrk_row = col1; + col1 << ' ' << col2; + const int l = col1.len(); + TParagraph_string s(col1, _largcol); - const bool multiprint = (_st_val + _st_qta + _st_uni) > 1; - if (multiprint) +// const bool multiprint = (_st_val + _st_qta + _st_uni) > 1; +// if (multiprint) +// { + col1 = s.get(); + col1.center_just(_largcol); + set_row_atpos('H', row, col1, pos); + col2 = s.get(); + if (col2.empty()) + lastrow = row + 1; + else + { + col2.center_just(_largcol); + set_row_atpos('H', row + 1, col2, pos); + lastrow = row + 2; + } + +// if (multiprint) +// { +// lastrow = row+1; + if (_st_val) { - col1.trim(); - col2.trim(); - _wrk_row = col1; _wrk_row << ' ' << col2; - _wrk_row.center_just(_largcol); - } - set_row_atpos('H',row,_wrk_row,POS_PRIMACOL+c*_largcol); - - if (multiprint) - { - lastrow = row+1; - int pos = POS_PRIMACOL+c*_largcol; - if (_st_val) + pos += _larg[0]; + set_row_atpos('H',lastrow,"Valore", pos - 7); + if (printmask().get_bool(F_STRAFFRONTO)) { - set_row_atpos('H',lastrow,"Valore", pos + LARG_COLVAL-7); - pos += LARG_COLVAL; - if (_st_totr) - pos += LARG_COLPERC; - } - if (_st_qta) + pos += _larg[1]; + switch (printmask().get(F_TIPORAFFRONTO)[0]) + { + case COMP_AS_DIFF: + set_row_atpos('H',lastrow,"Differenza", pos - 11); + break; + case COMP_AS_PERC: + set_row_atpos('H',lastrow,"%%Diff", pos - 7); + break; + case COMP_AS_VALUE: + default: + break; + } + } + if (_st_totr) { - set_row_atpos('H',lastrow,"Quantita'",pos+LARG_COLQTA-13); - pos += LARG_COLQTA; - if (_st_totr) - pos += LARG_COLPERC; - } - if (_st_uni) + set_row_atpos('H', lastrow, "Perc.", pos); + pos += _larg[2]; + } + } + if (_st_qta) + { + pos += _larg[3]; + set_row_atpos('H',lastrow,"Quantita'",pos - 12); + if (printmask().get_bool(F_STRAFFRONTO)) { - set_row_atpos('H',lastrow,"Medio", pos + LARG_COLVAL-6); - } - } + pos += _larg[4]; + switch (printmask().get(F_TIPORAFFRONTO)[0]) + { + case COMP_AS_DIFF: + set_row_atpos('H',lastrow,"Differenza", pos - 13); + break; + case COMP_AS_PERC: + set_row_atpos('H',lastrow,"%%Diff", pos - 7); + break; + case COMP_AS_VALUE: + default: + break; + } + } + if (_st_totr) + { + set_row_atpos('H', lastrow, "Perc.", pos); + pos += _larg[5]; + } + } + if (_st_uni) + set_row_atpos('H',lastrow,"Valore medio", pos + _larg[6] - 12); +/* } else { if (col2.not_empty()) { lastrow=row+1; - set_row_atpos('H',row+1,col2,POS_PRIMACOL+c*_largcol); } } +*/ col++; } - if (_st_totr) +/* if (_st_totr) { int pos = POS_PRIMACOL+c*_largcol; if (_st_val) { lastrow=row+1; - pos += LARG_COLVAL; - set_row_atpos('H', lastrow, "Perc.", pos); + pos += _larg[0] + _larg; pos += LARG_COLPERC; } if (_st_qta) { lastrow=row+1; pos += LARG_COLQTA; - set_row_atpos('H', lastrow, "Perc.", pos); } } +*/ } row=lastrow; set_header(++row,""); @@ -676,14 +774,6 @@ void TStampa_stat::preprocess_header() const int lasthline=(printmask().get_bool(F_STRAFFRONTO )? 5 :4); _wrk_row.format("PnW1l(1,2,%d,2)l(1,%d,%d,%d)l(1,%d,%d,%d)",_pagewidth,lasthline,_pagewidth,lasthline,row,_pagewidth,row); row++; -/* - for (c=0; c < _numcol; c++) // colonne - { - // background - _wrk_row << "l(" << POS_PRIMACOL+c*_largcol << ",4," ; - _wrk_row << POS_PRIMACOL+c*_largcol << ',' << (int)printer().rows() << ')'; - } -*/ set_background(_wrk_row); } @@ -736,7 +826,7 @@ const TString& TStampa_stat::nome_colonna1(int c, TString& s_park) break; } } - s_park.center_just(_largcol); +// s_park.center_just(_largcol); return s_park; } @@ -782,7 +872,7 @@ const TString& TStampa_stat::nome_colonna2(int c, TString& s_park) break; } } - s_park.center_just(LARG_COLVAL); +// s_park.center_just(LARG_COLVAL); return s_park; } @@ -870,19 +960,28 @@ void TStampa_stat::set_page(int file, int count) // ***************** // gestione totali di raggruppamento row = handle_levchange(row, level); + const char tipo_riga = *strec.get(SVS_TIPO); if (level > 0) { // salva i record dei livelli di raggruppamento if (level == lastlev) strec.zero(SVS_CODICE); - _group_recs.add(strec,level); + switch (tipo_riga) + { + case LINEA_DATI: + _group_recs.add(strec,level); + break; + case LINEA_RAFFRONTI: + _group_recs_raff.add(strec,level); + break; + } } // ***************** // gestione delle "righe" if (level != lastlev && printmask().get_bool(F_FLAGSTOTALI+lastlev-level)) { - switch (*strec.get(SVS_TIPO)) + switch (tipo_riga) { case LINEA_DATI: if (level >= _liv_riga) @@ -922,8 +1021,8 @@ void TStampa_stat::set_page(int file, int count) // fa le set row per la "riga" contenente i valori delle colonne di statistica int TStampa_stat::set_rows_colonne(int row, const TRectype &strec) -{ - TRectype last_data(LF_SVSTAT); +{ + TRectype &last_data = *_last_data; TString16 colname; TString r_totc; real col_value; @@ -982,6 +1081,7 @@ int TStampa_stat::set_rows_colonne(int row, const TRectype &strec) for (int c = 0; c < _numcol_dati; c++) { const int idx = int(c / _col_anno); + position = POS_PRIMACOL + col*_largcol; for (int t = 0; t < 3; t++) // Ciclo su valore, quantita' e unitario { if (t == 0 && !_st_val) @@ -1007,28 +1107,10 @@ int TStampa_stat::set_rows_colonne(int row, const TRectype &strec) colval /= qta; } - position = POS_PRIMACOL + col*_largcol; - if (t == 1 && _st_qta) - { - if (_st_val) - { - position += LARG_COLVAL; - if (_st_totr) position += LARG_COLPERC; - } - } - if (t == 2 && _st_uni) - { - if (_st_val) - { - position += LARG_COLVAL; - if (_st_totr) position += LARG_COLPERC; - } - if (_st_qta) - { - position += LARG_COLQTA; - if (_st_totr) position += LARG_COLPERC; - } - } + int offset = (t - 1) * 3; + if (offset >= 0) + position += _larg[offset + 0] + _larg[offset + 1] + _larg[offset + 2]; + offset += 3; switch (strec.get_char(SVS_TIPO)) { @@ -1045,20 +1127,18 @@ int TStampa_stat::set_rows_colonne(int row, const TRectype &strec) case COMP_AS_DIFF: if (t < 2) { - r_totc= "+"; - r_totc << PICT; - set_row_atpos('R',row,((real)(last_data.get_real(colname)-strec.get_real(colname))).string(r_totc),position); + set_row_atpos('R',row, colval.string(PICT),position); + set_row_atpos('R',row,((real)(last_data.get_real(colname)-strec.get_real(colname))).string(PICT),position + _larg[offset]); } break; - //?!?! aggiungi_perc=FALSE; case COMP_AS_PERC: if (t < 2) { - position += t == 0 ? LARG_COLVAL : LARG_COLQTA; + set_row_atpos('R',row, colval.string(PICT),position); if (!colval.is_zero()) { - real p = 100.0 * last_data.get_real(colname) / colval; p.round(1); - set_row_atpos('R',row,p.string(PICTURE_PERCENT),position); + real p = 100.0 * (last_data.get_real(colname) - colval) / colval; p.round(1); + set_row_atpos('R',row,p.string(PICTURE_PERCENT),position + _larg[offset] ); } aggiungi_perc=FALSE; } @@ -1070,12 +1150,12 @@ int TStampa_stat::set_rows_colonne(int row, const TRectype &strec) break; } - if (t < 2) + if (t < 2 && strec.get_char(SVS_TIPO) == LINEA_DATI) { // colonna con la percentuale rispetto al totale di riga if (_st_totr && aggiungi_perc && !tot_riga.is_zero()) { - const int pos = position + (t == 0 ? LARG_COLVAL : LARG_COLQTA); + const int pos = position + _larg[offset] + _larg[offset + 1]; real p = 100.0 * colval / tot_riga; p.round(1); set_row_atpos('R',row,p.string(PICTURE_PERCENT),pos); } @@ -1089,27 +1169,29 @@ int TStampa_stat::set_rows_colonne(int row, const TRectype &strec) real p = 100.0 * colval / tot; p.round(1); r_totc = p.string(PICTURE_PERCENT); set_row_atpos('R',row+1,(const char *)r_totc,position+_largcol-LARG_COLPERC); - } else { - // aggiunge comunque una riga vuota per la spaziatura - set_row_atpos('R',row+1,"",0); } + else + set_row_atpos('R',row+1,"",0); + // aggiunge comunque una riga vuota per la spaziatura } // colonna con il totale di un "anno" if (_st_tota && aggiungi_perc && (((c+1)%_col_anno)==0 || c== _numcol_dati-1)) { col++; - - position = POS_PRIMACOL+col*_largcol; + int position_a = position + _largcol; +/* position = POS_PRIMACOL + col*_largcol; if (_st_val && _st_qta && t == 1) { position += LARG_COLVAL; if (_st_totr) position += LARG_COLPERC; } - set_row_atpos('R',row,(const char *)tot_riga.string(PICT),position); +*/ + + set_row_atpos('R',row,(const char *)tot_riga.string(PICT),position_a); if (_st_totr && aggiungi_perc) { - position += t == 0 ? LARG_COLVAL : LARG_COLQTA; - set_row_atpos('R',row,(const char *)real(100).string(PICTURE_PERCENT),position); +// position += t == 0 ? LARG_COLVAL : LARG_COLQTA; + set_row_atpos('R',row,(const char *)real(100).string(PICTURE_PERCENT),position_a + _larg[offset]); } } } @@ -1210,6 +1292,17 @@ int TStampa_stat::handle_levchange(int row, const int level) //_wrk_row.cut(LARG_COLCODICE); there are also @ chars! set_row_atpos('R',++row,(const char *)_wrk_row,_indent[_last_lev_grp]); row = set_rows_colonne(row, rec_grp1); + if (printmask().get_bool(F_STRAFFRONTO )) + { + TRectype& rec_grp_raff=(TRectype &)_group_recs_raff[_last_lev_grp]; + if (_group_recs_raff.objptr(level+1)) + { + const TRectype& rec_grp= (const TRectype&)_group_recs_raff[level+1]; + lencode = rec_grp.get(SVS_CODICE).len(); + } + adjust_record(rec_grp_raff,lencode); + row = set_rows_colonne(++row, rec_grp_raff); + } } } } @@ -1223,6 +1316,7 @@ void TStampa_stat::reset_grplevels() _last_lev_grp = numlevels(); _liv_riga = _last_lev_grp+1; _group_recs.destroy(); + _group_recs_raff.destroy(); int pos=0; for (int l = 0; l <= _last_lev_grp; l++) { @@ -1295,7 +1389,9 @@ bool TStampa_stat::user_create() // cache per l'output _svcache=NULL; - set_real_picture(""); + set_real_picture(""); + + _last_data = new TRectype(LF_SVSTAT); return TRUE; } @@ -1322,6 +1418,7 @@ bool TStampa_stat::user_destroy() delete _agenti; delete _spp; delete _prs; + delete _last_data; delete current_cursor()->relation(); return TRUE; diff --git a/sv/sv2.url b/sv/sv2.url index edcf837eb..c09f821d4 100755 --- a/sv/sv2.url +++ b/sv/sv2.url @@ -2,5 +2,4 @@ #define QAPPNAME "campo" #define QFIRMNAME "A.G.A. Informatica Srl" -#include - +#include diff --git a/sv/sv2100.cpp b/sv/sv2100.cpp index ff787eda4..00b0d4576 100755 --- a/sv/sv2100.cpp +++ b/sv/sv2100.cpp @@ -18,6 +18,7 @@ protected: virtual void on_config_change(); public: + static bool datein_handler(TMask_field& f, KEY k); bool kill_stats(const TDate& dfr, const TDate& dto); void calc_stats(const TDate& dfr, const TDate& dto); }; @@ -121,10 +122,22 @@ void TRicalcolo_stats::calc_stats(const TDate& dfr, const TDate& dto) message_box("Attenzione: l'archivio riepilogativo delle statistiche ora ricalcolato risulta vuoto"); } +bool TRicalcolo_stats::datein_handler(TMask_field& f, KEY k) +{ + if (f.to_check(k)) + { + TConfig prassid(CONFIG_DITTA, "Euro"); + TDate adozione = prassid.get("DataAdozione"); + if (adozione.ok() && f.get() < adozione) + return f.error_box("Impossibile effettuare la ricostruzione statistiche \n a una data inferiore alla data adozione Euro") ; + } + return TRUE; +} void TRicalcolo_stats::main_loop() { TMask m("sv2100a"); + m.set_handler(F_FROMDATE, datein_handler); while (m.run() == K_ENTER) { const TDate dfr(m.get(F_FROMDATE));