diff --git a/src/sc/sc2600.cpp b/src/sc/sc2600.cpp index b4998822b..969ad18d9 100755 --- a/src/sc/sc2600.cpp +++ b/src/sc/sc2600.cpp @@ -44,8 +44,8 @@ enum tipo_st {clienti=0, fornitori=1}; class TLineTotal : public TObject //Oggetto di base per i TAssoc_array dei totali { public: - real _s[NUMERO_FASCE];// Scaglioni scaduto - real _ns[NUMERO_FASCE];// Scaglioni a scadere + real _s[NUMERO_FASCE + 1];// Scaglioni scaduto + real _ns[NUMERO_FASCE + 1];// Scaglioni a scadere real _es; // esposto real _sl; // saldo @@ -58,7 +58,7 @@ public: TLineTotal & TLineTotal::copy(const TLineTotal & l) { - for (int i = 0; i < NUMERO_FASCE; i++) + for (int i = 0; i <= NUMERO_FASCE; i++) { _s[i] = l._s[i]; _ns[i] = l._ns[i]; @@ -70,7 +70,7 @@ TLineTotal & TLineTotal::copy(const TLineTotal & l) void TLineTotal::zero() { - for (int i = 0; i < NUMERO_FASCE; i++) + for (int i = 0; i <= NUMERO_FASCE; i++) { _s[i] = ZERO; _ns[i] = ZERO; @@ -132,7 +132,7 @@ public: void print_header(); int calc_last_column(); - void update_totals(bool what, real& esp, real s[NUMERO_FASCE], real ns[NUMERO_FASCE]); + void update_totals(bool what, real& esp, real s[NUMERO_FASCE + 1], real ns[NUMERO_FASCE + 1]); void compute_unassigned(TPartita& p, const TDate & datalim); void compute_all(TPartita& p); void print_real(TString& dest, const real& num); @@ -171,7 +171,7 @@ bool fil_function(const TRelation *r) } void TProspettoScadenze::update_totals(bool what, real& esp, - real s[NUMERO_FASCE], real ns[NUMERO_FASCE]) + real s[NUMERO_FASCE + 1], real ns[NUMERO_FASCE + 1]) { TAssoc_array& a = (TAssoc_array&) _t[what]; TLineTotal *ll = (TLineTotal *) a.objptr(_codval); @@ -180,7 +180,7 @@ void TProspettoScadenze::update_totals(bool what, real& esp, ll = new TLineTotal; a.add(_codval, ll); } - for (int i = 0; i < NUMERO_FASCE; i++) + for (int i = 0; i <= NUMERO_FASCE; i++) { ll->_s[i] += s[i]; ll->_ns[i] += ns[i]; @@ -221,8 +221,8 @@ void TProspettoScadenze::compute_unassigned(TPartita& p, const TDate & datalim) void TProspettoScadenze::compute_all(TPartita& p) { real residuo; - real s[NUMERO_FASCE]; - real ns[NUMERO_FASCE]; + real s[NUMERO_FASCE + 1]; + real ns[NUMERO_FASCE + 1]; real res_pagati; real esposto; @@ -333,15 +333,18 @@ void TProspettoScadenze::compute_all(TPartita& p) { if (_nsinfasce) { - for (int i = _nsfasce - 1; i >= 0; i--) + bool found = false; + + for (int i = 0 ; !found && i < _nsfasce; i++) { const TDate & limdate = (TDate&)_ns_date[i]; - if (limdate.ok() && d > limdate) - { + + found = d <= limdate; + if (found) ns[i] += res; - break; - } } + if (!found) + ns[_nsfasce] += res; } else ns[0] += res; @@ -350,15 +353,18 @@ void TProspettoScadenze::compute_all(TPartita& p) { if (_sinfasce) { - for (int i = _sfasce - 1; i >= 0; i--) + bool found = false; + + for (int i = 0; !found && i <= _sfasce; i++) { const TDate & limdate = (TDate&)_s_date[i]; - if (limdate.ok() && d <= limdate) - { + + found = d >= limdate; + if (found) s[i] += res; - break; - } } + if (!found) + s[_sfasce] += res; } else s[0] += res; @@ -515,13 +521,13 @@ bool TProspettoScadenze::open_print() _s_date.add(new TDate); _ns_date.add(new TDate); } - for (int j = 0; j <= _sfasce; j++) + for (int j = 0; j < _sfasce; j++) { TDate & d = (TDate &)_s_date[j]; d = _limscad; d.addmonth(-_limiti[j]); } - for (int k = 0; k <= _nsfasce; k++) + for (int k = 0; k < _nsfasce; k++) { TDate & d = (TDate &)_ns_date[k]; d = _limscad; @@ -593,17 +599,17 @@ bool TProspettoScadenze::open_print() _colnames.destroy(); if (_sinfasce) { - _colnames.add(format("Scaduto > %3d gg", _limiti[_sfasce] * 30)); - for (int i = _sfasce; i > 0; i--) + _colnames.add(format("Scaduto > %3d gg", _limiti[_sfasce - 1] * 30)); + for (int i = _sfasce - 1; i >= 0; i--) _colnames.add(format("Scaduto <= %3d gg", _limiti[i] * 30)); } else _colnames.add("Scaduto"); if (_nsinfasce) { - for (int i = 1; i <= _nsfasce; i++) + for (int i = 0; i < _nsfasce; i++) _colnames.add(format("A Scadere <= %3d gg", _limiti[i] * 30)); - _colnames.add(format("A Scadere > %3d gg", _limiti[_nsfasce] * 30)); + _colnames.add(format("A Scadere > %3d gg", _limiti[_nsfasce - 1] * 30)); } else _colnames.add("A Scadere"); @@ -734,8 +740,8 @@ bool TProspettoScadenze::set_print(int) if (nmesi == 0) nmesi = 1; - for (int i = 0; i <= NUMERO_FASCE; i++) - _limiti[i] = i * nmesi; + for (int i = 0; i < NUMERO_FASCE; i++) + _limiti[i] = (i + 1) * nmesi; _start = true; } _stvaluta = _m->get_bool(F_VALUTA); @@ -922,7 +928,7 @@ void TProspettoScadenze::export_totali_rows() if (_nsinfasce) { - for (int i = 0; i < _nsfasce; i++) + for (int i = 0; i <= _nsfasce; i++) { _recset->set(_colnames.row(col++), v._ns[i]); tot += v._ns[i]; @@ -1001,9 +1007,9 @@ void TProspettoScadenze::print_header() rw.cut(0); if (_sinfasce) { - rw << format("@%dg >%3d gg", pos, _limiti[_sfasce] * 30); + rw << format("@%dg >%3d gg", pos, _limiti[_sfasce - 1] * 30); pos += 12; - for (int i = _sfasce; i > 0; i--) + for (int i = _sfasce - 1; i >= 0; i--) { rw << format("@%dg <= %3d gg", pos, _limiti[i] * 30); pos += 12; @@ -1019,12 +1025,12 @@ void TProspettoScadenze::print_header() const int pos_ascad = pos; if (_nsinfasce) { - for (int i = 1; i <= _nsfasce; i++) + for (int i = 0; i < _nsfasce; i++) { rw << format("@%dg <= %3d gg", pos, _limiti[i] * 30); pos = pos + 12; } - rw << format("@%dg >%3d gg", pos, _limiti[_nsfasce] * 30); + rw << format("@%dg >%3d gg", pos, _limiti[_nsfasce - 1] * 30); pos = pos + 12; set_header(soh, format("@%dg%s", pos_ascad+((pos-pos_ascad)/2)-5, "A SCADERE")); }