From ac3bc208e96a59517b009c09753ee87388c06b9e Mon Sep 17 00:00:00 2001 From: bonazzi Date: Wed, 26 Jul 2017 00:22:02 +0000 Subject: [PATCH] Patch level : 12.0 426 Files correlati : ce0.exe ce0a00.rep ce3.exe ce4.exe ce3900.msk ce3900b.rep ce4100a.msk ce4100b.mskce ce4500a.rep cemenu.men MODIFICHE CRPA Coefficiente di durata nella tabella esercizi cespiti Ordinamento per cespite nella stampa inventario sintetico Stampa etichette cespiti Copia della ripartizione cespiti da un esercizio a un altro Stampa del costo storico e del residuo nella stampa cespiti per analitica git-svn-id: svn://10.65.10.50/branches/R_10_00@23998 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- src/ce/ce0100.cpp | 15 ++- src/ce/ce0a00a.rep | 42 +++++++++ src/ce/ce3900.cpp | 9 +- src/ce/ce3900.h | 1 + src/ce/ce3900.uml | 12 ++- src/ce/ce3900b.rep | 140 +++++++++++++++++++++++++++ src/ce/ce4.cpp | 4 +- src/ce/ce4100.cpp | 229 ++++++++++++++++++++++++++++++++++++++++----- src/ce/ce4100a.uml | 8 +- src/ce/ce4100b.h | 11 +++ src/ce/ce4100b.uml | 93 ++++++++++++++++++ src/ce/ce4500.cpp | 48 +++++++++- src/ce/ce4500a.rep | 61 +++++++----- src/ce/cemenu.men | 1 + 14 files changed, 620 insertions(+), 54 deletions(-) create mode 100644 src/ce/ce0a00a.rep create mode 100644 src/ce/ce3900b.rep create mode 100644 src/ce/ce4100b.h create mode 100644 src/ce/ce4100b.uml diff --git a/src/ce/ce0100.cpp b/src/ce/ce0100.cpp index c1e5cdbe6..c25415282 100755 --- a/src/ce/ce0100.cpp +++ b/src/ce/ce0100.cpp @@ -141,6 +141,7 @@ class TCCC_mask : public TAutomask public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); TCCC_mask(); + virtual ~TCCC_mask() { } }; //costruttore: se la chiave ha l'analitica fa comparire i campi per cms/cdc/fase @@ -364,6 +365,7 @@ real TCCE_mask::calc_coeff(const TDate& ies, const TDate& fes) const const int sm = ies.year()*12 + ies.month(); coeff = real(fm - sm + 1) / real(12); } + coeff.round(9); return coeff; } @@ -399,8 +401,17 @@ bool TCCE_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) } } break; - default: - break; + case F_DURATA: + if (e == fe_init && !field(F_CODESER).empty()) + { + const TDate ies = get_date(F_DATAINI); + const TDate fes = get_date(F_DATAFINE); + set(F_DURATA, fes-ies+1); + set(F_COEFF_DURATA, calc_coeff(ies, fes)); + } + break; + default: + break; } return true; } diff --git a/src/ce/ce0a00a.rep b/src/ce/ce0a00a.rep new file mode 100644 index 000000000..cfa0ae547 --- /dev/null +++ b/src/ce/ce0a00a.rep @@ -0,0 +1,42 @@ + + + Etichette standard cespiti + +
+
+
+
+ + + + + + IDCESPITE + + + + + + + 201@.S0 + + + + + + + 202@.S0 + + + + DESC + +
+
+
+ USE CESPI +JOIN CIM ALIAS 201 INTO CODTAB==CODIMP +JOIN LOC ALIAS 202 INTO CODTAB==CODLOC +FROM IDCESPITE=#DACOD +TO IDCESPITE=#ACOD + \ No newline at end of file diff --git a/src/ce/ce3900.cpp b/src/ce/ce3900.cpp index a7b78fc5f..24ecfe6e2 100755 --- a/src/ce/ce3900.cpp +++ b/src/ce/ce3900.cpp @@ -133,7 +133,8 @@ void TStampa_sintetica_recordset::set_filter(const TStampa_sintetica_mask& msk) query << "&&(STR(BETWEEN(CODCAT,#DACAT,#ACAT)))"; } //ordinamenti - query << "\nBY CODCAT|CODIMP|CODLOC|IDCESPITE"; + if (!msk.get_bool(F_SORT_BY_CESP)) + query << "\nBY CODCAT|CODIMP|CODLOC|IDCESPITE"; //setta la nuova complicata query nel report (che avrebbe solo USE CESPI) set(query); @@ -367,7 +368,11 @@ void TStampa_sintetica::main_loop() //report e book dei report TReport_book book; TStampa_sintetica_rep rep; - rep.load("ce3900a"); + + if (mask.get_bool(F_SORT_BY_CESP)) + rep.load("ce3900b"); + else + rep.load("ce3900a"); rep.set_filter(mask); book.add(rep); diff --git a/src/ce/ce3900.h b/src/ce/ce3900.h index d4178eba7..1589a3e34 100755 --- a/src/ce/ce3900.h +++ b/src/ce/ce3900.h @@ -26,3 +26,4 @@ #define F_DESCDC 125*/ #define F_REPORT 126 +#define F_SORT_BY_CESP 127 diff --git a/src/ce/ce3900.uml b/src/ce/ce3900.uml index 5d92f37af..af6cd80ad 100755 --- a/src/ce/ce3900.uml +++ b/src/ce/ce3900.uml @@ -156,6 +156,16 @@ BEGIN PROMPT 42 14 "Escludere i cespiti alienati" END +GROUPBOX DLG_NULL 39 3 +BEGIN + PROMPT 1 16 "@bOrdinamenti" +END + +BOOLEAN F_SORT_BY_CESP +BEGIN + PROMPT 2 17 "Per cespite" +END + ENDPAGE -ENDMASK \ No newline at end of file +ENDMASK diff --git a/src/ce/ce3900b.rep b/src/ce/ce3900b.rep new file mode 100644 index 000000000..03bcafebb --- /dev/null +++ b/src/ce/ce3900b.rep @@ -0,0 +1,140 @@ + + + Registro cespiti sintetico per codice cespite + +
+ + + + + + + + + + + + + + + + + + + + +
+
+ + MESSAGE RESET,F1 + + + + + + + + #SYSTEM.RAGSOC + + + + + + + #SYSTEM.DATE + + + + + + + #ANNO + + + + #SITUAZIONE + +
  • +
  • +
  • + + +
  • +
    +
    + + IDCESPITE + + + DTALIEN + + + DTCOMP + + + DTFUNZ + + + DESC + + + #PERCAMM + + + #COSTOINI + MESSAGE ADD,F1.101 + + + #COSTOFIN + MESSAGE ADD,F1.102 + + + #102-#101 + MESSAGE ADD,F1.103 + + + #QAMM+#QAMMMV-#QAMM_FPRIVATO + MESSAGE ADD,F1.104 + + + #FAMM-#FAMM_FPRIVATO + MESSAGE ADD,F1.105 + + + #CESSELIM+#QAMMMV + MESSAGE ADD,F1.106 + + + #104+#105-#106 + MESSAGE ADD,F1.107 + + + #RESAMM-#QAMM + MESSAGE ADD,F1.108 + +
    +
    + + + + + + + #REPORT.PAGE + +
    +
    + + + + + + + + + + + +
    + USE CESPI KEY 2 + \ No newline at end of file diff --git a/src/ce/ce4.cpp b/src/ce/ce4.cpp index 85a95ff9f..625cc23df 100755 --- a/src/ce/ce4.cpp +++ b/src/ce/ce4.cpp @@ -9,10 +9,10 @@ int main(int argc,char** argv) { case 1: ce4200(argc,argv); break; //calcolo cespiti per commessa case 2: ce4300(argc,argv); break; //stampa proiezione ammortamenti cespiti - case 3: ce4400(argc,argv); break; //contabilizzazione cespiti + case 3: ce4400(argc,argv); break; //contabilizzazione cespiti case 4: ce4500(argc,argv); break; //stampa cespiti in contabilità analitica case 0: - default: ce4100(argc,argv); break; // ripartizione analitica cespiti + default: ce4100(argc,argv) ; break; // ripartizione analitica cespiti } return 0; } diff --git a/src/ce/ce4100.cpp b/src/ce/ce4100.cpp index 6be88b689..3873094ce 100755 --- a/src/ce/ce4100.cpp +++ b/src/ce/ce4100.cpp @@ -1,21 +1,56 @@ #include #include +#include #include #include +#include #include "../ca/commesse.h" #include "../ca/calib01.h" #include "../cg/cglib01.h" +#include "celib.h" +#include "salcecms.h" +#include "ce2101.h" #include "ce4100a.h" +#include "ce4100b.h" #include "cespi.h" + struct date_commessa : public TObject { TDate _dataini_cms, _datafine_cms; }; +class TCesp_anal_mask; + +class TCesp_anal: public TRelation_application +{ + TCesp_anal_mask *_msk; // maschera principale + TRelation *_rel; // relazione principale + +//metodi virtuali obbligatori per gli oggetti TRelation_application +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual TMask* get_mask(int mode) { return (TMask *)_msk; } + virtual bool changing_mask(int mode) { return false;} + virtual void init_query_mode(TMask& m); + virtual void init_query_insert_mode(TMask& m); + virtual void init_insert_mode(TMask& m); + virtual void init_modify_mode(TMask& m); + virtual bool remove(); + + +public: + virtual TRelation* get_relation() const { return _rel; } + + virtual ~TCesp_anal() {} +}; + +TCesp_anal & app() { return (TCesp_anal &) main_app(); } + //============================================================================================= //maschera @@ -388,6 +423,178 @@ bool TCesp_anal_mask::on_field_event(TOperable_field& o, TField_event e, long jo calc_percutil(); } break; + case DLG_COPY: + if (e == fe_button) + { + TMask m("ce4100b"); + + const TDitta_cespiti& cce = ditta_cespiti(); + const int esercizio_corrente = cce.esercizio_corrente(); + int esercizio = get_int(F_ESERCIZIO); + + if (esercizio == esercizio_corrente) + { + TEsercizi_contabili esc; + + esercizio = esc.pred(esercizio_corrente); + } + m.set(F_ESERCIZIO1, esercizio); + if (m.run() == K_ENTER) + { + const TString8 anno_src(m.get(F_ESERCIZIO1)); + const TString8 anno_dest(m.get(F_ESERCIZIO2)); + + if (anno_src < anno_dest) + { + TLocalisamfile f(LF_SALCECMS); + TRectype rec(f.curr()); + TRectype from(f.curr()); + TRectype to(f.curr()); + + from.put(SALCECMS_CODES, anno_dest); + to.put(SALCECMS_CODES, anno_dest); + + { + TCursor sal(new TRelation(LF_SALCECMS), "", 2, &from, &to); + const long items = sal.items(); + + sal.freeze(); + + TProgind progind1(items, format(FR("Cancellazione anno %s in corso..."), (const char *) anno_dest), false, true); + + for (sal = 0; sal.pos() < items; ++sal) + { + progind1.addstatus(1); + sal.curr().remove(f); + } + } + { + from.put(SALCECMS_CODES, anno_src); + to.put(SALCECMS_CODES, anno_src); + + TCursor sal(new TRelation(LF_SALCECMS), "", 2, &from, &to); + const long items = sal.items(); + TString80 idcespite; + TRecord_array * recarray = NULL; + + sal.freeze(); + + TProgind progind2(items, format(FR("Generazione anno %s in corso..."), (const char *) anno_dest), false, true); + + for (sal = 0; sal.pos() < items; ++sal) + { + rec = sal.curr(); + if (idcespite.full()) + { + if (idcespite != rec.get(SALCECMS_IDCESPITE)) + { + TCespite cespite(idcespite); + + cespite.load_saldi(1, atoi((const char *)anno_src)); + if (cespite.res_amm() > ZERO && recarray->rows() > 0) + { + TGeneric_distrib d(CENTO, 2); + + recarray->pack(); + + int items = recarray->last_row(); + + for (int i = recarray->first_row(); i <= items; i = recarray->succ_row(i)) + d.add(recarray->row(i).get_real(SALCECMS_PERCUTIL)); + for (int i = recarray->first_row(); i <= items; i = recarray->succ_row(i)) + { + TRectype & r = (*recarray)[i]; + + r.put(SALCECMS_PERCUTIL, d.get()); + } + recarray->write(true); + } + delete recarray; + recarray = NULL; + } +#ifdef DBG_VERBOSE + else + message_box(FR("Cespite %s ammortizzato"), (const char*) idcespite); +#endif + } + progind2.addstatus(1); + idcespite = rec.get(SALCECMS_IDCESPITE); + if (recarray == NULL) + { + TToken_string key; + + key.add(idcespite); + key.add(anno_dest); + recarray = new TRecord_array(key, LF_SALCECMS); + } + + TString80 codcms = rec.get(SALCECMS_CODCMS); + TString80 codcms_new = codcms; + + if (codcms == "4.6.11.27/2014") + int i = 1; + const int pos = codcms_new.find(anno_src); + + if (pos >= 0) + { + codcms_new.overwrite(anno_dest, pos); + const TRectype & commessa_new = cache().get(LF_COMMESSE, codcms_new); + if (!commessa_new.empty()) + { + rec.put(SALCECMS_CODCMS, codcms_new); + codcms = codcms_new; + } + } + + const TRectype & commessa = cache().get(LF_COMMESSE, codcms); + + if(!commessa.get_bool(COMMESSE_CHIUSA)) + { + rec.put(SALCECMS_CODES, anno_dest); + recarray->add_row(rec); + } +#ifdef DBG_VERBOSE + else + message_box(FR("Commessa %s chiusa"), (const char*) rec.get(SALCECMS_CODCMS)); +#endif + } + if (idcespite.full()) + { + TCespite cespite(idcespite); + + cespite.load_saldi(1, atoi((const char *)anno_src)); + if (cespite.res_amm() > ZERO && recarray->rows() > 0) + { + TGeneric_distrib d(CENTO, 2); + + recarray->pack(); + + int items = recarray->last_row(); + + for (int i = recarray->first_row(); i <= items; i = recarray->succ_row(i)) + d.add(recarray->row(i).get_real(SALCECMS_PERCUTIL)); + for (int i = recarray->first_row(); i <= items; i = recarray->succ_row(i)) + { + TRectype & r = (*recarray)[i]; + + r.put(SALCECMS_PERCUTIL, d.get()); + } + recarray->write(true); + } + delete recarray; + recarray = NULL; + } +#ifdef DBG_VERBOSE + else + message_box(FR("Cespite %s ammortizzato"), (const char*) idcespite); +#endif + } + } + else + error_box(FR("Non posso copiare il %s nel %s"), (const char *) anno_src, (const char *) anno_dest); + } + } + break; case DLG_SAVEREC: if (e == fe_button) { @@ -408,28 +615,6 @@ bool TCesp_anal_mask::on_field_event(TOperable_field& o, TField_event e, long jo //=============================================================================================== //Applicazione -class TCesp_anal: public TRelation_application -{ - TCesp_anal_mask *_msk; // maschera principale - TRelation *_rel; // relazione principale - -//metodi virtuali obbligatori per gli oggetti TRelation_application -protected: - virtual bool user_create(); - virtual bool user_destroy(); - virtual TMask* get_mask(int mode) { return _msk; } - virtual bool changing_mask(int mode) { return false;} - virtual void init_query_mode(TMask& m); - virtual void init_query_insert_mode(TMask& m); - virtual void init_insert_mode(TMask& m); - virtual void init_modify_mode(TMask& m); - virtual bool remove(); - - virtual TRelation* get_relation() const { return _rel; } - -public: - virtual ~TCesp_anal() {} -}; //metodi per la maschera //abilita i campi per inserimento nuovo cespite,attivando i campi del gruppo 2 (che fanno riferimento al file LF_CESPI) diff --git a/src/ce/ce4100a.uml b/src/ce/ce4100a.uml index 7a55534e6..8fed95d03 100755 --- a/src/ce/ce4100a.uml +++ b/src/ce/ce4100a.uml @@ -8,6 +8,12 @@ BEGIN PICTURE TOOL_RECALC END +BUTTON DLG_COPY 2 2 +BEGIN + PROMPT 1 1 "~Genera" + PICTURE TOOL_COPY +END + #include ENDPAGE @@ -382,4 +388,4 @@ END ENDPAGE -ENDMASK \ No newline at end of file +ENDMASK diff --git a/src/ce/ce4100b.h b/src/ce/ce4100b.h new file mode 100644 index 000000000..38792c7fe --- /dev/null +++ b/src/ce/ce4100b.h @@ -0,0 +1,11 @@ +//definizioni campi per la maschera ce4100b.uml (copia cespiti) + +#define F_DITTA 201 +#define F_RAGSOC 202 +#define F_ESERCIZIO1 203 +#define F_INIZIO_ES1 204 +#define F_FINE_ES1 205 +#define F_ESERCIZIO2 206 +#define F_INIZIO_ES2 207 +#define F_FINE_ES2 209 + diff --git a/src/ce/ce4100b.uml b/src/ce/ce4100b.uml new file mode 100644 index 000000000..e2af177cc --- /dev/null +++ b/src/ce/ce4100b.uml @@ -0,0 +1,93 @@ +#include "ce4100b.h" + +TOOLBAR "topbar" 0 0 0 2 + +#include +ENDPAGE + +PAGE "Duplicazione cespiti" 0 2 0 0 + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 0 1 "@bDitta" +END + +NUMBER F_DITTA 5 +BEGIN + PROMPT 1 2 "Ditta " + FLAGS "DF" +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 26 2 "" + USE LF_NDITTE + INPUT CODDITTA F_DITTA + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE NORMAL + FLAGS "D" +END + +NUMBER F_ESERCIZIO1 4 +BEGIN + PROMPT 1 6 "Da Esercizio " + FLAGS "Z" + USE CCE + JOIN ESC ALIAS 104 INTO CODTAB==CODTAB + INPUT CODTAB F_ESERCIZIO1 + DISPLAY "Codice esercizio" CODTAB + DISPLAY "Inizio esercizio" 104@->D0 + DISPLAY "Fine esercizio" 104@->D1 + OUTPUT F_ESERCIZIO1 CODTAB + OUTPUT F_INIZIO_ES1 104@->D0 + OUTPUT F_FINE_ES1 104@->D1 + CHECKTYPE REQUIRED + FIELD CODES + KEY 1 +END + +DATE F_INIZIO_ES1 +BEGIN + PROMPT 26 6 "Inizio " + FLAGS "D" +END + +DATE F_FINE_ES1 +BEGIN + PROMPT 50 6 "Fine " + FLAGS "D" +END + +NUMBER F_ESERCIZIO2 4 +BEGIN + PROMPT 1 8 " A Esercizio " + FLAGS "AZ" + USE CCE + JOIN ESC ALIAS 104 INTO CODTAB==CODTAB + INPUT CODTAB F_ESERCIZIO2 + DISPLAY "Codice esercizio" CODTAB + DISPLAY "Inizio esercizio" 104@->D0 + DISPLAY "Fine esercizio" 104@->D1 + OUTPUT F_ESERCIZIO2 CODTAB + OUTPUT F_INIZIO_ES2 104@->D0 + OUTPUT F_FINE_ES2 104@->D1 + CHECKTYPE REQUIRED + FIELD CODES + KEY 1 +END + +DATE F_INIZIO_ES2 +BEGIN + PROMPT 26 8 "Inizio " + FLAGS "D" +END + +DATE F_FINE_ES2 +BEGIN + PROMPT 50 8 "Fine " + FLAGS "D" +END + +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/src/ce/ce4500.cpp b/src/ce/ce4500.cpp index fc267943e..90df5fa2c 100755 --- a/src/ce/ce4500.cpp +++ b/src/ce/ce4500.cpp @@ -115,6 +115,8 @@ class TPrint_anal_cespi_rep : public TReport protected: real val_amm(const TRectype& rec_saldi) const; + real fondo(const TRectype& rec_amm, bool prec = false) const; + virtual bool get_usr_val(const TString& name, TVariant& var) const; virtual bool use_mask() { return false; } @@ -166,6 +168,17 @@ real TPrint_anal_cespi_rep::val_amm(const TRectype& rec_saldi) const return valore; } +real TPrint_anal_cespi_rep::fondo(const TRectype& rec_amm, bool prec) const +{ + real valore = rec_amm.get_real(AMMCE_QNORP) + rec_amm.get_real(AMMCE_QACCP) + rec_amm.get_real(AMMCE_QANTP) + + rec_amm.get_real(AMMCE_QPERSEP) + rec_amm.get_real(AMMCE_FPRIVATOP) + rec_amm.get_real(AMMCE_QPPRIVATEP); + + if (!prec) + valore += rec_amm.get_real(AMMCE_QNOR) + rec_amm.get_real(AMMCE_QACC) + rec_amm.get_real(AMMCE_QANT) + + rec_amm.get_real(AMMCE_QPERSE) + rec_amm.get_real(AMMCE_FPRIVATO) + rec_amm.get_real(AMMCE_QPPRIVATE); + return valore; +} + //metodo per il calcolo dei campi da calcolare (ma va'!) nel report bool TPrint_anal_cespi_rep::get_usr_val(const TString& name, TVariant& var) const { @@ -201,6 +214,39 @@ bool TPrint_anal_cespi_rep::get_usr_val(const TString& name, TVariant& var) cons return true; } + if (name.starts_with("#COSTO")) //variazione del valore annuale (saldo finale - saldo iniziale) + { + const real val_fin = val_amm(_cespite.sal_pro()); + + var = val_fin * percutil; + return true; + } + + if (name.starts_with("#COSTOI")) //variazione del valore annuale (saldo finale - saldo iniziale) + { + const real val_fin = val_amm(_cespite.sal_ini()); + + var = val_fin * percutil; + return true; + } + + if (name.starts_with("#FONDO")) //variazione del valore annuale (saldo finale - saldo iniziale) + { + const real val_fondo = fondo(_cespite.amm_pro(), true); + + var = val_fondo * percutil; + return true; + } + + if (name.starts_with("#RESIDUO")) //variazione del valore annuale (saldo finale - saldo iniziale) + { + const real val_fin = val_amm(_cespite.sal_pro()); + const real val_fondo = fondo(_cespite.amm_pro()); + + var = (val_fin - val_fondo) * percutil; + return true; + } + if (name == "#QAMMMV") //quote ammortamento su movimento esercizio corrente { real quote_ammmv; @@ -349,4 +395,4 @@ int ce4500(int argc, char* argv[]) TPrint_anal_cespi a; a.run(argc, argv, TR("Stampa cespiti per analitica")); return 0; -} \ No newline at end of file +} diff --git a/src/ce/ce4500a.rep b/src/ce/ce4500a.rep index 174238189..991ce456c 100755 --- a/src/ce/ce4500a.rep +++ b/src/ce/ce4500a.rep @@ -1,20 +1,22 @@ - + Cespiti in analitica
    - - + + - - - - - + + + + + + +
    @@ -24,18 +26,19 @@ MESSAGE RESET,F1.101 MESSAGE RESET,F1.104 MESSAGE RESET,F1.105 MESSAGE RESET,F1.106 -MESSAGE RESET,F1.107 - +MESSAGE RESET,F1.107 +MESSAGE RESET,F1.108 + - + #SYSTEM.RAGSOC - - + + #SYSTEM.DATE @@ -102,28 +105,38 @@ MESSAGE RESET,F1.107 CODFASE - + #VARIAZIONE MESSAGE ADD,F1.103 - + #PERCAMM - + #QAMM+#QAMMMV MESSAGE ADD,F1.105 - + #CESSELIM+#QAMMMV MESSAGE ADD,F1.106 + + + + #COSTOI + MESSAGE ADD,F1.107 + + + + #RESIDUO + MESSAGE ADD,F1.107
    - + #REPORT.PAGE @@ -131,13 +144,15 @@ MESSAGE RESET,F1.107
    - + - - - + + + + +
    USE SALCECMS KEY 2 FROM CODES=#CODES IDCESPITE=#IDCESPITE TO CODES=#CODES IDCESPITE=#IDCESPITE -
    \ No newline at end of file +
    diff --git a/src/ce/cemenu.men b/src/ce/cemenu.men index a500e53dc..934388289 100755 --- a/src/ce/cemenu.men +++ b/src/ce/cemenu.men @@ -38,6 +38,7 @@ Item_01 = "Gruppi", "ba3 -1 %cgr", "" Item_02 = "Specie", "ba3 -1 %cat", "" Item_03 = "Categorie", "ba3 -1 %cac", "" Item_04 = "Tipi movimento", "ba3 -1 %tmc" , "" +Item_05 = "Etichette cespiti", "ba8 -4 ce0a00a" , "" [CEMENU_005] Caption = "Scelta ditta"