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 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();
}