Patch level :10.0 112

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Dalla 5.0:
1) corretto errore in caso di mancanza campo prefix sulla maschera
2) gestite le commessa senza Datafine (Ruffo)


git-svn-id: svn://10.65.10.50/trunk@17211 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-09-10 13:16:24 +00:00
parent 66c9b9648f
commit 5d316686c7
3 changed files with 105 additions and 27 deletions

View File

@ -103,7 +103,7 @@ TPrint_bilancio_cms_mask::TPrint_bilancio_cms_mask()
int prefix = cfg.get_int("PdcPrefix");
if (prefix >= pconana_levels)
prefix = pconana_levels-1;
prefix = pconana_levels - 1;
TToken_string codes, descr;
for (int k = prefix; k < pconana_levels; k++)
@ -120,7 +120,7 @@ TPrint_bilancio_cms_mask::TPrint_bilancio_cms_mask()
{
if (pconana_levels >= 2 && prefix < pconana_levels && esistono_riclassificazioni())
{
ca_create_fields(*this, 0, LF_PCONANA, 1, 16, F_PRE1, F_PREDES1, 0x0, PCONANA_CODCONTO);
ca_create_fields(*this, 0, LF_PCONANA, 1, 15, F_PRE1, F_PREDES1, 0x0, PCONANA_CODCONTO);
// Nascondi i campi che non fanno parte del prefisso
for (int i = 0; i < pconana_levels; i++)
@ -219,7 +219,11 @@ void TPrint_bilancio_cms::main_loop()
{
//report e book dei report
TReport_book book;
const TString& prefix = mask.get(F_PRE1);
TString80 prefix;
for (short id = F_PRE1; id <= F_PRE3 && mask.id2pos(id) > 0; id++)
prefix << mask.get(id);
const int depth = mask.get_int(F_DEPTH);
TString path = mask.get(F_REPORT);

View File

@ -310,6 +310,8 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, const TStr
//ciclo su tutti gli elementi dell'array con i valori da settare nei nuovi campi
for (int i = 0; i < str_arr.items(); i++)
{
//crea il nuovo campo i-esimo, copia del modello, spostato a destra rispetto al precedente (i-1)esimo..
//.., con id(i) = id(i-1) + 1
TReport_field* new_field = i == 0 ? &rep_field : (TReport_field*)rep_field.dup();
if (i > 0)
{
@ -338,37 +340,97 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, const TStr
break;
case 'F': //i footer devono calcolarsi i totali;ma i footer di totale fasi (4) non devono..
//..fare assolutamente nulla!
if (rep_sect.level() > 1 && rep_sect.level() < 4)
if (rep_sect.level() > 0 && rep_sect.level() < 4)
{
new_field->set_field("");
TString ps = "MESSAGE ADD,F";
ps << (rep_sect.level() - 1) << '.' << new_field->id();
//somma al totale speciale delle commesse normali
if (rep_sect.level() == 3)
ps << "\nMESSAGE ADD,F2." << (new_field->id() + 200);
new_field->set_postscript(ps);
//crea il campo sul report con tanto di id,postscript ecc...
new_field->set_field("");
//Gestione totali delle commesse normali (Adolf!)
//Alla fine di tutte le 4 sezioni di commesse normali ci va il totale delle medesime; questo..
//..totale va stampato prima della sezione con le commesse di appoggio
if (rep_sect.level() == 2)
switch (rep_sect.level())
{
//sub_new_field e' il campo SOTTO il new_field che appare solo nei totali di sezione 2 (F2)
case 1:
{
//caso particolare del footer di report con i totali alla Adolf!
//Dalla matematica secondo Adolf:
//(a) TotGen = TotCmsNor + TotCmsSupp
//(b) DiffGen = TotCmsSupp - TotCmsNor
//->(c) DiffGen = TotGen - 2*TotCmsNor
//i campi del totale generale si sommano ai campi delle differenze di Adolf
/**CAZZONE** tentata per utilizzare la (c) ma non funziona:questi non servono a una ceppa di minchia
new_field->set_field("");
TString ps = "MESSAGE ADD,F";
ps << (rep_sect.level()) << '.' << (new_field->id() + 200);
new_field->set_prescript(ps);*/
//sub_new_field e' il campo SOTTO il new_field che appare solo nei totali di sezione 1 (F1)
//e' il campo che va nella riga delle Differenze
TReport_field* sub_new_field = (TReport_field*)new_field->dup();
rep_sect.add(sub_new_field);
sub_new_field->offset(TPoint(0, 300));
rep_sect.add(sub_new_field);
sub_new_field->offset(TPoint(0, 250));
sub_new_field->set_id(new_field->id() + 200);
sub_new_field->set_groups("90");
sub_new_field->set_postscript("");
sub_new_field->set_prescript("");
}
}
break;
case 2:
{
//ogni campo di footer F2 deve sommarsi a quello piu' esterno F1
TString ps = "MESSAGE ADD,F";
ps << (rep_sect.level() - 1) << '.' << new_field->id();
//in caso di Commesse Supporto (LEVEL=4) il totale si deve sommare nelle differenze generali
ps << "\n#101 @\n";
ps << "4 = IF\n";
ps << " MESSAGE ADD,F1." << (new_field->id() + 200) << "\n";
ps << "THEN";
//setta il postscript al new_field
new_field->set_postscript(ps);
//SUB_new_field, ovvero gestione dei campi adolfici dei totali e delle differenze
//Gestione totali delle commesse normali (Adolf!)
//Alla fine di tutte le 4 sezioni di commesse normali ci va il totale delle medesime; questo..
//..totale va stampato prima della sezione con le commesse di appoggio
//sub_new_field e' il campo SOTTO il new_field che appare solo nei totali di sezione 2 (F2)
//e' il campo con il totale delle commesse normali
TReport_field* sub_new_field = (TReport_field*)new_field->dup();
rep_sect.add(sub_new_field);
sub_new_field->offset(TPoint(0, 250));
sub_new_field->set_id(new_field->id() + 200);
sub_new_field->set_groups("90");
sub_new_field->set_postscript("");
//il totale delle commesse normali si sottrae nelle differenze generali
TString ps_diff;
//ps_diff << "#THIS @\n2\n*\n!\n"; **CAZZONE** tentata per applicare la (c);non funzia
ps_diff << "MESSAGE SUB,F1." << sub_new_field->id();
sub_new_field->set_postscript(ps_diff);
}
break;
case 3:
{
//ogni campo di footer F3 deve sommarsi a quello piu' esterno F2
TString ps = "MESSAGE ADD,F";
ps << (rep_sect.level() - 1) << '.' << new_field->id();
//deve anche sommarsi al totale delle Commesse Normali (che viene stampato al passaggio tra..
//..LEVEL=3 e LEVEL=4)
ps << "\nMESSAGE ADD,F2." << (new_field->id() + 200);
//setta il postscript al new_field
new_field->set_postscript(ps);
}
break;
default:
break;
} //switch(rep_sect.level())
}
break;
default:
break;
}
}
} //switch (sect_type)
} //for(inti=0;i<str_arr.items()...
//sposta a destra gli ultimi campi non generati (169 e 170)
const TReport_field& ultimo_campo = rep_sect.field(rep_sect.last());
@ -385,7 +447,7 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, const TStr
{
TReport_field* sub_new_field_margine = (TReport_field*)rep_sect.find_field(169)->dup();
rep_sect.add(sub_new_field_margine);
sub_new_field_margine->offset(TPoint(0, 300));
sub_new_field_margine->offset(TPoint(0, 250));
sub_new_field_margine->set_id(369);
sub_new_field_margine->set_groups("90");
sub_new_field_margine->set_postscript("");
@ -455,9 +517,9 @@ bool TCRPA_report::generate_columns (TString_array& codici, TString_array& testa
if (f4 != NULL)
offset_and_fill_sectionf4(*f4, model_id);
#ifdef DBG
//#ifdef DBG
save("cazzone.rep");
#endif
//#endif
return true;
}
@ -868,6 +930,14 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query)
else
datafine = rec_commesse.get(COMMESSE_DATAFINE);
//datafine.ok() va messo per gli utonti che mettono le commesse all'infinito senza specificare la datafine
//in questo modo la commessa e' come se terminasse l'anno dopo e viene stampata nella sezione 2 (vedi sotto)
if (!datafine.ok())
{
datafine = datafinesc;
datafine.addyear(1);
}
//gruppo e conto servono solo per il caso _tipo=8 ma vanno dichiarati e ricavati..
//..qui in modo che siano a disposizione delle commesse del cazzo poco sotto
const char* gruppo = indbil == 3 ? "COSTI" : "RICAVI";

View File

@ -27,6 +27,10 @@
#define F_DESCFASE4 119*/
//campi generati dai piani dei conti
//spiegazione per noi ignoranti:
// F_PRE0 e' il groupbox
// F_PRE1 e' il primo livello della struttura del piano dei conti anale, quindi il primo che va usato nella generazione..
//...dei campi sulle maschere!!
#define F_PRE0 320
#define F_PRE1 321
#define F_PRE2 322