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
This commit is contained in:
alex 2001-04-30 15:10:48 +00:00
parent 6c73d4919e
commit a46907a934
5 changed files with 203 additions and 96 deletions

@ -2,5 +2,4 @@
#define QAPPNAME "campo"
#define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url>
#include <mainmenu.url>

@ -2,5 +2,4 @@
#define QAPPNAME "campo"
#define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url>
#include <mainmenu.url>

@ -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;

@ -2,5 +2,4 @@
#define QAPPNAME "campo"
#define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url>
#include <mainmenu.url>

@ -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));