From 4f2eea5dc945c381db1a4019dd3ce1699c1e2c6a Mon Sep 17 00:00:00 2001 From: bonazzi Date: Tue, 13 Dec 2016 13:54:49 +0000 Subject: [PATCH] Patch level : 12.0 310 314 Files correlati : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/cg/cglib02.cpp | 241 ++++++++++++++++++++++++--------------------- src/cg/cglib02.h | 2 +- 2 files changed, 128 insertions(+), 115 deletions(-) diff --git a/src/cg/cglib02.cpp b/src/cg/cglib02.cpp index d03dab43d..0862cf819 100755 --- a/src/cg/cglib02.cpp +++ b/src/cg/cglib02.cpp @@ -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; +} /////////////////////////////////////////////////////////// diff --git a/src/cg/cglib02.h b/src/cg/cglib02.h index 71c3812d4..a493cbbf4 100755 --- a/src/cg/cglib02.h +++ b/src/cg/cglib02.h @@ -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);