Cagata handler sottoconto -> stack overflow

git-svn-id: svn://10.65.10.50/trunk@2851 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1996-05-20 09:17:22 +00:00
parent b2308068bc
commit 4c24bfce1b

View File

@ -21,41 +21,51 @@ public:
bool TRiga_array::add_riga(const TRectype& rec_saldi) bool TRiga_array::add_riga(const TRectype& rec_saldi)
{ {
bool found = FALSE; bool flsca, found = FALSE;
int annoes, annoesr; int annoes, annoesr;
char flag = ' ', flagr = ' '; char flag = ' ', flagr = ' ';
char flagfin = ' ', flagfinr = ' ';
TDate udata, udatar; TDate udata, udatar;
long unum, unumr; long unum, unumr;
real pdaresca,paveresca,pdare,pavere,saldoini,pdarepro,paverepro; real saldofin,pdare,pavere,saldoini,pdarepro,paverepro;
real pdarescar,paverescar,pdarer,paverer,saldoinir,pdarepror,paverepror; real saldofinr,pdarer,paverer,saldoinir,pdarepror,paverepror;
for (int i = 0; i < items(); i++) for (int i = 0; i < items(); i++)
{ {
TRectype& r = (TRectype&)(*this)[i]; TRectype& r = (TRectype&)(*this)[i];
annoes = r.get_int(SLD_ANNOES); annoes = r.get_int(SLD_ANNOES);
annoesr = rec_saldi.get_int(SLD_ANNOES); annoesr = rec_saldi.get_int(SLD_ANNOES);
// TBI occhio al flag
if ( annoes == annoesr ) if ( annoes == annoesr )
{ {
pdaresca = r.get_real(SLD_PDARESCA); // pdaresca = r.get_real(SLD_PDARESCA);
paveresca = r.get_real(SLD_PAVERESCA); // paveresca = r.get_real(SLD_PAVERESCA);
flsca = r.get_bool(SLD_FLSCA);
flag = r.get_char(SLD_FLAGSALINI); flag = r.get_char(SLD_FLAGSALINI);
flagfin = r.get_char(SLD_FLAGSALFIN);
pdare = r.get_real(SLD_PDARE); pdare = r.get_real(SLD_PDARE);
pavere = r.get_real(SLD_PAVERE); 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); pdarepro = r.get_real(SLD_PDAREPRO);
paverepro = r.get_real(SLD_PAVEREPRO); paverepro = r.get_real(SLD_PAVEREPRO);
udata = r.get(SLD_DATAULMOV); udata = r.get(SLD_DATAULMOV);
unum = r.get_long(SLD_NUMULTMOV); unum = r.get_long(SLD_NUMULTMOV);
pdarescar = rec_saldi.get_real(SLD_PDARESCA); // pdarescar = rec_saldi.get_real(SLD_PDARESCA);
pdarescar += pdaresca; // pdarescar += pdaresca;
paverescar = rec_saldi.get_real(SLD_PAVERESCA); // paverescar = rec_saldi.get_real(SLD_PAVERESCA);
paverescar+= paveresca; // paverescar+= paveresca;
flagr = rec_saldi.get_char(SLD_FLAGSALINI); flagr = rec_saldi.get_char(SLD_FLAGSALINI);
flagfinr = rec_saldi.get_char(SLD_FLAGSALFIN);
pdarer = rec_saldi.get_real(SLD_PDARE); pdarer = rec_saldi.get_real(SLD_PDARE);
pdarer += pdare; pdarer += pdare;
paverer = rec_saldi.get_real(SLD_PAVERE); paverer = rec_saldi.get_real(SLD_PAVERE);
paverer += pavere; paverer += pavere;
saldoinir = rec_saldi.get_real(SLD_SALDO); saldoinir = rec_saldi.get_real(SLD_SALDO);
saldofinr = rec_saldi.get_real(SLD_SALDOFIN);
udatar = rec_saldi.get(SLD_DATAULMOV); udatar = rec_saldi.get(SLD_DATAULMOV);
unumr = rec_saldi.get_long(SLD_NUMULTMOV); unumr = rec_saldi.get_long(SLD_NUMULTMOV);
udatar = fnc_max(udatar,udata); udatar = fnc_max(udatar,udata);
@ -75,13 +85,16 @@ bool TRiga_array::add_riga(const TRectype& rec_saldi)
paverepror = rec_saldi.get_real(SLD_PAVEREPRO); paverepror = rec_saldi.get_real(SLD_PAVEREPRO);
paverepror += paverepro; paverepror += paverepro;
found = TRUE; found = TRUE;
r.put(SLD_FLSCA, flsca ? "X" : " ");
r.put(SLD_ANNOES, annoes); r.put(SLD_ANNOES, annoes);
r.put(SLD_PDARESCA, pdarescar); // r.put(SLD_PDARESCA, pdarescar);
r.put(SLD_PAVERESCA,paverescar); // r.put(SLD_PAVERESCA,paverescar);
r.put(SLD_PDARE, pdarer); r.put(SLD_PDARE, pdarer);
r.put(SLD_PAVERE,paverer); r.put(SLD_PAVERE,paverer);
r.put(SLD_FLAGSALINI,flagr); r.put(SLD_FLAGSALINI,flagr);
r.put(SLD_FLAGSALFIN,flagfinr);
r.put(SLD_SALDO, saldoinir); r.put(SLD_SALDO, saldoinir);
r.put(SLD_SALDOFIN, saldofinr);
r.put(SLD_PDAREPRO, pdarepror); r.put(SLD_PDAREPRO, pdarepror);
r.put(SLD_PAVEREPRO,paverepro); r.put(SLD_PAVEREPRO,paverepro);
r.put(SLD_DATAULMOV, udatar); r.put(SLD_DATAULMOV, udatar);
@ -90,7 +103,7 @@ bool TRiga_array::add_riga(const TRectype& rec_saldi)
} }
if (!found) 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); add(r);
} }
return found; return found;
@ -110,7 +123,7 @@ class TSaldibrowse_application : public TBrowse_application
TRiga_array _riga; TRiga_array _riga;
int _anno, _g, _c; int _anno, _g, _c;
long _s; long _s;
bool _saldo_conto, _saldo_gruppo, _saldo_sottoc; bool _saldo_conto, _saldo_gruppo, _saldo_sottoc, _scarongly;
protected: protected:
virtual bool user_create(); virtual bool user_create();
@ -123,10 +136,10 @@ protected:
virtual void init_modify_mode(TMask&); virtual void init_modify_mode(TMask&);
static bool sottoc_handler (TMask_field& f, KEY k); static bool sottoc_handler (TMask_field& f, KEY k);
static bool sheet_action(TSheet_field& s, int r, KEY k);
public: public:
void add_r(int,int,real&,real&,real&,char,real&,real&, void add_r(int,int,real&,char,real&,char,real&,real&, real&,real&,
real&,real&,TDate&,long,real&,real&,real&); TDate&,long,real&,real&,real&, real&, real&);
void compilasheet(); void compilasheet();
bool fai_filtro(); bool fai_filtro();
TSheet_field& ss() const { return (TSheet_field&)_msk->field(F_SHEET_SALDI);} 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(); } 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) void TSaldibrowse_application::init_query_mode(TMask& m)
{ {
m.disable(DLG_FINDREC); m.disable(DLG_FINDREC);
@ -158,6 +177,7 @@ bool TSaldibrowse_application::fai_filtro()
_anno = m.get_int(F_ANNO); _anno = m.get_int(F_ANNO);
_g = m.get_int(F_GRUPPO); _g = m.get_int(F_GRUPPO);
_c = m.get_int(F_CONTO); _c = m.get_int(F_CONTO);
if (tipo == '\0') if (tipo == '\0')
_s = m.get_long(F_SOTTOCONTO); _s = m.get_long(F_SOTTOCONTO);
else if (tipo == 'C') else if (tipo == 'C')
@ -199,6 +219,8 @@ bool TSaldibrowse_application::fai_filtro()
if (_s != 0l) if (_s != 0l)
to.put(SLD_SOTTOCONTO,_s); to.put(SLD_SOTTOCONTO,_s);
_scarongly = m.get_bool(F_SCARICATO);
if ( _saldo_gruppo || _saldo_conto ) if ( _saldo_gruppo || _saldo_conto )
_cur->setkey(1); _cur->setkey(1);
@ -269,7 +291,11 @@ bool TSaldibrowse_application::sottoc_handler(TMask_field& f, KEY key)
else else
m.reset(F_DESCR_CONTO); 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"); if (!ok) error_box("Conto errato o incompleto");
} }
@ -288,6 +314,7 @@ bool TSaldibrowse_application::user_create()
_msk->set_handler(F_SOTTOC_CLIENTE, sottoc_handler); _msk->set_handler(F_SOTTOC_CLIENTE, sottoc_handler);
_msk->set_handler(F_SOTTOC_FORN, sottoc_handler); _msk->set_handler(F_SOTTOC_FORN, sottoc_handler);
ss().disable(); ss().disable();
ss().set_notify(sheet_action);
set_search_field(F_GRUPPO); set_search_field(F_GRUPPO);
@ -307,7 +334,7 @@ bool TSaldibrowse_application::user_destroy()
int TSaldibrowse_application::read(TMask& m) int TSaldibrowse_application::read(TMask& m)
{ {
m.autoload(_rel); m.autoload(*_rel);
fai_filtro(); fai_filtro();
compilasheet(); compilasheet();
ss().force_update(); ss().force_update();
@ -315,8 +342,9 @@ int TSaldibrowse_application::read(TMask& m)
return NOERR; return NOERR;
} }
void TSaldibrowse_application::add_r(int numrig,int a,real& pds,real& pas,real& sc,char f,real& si,real& pd, void TSaldibrowse_application::add_r(int numrig,int a,real& slf,char sff,real& sc,char f,real& si,
real& pa,real& s,TDate& d,long n,real& pdp,real& pap,real& sp) real& pd, real& pa,real& s,TDate& d,long n,real& pdp,
real& pap,real& sp, real& dsc, real& asc)
{ {
TSheet_field& cs = ss(); TSheet_field& cs = ss();
char segno = ' '; char segno = ' ';
@ -345,37 +373,14 @@ void TSaldibrowse_application::add_r(int numrig,int a,real& pds,real& pas,real&
sc = -sc; sc = -sc;
segno = 'A'; segno = 'A';
} }
riga.add(pds.string(),7); riga.add(slf.string(),7);
riga.add(pas.string(),8); riga.add(sff,8);
riga.add(sc.string(),9); riga.add(sc.string(),9);
riga.add(segno,10); 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(d.string(),11);
riga.add(n,12); riga.add(n,12);
riga.add(pdp.string(),13); riga.add(pdp.string(),13);
riga.add(pap.string(),14); 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 = ' '; segno = ' ';
if (sp > ZERO) if (sp > ZERO)
segno = 'D'; 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(sp.string(),15);
riga.add(segno,16); riga.add(segno,16);
riga.add(dsc.string(),17);
riga.add(asc.string(),18);
} }
void TSaldibrowse_application::compilasheet() void TSaldibrowse_application::compilasheet()
{ {
char flagsal = ' '; char flagsal = ' ';
char flagfin = ' ';
real saldo = ZERO; real saldo = ZERO;
real saldosca = ZERO; // real saldosca = ZERO;
real saldopro = ZERO; real saldopro = ZERO;
real saldo_gc = ZERO; // real saldo_gc = ZERO;
real saldoini_gc = ZERO; // real saldoini_gc = ZERO; ??? a che servono????
real saldosca_gc = ZERO; // real saldosca_gc = ZERO;
real saldopro_gc = ZERO; // real saldopro_gc = ZERO;
real saldoini = ZERO; real saldoini = ZERO;
real pdare = ZERO; real pdare = ZERO;
real pavere = ZERO; real pavere = ZERO;
real pdaresca = ZERO; real pdaresca = ZERO;
real paveresca = ZERO; real paveresca = ZERO;
real saldofin = ZERO;
real pdarepro = ZERO; real pdarepro = ZERO;
real paverepro = ZERO; real paverepro = ZERO;
int gruppo, conto, anno; int gruppo, conto, anno;
@ -410,6 +419,8 @@ void TSaldibrowse_application::compilasheet()
long ultimo_num = 0l; long ultimo_num = 0l;
TDate ultima_data; TDate ultima_data;
// nuova struttura archivio saldi
ss().reset(); ss().reset();
_riga.destroy(); _riga.destroy();
@ -418,6 +429,9 @@ void TSaldibrowse_application::compilasheet()
for (int i = 0; i < items; i++,++(*_cur)) for (int i = 0; i < items; i++,++(*_cur))
{ {
if (_scarongly &&! _cur->curr().get_bool(SLD_FLSCA))
continue;
anno = _cur->curr().get_int(SLD_ANNOES); anno = _cur->curr().get_int(SLD_ANNOES);
gruppo = _cur->curr().get_int(SLD_GRUPPO); gruppo = _cur->curr().get_int(SLD_GRUPPO);
conto = _cur->curr().get_int(SLD_CONTO); conto = _cur->curr().get_int(SLD_CONTO);
@ -433,23 +447,45 @@ void TSaldibrowse_application::compilasheet()
if (_saldo_sottoc) if (_saldo_sottoc)
{ {
flagsal = _cur->curr().get_char(SLD_FLAGSALINI); flagsal = _cur->curr().get_char(SLD_FLAGSALINI);
flagfin = _cur->curr().get_char(SLD_FLAGSALFIN);
saldoini = _cur->curr().get_real(SLD_SALDO); saldoini = _cur->curr().get_real(SLD_SALDO);
saldofin = _cur->curr().get_real(SLD_SALDOFIN);
pdare = _cur->curr().get_real(SLD_PDARE); pdare = _cur->curr().get_real(SLD_PDARE);
pavere = _cur->curr().get_real(SLD_PAVERE); 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); pdarepro = _cur->curr().get_real(SLD_PDAREPRO);
paverepro = _cur->curr().get_real(SLD_PAVEREPRO); paverepro = _cur->curr().get_real(SLD_PAVEREPRO);
ultima_data = _cur->curr().get(SLD_DATAULMOV); ultima_data = _cur->curr().get(SLD_DATAULMOV);
ultimo_num = _cur->curr().get_long(SLD_NUMULTMOV); 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') if (flagsal == 'D')
saldo = pdare + saldoini - pavere; saldo = pdare + saldoini - pavere;
else else
saldo = pdare - saldoini - pavere; 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; 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) if (_saldo_gruppo || _saldo_conto)
@ -458,21 +494,43 @@ void TSaldibrowse_application::compilasheet()
{ {
TRectype& riga = (TRectype&)_riga[j]; TRectype& riga = (TRectype&)_riga[j];
anno = riga.get_int(SLD_ANNOES); 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); flagsal = riga.get_char(SLD_FLAGSALINI);
flagfin = riga.get_char(SLD_FLAGSALFIN);
saldoini = riga.get_real(SLD_SALDO); saldoini = riga.get_real(SLD_SALDO);
saldofin = riga.get_real(SLD_SALDOFIN);
pdare = riga.get_real(SLD_PDARE); pdare = riga.get_real(SLD_PDARE);
pavere = riga.get_real(SLD_PAVERE); pavere = riga.get_real(SLD_PAVERE);
saldo = pdare - pavere + saldoini; saldo = pdare - pavere + saldoini;
saldosca = saldo + pdaresca - paveresca;
pdarepro = riga.get_real(SLD_PDAREPRO); pdarepro = riga.get_real(SLD_PDAREPRO);
paverepro = riga.get_real(SLD_PAVEREPRO); paverepro = riga.get_real(SLD_PAVEREPRO);
saldopro = pdarepro - paverepro; saldopro = pdarepro - paverepro;
ultima_data = riga.get(SLD_DATAULMOV); ultima_data = riga.get(SLD_DATAULMOV);
ultimo_num = riga.get_long(SLD_NUMULTMOV); 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(); _riga.destroy();
} }