From 4c24bfce1bd05ca810cb8e83cee93148867a35f0 Mon Sep 17 00:00:00 2001 From: villa Date: Mon, 20 May 1996 09:17:22 +0000 Subject: [PATCH] Cagata handler sottoconto -> stack overflow git-svn-id: svn://10.65.10.50/trunk@2851 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- cg/cg5200.cpp | 190 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 124 insertions(+), 66 deletions(-) diff --git a/cg/cg5200.cpp b/cg/cg5200.cpp index 6b52a78dc..9c9e07839 100755 --- a/cg/cg5200.cpp +++ b/cg/cg5200.cpp @@ -21,41 +21,51 @@ public: bool TRiga_array::add_riga(const TRectype& rec_saldi) { - bool found = FALSE; + bool flsca, found = FALSE; int annoes, annoesr; - char flag = ' ', flagr = ' '; + char flag = ' ', flagr = ' '; + char flagfin = ' ', flagfinr = ' '; TDate udata, udatar; long unum, unumr; - real pdaresca,paveresca,pdare,pavere,saldoini,pdarepro,paverepro; - real pdarescar,paverescar,pdarer,paverer,saldoinir,pdarepror,paverepror; - + real saldofin,pdare,pavere,saldoini,pdarepro,paverepro; + real saldofinr,pdarer,paverer,saldoinir,pdarepror,paverepror; + + for (int i = 0; i < items(); i++) { TRectype& r = (TRectype&)(*this)[i]; annoes = r.get_int(SLD_ANNOES); annoesr = rec_saldi.get_int(SLD_ANNOES); + +// TBI occhio al flag + if ( annoes == annoesr ) - { - pdaresca = r.get_real(SLD_PDARESCA); - paveresca = r.get_real(SLD_PAVERESCA); + { +// pdaresca = r.get_real(SLD_PDARESCA); +// paveresca = r.get_real(SLD_PAVERESCA); + flsca = r.get_bool(SLD_FLSCA); flag = r.get_char(SLD_FLAGSALINI); + flagfin = r.get_char(SLD_FLAGSALFIN); pdare = r.get_real(SLD_PDARE); pavere = r.get_real(SLD_PAVERE); - saldoini = r.get_real(SLD_SALDO); + saldoini = r.get_real(SLD_SALDO); + saldofin = r.get_real(SLD_SALDOFIN); pdarepro = r.get_real(SLD_PDAREPRO); paverepro = r.get_real(SLD_PAVEREPRO); udata = r.get(SLD_DATAULMOV); unum = r.get_long(SLD_NUMULTMOV); - pdarescar = rec_saldi.get_real(SLD_PDARESCA); - pdarescar += pdaresca; - paverescar = rec_saldi.get_real(SLD_PAVERESCA); - paverescar+= paveresca; +// pdarescar = rec_saldi.get_real(SLD_PDARESCA); +// pdarescar += pdaresca; +// paverescar = rec_saldi.get_real(SLD_PAVERESCA); +// paverescar+= paveresca; flagr = rec_saldi.get_char(SLD_FLAGSALINI); + flagfinr = rec_saldi.get_char(SLD_FLAGSALFIN); pdarer = rec_saldi.get_real(SLD_PDARE); pdarer += pdare; paverer = rec_saldi.get_real(SLD_PAVERE); paverer += pavere; saldoinir = rec_saldi.get_real(SLD_SALDO); + saldofinr = rec_saldi.get_real(SLD_SALDOFIN); udatar = rec_saldi.get(SLD_DATAULMOV); unumr = rec_saldi.get_long(SLD_NUMULTMOV); udatar = fnc_max(udatar,udata); @@ -74,14 +84,17 @@ bool TRiga_array::add_riga(const TRectype& rec_saldi) pdarepror += pdarepro; paverepror = rec_saldi.get_real(SLD_PAVEREPRO); paverepror += paverepro; - found = TRUE; + found = TRUE; + r.put(SLD_FLSCA, flsca ? "X" : " "); r.put(SLD_ANNOES, annoes); - r.put(SLD_PDARESCA, pdarescar); - r.put(SLD_PAVERESCA,paverescar); +// r.put(SLD_PDARESCA, pdarescar); +// r.put(SLD_PAVERESCA,paverescar); r.put(SLD_PDARE, pdarer); r.put(SLD_PAVERE,paverer); r.put(SLD_FLAGSALINI,flagr); + r.put(SLD_FLAGSALFIN,flagfinr); r.put(SLD_SALDO, saldoinir); + r.put(SLD_SALDOFIN, saldofinr); r.put(SLD_PDAREPRO, pdarepror); r.put(SLD_PAVEREPRO,paverepro); r.put(SLD_DATAULMOV, udatar); @@ -90,7 +103,7 @@ bool TRiga_array::add_riga(const TRectype& rec_saldi) } if (!found) { - TRectype* r = new TRectype(rec_saldi);//ci copia anche i valori di rec_saldi + TRectype* r = new TRectype(rec_saldi); // copia anche i valori di rec_saldi add(r); } return found; @@ -110,7 +123,7 @@ class TSaldibrowse_application : public TBrowse_application TRiga_array _riga; int _anno, _g, _c; long _s; - bool _saldo_conto, _saldo_gruppo, _saldo_sottoc; + bool _saldo_conto, _saldo_gruppo, _saldo_sottoc, _scarongly; protected: virtual bool user_create(); @@ -123,10 +136,10 @@ protected: virtual void init_modify_mode(TMask&); static bool sottoc_handler (TMask_field& f, KEY k); - + static bool sheet_action(TSheet_field& s, int r, KEY k); public: - void add_r(int,int,real&,real&,real&,char,real&,real&, - real&,real&,TDate&,long,real&,real&,real&); + void add_r(int,int,real&,char,real&,char,real&,real&, real&,real&, + TDate&,long,real&,real&,real&, real&, real&); void compilasheet(); bool fai_filtro(); TSheet_field& ss() const { return (TSheet_field&)_msk->field(F_SHEET_SALDI);} @@ -136,6 +149,12 @@ public: HIDDEN TSaldibrowse_application& app() { return (TSaldibrowse_application&) main_app(); } +bool TSaldibrowse_application::sheet_action(TSheet_field& s, int r, KEY k) +{ + // non si possono cancellare o aggiungere righe + return (k != K_DEL && k != K_INS); +} + void TSaldibrowse_application::init_query_mode(TMask& m) { m.disable(DLG_FINDREC); @@ -158,6 +177,7 @@ bool TSaldibrowse_application::fai_filtro() _anno = m.get_int(F_ANNO); _g = m.get_int(F_GRUPPO); _c = m.get_int(F_CONTO); + if (tipo == '\0') _s = m.get_long(F_SOTTOCONTO); else if (tipo == 'C') @@ -199,6 +219,8 @@ bool TSaldibrowse_application::fai_filtro() if (_s != 0l) to.put(SLD_SOTTOCONTO,_s); + _scarongly = m.get_bool(F_SCARICATO); + if ( _saldo_gruppo || _saldo_conto ) _cur->setkey(1); @@ -269,7 +291,11 @@ bool TSaldibrowse_application::sottoc_handler(TMask_field& f, KEY key) else m.reset(F_DESCR_CONTO); } - if (stop) m.stop_run(K_AUTO_ENTER); + if (stop) + { + f.set_focusdirty(FALSE); + m.stop_run(K_AUTO_ENTER); + } if (!ok) error_box("Conto errato o incompleto"); } @@ -288,7 +314,8 @@ bool TSaldibrowse_application::user_create() _msk->set_handler(F_SOTTOC_CLIENTE, sottoc_handler); _msk->set_handler(F_SOTTOC_FORN, sottoc_handler); ss().disable(); - + ss().set_notify(sheet_action); + set_search_field(F_GRUPPO); return TRUE; @@ -307,7 +334,7 @@ bool TSaldibrowse_application::user_destroy() int TSaldibrowse_application::read(TMask& m) { - m.autoload(_rel); + m.autoload(*_rel); fai_filtro(); compilasheet(); ss().force_update(); @@ -315,8 +342,9 @@ int TSaldibrowse_application::read(TMask& m) return NOERR; } -void TSaldibrowse_application::add_r(int numrig,int a,real& pds,real& pas,real& sc,char f,real& si,real& pd, - real& pa,real& s,TDate& d,long n,real& pdp,real& pap,real& sp) +void TSaldibrowse_application::add_r(int numrig,int a,real& slf,char sff,real& sc,char f,real& si, + real& pd, real& pa,real& s,TDate& d,long n,real& pdp, + real& pap,real& sp, real& dsc, real& asc) { TSheet_field& cs = ss(); char segno = ' '; @@ -345,37 +373,14 @@ void TSaldibrowse_application::add_r(int numrig,int a,real& pds,real& pas,real& sc = -sc; segno = 'A'; } - riga.add(pds.string(),7); - riga.add(pas.string(),8); + riga.add(slf.string(),7); + riga.add(sff,8); riga.add(sc.string(),9); riga.add(segno,10); - /* - dep = ""; - if (si != ZERO) - dep << si.string(REAL_PICTURE) << " " << f; - dep = ""; - if (s > ZERO) - dep << s.string(REAL_PICTURE) << " D"; - else if (s < ZERO) - { - s = -s; - dep << s.string(REAL_PICTURE) << " A"; - } - */ riga.add(d.string(),11); riga.add(n,12); riga.add(pdp.string(),13); riga.add(pap.string(),14); - /* - dep = ""; - if (sp > ZERO) - dep << sp.string(REAL_PICTURE) << " D"; - else if (sp < ZERO) - { - sp = -sp; - dep << sp.string(REAL_PICTURE) << " A"; - } - */ segno = ' '; if (sp > ZERO) segno = 'D'; @@ -386,23 +391,27 @@ void TSaldibrowse_application::add_r(int numrig,int a,real& pds,real& pas,real& } riga.add(sp.string(),15); riga.add(segno,16); + riga.add(dsc.string(),17); + riga.add(asc.string(),18); } void TSaldibrowse_application::compilasheet() { char flagsal = ' '; + char flagfin = ' '; real saldo = ZERO; - real saldosca = ZERO; +// real saldosca = ZERO; real saldopro = ZERO; - real saldo_gc = ZERO; - real saldoini_gc = ZERO; - real saldosca_gc = ZERO; - real saldopro_gc = ZERO; +// real saldo_gc = ZERO; +// real saldoini_gc = ZERO; ??? a che servono???? +// real saldosca_gc = ZERO; +// real saldopro_gc = ZERO; real saldoini = ZERO; real pdare = ZERO; real pavere = ZERO; real pdaresca = ZERO; real paveresca = ZERO; + real saldofin = ZERO; real pdarepro = ZERO; real paverepro = ZERO; int gruppo, conto, anno; @@ -410,6 +419,8 @@ void TSaldibrowse_application::compilasheet() long ultimo_num = 0l; TDate ultima_data; + // nuova struttura archivio saldi + ss().reset(); _riga.destroy(); @@ -417,7 +428,10 @@ void TSaldibrowse_application::compilasheet() *_cur = 0l; for (int i = 0; i < items; i++,++(*_cur)) - { + { + if (_scarongly &&! _cur->curr().get_bool(SLD_FLSCA)) + continue; + anno = _cur->curr().get_int(SLD_ANNOES); gruppo = _cur->curr().get_int(SLD_GRUPPO); conto = _cur->curr().get_int(SLD_CONTO); @@ -433,23 +447,45 @@ void TSaldibrowse_application::compilasheet() if (_saldo_sottoc) { flagsal = _cur->curr().get_char(SLD_FLAGSALINI); + flagfin = _cur->curr().get_char(SLD_FLAGSALFIN); saldoini = _cur->curr().get_real(SLD_SALDO); + saldofin = _cur->curr().get_real(SLD_SALDOFIN); pdare = _cur->curr().get_real(SLD_PDARE); pavere = _cur->curr().get_real(SLD_PAVERE); - pdaresca = _cur->curr().get_real(SLD_PDARESCA); - paveresca = _cur->curr().get_real(SLD_PAVERESCA); pdarepro = _cur->curr().get_real(SLD_PDAREPRO); paverepro = _cur->curr().get_real(SLD_PAVEREPRO); ultima_data = _cur->curr().get(SLD_DATAULMOV); ultimo_num = _cur->curr().get_long(SLD_NUMULTMOV); + + pdaresca = ZERO; + paveresca = ZERO; + + // look for scariche' + if (i < items - 1 && !_scarongly) + { + ++(*_cur); + if (_cur->curr().get_bool(SLD_FLSCA) && + sottoconto == _cur->curr().get_long(SLD_SOTTOCONTO) && + conto == _cur->curr().get_int(SLD_CONTO) && + gruppo == _cur->curr().get_int(SLD_GRUPPO) && + anno == _cur->curr().get_int(SLD_ANNOES)) + { + pdaresca = _cur->curr().get_real(SLD_PDARE); + paveresca = _cur->curr().get_real(SLD_PAVERE); + } + else --(*_cur); + } + if (flagsal == 'D') saldo = pdare + saldoini - pavere; else saldo = pdare - saldoini - pavere; - saldosca = saldo + pdaresca - paveresca; //in realta' non e' proprio il saldo degli scaricati ma quello complessivo + // saldosca = saldo + pdaresca - paveresca; //in realta' non e' proprio il saldo degli scaricati ma quello complessivo + // .... ma tanto nessuno lo usa.... saldopro = pdarepro - paverepro; - add_r(i,anno,pdaresca,paveresca,saldosca,flagsal,saldoini,pdare,pavere,saldo,ultima_data,ultimo_num,pdarepro,paverepro,saldopro); + add_r(i,anno,saldofin,flagfin,saldo,flagsal,saldoini,pdare,pavere,saldo, + ultima_data,ultimo_num,pdarepro,paverepro,saldopro,pdaresca, paveresca); } } if (_saldo_gruppo || _saldo_conto) @@ -458,21 +494,43 @@ void TSaldibrowse_application::compilasheet() { TRectype& riga = (TRectype&)_riga[j]; anno = riga.get_int(SLD_ANNOES); - pdaresca = riga.get_real(SLD_PDARESCA); - paveresca = riga.get_real(SLD_PAVERESCA); - //saldosca = pdaresca - paveresca; flagsal = riga.get_char(SLD_FLAGSALINI); + flagfin = riga.get_char(SLD_FLAGSALFIN); saldoini = riga.get_real(SLD_SALDO); + saldofin = riga.get_real(SLD_SALDOFIN); pdare = riga.get_real(SLD_PDARE); pavere = riga.get_real(SLD_PAVERE); saldo = pdare - pavere + saldoini; - saldosca = saldo + pdaresca - paveresca; pdarepro = riga.get_real(SLD_PDAREPRO); paverepro = riga.get_real(SLD_PAVEREPRO); saldopro = pdarepro - paverepro; ultima_data = riga.get(SLD_DATAULMOV); ultimo_num = riga.get_long(SLD_NUMULTMOV); - add_r(j,anno,pdaresca,paveresca,saldosca,flagsal,saldoini,pdare,pavere,saldo,ultima_data,ultimo_num,pdarepro,paverepro,saldopro); + + pdaresca = ZERO; + paveresca = ZERO; + + if (!_scarongly && (j < _riga.items() - 1)) + { + TRectype& riga = (TRectype&)_riga[++j]; + if (riga.get_bool(SLD_FLSCA) && + sottoconto == riga.get_long(SLD_SOTTOCONTO) && + conto == riga.get_int(SLD_CONTO) && + gruppo == riga.get_int(SLD_GRUPPO) && + anno == riga.get_int(SLD_ANNOES)) + { + pdaresca = riga.get_real(SLD_PDARE); + paveresca = riga.get_real(SLD_PAVERE); + } + else --j; + } + + // a che serve ????? + // saldosca = saldo + pdaresca - paveresca; + +// come sopra + add_r(j,anno,saldofin,flagfin,saldo,flagsal,saldoini,pdare,pavere,saldo,ultima_data, + ultimo_num,pdarepro,paverepro,saldopro, pdaresca, paveresca); } _riga.destroy(); }