Patch level : 12.0 310 314

Files correlati     : 

Modifica CRPA

Aggiunto flag per la contabilità separata.Patch level         : 12.0 310 314
Files correlati     : 

Modifica CRPA

Separata la contabilità separata dalla contabilità.


git-svn-id: svn://10.65.10.50/branches/R_10_00@23446 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
bonazzi 2016-12-13 13:54:49 +00:00
parent 0861f950cc
commit 4f2eea5dc9
2 changed files with 128 additions and 115 deletions

View File

@ -627,120 +627,133 @@ bool TSaldo::prg_saldo(int annoes, TConto& conto, real& prgdare, real& prgavere,
return ok;
}
bool TSaldo::saldo_cont_sep(int g, int c, long s, const int codes, TDate al,
int indbil, const char * cont_sep, int provv, bool first)
{
_saldo_iniziale = ZERO;
_saldo = ZERO;
_prg_dare = ZERO;
_prg_avere = ZERO;
_movimentato = false;
_rec_presente_ep = false;
_rec_presente_ec = false;
_prec = false;
TEsercizi_contabili es;
_annoes = codes;
const TDate inizio = es[_annoes].inizio();
TString80 key; key.format("%04d| |%d|%d|%ld", _annoes, g, c, s);
const TRectype& saldo = cache().get(LF_SALDI, key);
if (!al.ok())
al = es[_annoes].fine();
/* if (_prec && first)
{
const int codesprec = es.date2prevesc(al);
_saldo_iniziale = saldo_cont_sep(g, c, s, codesprec, es[codesprec].fine(), indbil, cont_sep, provv, false);
} */
TRelation relrmov(LF_RMOV);
TRectype& rmov = relrmov.curr();
rmov.put(RMV_GRUPPO,g);
rmov.put(RMV_CONTO,c);
rmov.put(RMV_SOTTOCONTO,s);
TCursor cur(&relrmov, "", 2, &rmov, &rmov);
const TRecnotype items = cur.items();
if (items > 0)
{
cur.freeze();
TProgind* p = NULL;
if (items > 100) // E' proprio utile la progind?
{
TString80 prompt;
prompt.format(FR("Calcolo saldo del conto %d.%d.%ld"), g, c, s);
p = new TProgind(items, prompt, false);
}
for (cur = 0L; cur.pos() < items; ++cur)
{
if (p != NULL)
p->addstatus(1L);
const long num_reg = rmov.get_long(RMV_NUMREG);
const real importo = rmov.get_real(RMV_IMPORTO);
if (!importo.is_zero())
{
const char sezione = rmov.get_char(RMV_SEZIONE);
const TRectype& mov = cache().get(LF_MOV, num_reg);
const bool ok = !mov.empty();
if (ok)
{
if (mov.get(MOV_CONTSEP) == cont_sep)
{
_codcaus = mov.get(MOV_CODCAUS);
_datareg = mov.get(MOV_DATAREG);
_provv = mov.get(MOV_PROVVIS);
_datacomp = mov.get(MOV_DATACOMP);
const TString& movap = _causali_apertura.decode(_codcaus);
if (provv > 1 || _provv.empty())
{
if (_datacomp >= inizio && _datacomp <= al)
{
if (movap.blank())
{
_movimentato = true;
if (sezione == 'D')
_prg_dare += importo;
else
_prg_avere += importo;
}
else
if (movap == "A")
{
_movimentato = true;
if (sezione == 'D')
_saldo_iniziale += importo;
else
_saldo_iniziale -= importo;
}
}
}
}
}
else
NFCHECK("Testata assente: %ld", num_reg);
}
}
if (p != NULL)
delete p;
}
_saldo = _saldo_iniziale + _prg_dare - _prg_avere;
return _movimentato;
}
bool TSaldo::saldo_cont_sep(int g, int c, long s, const int codes, TDate al,
int indbil, const char * cont_sep, int provv, bool chiusura, bool first)
{
_movimentato = false;
_rec_presente_ep = false;
_rec_presente_ec = false;
_prec = false;
real saldo_ini_prec;
TEsercizi_contabili es;
_annoes = codes;
const TDate inizio = es[_annoes].inizio();
TString80 key; key.format("%04d| |%d|%d|%ld", _annoes, g, c, s);
const TRectype& saldo = cache().get(LF_SALDI, key);
if (!al.ok())
al = es[_annoes].fine();
/* if ((indbil < 3 || indbil == 5) && first)
{
const int codesprec = es.date2prevesc(al);
saldo_cont_sep(g, c, s, codesprec, es[codesprec].fine(), indbil, cont_sep, provv, chiusura, false);
saldo_ini_prec = _saldo;
} */
_saldo_iniziale = ZERO;
_saldo = ZERO;
_prg_dare = ZERO;
_prg_avere = ZERO;
TRelation relrmov(LF_RMOV);
TRectype& rmov = relrmov.curr();
rmov.put(RMV_GRUPPO,g);
rmov.put(RMV_CONTO,c);
rmov.put(RMV_SOTTOCONTO,s);
TCursor cur(&relrmov, "", 2, &rmov, &rmov);
const TRecnotype items = cur.items();
if (items > 0)
{
cur.freeze();
TProgind* p = NULL;
if (items > 100) // E' proprio utile la progind?
{
TString80 prompt;
prompt.format(FR("Calcolo saldo del conto %d.%d.%ld"), g, c, s);
p = new TProgind(items, prompt, false);
}
for (cur = 0L; cur.pos() < items; ++cur)
{
if (p != NULL)
p->addstatus(1L);
const long num_reg = rmov.get_long(RMV_NUMREG);
const real importo = rmov.get_real(RMV_IMPORTO);
if (!importo.is_zero())
{
const char sezione = rmov.get_char(RMV_SEZIONE);
const TRectype& mov = cache().get(LF_MOV, num_reg);
const bool ok = !mov.empty();
if (ok)
{
if (mov.get(MOV_CONTSEP) == cont_sep)
{
_codcaus = mov.get(MOV_CODCAUS);
_datareg = mov.get(MOV_DATAREG);
_provv = mov.get(MOV_PROVVIS);
_datacomp = mov.get(MOV_DATACOMP);
const TString& movap = _causali_apertura.decode(_codcaus);
if (provv > 1 || _provv.empty())
{
if (_datacomp >= inizio && _datacomp <= al)
{
if (movap.blank())
{
_movimentato = true;
if (sezione == 'D')
_prg_dare += importo;
else
_prg_avere += importo;
}
else
if (movap == "A")
{
_movimentato = true;
if (sezione == 'D')
_saldo_iniziale += importo;
else
_saldo_iniziale -= importo;
}
else
if (chiusura && movap == "C")
{
_movimentato = true;
if (sezione == 'D')
_prg_dare += importo;
else
_prg_avere += importo;
}
}
}
}
}
else
NFCHECK("Testata assente: %ld", num_reg);
}
}
if (p != NULL)
delete p;
}
// if ((indbil < 3 || indbil == 5) && first && _saldo_iniziale == ZERO)
// _saldo_iniziale = saldo_ini_prec;
_saldo = _saldo_iniziale + _prg_dare - _prg_avere;
return _movimentato;
}
///////////////////////////////////////////////////////////

View File

@ -119,7 +119,7 @@ public:
bool ultima_immissione_verifica(int annoes, int g,int c,long s,int indbil,int prov);
bool data_limite_bilancio(int annoes,int g,int c,long s,const TDate& data_inf,const TDate& data_suo,int indbil,int stp_prov, const char* filter = NULL);
const real& saldo_periodo(int g, int c, long s, const TDate& dal, const TDate& al, int indbil, bool provv);
bool saldo_cont_sep(int g, int c, long s, const int codes, TDate al, int indbil, const char * cont_sep, int provv, bool first = true);
bool saldo_cont_sep(int g, int c, long s, const int codes, TDate al, int indbil, const char * cont_sep, int provv, bool chiusura = false, bool first = true);
bool ricerca_progr_prec(int, int, int, long);
real saldofin_esprec(int,int,int,long,bool saldo_chiusura = FALSE, bool provvisori = FALSE);