From b7424d5550d6941cf49ba5a3e687d22fe52ccbf4 Mon Sep 17 00:00:00 2001 From: luca Date: Mon, 7 Jun 2010 15:48:02 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : fine immissione cespiti in analitica registro sintetico cespiti analiticizzato git-svn-id: svn://10.65.10.50/trunk@20546 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ce/ce3900.cpp | 133 +++++++++++++++++++++++++++++++------------------ ce/ce3900.h | 5 +- ce/ce3900.uml | 55 ++++++++------------ ce/ce4100.cpp | 2 +- ce/ce4100a.uml | 1 + ce/celib.cpp | 122 +++++++++++++-------------------------------- ce/celib.h | 9 ++-- 7 files changed, 148 insertions(+), 179 deletions(-) diff --git a/ce/ce3900.cpp b/ce/ce3900.cpp index 0deb79431..d8f97e647 100755 --- a/ce/ce3900.cpp +++ b/ce/ce3900.cpp @@ -120,13 +120,12 @@ void TStampa_sintetica_recordset::set_filter(const TStampa_sintetica_mask& msk) { //parametri per costruzione query const bool exclude_aliens = msk.get_bool(F_EXCLUDE_ALIENS); - const bool anal = dongle().active(CAAUT); TString query = "USE CESPI\nSELECT "; - query << "(ANSI(DTCOMP)<=#DATAFINE)"; //" << msk.get_date(F_DATAFINE).date2ansi() << ")"; + query << "(ANSI(DTCOMP)<=#DATAFINE)"; //cespiti alienati esclusi? if (exclude_aliens) - query << "&&((DTALIEN='')||(ANSI(DTALIEN)>=#DATAINIZIO))"; // << msk.get_date(F_DATAINIZIO).date2ansi() << "))"; + query << "&&((DTALIEN='')||(ANSI(DTALIEN)>=#DATAINIZIO))"; //categorie const TString& dacat = msk.get(F_FROM_CAT); @@ -140,11 +139,23 @@ void TStampa_sintetica_recordset::set_filter(const TStampa_sintetica_mask& msk) } //parte analitica - if (anal) + const TString& codcdc = msk.get(F_CODCDC); + const TString& codcms = msk.get(F_CODCMS); + const TString& codfase = msk.get(F_CODFASE); + if (codcdc.full() || codcms.full() || codfase.full()) { - query << "&&(BETWEEN(SALCECMS.CODCDC,#DACODCDC,#ACODCDC))"; - query << "&&(BETWEEN(SALCECMS.CODCMS,#DACODCMS,#ACODCMS))"; - query << "&&(BETWEEN(SALCECMS.CODFASE,#DACODFASE,#ACODFASE))"; + query << "&&"; + + if (codcdc.full()) + query << "(BETWEEN(SALCECMS.CODCDC,#CODCDC,#CODCDC))&&"; + + if (codcms.full()) + query << "(BETWEEN(SALCECMS.CODCMS,#CODCMS,#CODCMS))&&"; + + if (codfase.full()) + query << "(BETWEEN(SALCECMS.CODFASE,#CODFASE,#CODFASE))&&"; + + query.rtrim(2); query << "\nJOIN SALCECMS INTO IDCESPITE=IDCESPITE"; } @@ -158,18 +169,13 @@ void TStampa_sintetica_recordset::set_filter(const TStampa_sintetica_mask& msk) if (exclude_aliens) set_var("#DATAINIZIO", msk.get_date(F_DATAINIZIO).date2ansi()); - if (anal) - { - const TString& codcdc = msk.get(F_CODCDC); - set_var("#DACODCDC", codcdc); - set_var("#ACODCDC", codcdc); - const TString& codcms = msk.get(F_CODCMS); - set_var("#DACODCMS", codcms); - set_var("#ACODCMS", codcms); - const TString& codfase = msk.get(F_CODFASE); - set_var("#DACODFASE", codfase); - set_var("#ACODFASE", codfase); - } + //set var condizionali in analitica + if (codcdc.full()) + set_var("#CODCDC", codcdc); + if (codcms.full()) + set_var("#CODCMS", codcms); + if (codfase.full()) + set_var("#CODFASE", codfase); } @@ -183,14 +189,31 @@ class TStampa_sintetica_rep : public TReport int _group_codimp, _group_codloc; TString _codcdc, _codcms, _codfase; TCespite _cespite; + real _percutil; + TString16 _cespi_percutil; protected: real val_amm(const TRectype& rec_saldi) const; virtual bool get_usr_val(const TString& name, TVariant& var) const; + real perc_util() const; + public: void set_filter(const TStampa_sintetica_mask& msk); }; +//metodo per avere, solo al cambio cespite, la % di utilizzo per la chiave cespite/anno/cdc/cms/fase +//serve nel caso si utilizzi il cespite in analitica (selezioni su cdc/cms/fase) +real TStampa_sintetica_rep::perc_util() const +{ + const TString& curr_cespite = _cespite.get(CESPI_IDCESPITE); + if (curr_cespite != _cespi_percutil) + { + (TString&)_cespi_percutil = curr_cespite; + (real&)_percutil = ceca_percutil(_cespi_percutil, _anno, _codcdc, _codcms, _codfase); + } + return _percutil; +} + void TStampa_sintetica_rep::set_filter(const TStampa_sintetica_mask& msk) { _anno = msk.get_int(F_ESERCIZIO); @@ -282,7 +305,43 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons return true; } - if (name == "#PERCAMM") // percentuale ammortamento + + + if (name == "#QAMMMV") //quote ammortamento su movimento esercizio corrente + { + real quote_ammmv; + const TArray& array_ammmv = _cespite.ammmv(); + for (int i = 0; i < array_ammmv.items(); i++) + { + const TRectype& rec_ammmv = (const TRectype&)array_ammmv[i]; + quote_ammmv += rec_ammmv.get_real(AMMMV_QNOR) + rec_ammmv.get_real(AMMMV_QACC) + + rec_ammmv.get_real(AMMMV_QANT) + rec_ammmv.get_real(AMMMV_QPERSE) + + rec_ammmv.get_real(AMMMV_QPPRIVATE) + rec_ammmv.get_real(AMMMV_FPRIVATO); + } + quote_ammmv *= perc_util(); + var = quote_ammmv; + return true; + } + if (name == "#QAMM") //quote ammortamento esercizio corrente + { + const TRectype& rec_ammce = _cespite.amm_pro(); + real quote_amm = real(rec_ammce.get_real(AMMCE_QNOR) + rec_ammce.get_real(AMMCE_QACC) + + rec_ammce.get_real(AMMCE_QANT) + rec_ammce.get_real(AMMCE_QPERSE) + + rec_ammce.get_real(AMMCE_QPPRIVATE) + rec_ammce.get_real(AMMCE_FPRIVATO)); + quote_amm *= perc_util(); + var = quote_amm; + return true; + } + if (name == "#QAMM_FPRIVATO") //fondo ammortamento privato corrente + { + const TRectype& rec_ammce = _cespite.amm_pro(); + real famm = rec_ammce.get_real(AMMCE_FPRIVATO); + famm *= perc_util(); + var = famm; + return true; + } + + if (name == "#PERCAMM") // percentuale ammortamento { real percamm; real valamm = val_amm(_cespite.sal_ini()); @@ -290,7 +349,9 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons { const int anno_acq = _cespite.get_date(CESPI_DTCOMP).year(); if (anno_acq == _anno) + { valamm = val_amm(_cespite.sal_pro()); + } } if (!valamm.is_zero()) { @@ -304,34 +365,7 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons return true; } - if (name == "#QAMMMV") //quote ammortamento su movimento esercizio corrente - { - real quote_ammmv; - const TArray& array_ammmv = _cespite.ammmv(); - for (int i = 0; i < array_ammmv.items(); i++) - { - const TRectype& rec_ammmv = (const TRectype&)array_ammmv[i]; - quote_ammmv += rec_ammmv.get_real(AMMMV_QNOR) + rec_ammmv.get_real(AMMMV_QACC) + - rec_ammmv.get_real(AMMMV_QANT) + rec_ammmv.get_real(AMMMV_QPERSE) + - rec_ammmv.get_real(AMMMV_QPPRIVATE) + rec_ammmv.get_real(AMMMV_FPRIVATO); - } - var = quote_ammmv; - return true; - } - if (name == "#QAMM") //quote ammortamento esercizio corrente - { - const TRectype& rec_ammce = _cespite.amm_pro(); - var = real(rec_ammce.get_real(AMMCE_QNOR) + rec_ammce.get_real(AMMCE_QACC) + - rec_ammce.get_real(AMMCE_QANT) + rec_ammce.get_real(AMMCE_QPERSE) + - rec_ammce.get_real(AMMCE_QPPRIVATE) + rec_ammce.get_real(AMMCE_FPRIVATO)); - return true; - } - if (name == "#QAMM_FPRIVATO") //fondo ammortamento privato corrente - { - const TRectype& rec_ammce = _cespite.amm_pro(); - var = rec_ammce.get_real(AMMCE_FPRIVATO); - return true; - } + if (name == "#FAMM") //fondo ammortamento alla fine dell'esercizio precedente { const TRectype& rec_ammce = _cespite.amm_ini(); @@ -347,6 +381,8 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons var = rec_ammce.get_real(AMMCE_FPRIVATO); return true; } + + if (name == "#CESSELIM") //cessioni elminiazioni { real cesselim; @@ -358,6 +394,7 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons rec_movam.get_real(MOVAM_QANT) + rec_movam.get_real(MOVAM_QPERSE) + rec_movam.get_real(MOVAM_QPPRIVATE) + rec_movam.get_real(MOVAM_FPRIVATO); } + cesselim *= perc_util(); var = cesselim; return true; } diff --git a/ce/ce3900.h b/ce/ce3900.h index 6125b3dda..d50b283c4 100755 --- a/ce/ce3900.h +++ b/ce/ce3900.h @@ -6,10 +6,7 @@ #define F_DATAFINE 105 #define F_GRUPPO 106 #define F_SPECIE 107 -#define F_D_GRUPPO 108 -#define F_D_SPECIE 109 -#define F_CODTAB 110 -#define F_D_CODTAB 111 +#define F_DESC_GRSP 108 #define F_FROM_CAT 112 #define F_D_FROM_CAT 113 diff --git a/ce/ce3900.uml b/ce/ce3900.uml index 10d99f427..287a316fe 100755 --- a/ce/ce3900.uml +++ b/ce/ce3900.uml @@ -6,15 +6,14 @@ ENDPAGE PAGE "Registro cespiti sintetico" 0 2 0 0 -GROUPBOX DLG_NULL 78 6 +GROUPBOX DLG_NULL 78 5 BEGIN - PROMPT 1 0 "" - FLAGS "R" + PROMPT 1 1 "" END NUMBER F_CODDITTA 5 BEGIN - PROMPT 2 1 "Ditta " + PROMPT 2 2 "Ditta " FLAGS "DF" USE LF_NDITTE INPUT CODDITTA F_CODDITTA @@ -24,13 +23,13 @@ END STRING F_RAGSOC 55 BEGIN - PROMPT 20 1 "" + PROMPT 20 2 "" FLAGS "D" END NUMBER F_ESERCIZIO 4 BEGIN - PROMPT 2 2 "Esercizio " + PROMPT 2 3 "Esercizio " FLAGS "Z" USE CCE JOIN ESC ALIAS 105 INTO CODTAB==CODTAB @@ -46,58 +45,44 @@ END DATE F_DATAINIZIO BEGIN - PROMPT 20 2 "Data inizio " + PROMPT 20 3 "Data inizio " FLAGS "D" END DATE F_DATAFINE BEGIN - PROMPT 45 2 "Data fine " + PROMPT 45 3 "Data fine " FLAGS "D" END NUMBER F_GRUPPO 2 BEGIN - PROMPT 2 3 "Gruppo " + PROMPT 2 4 "Gruppo " FLAGS "Z" - USE CCB KEY 1 - JOIN %CGR ALIAS 106 INTO CODTAB==CODTAB[5,6] - INPUT CODTAB[1,4] F_ESERCIZIO SELECT - INPUT CODTAB[5,6] F_GRUPPO - INPUT CODTAB[7,10] F_SPECIE - DISPLAY "Codice" CODTAB[5,6] - DISPLAY "Descrizione@60" 106@->S0 - OUTPUT F_GRUPPO CODTAB[5,6] - OUTPUT F_D_GRUPPO 106@->S0 - CHECKTYPE NORMAL END STRING F_SPECIE 4 BEGIN - PROMPT 2 4 "Specie " - FLAGS "_" - USE CCB KEY 1 - JOIN %CAT ALIAS 107 INTO CODTAB[1,2]==CODTAB[5,6] CODTAB[3,6]==CODTAB[7,10] + PROMPT 17 4 "Specie " + FLAGS "_" + USE CCB + JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10] INPUT CODTAB[1,4] F_ESERCIZIO SELECT - INPUT CODTAB[5,6] F_GRUPPO SELECT + INPUT CODTAB[5,6] F_GRUPPO INPUT CODTAB[7,10] F_SPECIE DISPLAY "Gruppo" CODTAB[5,6] DISPLAY "Specie" CODTAB[7,10] - DISPLAY "Descrizione@60" 107@->S0 + DISPLAY "Descrizione@50" 400@->S0 + OUTPUT F_GRUPPO CODTAB[5,6] OUTPUT F_SPECIE CODTAB[7,10] - OUTPUT F_D_SPECIE 107@->S0 - CHECKTYPE NORMAL + OUTPUT F_DESC_GRSP 400@->S0 + CHECKTYPE FORCED + GROUP 1 END -STRING F_D_GRUPPO 60 55 +STRING F_DESC_GRSP 60 44 BEGIN - PROMPT 20 3 "" - FLAGS "D" -END - -STRING F_D_SPECIE 60 55 -BEGIN - PROMPT 20 4 "" + PROMPT 31 4 "" FLAGS "D" END diff --git a/ce/ce4100.cpp b/ce/ce4100.cpp index d062553df..45d5cac4e 100755 --- a/ce/ce4100.cpp +++ b/ce/ce4100.cpp @@ -261,7 +261,7 @@ bool TCesp_anal_mask::on_field_event(TOperable_field& o, TField_event e, long jo //maschera principale //------------------- - case F_IDCESPITE: + //case F_IDCESPITE: case F_IDCESPITE_N: case F_ESERCIZIO: if (e == fe_modify || e == fe_close) diff --git a/ce/ce4100a.uml b/ce/ce4100a.uml index dc46c9af8..1ac62779a 100755 --- a/ce/ce4100a.uml +++ b/ce/ce4100a.uml @@ -231,6 +231,7 @@ END STRING S_DESFASE 50 37 BEGIN PROMPT 35 3 "" + FLAGS "D" END STRING S_CODCDC 20 diff --git a/ce/celib.cpp b/ce/celib.cpp index 8adf64fba..d8b56ea05 100755 --- a/ce/celib.cpp +++ b/ce/celib.cpp @@ -438,100 +438,50 @@ bool null_fields(const TRectype& rec, const char* fld0, const char* fld1, const //Metodi per cespiti in analitica (come maiali nello spazio!?) //------------------------------------------------------------ //ricava la % di utilizzo di un cespite in un esercizio, date cms/fase/cdc -real ceca_perc_util(const TString& cespite, const int anno, - const TString& cms, const TString& fase, const TString& cdc) +real ceca_percutil(const TString& idcespite, int anno, + const TString& cdc, const TString& cms, const TString& fase) { - //controllo su date inizio e fine del periodo di utilizzo del cespite nell'esercizio selezionato - const TRectype& cespi = cache().get(LF_CESPI, cespite); - //const int codcat = cespi.get_int(CESPI_CODCAT); - - TDate dtinies, dtfines; - TEsercizi_contabili esc; - esc.code2range(anno, dtinies, dtfines); - - //controlli sulle date esercizio - cespite; il cespite potrebbe essere entrato in funzione.. - //..o essere stato alienato durante l'esercizio selezionato - TDate dtfine = dtfines; - const TDate dtalien = cespi.get_date(CESPI_DTALIEN); - if (dtalien.ok() && (dtalien < dtfines)) - dtfine = dtalien; - - TDate dtini = dtinies; - const TDate dtfunz = cespi.get_date(CESPI_DTFUNZ); - if (dtfunz.ok() && (dtfunz > dtinies)) - dtini = dtfunz; - - //..a questo punto dtini e dtfine rappresentano il periodo di utilizzo del cespite - //nell'esercizio selezionato - //quindi il periodo di utilizzo del cespite nell'esercizio,in giorni,sara'... - const long delta_cesp = dtfine - dtini + 1; - //se il delta viene negativo il cespite è tutto nel passato o nel futuro, quindi la sua % di utilizzo.. - //..sarà ZERO!!! e il calcolo si chiuderà qui! - if (delta_cesp <= 0) - return ZERO; - - //token_string con le coppie cespite/anno, per poter avere poi le varie % di utilizzo di tale cespite, - //..in quell'anno, suddivise per cms/cdc/fase (stesso principio di funzionamento dei SALDANA) - TToken_string key; - key.add(cespite); - key.add(anno); - TRecord_array salcecms(key, LF_SALCECMS); - - //ciclo su SALCECMS data una chiave cespite/anno (si fa solo se salcecms non e' vuoto, - //e' inutile perdere tempo..) alla ricerca di tutte le righe con gli ammortamenti di.. - //..quel cespite in quell'anno sparsi su varie cdc/cms/fasi - real perc; - if (salcecms.rows() > 0) + TString query; + query << "USE SALCECMS"; + //se c'è almeno un filtro su cdc/cms/fase scatta la select analitica! + if (cdc.full() || cms.full() || fase.full()) { - // - for (int i = 1; i <= salcecms.last_row(); i++) - { - if (cms.full() && cms != salcecms[i].get(SALCECMS_CODCMS)) - continue; - if (cdc.full() && cdc != salcecms[i].get(SALCECMS_CODCDC)) - continue; - if (fase.full() && fase != salcecms[i].get(SALCECMS_CODFASE)) - continue; - - perc += ceca_calc_perc_util_cesp(salcecms[i], dtini, dtfine); - } + query << "\nSELECT "; + if (cdc.full()) + query << "(BETWEEN(SALCECMS.CODCDC,#CODCDC,#CODCDC))&&"; + if (cms.full()) + query << "(BETWEEN(SALCECMS.CODCMS,#CODCMS,#CODCMS))&&"; + if (fase.full()) + query << "(BETWEEN(SALCECMS.CODFASE,#CODFASE,#CODFASE))&&"; + query.rtrim(2); } - return perc; -} + else //se non si è scelto alcun parametro analitico -> la percentuale è 100% comunque! + return 1; + query << "\nFROM IDCESPITE=#IDCESPITE CODES=#CODES"; + query << "\nTO IDCESPITE=#IDCESPITE CODES=#CODES"; -real ceca_calc_perc_util_cesp(const TRectype& salcecms_rec, const TDate& dtinices, const TDate& dtfineces) -{ -//adeesso prende la percentuale di utilizzo del cespite nella commessa.. - real percutil = salcecms_rec.get_real(SALCECMS_PERCUTIL); -//normalizza la percentuale... - percutil = percutil / CENTO; + TISAM_recordset recset(query); -//prende il codice commessa del record.. - TString80 codcms = salcecms_rec.get(SALCECMS_CODCMS); -//..ed accede cosi' alla tabella delle commesse - const TRectype& cms = cache().get(LF_COMMESSE, codcms); -//prende le date di inizio e fine commessa dalla tabella per poterle confrontare con le date limite -//del cespite nell'esercizio - TDate dtfine = dtfineces; -//se esiste una data di proroga (DATAPROR) -> la data fine commessa e' la data proroga,altrimenti e' -//la normale data fine commessa (DATAFINE) - TDate dtfinecms = cms.get_date(COMMESSE_DATAPROR); - if (!dtfinecms.ok()) - dtfinecms = cms.get_date(COMMESSE_DATAFINE); - if (dtfinecms.ok() && (dtfinecms < dtfineces)) - dtfine = dtfinecms; + //in fase di settaggio variabili fa lo stesso ragionamento della select + recset.set_var("#IDCESPITE", idcespite); + recset.set_var("#CODES", long(anno)); + if (cdc.full()) + recset.set_var("#CODCDC", cdc); + if (cms.full()) + recset.set_var("#CODCMS", cms); + if (fase.full()) + recset.set_var("#CODFASE", fase); - TDate dtini = dtinices; - const TDate dtinicms = cms.get_date(COMMESSE_DATAINIZIO); - if ((dtinicms.ok()) && (dtinicms > dtinices)) - dtini = dtinicms; -//intervallo giorni di utilizzo cespite nella commessa - const real delta_cms = real(dtfine - dtini + 1) / real(dtfineces - dtinices + 1); + const long items = recset.items(); -//...e la porta in giorni rispetto al totale di utilizzo dei giorni del cespite nell'esercizio -//(il 100% sono i giorni di utilizzo del cespite in tutte le commesse dell'esercizio) - percutil *= delta_cms; + real percutil = ZERO; + for (bool ok = recset.move_first(); ok; ok = recset.move_next()) + { + real perc = recset.get(SALCECMS_PERCUTIL).as_real(); + percutil += perc; + } + percutil /= CENTO; return percutil; } \ No newline at end of file diff --git a/ce/celib.h b/ce/celib.h index d1e7c0c5a..16e23f2b7 100755 --- a/ce/celib.h +++ b/ce/celib.h @@ -9,6 +9,8 @@ #include #endif +#include + class TDitta_cespiti { long _ditta; @@ -74,10 +76,7 @@ bool null_fields(const TRectype& rec, const char* fld0, const char* fld1, const //Metodi da usare nei cespiti per analitica //------------------------------------------- -real ceca_perc_util(const TString& cespite, const int anno, - const TString& cms, const TString& fase, const TString& cdc); - -real ceca_calc_perc_util_cesp(const TRectype& salcecms_rec, - const TDate& dtinices, const TDate& dtfineces); +real ceca_percutil(const TString& idcespite, int anno, + const TString& cdc, const TString& cms, const TString& fase); #endif