diff --git a/ca/ca3800.cpp b/ca/ca3800.cpp index fa4f6a165..ce024d415 100755 --- a/ca/ca3800.cpp +++ b/ca/ca3800.cpp @@ -308,7 +308,6 @@ TAssoc_array& TPrint_bilancio_cms_recordset::get_row(TAssoc_array& cms, const ch return *riga_array; } - static int righe_compare(const TObject** o1, const TObject** o2) { TAssoc_array& a1 = *(TAssoc_array*)*o1; diff --git a/ca/ca3900.cpp b/ca/ca3900.cpp index 79f04e68e..35cc88580 100755 --- a/ca/ca3900.cpp +++ b/ca/ca3900.cpp @@ -270,14 +270,52 @@ TAssoc_array& TPrint_stima_ricavi_recordset::get_row(TAssoc_array& cms, const ch riga_array->add("LEVEL", str_indice); riga_array->add("CODCMS", codcms); riga_array->add("DESCRIZ", descrizione); - + //inizializza i campi importo sicuramente presenti (modifica DECISIVA) + //senza questa inizializzazione, nel caso trovasse campi nulli (in realta' 0), il bastardo.. + //..anziche' considerarli 0 ci mette l'ultimo valore != che ha in memoria nella stessa posizione.. + //..facendo sballare tutti i conti! + riga_array->add("COS_BDG", EMPTY_STRING); + riga_array->add("COS_MAT", EMPTY_STRING); + riga_array->add("RIC_BDG", EMPTY_STRING); + riga_array->add("RIC_MAT", EMPTY_STRING); //aggiunge la riga all'array-ino cms.add(chiave, riga_array); } return *riga_array; } +static int righe_compare(const TObject** o1, const TObject** o2) +{ + TAssoc_array& a1 = *(TAssoc_array*)*o1; + TAssoc_array& a2 = *(TAssoc_array*)*o2; + int cmp = 0; + + const int l1 = atoi(*(TString*)a1.objptr("LEVEL")); + const int l2 = atoi(*(TString*)a2.objptr("LEVEL")); + cmp = l1 - l2; + if (cmp == 0) + { + const TString& c1 = *(TString*)a1.objptr("CODCMS"); + const TString& c2 = *(TString*)a2.objptr("CODCMS"); + cmp = c1.compare(c2); + if (cmp == 0) + { + const TString& f1 = *(TString*)a1.objptr("FASE"); + const TString& f2 = *(TString*)a2.objptr("FASE"); + cmp = f1.compare(f2); + } + else + { + const int z1 = c1.starts_with("DETR_"); + const int z2 = c2.starts_with("DETR_"); + if (z1 || z2) + cmp = z1 - z2; + } + } + + return cmp; +} void TPrint_stima_ricavi_recordset::requery() { @@ -382,6 +420,7 @@ void TPrint_stima_ricavi_recordset::requery() if (cazzo_cms != NULL) _righe.add(cazzo_cms); } //for(int... + _righe.sort(righe_compare); //sorting delle commesse } const TVariant& TPrint_stima_ricavi_recordset::get(unsigned int column) const