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
This commit is contained in:
parent
8d7e5c7128
commit
b7424d5550
131
ce/ce3900.cpp
131
ce/ce3900.cpp
@ -120,13 +120,12 @@ void TStampa_sintetica_recordset::set_filter(const TStampa_sintetica_mask& msk)
|
|||||||
{
|
{
|
||||||
//parametri per costruzione query
|
//parametri per costruzione query
|
||||||
const bool exclude_aliens = msk.get_bool(F_EXCLUDE_ALIENS);
|
const bool exclude_aliens = msk.get_bool(F_EXCLUDE_ALIENS);
|
||||||
const bool anal = dongle().active(CAAUT);
|
|
||||||
|
|
||||||
TString query = "USE CESPI\nSELECT ";
|
TString query = "USE CESPI\nSELECT ";
|
||||||
query << "(ANSI(DTCOMP)<=#DATAFINE)"; //" << msk.get_date(F_DATAFINE).date2ansi() << ")";
|
query << "(ANSI(DTCOMP)<=#DATAFINE)";
|
||||||
//cespiti alienati esclusi?
|
//cespiti alienati esclusi?
|
||||||
if (exclude_aliens)
|
if (exclude_aliens)
|
||||||
query << "&&((DTALIEN='')||(ANSI(DTALIEN)>=#DATAINIZIO))"; // << msk.get_date(F_DATAINIZIO).date2ansi() << "))";
|
query << "&&((DTALIEN='')||(ANSI(DTALIEN)>=#DATAINIZIO))";
|
||||||
|
|
||||||
//categorie
|
//categorie
|
||||||
const TString& dacat = msk.get(F_FROM_CAT);
|
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
|
//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 << "&&";
|
||||||
query << "&&(BETWEEN(SALCECMS.CODCMS,#DACODCMS,#ACODCMS))";
|
|
||||||
query << "&&(BETWEEN(SALCECMS.CODFASE,#DACODFASE,#ACODFASE))";
|
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";
|
query << "\nJOIN SALCECMS INTO IDCESPITE=IDCESPITE";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,18 +169,13 @@ void TStampa_sintetica_recordset::set_filter(const TStampa_sintetica_mask& msk)
|
|||||||
if (exclude_aliens)
|
if (exclude_aliens)
|
||||||
set_var("#DATAINIZIO", msk.get_date(F_DATAINIZIO).date2ansi());
|
set_var("#DATAINIZIO", msk.get_date(F_DATAINIZIO).date2ansi());
|
||||||
|
|
||||||
if (anal)
|
//set var condizionali in analitica
|
||||||
{
|
if (codcdc.full())
|
||||||
const TString& codcdc = msk.get(F_CODCDC);
|
set_var("#CODCDC", codcdc);
|
||||||
set_var("#DACODCDC", codcdc);
|
if (codcms.full())
|
||||||
set_var("#ACODCDC", codcdc);
|
set_var("#CODCMS", codcms);
|
||||||
const TString& codcms = msk.get(F_CODCMS);
|
if (codfase.full())
|
||||||
set_var("#DACODCMS", codcms);
|
set_var("#CODFASE", codfase);
|
||||||
set_var("#ACODCMS", codcms);
|
|
||||||
const TString& codfase = msk.get(F_CODFASE);
|
|
||||||
set_var("#DACODFASE", codfase);
|
|
||||||
set_var("#ACODFASE", codfase);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,14 +189,31 @@ class TStampa_sintetica_rep : public TReport
|
|||||||
int _group_codimp, _group_codloc;
|
int _group_codimp, _group_codloc;
|
||||||
TString _codcdc, _codcms, _codfase;
|
TString _codcdc, _codcms, _codfase;
|
||||||
TCespite _cespite;
|
TCespite _cespite;
|
||||||
|
real _percutil;
|
||||||
|
TString16 _cespi_percutil;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
real val_amm(const TRectype& rec_saldi) const;
|
real val_amm(const TRectype& rec_saldi) const;
|
||||||
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
||||||
|
real perc_util() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_filter(const TStampa_sintetica_mask& msk);
|
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)
|
void TStampa_sintetica_rep::set_filter(const TStampa_sintetica_mask& msk)
|
||||||
{
|
{
|
||||||
_anno = msk.get_int(F_ESERCIZIO);
|
_anno = msk.get_int(F_ESERCIZIO);
|
||||||
@ -282,6 +305,42 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons
|
|||||||
return true;
|
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);
|
||||||
|
}
|
||||||
|
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
|
if (name == "#PERCAMM") // percentuale ammortamento
|
||||||
{
|
{
|
||||||
real percamm;
|
real percamm;
|
||||||
@ -290,8 +349,10 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons
|
|||||||
{
|
{
|
||||||
const int anno_acq = _cespite.get_date(CESPI_DTCOMP).year();
|
const int anno_acq = _cespite.get_date(CESPI_DTCOMP).year();
|
||||||
if (anno_acq == _anno)
|
if (anno_acq == _anno)
|
||||||
|
{
|
||||||
valamm = val_amm(_cespite.sal_pro());
|
valamm = val_amm(_cespite.sal_pro());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (!valamm.is_zero())
|
if (!valamm.is_zero())
|
||||||
{
|
{
|
||||||
TVariant qamm, qammmv;
|
TVariant qamm, qammmv;
|
||||||
@ -304,34 +365,7 @@ bool TStampa_sintetica_rep::get_usr_val(const TString& name, TVariant& var) cons
|
|||||||
return true;
|
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
|
if (name == "#FAMM") //fondo ammortamento alla fine dell'esercizio precedente
|
||||||
{
|
{
|
||||||
const TRectype& rec_ammce = _cespite.amm_ini();
|
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);
|
var = rec_ammce.get_real(AMMCE_FPRIVATO);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (name == "#CESSELIM") //cessioni elminiazioni
|
if (name == "#CESSELIM") //cessioni elminiazioni
|
||||||
{
|
{
|
||||||
real cesselim;
|
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_QANT) + rec_movam.get_real(MOVAM_QPERSE) +
|
||||||
rec_movam.get_real(MOVAM_QPPRIVATE) + rec_movam.get_real(MOVAM_FPRIVATO);
|
rec_movam.get_real(MOVAM_QPPRIVATE) + rec_movam.get_real(MOVAM_FPRIVATO);
|
||||||
}
|
}
|
||||||
|
cesselim *= perc_util();
|
||||||
var = cesselim;
|
var = cesselim;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -6,10 +6,7 @@
|
|||||||
#define F_DATAFINE 105
|
#define F_DATAFINE 105
|
||||||
#define F_GRUPPO 106
|
#define F_GRUPPO 106
|
||||||
#define F_SPECIE 107
|
#define F_SPECIE 107
|
||||||
#define F_D_GRUPPO 108
|
#define F_DESC_GRSP 108
|
||||||
#define F_D_SPECIE 109
|
|
||||||
#define F_CODTAB 110
|
|
||||||
#define F_D_CODTAB 111
|
|
||||||
|
|
||||||
#define F_FROM_CAT 112
|
#define F_FROM_CAT 112
|
||||||
#define F_D_FROM_CAT 113
|
#define F_D_FROM_CAT 113
|
||||||
|
@ -6,15 +6,14 @@ ENDPAGE
|
|||||||
|
|
||||||
PAGE "Registro cespiti sintetico" 0 2 0 0
|
PAGE "Registro cespiti sintetico" 0 2 0 0
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 6
|
GROUPBOX DLG_NULL 78 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 0 ""
|
PROMPT 1 1 ""
|
||||||
FLAGS "R"
|
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_CODDITTA 5
|
NUMBER F_CODDITTA 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 1 "Ditta "
|
PROMPT 2 2 "Ditta "
|
||||||
FLAGS "DF"
|
FLAGS "DF"
|
||||||
USE LF_NDITTE
|
USE LF_NDITTE
|
||||||
INPUT CODDITTA F_CODDITTA
|
INPUT CODDITTA F_CODDITTA
|
||||||
@ -24,13 +23,13 @@ END
|
|||||||
|
|
||||||
STRING F_RAGSOC 55
|
STRING F_RAGSOC 55
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 20 1 ""
|
PROMPT 20 2 ""
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_ESERCIZIO 4
|
NUMBER F_ESERCIZIO 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 2 "Esercizio "
|
PROMPT 2 3 "Esercizio "
|
||||||
FLAGS "Z"
|
FLAGS "Z"
|
||||||
USE CCE
|
USE CCE
|
||||||
JOIN ESC ALIAS 105 INTO CODTAB==CODTAB
|
JOIN ESC ALIAS 105 INTO CODTAB==CODTAB
|
||||||
@ -46,58 +45,44 @@ END
|
|||||||
|
|
||||||
DATE F_DATAINIZIO
|
DATE F_DATAINIZIO
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 20 2 "Data inizio "
|
PROMPT 20 3 "Data inizio "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
DATE F_DATAFINE
|
DATE F_DATAFINE
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 45 2 "Data fine "
|
PROMPT 45 3 "Data fine "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_GRUPPO 2
|
NUMBER F_GRUPPO 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 3 "Gruppo "
|
PROMPT 2 4 "Gruppo "
|
||||||
FLAGS "Z"
|
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
|
END
|
||||||
|
|
||||||
STRING F_SPECIE 4
|
STRING F_SPECIE 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 4 "Specie "
|
PROMPT 17 4 "Specie "
|
||||||
FLAGS "_"
|
FLAGS "_"
|
||||||
USE CCB KEY 1
|
USE CCB
|
||||||
JOIN %CAT ALIAS 107 INTO CODTAB[1,2]==CODTAB[5,6] CODTAB[3,6]==CODTAB[7,10]
|
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
|
||||||
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
|
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
|
INPUT CODTAB[7,10] F_SPECIE
|
||||||
DISPLAY "Gruppo" CODTAB[5,6]
|
DISPLAY "Gruppo" CODTAB[5,6]
|
||||||
DISPLAY "Specie" CODTAB[7,10]
|
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_SPECIE CODTAB[7,10]
|
||||||
OUTPUT F_D_SPECIE 107@->S0
|
OUTPUT F_DESC_GRSP 400@->S0
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE FORCED
|
||||||
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_D_GRUPPO 60 55
|
STRING F_DESC_GRSP 60 44
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 20 3 ""
|
PROMPT 31 4 ""
|
||||||
FLAGS "D"
|
|
||||||
END
|
|
||||||
|
|
||||||
STRING F_D_SPECIE 60 55
|
|
||||||
BEGIN
|
|
||||||
PROMPT 20 4 ""
|
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ bool TCesp_anal_mask::on_field_event(TOperable_field& o, TField_event e, long jo
|
|||||||
|
|
||||||
//maschera principale
|
//maschera principale
|
||||||
//-------------------
|
//-------------------
|
||||||
case F_IDCESPITE:
|
//case F_IDCESPITE:
|
||||||
case F_IDCESPITE_N:
|
case F_IDCESPITE_N:
|
||||||
case F_ESERCIZIO:
|
case F_ESERCIZIO:
|
||||||
if (e == fe_modify || e == fe_close)
|
if (e == fe_modify || e == fe_close)
|
||||||
|
@ -231,6 +231,7 @@ END
|
|||||||
STRING S_DESFASE 50 37
|
STRING S_DESFASE 50 37
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 35 3 ""
|
PROMPT 35 3 ""
|
||||||
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING S_CODCDC 20
|
STRING S_CODCDC 20
|
||||||
|
130
ce/celib.cpp
130
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!?)
|
//Metodi per cespiti in analitica (come maiali nello spazio!?)
|
||||||
//------------------------------------------------------------
|
//------------------------------------------------------------
|
||||||
//ricava la % di utilizzo di un cespite in un esercizio, date cms/fase/cdc
|
//ricava la % di utilizzo di un cespite in un esercizio, date cms/fase/cdc
|
||||||
real ceca_perc_util(const TString& cespite, const int anno,
|
real ceca_percutil(const TString& idcespite, int anno,
|
||||||
const TString& cms, const TString& fase, const TString& cdc)
|
const TString& cdc, const TString& cms, const TString& fase)
|
||||||
{
|
{
|
||||||
//controllo su date inizio e fine del periodo di utilizzo del cespite nell'esercizio selezionato
|
TString query;
|
||||||
const TRectype& cespi = cache().get(LF_CESPI, cespite);
|
query << "USE SALCECMS";
|
||||||
//const int codcat = cespi.get_int(CESPI_CODCAT);
|
//se c'è almeno un filtro su cdc/cms/fase scatta la select analitica!
|
||||||
|
if (cdc.full() || cms.full() || fase.full())
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
//
|
query << "\nSELECT ";
|
||||||
for (int i = 1; i <= salcecms.last_row(); i++)
|
if (cdc.full())
|
||||||
{
|
query << "(BETWEEN(SALCECMS.CODCDC,#CODCDC,#CODCDC))&&";
|
||||||
if (cms.full() && cms != salcecms[i].get(SALCECMS_CODCMS))
|
if (cms.full())
|
||||||
continue;
|
query << "(BETWEEN(SALCECMS.CODCMS,#CODCMS,#CODCMS))&&";
|
||||||
if (cdc.full() && cdc != salcecms[i].get(SALCECMS_CODCDC))
|
if (fase.full())
|
||||||
continue;
|
query << "(BETWEEN(SALCECMS.CODFASE,#CODFASE,#CODFASE))&&";
|
||||||
if (fase.full() && fase != salcecms[i].get(SALCECMS_CODFASE))
|
query.rtrim(2);
|
||||||
continue;
|
|
||||||
|
|
||||||
perc += ceca_calc_perc_util_cesp(salcecms[i], dtini, dtfine);
|
|
||||||
}
|
}
|
||||||
}
|
else //se non si è scelto alcun parametro analitico -> la percentuale è 100% comunque!
|
||||||
return perc;
|
return 1;
|
||||||
|
|
||||||
|
query << "\nFROM IDCESPITE=#IDCESPITE CODES=#CODES";
|
||||||
|
query << "\nTO IDCESPITE=#IDCESPITE CODES=#CODES";
|
||||||
|
|
||||||
|
TISAM_recordset recset(query);
|
||||||
|
|
||||||
|
//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);
|
||||||
|
|
||||||
|
const long items = recset.items();
|
||||||
|
|
||||||
|
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;
|
||||||
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;
|
|
||||||
|
|
||||||
//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;
|
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
//...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;
|
|
||||||
|
|
||||||
return percutil;
|
return percutil;
|
||||||
}
|
}
|
@ -9,6 +9,8 @@
|
|||||||
#include <automask.h>
|
#include <automask.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <recset.h>
|
||||||
|
|
||||||
class TDitta_cespiti
|
class TDitta_cespiti
|
||||||
{
|
{
|
||||||
long _ditta;
|
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
|
//Metodi da usare nei cespiti per analitica
|
||||||
//-------------------------------------------
|
//-------------------------------------------
|
||||||
real ceca_perc_util(const TString& cespite, const int anno,
|
real ceca_percutil(const TString& idcespite, int anno,
|
||||||
const TString& cms, const TString& fase, const TString& cdc);
|
const TString& cdc, const TString& cms, const TString& fase);
|
||||||
|
|
||||||
real ceca_calc_perc_util_cesp(const TRectype& salcecms_rec,
|
|
||||||
const TDate& dtinices, const TDate& dtfineces);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user