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:
parent
66c9b9648f
commit
5d316686c7
@ -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);
|
||||
|
||||
|
118
ca/ca3883.cpp
118
ca/ca3883.cpp
@ -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";
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user