Corretto errore AGA0203.
Uso di costanti simboliche (scorporate dal file sv1200b.h) anziché literal. git-svn-id: svn://10.65.10.50/trunk@5784 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
e536eb791d
commit
04c19ca632
217
sv/sv1200.cpp
217
sv/sv1200.cpp
@ -19,6 +19,44 @@
|
|||||||
#include "..\pr\agenti.h"
|
#include "..\pr\agenti.h"
|
||||||
#include "..\ve\clifor.h"
|
#include "..\ve\clifor.h"
|
||||||
|
|
||||||
|
#define STR_TOTGEN "T"
|
||||||
|
#define STR_TIPODOC "D"
|
||||||
|
#define STR_UMISURA "U"
|
||||||
|
#define STR_ARTICOLO "A"
|
||||||
|
#define STR_LIVGIAC "L"
|
||||||
|
#define STR_CATVEN "V"
|
||||||
|
#define STR_CLIFOR "C"
|
||||||
|
#define STR_AGENTE "G"
|
||||||
|
#define STR_MAGAZZ "M"
|
||||||
|
#define STR_ZONA "Z"
|
||||||
|
|
||||||
|
#define CHR_TOTGEN 'T'
|
||||||
|
#define CHR_TIPODOC 'D'
|
||||||
|
#define CHR_UMISURA 'U'
|
||||||
|
#define CHR_ARTICOLO 'A'
|
||||||
|
#define CHR_LIVGIAC 'L'
|
||||||
|
#define CHR_CATVEN 'V'
|
||||||
|
#define CHR_CLIFOR 'C'
|
||||||
|
#define CHR_CLI 'C'
|
||||||
|
#define CHR_FOR 'F'
|
||||||
|
#define CHR_AGENTE 'G'
|
||||||
|
#define CHR_MAGAZZ 'M'
|
||||||
|
#define CHR_ZONA 'Z'
|
||||||
|
|
||||||
|
#define COMP_AS_VALUE 'V'
|
||||||
|
#define COMP_AS_DIFF 'D'
|
||||||
|
#define COMP_AS_PERC 'P'
|
||||||
|
|
||||||
|
//#define RIGA_MERCE "M"
|
||||||
|
//#define RIGA_PRESTAZIONI "P"
|
||||||
|
//#define RIGA_OMAGGI "O"
|
||||||
|
|
||||||
|
#define COLONNA_VALORE "V"
|
||||||
|
#define COLONNA_QTA "Q"
|
||||||
|
|
||||||
|
#define ALG_VALORI 'V'
|
||||||
|
#define ALG_PROGRESSIVI 'P'
|
||||||
|
#define ALG_MOBILI 'M'
|
||||||
|
|
||||||
#define LARG_COLCODICE 49
|
#define LARG_COLCODICE 49
|
||||||
#define POS_PRIMACOL 51
|
#define POS_PRIMACOL 51
|
||||||
@ -29,7 +67,7 @@
|
|||||||
#define PICTURE_PERCENT "###@,@"
|
#define PICTURE_PERCENT "###@,@"
|
||||||
#define LARG_COLPERC 8
|
#define LARG_COLPERC 8
|
||||||
|
|
||||||
#define PICTURE (selmask().get(F_TIPODATO)[0] =='V'? PICTURE_VALORI:PICTURE_QUANTITA)
|
#define PICTURE (selmask().get(F_TIPODATO) ==COLONNA_VALORE ? PICTURE_VALORI:PICTURE_QUANTITA)
|
||||||
|
|
||||||
|
|
||||||
#define FORMWIDTH 150
|
#define FORMWIDTH 150
|
||||||
@ -330,7 +368,7 @@ class TStampa_stat : public TPrint_application
|
|||||||
|
|
||||||
// ******************
|
// ******************
|
||||||
// costruzione file di Output
|
// costruzione file di Output
|
||||||
TStat_cache * _cache; // cache R/W per le statistiche
|
TStat_cache * _svcache; // cache R/W per le statistiche
|
||||||
|
|
||||||
int _last_lev_grp, // livello dell'ultimo raggruppamento incontrato
|
int _last_lev_grp, // livello dell'ultimo raggruppamento incontrato
|
||||||
_liv_riga; // livello della riga
|
_liv_riga; // livello della riga
|
||||||
@ -460,7 +498,7 @@ bool TStampa_stat::set_print(int i)
|
|||||||
_st_totr=printmask().get_bool(F_STTOTALIRIGA);
|
_st_totr=printmask().get_bool(F_STTOTALIRIGA);
|
||||||
_st_totc=printmask().get_bool(F_STTOTALICOL);
|
_st_totc=printmask().get_bool(F_STTOTALICOL);
|
||||||
_st_tota=printmask().get_bool(F_STTOTALIANNO);
|
_st_tota=printmask().get_bool(F_STTOTALIANNO);
|
||||||
_largcol = (_st_totr ? LARG_COLPERC : 0 ) + (selmask().get(F_TIPODATO)[0]=='V' ? LARG_COLVAL : LARG_COLQTA); // valori o quantità
|
_largcol = (_st_totr ? LARG_COLPERC : 0 ) + (selmask().get(F_TIPODATO)==COLONNA_VALORE ? LARG_COLVAL : LARG_COLQTA); // valori o quantità
|
||||||
_numcol_dati = selmask().get_int(F_PERIODO);
|
_numcol_dati = selmask().get_int(F_PERIODO);
|
||||||
_col_anno =min(_numcol_dati,printmask().get_int(F_COLANNO)); //numero di colonne che formano un "Anno"
|
_col_anno =min(_numcol_dati,printmask().get_int(F_COLANNO)); //numero di colonne che formano un "Anno"
|
||||||
_numcol = _numcol_dati+ (_st_tota ? int((_numcol_dati -1)/_col_anno+1) : 0);
|
_numcol = _numcol_dati+ (_st_tota ? int((_numcol_dati -1)/_col_anno+1) : 0);
|
||||||
@ -670,7 +708,8 @@ void TStampa_stat::set_page(int file, int count)
|
|||||||
// fa le set row per la "riga" contenente i valori delle colonne di statistica
|
// fa le set row per la "riga" contenente i valori delle colonne di statistica
|
||||||
int TStampa_stat::set_rows_colonne(int row,TRectype &strec)
|
int TStampa_stat::set_rows_colonne(int row,TRectype &strec)
|
||||||
{
|
{
|
||||||
static TRectype last_data(LF_SVSTAT);
|
// !!!!!!!!! static
|
||||||
|
TRectype last_data(LF_SVSTAT);
|
||||||
TString colname,r_totc;
|
TString colname,r_totc;
|
||||||
real col_value;
|
real col_value;
|
||||||
bool aggiungi_perc=TRUE;
|
bool aggiungi_perc=TRUE;
|
||||||
@ -679,7 +718,7 @@ int TStampa_stat::set_rows_colonne(int row,TRectype &strec)
|
|||||||
// **********
|
// **********
|
||||||
// setta i totali di riga
|
// setta i totali di riga
|
||||||
if (strec.get_char(SVS_TIPO)==LINEA_DATI ||
|
if (strec.get_char(SVS_TIPO)==LINEA_DATI ||
|
||||||
strec.get_char(SVS_TIPO)==LINEA_RAFFRONTI && printmask().get(F_TIPORAFFRONTO)[0]==AS_VALUE)
|
strec.get_char(SVS_TIPO)==LINEA_RAFFRONTI && printmask().get(F_TIPORAFFRONTO)[0]==COMP_AS_VALUE)
|
||||||
{
|
{
|
||||||
for (col=0; col < _numcol_dati; col++)
|
for (col=0; col < _numcol_dati; col++)
|
||||||
{
|
{
|
||||||
@ -707,16 +746,16 @@ int TStampa_stat::set_rows_colonne(int row,TRectype &strec)
|
|||||||
case LINEA_RAFFRONTI:
|
case LINEA_RAFFRONTI:
|
||||||
switch (printmask().get(F_TIPORAFFRONTO)[0])
|
switch (printmask().get(F_TIPORAFFRONTO)[0])
|
||||||
{
|
{
|
||||||
case AS_VALUE:
|
case COMP_AS_VALUE:
|
||||||
set_row_atpos('R',row, strec.get_real(colname).string(PICTURE),position);
|
set_row_atpos('R',row, strec.get_real(colname).string(PICTURE),position);
|
||||||
break;
|
break;
|
||||||
case AS_DIFF:
|
case COMP_AS_DIFF:
|
||||||
r_totc= "+";
|
r_totc= "+";
|
||||||
r_totc << PICTURE;
|
r_totc << PICTURE;
|
||||||
set_row_atpos('R',row,((real)(last_data.get_real(colname)-strec.get_real(colname))).string(r_totc),position);
|
set_row_atpos('R',row,((real)(last_data.get_real(colname)-strec.get_real(colname))).string(r_totc),position);
|
||||||
break;
|
break;
|
||||||
//?!?! aggiungi_perc=FALSE;
|
//?!?! aggiungi_perc=FALSE;
|
||||||
case AS_PERC:
|
case COMP_AS_PERC:
|
||||||
position = POS_PRIMACOL+col*_largcol+(_largcol-LARG_COLPERC);
|
position = POS_PRIMACOL+col*_largcol+(_largcol-LARG_COLPERC);
|
||||||
if (!strec.get_real(colname).is_zero())
|
if (!strec.get_real(colname).is_zero())
|
||||||
set_row_atpos('R',row,((real)(100*last_data.get_real(colname)/strec.get_real(colname))).string(PICTURE_PERCENT),position);
|
set_row_atpos('R',row,((real)(100*last_data.get_real(colname)/strec.get_real(colname))).string(PICTURE_PERCENT),position);
|
||||||
@ -806,7 +845,8 @@ int TStampa_stat::handle_levchange(int row,const int level)
|
|||||||
{
|
{
|
||||||
// ho lasciato un livello "basso"
|
// ho lasciato un livello "basso"
|
||||||
_last_lev_grp++;
|
_last_lev_grp++;
|
||||||
if (_last_lev_grp > _liv_riga && printmask().get_bool(F_FLAGSTOTALI+numlevels()-_last_lev_grp))
|
if (_last_lev_grp > _liv_riga && printmask().get_bool(F_FLAGSTOTALI+numlevels()-_last_lev_grp)
|
||||||
|
|| _last_lev_grp==numlevels())
|
||||||
{
|
{
|
||||||
TRectype & rec_grp1=(TRectype &)_group_recs[_last_lev_grp];
|
TRectype & rec_grp1=(TRectype &)_group_recs[_last_lev_grp];
|
||||||
int lencode=0;
|
int lencode=0;
|
||||||
@ -900,7 +940,7 @@ bool TStampa_stat::user_create()
|
|||||||
add_cursor(new TCursor(new TRelation(LF_SVSTAT)));
|
add_cursor(new TCursor(new TRelation(LF_SVSTAT)));
|
||||||
|
|
||||||
// cache per l'output
|
// cache per l'output
|
||||||
_cache=NULL;
|
_svcache=NULL;
|
||||||
|
|
||||||
set_real_picture("");
|
set_real_picture("");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -935,6 +975,8 @@ bool TStampa_stat::menu(MENU_TAG )
|
|||||||
KEY k;
|
KEY k;
|
||||||
while ((k = m.run()) != K_QUIT)
|
while ((k = m.run()) != K_QUIT)
|
||||||
{
|
{
|
||||||
|
_numcol_dati = m.get_int(F_PERIODO);
|
||||||
|
|
||||||
set_column_frequency();
|
set_column_frequency();
|
||||||
|
|
||||||
_key.cut(0);
|
_key.cut(0);
|
||||||
@ -974,11 +1016,11 @@ void TStampa_stat::fill_field_list(TMask& m)
|
|||||||
// opzioni per il tipo di dato
|
// opzioni per il tipo di dato
|
||||||
TList_field& tipoart = (TList_field&)m.field(F_TIPOART);
|
TList_field& tipoart = (TList_field&)m.field(F_TIPOART);
|
||||||
TToken_string codes, descr;
|
TToken_string codes, descr;
|
||||||
codes = "M|P";
|
codes << RIGA_MERCE << '|' << RIGA_PRESTAZIONI;
|
||||||
descr = "Merce|Prestazioni";
|
descr = "Merce|Prestazioni";
|
||||||
if (!_stats.omaggio_is_merce())
|
if (!_stats.omaggio_is_merce())
|
||||||
{
|
{
|
||||||
codes.add("O");
|
codes.add(RIGA_OMAGGI);
|
||||||
descr.add("Omaggi");
|
descr.add("Omaggi");
|
||||||
}
|
}
|
||||||
tipoart.replace_items(codes, descr);
|
tipoart.replace_items(codes, descr);
|
||||||
@ -998,7 +1040,7 @@ void TStampa_stat::fill_field_list(TMask& m)
|
|||||||
if (l && !cal.enabled(l))
|
if (l && !cal.enabled(l))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
row = "A";
|
row = STR_ARTICOLO;
|
||||||
if (l) row << l;
|
if (l) row << l;
|
||||||
|
|
||||||
row.add("Codice articolo");
|
row.add("Codice articolo");
|
||||||
@ -1013,7 +1055,7 @@ void TStampa_stat::fill_field_list(TMask& m)
|
|||||||
if (l && !cgl.enabled(l))
|
if (l && !cgl.enabled(l))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
row = "L";
|
row = STR_LIVGIAC;
|
||||||
if (l) row << l;
|
if (l) row << l;
|
||||||
|
|
||||||
row.add("Livello giacenza");
|
row.add("Livello giacenza");
|
||||||
@ -1141,29 +1183,34 @@ void TStampa_stat::update_file(const char * key, const char *lev_code,const char
|
|||||||
{
|
{
|
||||||
CHECK(col>=0,"Le colonne partono da 0");
|
CHECK(col>=0,"Le colonne partono da 0");
|
||||||
|
|
||||||
static TRectype statrec(LF_SVSTAT);
|
// !!!!!!!!!static
|
||||||
|
TRectype statrec(LF_SVSTAT);
|
||||||
|
|
||||||
TToken_string cachekey(key);
|
TToken_string cachekey(key);
|
||||||
cachekey.rtrim(); // necessario perché la chiave sia buona per l'hash table
|
cachekey.rtrim(); // necessario perché la chiave sia buona per l'hash table
|
||||||
if (cachekey.blank())
|
if (cachekey.blank())
|
||||||
cachekey.add(" ");
|
cachekey.add(" ");
|
||||||
cachekey.add(tipo_dato);
|
cachekey.add(tipo_dato);
|
||||||
statrec = _cache->get(cachekey);
|
|
||||||
if (_cache->io_result()!=NOERR)
|
statrec = _svcache->get(cachekey);
|
||||||
|
if (_svcache->io_result()!=NOERR)
|
||||||
{
|
{
|
||||||
// nuovo record;
|
// nuovo record;
|
||||||
statrec.put(SVS_CODICE,key);
|
statrec.put(SVS_CODICE,key);
|
||||||
statrec.put(SVS_LEVCODE,lev_code);
|
statrec.put(SVS_LEVCODE,lev_code);
|
||||||
statrec.put(SVS_LIVELLO,level);
|
statrec.put(SVS_LIVELLO,level);
|
||||||
statrec.put(SVS_TIPO,tipo_dato);
|
statrec.put(SVS_TIPO,tipo_dato);
|
||||||
if (_msk->get(F_TIPODATO)=="Q")
|
if (_msk->get(F_TIPODATO)==COLONNA_QTA)
|
||||||
statrec.put(SVS_UMQTA,curr.get(SVR_UMQTA));
|
statrec.put(SVS_UMQTA,curr.get(SVR_UMQTA));
|
||||||
}
|
}
|
||||||
if (*lev_code== 'T') // totale generale
|
if (*lev_code== CHR_TOTGEN) // totale generale
|
||||||
statrec.put(SVS_DESCR,"");
|
statrec.put(SVS_DESCR,"");
|
||||||
else
|
else
|
||||||
statrec.put(SVS_DESCR,get_descrpart(lev_code,curr).left(SVS_LEN_DESCR));
|
statrec.put(SVS_DESCR,get_descrpart(lev_code,curr).left(SVS_LEN_DESCR));
|
||||||
put_column(statrec,col,curr);
|
put_column(statrec,col,curr);
|
||||||
_cache->put(statrec);
|
|
||||||
|
_svcache->put(statrec);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// aggiorna la colonna del record statrec con i dati di SVriep
|
// aggiorna la colonna del record statrec con i dati di SVriep
|
||||||
@ -1175,7 +1222,7 @@ void TStampa_stat::put_column(TRectype & statrec,int col,TSVriep_record& rieprec
|
|||||||
colname=SVS_COLNAME;
|
colname=SVS_COLNAME;
|
||||||
colname << col;
|
colname << col;
|
||||||
r=statrec.get_real(colname);
|
r=statrec.get_real(colname);
|
||||||
if (_msk->get(F_TIPODATO)=="V")
|
if (_msk->get(F_TIPODATO)==COLONNA_VALORE)
|
||||||
{
|
{
|
||||||
r+=rieprec.get_real(SVR_VALORE);
|
r+=rieprec.get_real(SVR_VALORE);
|
||||||
statrec.put(colname,r);
|
statrec.put(colname,r);
|
||||||
@ -1202,7 +1249,7 @@ void TStampa_stat::standardize_um(TSVriep_record& rieprec, bool force)
|
|||||||
{
|
{
|
||||||
static TString um;
|
static TString um;
|
||||||
real fc;
|
real fc;
|
||||||
if (rieprec.get(SVR_TIPOART)=="M")
|
if (rieprec.get_char(SVR_TIPOART)==RIGA_MERCE)
|
||||||
{
|
{
|
||||||
// è un articolo (<M>erce); converto alla UM principale dell'art.
|
// è un articolo (<M>erce); converto alla UM principale dell'art.
|
||||||
_umart->setkey(1);
|
_umart->setkey(1);
|
||||||
@ -1235,7 +1282,7 @@ const real TStampa_stat::fc_um(TRectype & statrec,const TSVriep_record& rieprec)
|
|||||||
if (um!=statrec.get(SVS_UMQTA))
|
if (um!=statrec.get(SVS_UMQTA))
|
||||||
{
|
{
|
||||||
// converte in base alla UM di riferimento in tabella
|
// converte in base alla UM di riferimento in tabella
|
||||||
if (rieprec.get(SVR_TIPOART)=="M")
|
if (rieprec.get_char(SVR_TIPOART)==RIGA_MERCE)
|
||||||
{
|
{
|
||||||
// è un articolo (<M>erce)
|
// è un articolo (<M>erce)
|
||||||
_umart->setkey(2);
|
_umart->setkey(2);
|
||||||
@ -1296,12 +1343,12 @@ bool TStampa_stat::filtro_chiavi(TSVriep_record &curr)
|
|||||||
int val_intero;
|
int val_intero;
|
||||||
|
|
||||||
code_campo=s_chiave.cell(l,s_chiave.cid2index(S_CAMPO));
|
code_campo=s_chiave.cell(l,s_chiave.cid2index(S_CAMPO));
|
||||||
if (code_campo=="C") // cliente/fornitore ha in testa il TIPOCF
|
if (code_campo==STR_CLIFOR) // cliente/fornitore ha in testa il TIPOCF
|
||||||
{
|
{
|
||||||
// ok &= curr.get_char(SVR_TIPOCF)==; !?!?! manca la selezione dei soli cli o for
|
// ok &= curr.get_char(SVR_TIPOCF)==; !?!?! manca la selezione dei soli cli o for
|
||||||
val_intero=atoi(get_part(code_campo,curr)+1);
|
val_intero=atoi(get_part(code_campo,curr)+1);
|
||||||
}
|
}
|
||||||
else if (code_campo=="G") // agente è numerico
|
else if (code_campo==STR_AGENTE) // agente è numerico
|
||||||
val_intero=atoi(get_part(code_campo,curr));
|
val_intero=atoi(get_part(code_campo,curr));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1310,14 +1357,14 @@ bool TStampa_stat::filtro_chiavi(TSVriep_record &curr)
|
|||||||
}
|
}
|
||||||
if (!(est1=s_chiave.cell(l,s_chiave.cid2index(S_DAL))).blank())
|
if (!(est1=s_chiave.cell(l,s_chiave.cid2index(S_DAL))).blank())
|
||||||
{
|
{
|
||||||
if (code_campo=="C" || code_campo=="G") // cliente/fornitore o agente sono numerici
|
if (code_campo==STR_CLIFOR || code_campo==STR_AGENTE) // cliente/fornitore o agente sono numerici
|
||||||
ok &= val_intero>=atoi((const char *)est1);
|
ok &= val_intero>=atoi((const char *)est1);
|
||||||
else
|
else
|
||||||
ok &= val_stringa>=est1;
|
ok &= val_stringa>=est1;
|
||||||
}
|
}
|
||||||
if (ok && !(est2=s_chiave.cell(l,s_chiave.cid2index(S_AL))).blank())
|
if (ok && !(est2=s_chiave.cell(l,s_chiave.cid2index(S_AL))).blank())
|
||||||
{
|
{
|
||||||
if (code_campo=="C" || code_campo=="G") // cliente/fornitore o agente sono numerici
|
if (code_campo==STR_CLIFOR || code_campo==STR_AGENTE) // cliente/fornitore o agente sono numerici
|
||||||
ok &= val_intero<=atoi((const char *)est2);
|
ok &= val_intero<=atoi((const char *)est2);
|
||||||
else
|
else
|
||||||
ok &= val_stringa<=est2;
|
ok &= val_stringa<=est2;
|
||||||
@ -1333,7 +1380,7 @@ void TStampa_stat::set_ragg_per_um()
|
|||||||
TSheet_field & s_chiave = selmask().sfield(F_CHIAVE);
|
TSheet_field & s_chiave = selmask().sfield(F_CHIAVE);
|
||||||
for (int l=0; l< s_chiave.items(); l++)
|
for (int l=0; l< s_chiave.items(); l++)
|
||||||
{
|
{
|
||||||
if (*s_chiave.cell(l,s_chiave.cid2index(S_CAMPO))=='U')
|
if (*s_chiave.cell(l,s_chiave.cid2index(S_CAMPO))==CHR_UMISURA)
|
||||||
{
|
{
|
||||||
_ragg_per_um=FALSE;
|
_ragg_per_um=FALSE;
|
||||||
return;
|
return;
|
||||||
@ -1348,15 +1395,14 @@ void TStampa_stat::genera_file(const char *outfn)
|
|||||||
TString key; // chiave per il record del file statistiche
|
TString key; // chiave per il record del file statistiche
|
||||||
const TMask& m = selmask();
|
const TMask& m = selmask();
|
||||||
const char alg=m.get(F_TIPOCALC)[0];
|
const char alg=m.get(F_TIPOCALC)[0];
|
||||||
const int first_col = - (alg=='M' ? _col_anno-1:0); // prima colonna dati da osservare
|
const int first_col = - (alg==ALG_MOBILI ? _col_anno-1:0); // prima colonna dati da osservare
|
||||||
const int first_raffr = -m.get_int(F_RAFFRONTO)- (alg=='M' ? _col_anno-1:0);// prima colonna dati da confrontare
|
const int first_raffr = -m.get_int(F_RAFFRONTO)- (alg==ALG_MOBILI ? _col_anno-1:0);// prima colonna dati da confrontare
|
||||||
const int first_data = first_raffr ; // prima colonna dati
|
const int first_data = first_raffr ; // prima colonna dati
|
||||||
TSheet_field & s_chiave = m.sfield(F_CHIAVE);
|
TSheet_field & s_chiave = m.sfield(F_CHIAVE);
|
||||||
|
|
||||||
|
|
||||||
// file di OUTPUT
|
// file di OUTPUT
|
||||||
_cache= new TStat_cache(new TIsamtempfile(LF_SVSTAT,outfn,TRUE,FALSE));
|
_svcache= new TStat_cache(new TIsamtempfile(LF_SVSTAT,outfn,TRUE,FALSE));
|
||||||
|
|
||||||
// file di INPUT
|
// file di INPUT
|
||||||
TLocalisamfile riep(LF_SVRIEP);
|
TLocalisamfile riep(LF_SVRIEP);
|
||||||
riep.set_curr(new TSVriep_record);
|
riep.set_curr(new TSVriep_record);
|
||||||
@ -1375,7 +1421,7 @@ void TStampa_stat::genera_file(const char *outfn)
|
|||||||
TProgind statusbar(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status
|
TProgind statusbar(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status
|
||||||
, "Creazione del file di output", FALSE, TRUE, 60);
|
, "Creazione del file di output", FALSE, TRUE, 60);
|
||||||
|
|
||||||
_cache->zap();
|
_svcache->zap();
|
||||||
|
|
||||||
// **********************
|
// **********************
|
||||||
// ciclo principale: scorre il riepilogo statistiche per anno+periodo
|
// ciclo principale: scorre il riepilogo statistiche per anno+periodo
|
||||||
@ -1405,12 +1451,12 @@ void TStampa_stat::genera_file(const char *outfn)
|
|||||||
levcode=s_chiave.cell(l,s_chiave.cid2index(S_CAMPO));
|
levcode=s_chiave.cell(l,s_chiave.cid2index(S_CAMPO));
|
||||||
key << get_part(levcode,curr);
|
key << get_part(levcode,curr);
|
||||||
// setta il range in base all'algoritmo (Valori/progressivi/mobili)
|
// setta il range in base all'algoritmo (Valori/progressivi/mobili)
|
||||||
const int range=(alg=='V'? col : alg=='P' ? ((1+int(col/_col_anno))*_col_anno-1) : (col+_col_anno-1));
|
const int range=(alg==ALG_VALORI ? col : alg==ALG_PROGRESSIVI ? ((1+int(col/_col_anno))*_col_anno-1) : (col+_col_anno-1));
|
||||||
if (col>=first_col) // periodo da osservare
|
if (col>=first_col) // periodo da osservare
|
||||||
{
|
{
|
||||||
if (l==0)
|
if (l==0)
|
||||||
for (int c=max(col,0);c <= range ; c++)
|
for (int c=max(col,0);c <= range ; c++)
|
||||||
update_file(" ","T",LINEA_DATI,num_liv_output,c,curr);
|
update_file(" ",STR_TOTGEN,LINEA_DATI,num_liv_output,c,curr);
|
||||||
if (*s_chiave.cell(l,s_chiave.cid2index(S_TOTALE))=='X')
|
if (*s_chiave.cell(l,s_chiave.cid2index(S_TOTALE))=='X')
|
||||||
for (int c=max(col,0);c <= range ; c++)
|
for (int c=max(col,0);c <= range ; c++)
|
||||||
update_file(key,levcode,LINEA_DATI,num_liv_output-l-1,c,curr);
|
update_file(key,levcode,LINEA_DATI,num_liv_output-l-1,c,curr);
|
||||||
@ -1419,7 +1465,7 @@ void TStampa_stat::genera_file(const char *outfn)
|
|||||||
{
|
{
|
||||||
if (l==0)
|
if (l==0)
|
||||||
for (int c=max(col,0); c <= range; c++)
|
for (int c=max(col,0); c <= range; c++)
|
||||||
update_file(" Totale","T",LINEA_RAFFRONTI, num_liv_output , c -first_raffr,curr);
|
update_file(" Totale",STR_TOTGEN,LINEA_RAFFRONTI, num_liv_output , c -first_raffr,curr);
|
||||||
if (*s_chiave.cell(l,s_chiave.cid2index(S_TOTALE))=='X')
|
if (*s_chiave.cell(l,s_chiave.cid2index(S_TOTALE))=='X')
|
||||||
for (int c=max(col,0); c <= range; c++)
|
for (int c=max(col,0); c <= range; c++)
|
||||||
update_file(key,levcode,LINEA_RAFFRONTI,num_liv_output-l-1, c -first_raffr , curr);
|
update_file(key,levcode,LINEA_RAFFRONTI,num_liv_output-l-1, c -first_raffr , curr);
|
||||||
@ -1429,8 +1475,8 @@ void TStampa_stat::genera_file(const char *outfn)
|
|||||||
} // filtro
|
} // filtro
|
||||||
} // ciclo
|
} // ciclo
|
||||||
statusbar.setstatus(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status);
|
statusbar.setstatus(date2long(m.get_date(F_DATAFIN),_stats.frequency())-start_status);
|
||||||
_cache->flush();
|
_svcache->flush();
|
||||||
delete _cache;
|
delete _svcache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1438,22 +1484,31 @@ void TStampa_stat::set_printmask()
|
|||||||
{
|
{
|
||||||
TMask &mp=selmask();
|
TMask &mp=selmask();
|
||||||
|
|
||||||
|
// visualizza i checkbox per i totali
|
||||||
const nlivelli=mp.sfield(F_CHIAVE).items();
|
const nlivelli=mp.sfield(F_CHIAVE).items();
|
||||||
TString80 nomeliv;
|
TString80 nomeliv;
|
||||||
printmask().field(F_FLAGSTOTALI).set("X");
|
printmask().field(F_FLAGSTOTALI).set("X");
|
||||||
for (int f=0; f<MAX_ROWS; f++)
|
for (int f=0; f<MAX_ROWS; f++)
|
||||||
{
|
{
|
||||||
TMask_field & flfl=printmask().field(F_FLAGSTOTALI+f+1);
|
TMask_field & flfl=printmask().field(F_FLAGSTOTALI+f+1);
|
||||||
if (f<nlivelli)
|
if (f<nlivelli )
|
||||||
{
|
{
|
||||||
nomeliv="Stampa totale ";
|
nomeliv="Stampa totale ";
|
||||||
nomeliv << partkey_name(mp.sfield(F_CHIAVE).cell(f,mp.sfield(F_CHIAVE).cid2index(S_CAMPO)));
|
nomeliv << partkey_name(mp.sfield(F_CHIAVE).cell(f,mp.sfield(F_CHIAVE).cid2index(S_CAMPO)));
|
||||||
flfl.set_prompt(nomeliv);
|
flfl.set_prompt(nomeliv);
|
||||||
flfl.show();
|
flfl.show();
|
||||||
|
if (*mp.sfield(F_CHIAVE).cell(f,mp.sfield(F_CHIAVE).cid2index(S_TOTALE))!=' ')
|
||||||
|
{
|
||||||
|
flfl.enable();
|
||||||
flfl.set("X");
|
flfl.set("X");
|
||||||
|
} else {
|
||||||
|
flfl.disable();
|
||||||
|
flfl.set(" ");
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
flfl.hide();
|
flfl.hide();
|
||||||
}
|
}
|
||||||
|
// campi per il raffronto
|
||||||
if (mp.get_date(F_DATARAF).empty())
|
if (mp.get_date(F_DATARAF).empty())
|
||||||
{
|
{
|
||||||
printmask().field(F_STRAFFRONTO).hide();
|
printmask().field(F_STRAFFRONTO).hide();
|
||||||
@ -1462,6 +1517,7 @@ void TStampa_stat::set_printmask()
|
|||||||
printmask().field(F_STRAFFRONTO).show();
|
printmask().field(F_STRAFFRONTO).show();
|
||||||
printmask().field(F_TIPORAFFRONTO).show();
|
printmask().field(F_TIPORAFFRONTO).show();
|
||||||
}
|
}
|
||||||
|
// visualizza ed eventualmente abilita il campo colonne in un anno
|
||||||
printmask().field(F_COLANNO).set(mp.get(F_COL_ANNO));
|
printmask().field(F_COLANNO).set(mp.get(F_COL_ANNO));
|
||||||
if (mp.field(F_COL_ANNO).enabled()) // venduto, no progressivo o mobile
|
if (mp.field(F_COL_ANNO).enabled()) // venduto, no progressivo o mobile
|
||||||
{
|
{
|
||||||
@ -1478,41 +1534,42 @@ const TString& TStampa_stat::partkey_name(const char *lev_code)
|
|||||||
int lev_code_num=atoi(lev_code+1);
|
int lev_code_num=atoi(lev_code+1);
|
||||||
switch (*lev_code)
|
switch (*lev_code)
|
||||||
{
|
{
|
||||||
case 'D': // tipo documento
|
|
||||||
|
case CHR_TIPODOC: // tipo documento
|
||||||
park="tipo documento";
|
park="tipo documento";
|
||||||
break;
|
break;
|
||||||
case 'A': // articolo
|
case CHR_ARTICOLO: // articolo
|
||||||
if (lev_code_num)
|
if (lev_code_num)
|
||||||
park =_liv_art->name(lev_code_num);
|
park =_liv_art->name(lev_code_num);
|
||||||
else
|
else
|
||||||
park="articolo";
|
park="articolo";
|
||||||
break;
|
break;
|
||||||
case 'L': // liv giac
|
case CHR_LIVGIAC: // liv giac
|
||||||
CHECK(lev_code_num>0,"I livelli di giacenza sono utilizzabili solo singolarmente");
|
CHECK(lev_code_num>0,"I livelli di giacenza sono utilizzabili solo singolarmente");
|
||||||
park =_liv_giac->name(lev_code_num);
|
park =_liv_giac->name(lev_code_num);
|
||||||
break;
|
break;
|
||||||
case 'V': // cat. vendita
|
case CHR_CATVEN: // cat. vendita
|
||||||
park="categoria di vendita";
|
park="categoria di vendita";
|
||||||
break;
|
break;
|
||||||
case 'C': // cliente / fornitore
|
case CHR_CLI: // cliente
|
||||||
park="cliente ";
|
park="cliente ";
|
||||||
break;
|
break;
|
||||||
case 'F': // cliente / fornitore
|
case CHR_FOR: // fornitore
|
||||||
park="fornitore";
|
park="fornitore";
|
||||||
break;
|
break;
|
||||||
case 'G': // agente
|
case CHR_AGENTE: // agente
|
||||||
park="agente";
|
park="agente";
|
||||||
break;
|
break;
|
||||||
case 'M': // mag
|
case CHR_MAGAZZ: // mag
|
||||||
park="magazzino";
|
park="magazzino";
|
||||||
break;
|
break;
|
||||||
case 'Z': // zona
|
case CHR_ZONA: // zona
|
||||||
park="zona";
|
park="zona";
|
||||||
break;
|
break;
|
||||||
case 'U': // unità di misura
|
case CHR_UMISURA: // unità di misura
|
||||||
park="unita' di misura";
|
park="unita' di misura";
|
||||||
break;
|
break;
|
||||||
case 'T': // totale generale
|
case CHR_TOTGEN: // totale generale
|
||||||
park="generale";
|
park="generale";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1526,10 +1583,10 @@ const TString& TStampa_stat::partkey_name(const char *lev_code)
|
|||||||
void TStampa_stat::adjust_record(TRectype &strec, int from) const
|
void TStampa_stat::adjust_record(TRectype &strec, int from) const
|
||||||
{
|
{
|
||||||
char lev_code=strec.get_char(SVS_LEVCODE);
|
char lev_code=strec.get_char(SVS_LEVCODE);
|
||||||
if (lev_code=='F' || lev_code=='C')
|
if (lev_code==CHR_CLIFOR)
|
||||||
{
|
{
|
||||||
TString &s =(TString &)strec.get(SVS_CODICE).mid(from);
|
TString &s =(TString &)strec.get(SVS_CODICE).mid(from);
|
||||||
lev_code=s.shift();
|
while ((lev_code=s.shift())==' ');
|
||||||
strec.put(SVS_CODICE,s);
|
strec.put(SVS_CODICE,s);
|
||||||
strec.put(SVS_LEVCODE,lev_code);
|
strec.put(SVS_LEVCODE,lev_code);
|
||||||
}
|
}
|
||||||
@ -1543,9 +1600,9 @@ const TString& TStampa_stat::get_part(TString & lev_code, TSVriep_record &riepre
|
|||||||
int lev_code_num=atoi(lev_code+1);
|
int lev_code_num=atoi(lev_code+1);
|
||||||
switch (lev_code[0])
|
switch (lev_code[0])
|
||||||
{
|
{
|
||||||
case 'D': // tipo documento
|
case CHR_TIPODOC: // tipo documento
|
||||||
return rieprec.get(SVR_TIPODOC);
|
return rieprec.get(SVR_TIPODOC);
|
||||||
case 'A': // articolo
|
case CHR_ARTICOLO: // articolo
|
||||||
if (lev_code_num==0)
|
if (lev_code_num==0)
|
||||||
{
|
{
|
||||||
park=rieprec.get(SVR_CODART);
|
park=rieprec.get(SVR_CODART);
|
||||||
@ -1556,29 +1613,29 @@ const TString& TStampa_stat::get_part(TString & lev_code, TSVriep_record &riepre
|
|||||||
park =_liv_art->unpack_grpcode(rieprec.get(SVR_CODART),lev_code_num);
|
park =_liv_art->unpack_grpcode(rieprec.get(SVR_CODART),lev_code_num);
|
||||||
return park.rpad(_liv_art->code_length(lev_code_num));
|
return park.rpad(_liv_art->code_length(lev_code_num));
|
||||||
}
|
}
|
||||||
case 'L': // liv giac
|
case CHR_LIVGIAC: // liv giac
|
||||||
CHECK(lev_code_num>0,"I livelli di giacenza sono utilizzabili solo singolarmente");
|
CHECK(lev_code_num>0,"I livelli di giacenza sono utilizzabili solo singolarmente");
|
||||||
park = _liv_giac->unpack_grpcode(rieprec.get(SVR_GIAC),lev_code_num);
|
park = _liv_giac->unpack_grpcode(rieprec.get(SVR_GIAC),lev_code_num);
|
||||||
return park.rpad(_liv_giac->code_length(lev_code_num));
|
return park.rpad(_liv_giac->code_length(lev_code_num));
|
||||||
case 'V': // cat. vendita
|
case CHR_CATVEN: // cat. vendita
|
||||||
park=rieprec.get(SVR_CATVEN);
|
park=rieprec.get(SVR_CATVEN);
|
||||||
return park.rpad(3);
|
return park.rpad(3);
|
||||||
case 'F': // cliente / fornitore
|
case CHR_FOR: // cliente / fornitore
|
||||||
case 'C': // cliente / fornitore
|
case CHR_CLI: // cliente / fornitore
|
||||||
if (rieprec.get_char(SVR_TIPOCF)>' ')
|
if (rieprec.get_char(SVR_TIPOCF)>' ')
|
||||||
lev_code[0]=rieprec.get_char(SVR_TIPOCF);
|
lev_code[0]=rieprec.get_char(SVR_TIPOCF);
|
||||||
park.format("%c%6d",lev_code[0],rieprec.get_int(SVR_CODCF));
|
park.format("%c%6d",lev_code[0],rieprec.get_int(SVR_CODCF));
|
||||||
return park;
|
return park;
|
||||||
case 'G': // agente
|
case CHR_AGENTE: // agente
|
||||||
park.format("%5d",rieprec.get_int(SVR_CODAG));
|
park.format("%5d",rieprec.get_int(SVR_CODAG));
|
||||||
return park;
|
return park;
|
||||||
case 'M': // mag
|
case CHR_MAGAZZ: // mag
|
||||||
park=rieprec.get(SVR_MAG);
|
park=rieprec.get(SVR_MAG);
|
||||||
return park.rpad(3);
|
return park.rpad(3);
|
||||||
case 'Z': // zona
|
case CHR_ZONA: // zona
|
||||||
park=rieprec.get(SVR_ZONA);
|
park=rieprec.get(SVR_ZONA);
|
||||||
return park.rpad(3);
|
return park.rpad(3);
|
||||||
case 'U': // unità di misura
|
case CHR_UMISURA: // unità di misura
|
||||||
park=rieprec.get(SVR_UMQTA);
|
park=rieprec.get(SVR_UMQTA);
|
||||||
return park.rpad(3);
|
return park.rpad(3);
|
||||||
default:
|
default:
|
||||||
@ -1592,9 +1649,9 @@ const TString& TStampa_stat::get_descrpart(const char *lev_code, TSVriep_record
|
|||||||
int lev_code_num=atoi(lev_code+1);
|
int lev_code_num=atoi(lev_code+1);
|
||||||
switch (*lev_code)
|
switch (*lev_code)
|
||||||
{
|
{
|
||||||
case 'D': // tipo documento
|
case CHR_TIPODOC: // tipo documento
|
||||||
return _tipodoc->get(rieprec.get(SVR_TIPODOC)).get("S0");
|
return _tipodoc->get(rieprec.get(SVR_TIPODOC)).get("S0");
|
||||||
case 'A': // articolo
|
case CHR_ARTICOLO: // articolo
|
||||||
if (lev_code_num==0 || lev_code_num== _liv_art->last_level())
|
if (lev_code_num==0 || lev_code_num== _liv_art->last_level())
|
||||||
{
|
{
|
||||||
_anamag->put(ANAMAG_CODART,rieprec.get(SVR_CODART));
|
_anamag->put(ANAMAG_CODART,rieprec.get(SVR_CODART));
|
||||||
@ -1605,27 +1662,27 @@ const TString& TStampa_stat::get_descrpart(const char *lev_code, TSVriep_record
|
|||||||
{
|
{
|
||||||
return _liv_art->group_descr(rieprec.get(SVR_CODART),lev_code_num);
|
return _liv_art->group_descr(rieprec.get(SVR_CODART),lev_code_num);
|
||||||
}
|
}
|
||||||
case 'L': // liv giac
|
case CHR_LIVGIAC: // liv giac
|
||||||
CHECK(lev_code_num>0,"I livelli di giacenza sono utilizzabili solo singolarmente");
|
CHECK(lev_code_num>0,"I livelli di giacenza sono utilizzabili solo singolarmente");
|
||||||
return _liv_giac->group_descr(rieprec.get(SVR_GIAC),lev_code_num);
|
return _liv_giac->group_descr(rieprec.get(SVR_GIAC),lev_code_num);
|
||||||
case 'V': // cat. vendita
|
case CHR_CATVEN: // cat. vendita
|
||||||
return _catven->get(rieprec.get(SVR_CATVEN)).get("S0");
|
return _catven->get(rieprec.get(SVR_CATVEN)).get("S0");
|
||||||
case 'F': // cliente
|
case CHR_FOR: // fornitore
|
||||||
case 'C': // cliente
|
case CHR_CLI: // cliente
|
||||||
{
|
{
|
||||||
_clifor->put(CLI_TIPOCF,rieprec.get_char(SVR_TIPOCF));
|
_clifor->put(CLI_TIPOCF,rieprec.get_char(SVR_TIPOCF));
|
||||||
_clifor->put(CLI_CODCF,rieprec.get_int(SVR_CODCF));
|
_clifor->put(CLI_CODCF,rieprec.get_int(SVR_CODCF));
|
||||||
_clifor->read();
|
_clifor->read();
|
||||||
return _clifor->get(CLI_RAGSOC);
|
return _clifor->get(CLI_RAGSOC);
|
||||||
}
|
}
|
||||||
case 'G': // agente
|
case CHR_AGENTE: // agente
|
||||||
_agenti->put(AGE_CODAGE,rieprec.get(SVR_CODAG));
|
_agenti->put(AGE_CODAGE,rieprec.get(SVR_CODAG));
|
||||||
return _agenti->get(AGE_RAGSOC);
|
return _agenti->get(AGE_RAGSOC);
|
||||||
case 'M': // mag
|
case CHR_MAGAZZ: // mag
|
||||||
return _magazz->get(rieprec.get(SVR_MAG)).get("S0");
|
return _magazz->get(rieprec.get(SVR_MAG)).get("S0");
|
||||||
case 'Z': // zona
|
case CHR_ZONA: // zona
|
||||||
return _zone->get(rieprec.get(SVR_ZONA)).get("S0");
|
return _zone->get(rieprec.get(SVR_ZONA)).get("S0");
|
||||||
case 'U': // Unità di misura
|
case CHR_UMISURA: // Unità di misura
|
||||||
return _ums->get(rieprec.get(SVR_UMQTA)).get("S0");
|
return _ums->get(rieprec.get(SVR_UMQTA)).get("S0");
|
||||||
default:
|
default:
|
||||||
fatal_box("ai chent recognaiz the code of the key part!");
|
fatal_box("ai chent recognaiz the code of the key part!");
|
||||||
@ -1854,29 +1911,29 @@ bool TStampa_stat::test_field(const TString& cod, TMask_field& f) const
|
|||||||
|
|
||||||
switch(cod[0])
|
switch(cod[0])
|
||||||
{
|
{
|
||||||
case 'A':
|
case CHR_ARTICOLO:
|
||||||
if (cod[1] != '\0' && !_liv_art->enabled())
|
if (cod[1] != '\0' && !_liv_art->enabled())
|
||||||
ok = f.error_box("I livelli di codice articolo non sono abilitati");
|
ok = f.error_box("I livelli di codice articolo non sono abilitati");
|
||||||
break;
|
break;
|
||||||
case 'L':
|
case CHR_LIVGIAC:
|
||||||
if (!_stats.grp_giacenza())
|
if (!_stats.grp_giacenza())
|
||||||
ok = f.error_box("Le statistiche sono raggruppate per livello di giacenza");
|
ok = f.error_box("Le statistiche sono raggruppate per livello di giacenza");
|
||||||
else if (!_liv_giac->enabled())
|
else if (!_liv_giac->enabled())
|
||||||
ok = f.error_box("I livelli di giacenza non sono abilitati");
|
ok = f.error_box("I livelli di giacenza non sono abilitati");
|
||||||
break;
|
break;
|
||||||
case 'C':
|
case CHR_CLIFOR:
|
||||||
if (!_stats.grp_cliente())
|
if (!_stats.grp_cliente())
|
||||||
ok = f.error_box("Le statistiche sono raggruppate per cliente");
|
ok = f.error_box("Le statistiche sono raggruppate per cliente/fornitore");
|
||||||
break;
|
break;
|
||||||
case 'G':
|
case CHR_AGENTE:
|
||||||
if (!_stats.grp_agente())
|
if (!_stats.grp_agente())
|
||||||
ok = f.error_box("Le statistiche sono raggruppate per agente");
|
ok = f.error_box("Le statistiche sono raggruppate per agente");
|
||||||
break;
|
break;
|
||||||
case 'M':
|
case CHR_MAGAZZ:
|
||||||
if (!_stats.grp_magazzino())
|
if (!_stats.grp_magazzino())
|
||||||
ok = f.error_box("Le statistiche sono raggruppate per magazzino");
|
ok = f.error_box("Le statistiche sono raggruppate per magazzino");
|
||||||
break;
|
break;
|
||||||
case 'Z':
|
case CHR_ZONA:
|
||||||
if (!_stats.grp_zona())
|
if (!_stats.grp_zona())
|
||||||
ok = f.error_box("Le statistiche sono raggruppate per zona");
|
ok = f.error_box("Le statistiche sono raggruppate per zona");
|
||||||
break;
|
break;
|
||||||
@ -1904,7 +1961,7 @@ bool TStampa_stat::chiave_handler(TMask_field& f, KEY k)
|
|||||||
ok = app().test_field(campo, f);
|
ok = app().test_field(campo, f);
|
||||||
|
|
||||||
bool found = used.get_pos(campo) >= 0;
|
bool found = used.get_pos(campo) >= 0;
|
||||||
if (!found && (campo[0] == 'A' || campo[0] == 'L'))
|
if (!found && (campo[0] == CHR_ARTICOLO || campo[0] == CHR_LIVGIAC))
|
||||||
{
|
{
|
||||||
char str[2]; str[0] = campo[0]; str[1] = '\0';
|
char str[2]; str[0] = campo[0]; str[1] = '\0';
|
||||||
found = used.get_pos(str) >= 0;
|
found = used.get_pos(str) >= 0;
|
||||||
|
@ -20,7 +20,4 @@
|
|||||||
#define F_FLAGT7 206
|
#define F_FLAGT7 206
|
||||||
#define F_FLAGT8 207
|
#define F_FLAGT8 207
|
||||||
#define F_FLAGT9 208
|
#define F_FLAGT9 208
|
||||||
#define AS_VALUE 'V'
|
|
||||||
#define AS_DIFF 'D'
|
|
||||||
#define AS_PERC 'P'
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user