From 3b54bda04de6b91f3f050ba7449ac656d0390c34 Mon Sep 17 00:00:00 2001 From: guy Date: Thu, 23 Jun 2005 15:32:55 +0000 Subject: [PATCH] Patch level : 2.2 Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@13215 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca3300.cpp | 39 ++++++++++++++++++-------------- ca/ca3300.h | 3 +-- ca/ca3300.uml | 16 ++++---------- ca/calib02.cpp | 60 +++++++++++++++++++++++++++++--------------------- ca/calib02.h | 8 ++++--- ca/f107.trr | 2 +- ca/f108.trr | 4 ++-- 7 files changed, 71 insertions(+), 61 deletions(-) diff --git a/ca/ca3300.cpp b/ca/ca3300.cpp index a36c9ec30..6adc370f3 100755 --- a/ca/ca3300.cpp +++ b/ca/ca3300.cpp @@ -248,7 +248,8 @@ protected: public: void set_range(const TDate& dal, const TDate& al); const TSaldanal& saldo(const char* conto, const char* costo, - const char* commessa, const char* fase, char tipo); + const char* commessa, const char* fase, word tipi); + TSaldi_cache() : TCache(3883) { } }; TObject* TSaldi_cache::key2obj(const char* key) @@ -272,14 +273,14 @@ TObject* TSaldi_cache::key2obj(const char* key) } const TSaldanal& TSaldi_cache::saldo(const char* conto, const char* costo, - const char* commessa, const char* fase, char tipo) + const char* commessa, const char* fase, word tipi) { TToken_string key; key.add(conto, 0); key.add(costo, 1); key.add(commessa, 2); key.add(fase, 3); - key.add(tipo, 4); + key.add(tipi, 4); return *(const TSaldanal*)objptr(key); } @@ -301,8 +302,9 @@ TSaldi_cache _saldi; class TPiano_conti_recordset : public TISAM_recordset { - char _tipo; + word _tipimov; TString _da_conto, _a_conto; + int _contolen; TString _codcms, _codfas, _codcosto; TDate _dal, _al; bool _movimentati, _nonnulli; @@ -325,31 +327,36 @@ const TVariant& TPiano_conti_recordset::get(const char* column_name) const if (strncmp(column_name, "SALDO:", 6) == 0) { const TString& conto = get(PCONANA_CODCONTO).as_string(); - const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipo); const char* sub_field = column_name+6; TVariant& var = get_tmp_var(); if (strcmp(sub_field, "INI_DARE") == 0) { + const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov); var = s._ini.sezione() == 'D' ? s._ini.valore() : ZERO; } else if (strcmp(sub_field, "INI_AVERE") == 0) { + const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov); var = s._ini.sezione() == 'A' ? s._ini.valore() : ZERO; } else if (strcmp(sub_field, "MOV_DARE") == 0) { + const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov); var = s._dare.valore(); } else if (strcmp(sub_field, "MOV_AVERE") == 0) { + const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov); var = s._avere.valore(); } else if (strcmp(sub_field, "FIN_DARE") == 0) { + const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov); var = s._fin.sezione() == 'D' ? s._fin.valore() : ZERO; } else if (strcmp(sub_field, "FIN_AVERE") == 0) { + const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov); var = s._fin.sezione() == 'A' ? s._fin.valore() : ZERO; } return var; @@ -377,10 +384,13 @@ const TVariant& TPiano_conti_recordset::get(const char* column_name) const bool TPiano_conti_recordset::valid_record(const TRelation& rel) const { + const TString& conto = rel.curr().get(PCONANA_CODCONTO); + if (conto.len() < _contolen) + return false; + if (_movimentati || _nonnulli) { - const TString& conto = rel.curr().get(PCONANA_CODCONTO); - const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipo); + const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov); if (_movimentati && !s._movimentato) return false; if (_nonnulli && s._ini.is_zero() && s._dare.is_zero() && s._avere.is_zero()) @@ -403,20 +413,17 @@ void TPiano_conti_recordset::set_custom_filter(TCursor& cursor) const arec.zero(); arec.put(PCONANA_CODCONTO, _a_conto); cursor.setregion(darec, arec); - TString filter; - int len = 0; - const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA); - for (int l = info.levels()-1; l >= 0; l--) - len += info.len(l); - filter << "NUM(LEN(CODCONTO)==" << len << ")"; - cursor.setfilter(filter); - _current_recset = this; cursor.set_filterfunction(pianoconti_filter); } void TPiano_conti_recordset::set_filter(const TMask& m, int r) { + _contolen = 0; + const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA); + for (int l = info.levels()-1; l >= 0; l--) + _contolen += info.len(l); + for (int i = 0; m.id2pos(F_PDC1_INI+i) > 0; i++) { _da_conto << m.get(F_PDC1_INI+i); @@ -427,7 +434,7 @@ void TPiano_conti_recordset::set_filter(const TMask& m, int r) _al = m.get(F_DATAA); _saldi.set_range(_dal, _al); - _tipo = m.get(F_TIPOMOV)[0]; + _tipimov = m.get(F_TIPOSTAMPA)[0] == 'C' ? 1 : 6; _movimentati = m.get_int(F_STAMPAV) == 1; _nonnulli = m.get_int(F_STAMPAV) == 2; diff --git a/ca/ca3300.h b/ca/ca3300.h index 20a8cfbf8..2e0009518 100755 --- a/ca/ca3300.h +++ b/ca/ca3300.h @@ -13,8 +13,7 @@ #define F_STAMPAV 311 #define F_DATADA 312 #define F_DATAA 313 -#define F_TIPOMOV 314 -#define F_TIPOSTAMPA 315 +#define F_TIPOSTAMPA 314 //campi generati dal pdc #define F_PDC1_INI 316 diff --git a/ca/ca3300.uml b/ca/ca3300.uml index f24272405..02f382844 100755 --- a/ca/ca3300.uml +++ b/ca/ca3300.uml @@ -74,8 +74,8 @@ END LIST F_TIPOSTAMPA 11 BEGIN PROMPT 12 4 "" - ITEM "P|Preventivo" ITEM "C|Consuntivo" + ITEM "P|Preventivo" ITEM "R|Raffronto" END @@ -105,17 +105,9 @@ BEGIN GROUP 5 END -LIST F_TIPOMOV 1 25 -BEGIN - PROMPT 2 8 "Tipo movimento " - ITEM " |Normale" - ITEM "P|Preventivo" - ITEM "V|Variazione preventivo" -END - LIST F_STAMPAV 20 BEGIN - PROMPT 2 9 "Selezione conti " + PROMPT 2 8 "Selezione conti " ITEM "1|Movimentati" ITEM "2|Con saldo non nullo" ITEM "3|Tutti" @@ -124,13 +116,13 @@ END BOOLEAN F_CODICI BEGIN - PROMPT 42 9 "Non stampare codici conti " + PROMPT 42 8 "Non stampare codici conti " GROUP 4 END STRING F_REPORT 256 66 BEGIN - PROMPT 2 10 "Report " + PROMPT 2 9 "Report " FLAGS "B" CHECKTYPE REQUIRED END diff --git a/ca/calib02.cpp b/ca/calib02.cpp index dd5edea5a..27dab9139 100755 --- a/ca/calib02.cpp +++ b/ca/calib02.cpp @@ -139,7 +139,7 @@ bool TAnal_report::execute_usr_word(unsigned int opcode, TVariant_stack& stack) TImporto TAnal_balance::saldo_fine_anno(const char* conto, const char* costo, const char* commessa, const char* fase, - int anno, char tipo) const + int anno, word tipo) const { TImporto saldo; @@ -163,27 +163,31 @@ TImporto TAnal_balance::saldo_fine_anno(const char* conto, const char* costo, query << "USE SALDANA"; if (select.not_empty()) query << "SELECT " << select; - query << "\nFROM CONTO=#CONTO" - << "\nTO CONTO=#CONTO ANNO=#ANNO"; + query << "\nFROM CONTO=" << conto << '\n'; + query << "\nTO CONTO=" << conto << " ANNO=" << anno << '\n'; - TString4 strtipo; strtipo << tipo; TISAM_recordset saldini(query); - saldini.set_var("#CONTO", TVariant(conto)); - saldini.set_var("#ANNO", TVariant(long(anno))); - - TString8 sezname = SALDANA_SEZIONE; - TString8 salname = SALDANA_SALDO; - if (tipo == 'P' || tipo == 'V') - { - sezname << tipo; - salname << tipo; - } for (int i = 0; i < saldini.items(); i++) { - const char sez = saldini.get(sezname).as_string()[0]; - const real imp = saldini.get(salname).as_real(); - saldo += TImporto(sez, imp); + if (tipo & 1) + { + const char sez = saldini.get(SALDANA_SEZIONE).as_string()[0]; + const real imp = saldini.get(SALDANA_SALDO).as_real(); + saldo += TImporto(sez, imp); + } + if (tipo & 2) + { + const char sez = saldini.get(SALDANA_SEZIONEP).as_string()[0]; + const real imp = saldini.get(SALDANA_SALDOP).as_real(); + saldo += TImporto(sez, imp); + } + if (tipo & 4) + { + const char sez = saldini.get(SALDANA_SEZIONEV).as_string()[0]; + const real imp = saldini.get(SALDANA_SALDOV).as_real(); + saldo += TImporto(sez, imp); + } } saldo.normalize(); } @@ -193,13 +197,9 @@ TImporto TAnal_balance::saldo_fine_anno(const char* conto, const char* costo, bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo, const char* commessa, const char* fase, - const TDate& dal, const TDate& al, char tipo, + const TDate& dal, const TDate& al, word tipo, TImporto& ini, TImporto& dare, TImporto& avere) const { - TString4 strtipo; - if (tipo > ' ') - strtipo << tipo; - TDate dataini; if (dal.ok()) { @@ -210,8 +210,7 @@ bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo, } TString query; - query << "USE RMOVANA KEY 2\n" - << "SELECT (107.TIPOMOV=\"" << strtipo << "\")"; + query << "USE RMOVANA KEY 2\n"; if (dataini.ok()) query << "&&(ANSI(107.DATACOMP)>=" << dataini.date2ansi() << ")"; if (al.ok()) @@ -241,6 +240,17 @@ bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo, { rmovana.move_to(i); + const char tipomov = rmovana.get("107.TIPOMOV").as_string()[0]; + int ntipomov = 0; + if (tipomov == 'P') + ntipomov = 2; else + if (tipomov == 'V') + ntipomov = 4; + else + ntipomov = 1; + if ((ntipomov & tipo) == 0) + continue; + const TDate data = rmovana.get("107.DATACOMP").as_date(); const TImporto imp(rmovana.get(RMOVANA_SEZIONE).as_string()[0], rmovana.get(RMOVANA_IMPORTO).as_real()); @@ -264,7 +274,7 @@ bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo, bool TAnal_balance::saldi(const char* conto, const char* costo, const char* commessa, const char* fase, - const TDate& dal, const TDate& al, char tipo, + const TDate& dal, const TDate& al, word tipo, TImporto& ini, TImporto& dare, TImporto& avere) const { TEsercizi_contabili esc; diff --git a/ca/calib02.h b/ca/calib02.h index 9547c700d..f1ee392d8 100755 --- a/ca/calib02.h +++ b/ca/calib02.h @@ -33,19 +33,21 @@ public: // meglio pubic? // TAnal_balance /////////////////////////////////////////////////////////// +// Tipi di saldo: 1 = Normale; 2 = Preventivo; 4 = Variazione preventivo + class TAnal_balance : public TObject { public: TImporto saldo_fine_anno(const char* conto, const char* costo, const char* commessa, const char* fase, - int annofin, char tipo) const; + int annofin, word tipo) const; bool saldo_movimenti(const char* conto, const char* costo, const char* commessa, const char* fase, - const TDate& dal, const TDate& al, char tipo, + const TDate& dal, const TDate& al, word tipo, TImporto& ini, TImporto& dare, TImporto& avere) const; bool saldi(const char* conto, const char* costo, const char* commessa, const char* fase, - const TDate& dal, const TDate& al, char tipo, + const TDate& dal, const TDate& al, word tipo, TImporto& ini, TImporto& dare, TImporto& avere) const; }; diff --git a/ca/f107.trr b/ca/f107.trr index 90a3617fa..743c97992 100755 --- a/ca/f107.trr +++ b/ca/f107.trr @@ -19,5 +19,5 @@ SEZIONE|1|1|0|Sezione del totale documento BLOCCATO|8|1|0|Movimento bloccato 3 NUMREG| -DATAREG+NUMREG|X +DATACOMP+NUMREG|X NUMREGCG|X diff --git a/ca/f108.trr b/ca/f108.trr index 6765f2be5..24f217b1c 100755 --- a/ca/f108.trr +++ b/ca/f108.trr @@ -4,7 +4,7 @@ ANNOES|9|4|0|Anno di Esercizio NUMREG|3|7|0|Numero di Registrazione NUMRIG|2|3|0|Numero riga SEZIONE|1|1|0|Sezione -DATAREG|5|8|0|Data di registrazione +DATACOMP|5|8|0|Data di competenza CODCCOSTO|1|20|0|Codice centro di costo CODCMS|1|20|0|Codice commessa CODFASE|1|10|0|Codice fase @@ -18,4 +18,4 @@ CODFASEORI|1|10|0|Codice fase originario CODCONTORI|1|20|0|Codice conto originario 2 NUMREG+NUMRIG| -CODCONTO+DATAREG+NUMREG+NUMRIG|X +CODCONTO+DATACOMP+NUMREG+NUMRIG|X