Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : cespiti per analitica in corso git-svn-id: svn://10.65.10.50/trunk@20535 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f6d7186b58
commit
053fcd1ea5
@ -1,6 +1,8 @@
|
||||
#include <automask.h>
|
||||
#include <dongle.h>
|
||||
#include <execp.h>
|
||||
#include <mailbox.h>
|
||||
#include <modaut.h>
|
||||
#include <tabutil.h>
|
||||
#include <tabapp.h>
|
||||
|
||||
@ -12,6 +14,9 @@
|
||||
#include "cetbcce.h"
|
||||
#include "cetbccb.h"
|
||||
#include "cetbccc.h"
|
||||
|
||||
#include "../ca/calib01.h"
|
||||
|
||||
#define MIN_CAT_COM 40
|
||||
|
||||
#ifndef TTable_application
|
||||
@ -174,10 +179,44 @@ protected:
|
||||
public:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
TCCE_mask() : TAutomask("cetbcce") { }
|
||||
TCCE_mask();
|
||||
virtual ~TCCE_mask() { }
|
||||
};
|
||||
|
||||
//costruttore; gestisce apparizioni e sparizioni!! (è come il mago Oronzo)
|
||||
TCCE_mask::TCCE_mask() : TAutomask("cetbcce")
|
||||
{
|
||||
//i campi di analitica li vede solo chi ha l'analitica
|
||||
const bool has_ca = dongle().active(CAAUT);
|
||||
//se la chiave ha CA mostra i campi gruppo 1 (analitica)..
|
||||
if (has_ca)
|
||||
{
|
||||
enable_page(1, true);
|
||||
//se ha l'analitica gli tocca pure controllare la configurazione per sapere..
|
||||
//..quali campi diventano obbligatori!
|
||||
TConfig& cfg = ca_config();
|
||||
|
||||
if (cfg.get_bool("CmsRequired"))
|
||||
{
|
||||
TEdit_field& e_cms = efield(F_CODCMS);
|
||||
e_cms.check_type(CHECK_REQUIRED);
|
||||
}
|
||||
if (cfg.get_bool("CdcRequired"))
|
||||
{
|
||||
TEdit_field& e_cdc = efield(F_CODCDC);
|
||||
e_cdc.check_type(CHECK_REQUIRED);
|
||||
}
|
||||
if (cfg.get_bool("FscRequired"))
|
||||
{
|
||||
TEdit_field& e_fase = efield(F_CODFASE);
|
||||
e_fase.check_type(CHECK_REQUIRED);
|
||||
}
|
||||
}
|
||||
else
|
||||
enable_page(1, false);
|
||||
|
||||
}
|
||||
|
||||
bool TCCE_mask::is_leap(int year) const
|
||||
{
|
||||
TDate d(28,2,year);
|
||||
|
@ -1,4 +1,6 @@
|
||||
#include <applicat.h>
|
||||
#include <dongle.h>
|
||||
#include <modaut.h>
|
||||
#include <printer.h>
|
||||
#include <recarray.h>
|
||||
|
||||
@ -64,6 +66,13 @@ public:
|
||||
TStampaprospetto_mask::TStampaprospetto_mask() :TAutomask ("ce3300a")
|
||||
{
|
||||
ditta_cespiti().init_mask(* this);
|
||||
|
||||
const bool has_ca = dongle().active(CAAUT);
|
||||
//se la chiave ha CA mostra i campi gruppo 2 (analitica)..
|
||||
if (has_ca)
|
||||
show(-1);
|
||||
else
|
||||
hide(-1);
|
||||
}
|
||||
|
||||
bool TStampaprospetto_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
|
@ -15,3 +15,10 @@
|
||||
#define F_SITGEST 122
|
||||
#define F_ORDINA 123
|
||||
#define F_EXCLUDE_ALIENS 124
|
||||
|
||||
#define F_CODCDC 130
|
||||
#define F_DESCDC 131
|
||||
#define F_CODCMS 132
|
||||
#define F_DESCMS 133
|
||||
#define F_CODFASE 134
|
||||
#define F_DESFASE 135
|
||||
|
111
ce/ce3300a.uml
111
ce/ce3300a.uml
@ -6,7 +6,7 @@ ENDPAGE
|
||||
|
||||
PAGE "Selezione stampa prospetto cespiti" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 80 6
|
||||
GROUPBOX DLG_NULL 78 6
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bParametri ditta"
|
||||
FLAGS "R"
|
||||
@ -73,8 +73,8 @@ END
|
||||
|
||||
STRING F_D_GRUPPO 60 58
|
||||
BEGIN
|
||||
PROMPT 20 4 ""
|
||||
FLAGS "D"
|
||||
PROMPT 20 4 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_SPECIE 4
|
||||
@ -100,37 +100,122 @@ BEGIN
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 80 5
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 7 "@BSelezione"
|
||||
FLAGS "R"
|
||||
PROMPT 1 7 "@bSituazione"
|
||||
END
|
||||
|
||||
BOOLEAN F_SITFISC
|
||||
BEGIN
|
||||
PROMPT 2 8 "Situazione fiscale"
|
||||
PROMPT 2 8 "Fiscale"
|
||||
END
|
||||
|
||||
BOOLEAN F_SITCIV
|
||||
BEGIN
|
||||
PROMPT 2 9 "Situazione civilistica "
|
||||
PROMPT 22 8 "Civilistica"
|
||||
END
|
||||
|
||||
BOOLEAN F_SITGEST
|
||||
BEGIN
|
||||
PROMPT 2 10 "Situazione gestionale "
|
||||
PROMPT 42 8 "Gestionale"
|
||||
END
|
||||
|
||||
RADIOBUTTON F_ORDINA 80
|
||||
RADIOBUTTON F_ORDINA 78
|
||||
BEGIN
|
||||
PROMPT 1 12 "@BOrdinamento"
|
||||
PROMPT 1 10 "@bOrdinamento"
|
||||
ITEM "0|Ordinato per Categoria"
|
||||
ITEM "1|Ordinato per Impianto"
|
||||
ITEM "1|Ordinato per Impianto"
|
||||
FLAGS "Z"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 13 "@bEsclusioni"
|
||||
END
|
||||
|
||||
BOOLEAN F_EXCLUDE_ALIENS
|
||||
BEGIN
|
||||
PROMPT 2 16 "Escludere cespiti alienati"
|
||||
PROMPT 2 14 "Cespiti alienati"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
BEGIN
|
||||
PROMPT 1 16 "@bAnalitica"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_CODCDC 20
|
||||
BEGIN
|
||||
PROMPT 2 17 "C.d.costo "
|
||||
USE LF_CDC
|
||||
INPUT CODCOSTO F_CODCDC
|
||||
DISPLAY "Codice@20" CODCOSTO
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT F_CODCDC CODCOSTO
|
||||
OUTPUT F_DESCDC DESCRIZ
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "U"
|
||||
FIELD CODCDC
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_DESCDC 50 39
|
||||
BEGIN
|
||||
PROMPT 35 17 ""
|
||||
USE LF_CDC KEY 2
|
||||
INPUT DESCRIZ F_DESCDC
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
DISPLAY "Codice@20" CODCOSTO
|
||||
COPY OUTPUT F_CODCDC
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_CODCMS 20
|
||||
BEGIN
|
||||
PROMPT 2 18 "Commessa "
|
||||
USE LF_COMMESSE
|
||||
INPUT CODCMS F_CODCMS
|
||||
DISPLAY "Codice@20" CODCMS
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT F_CODCMS CODCMS
|
||||
OUTPUT F_DESCMS DESCRIZ
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "U"
|
||||
GROUP 1
|
||||
FIELD CODCMS
|
||||
END
|
||||
|
||||
STRING F_DESCMS 50 39
|
||||
BEGIN
|
||||
PROMPT 35 18 ""
|
||||
USE LF_COMMESSE KEY 2
|
||||
INPUT DESCRIZ F_DESCMS
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
DISPLAY "Codice@20" CODCMS
|
||||
COPY OUTPUT F_CODCMS
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
STRING F_CODFASE 10
|
||||
BEGIN
|
||||
PROMPT 2 19 "Fase "
|
||||
USE LF_FASI
|
||||
INPUT CODCMSFAS F_CODCMS SELECT
|
||||
INPUT CODFASE F_CODFASE
|
||||
DISPLAY "Fase@10" CODFASE
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT F_CODFASE CODFASE
|
||||
OUTPUT F_DESFASE DESCRIZ
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "U"
|
||||
GROUP 1
|
||||
FIELD CODFASE
|
||||
END
|
||||
|
||||
STRING F_DESFASE 50 39
|
||||
BEGIN
|
||||
PROMPT 35 19 ""
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
297
ce/ce4100.cpp
297
ce/ce4100.cpp
@ -1,36 +1,73 @@
|
||||
#include<automask.h>
|
||||
#include<relapp.h>
|
||||
#include <automask.h>
|
||||
#include <recarray.h>
|
||||
#include <relapp.h>
|
||||
|
||||
#include "../ca/commesse.h"
|
||||
#include "../ca/calib01.h"
|
||||
#include "../cg/cglib01.h"
|
||||
|
||||
#include "ce4100a.h"
|
||||
|
||||
#include "cespi.h"
|
||||
|
||||
struct date_commessa : public TObject
|
||||
{
|
||||
TDate _dataini_cms, _datafine_cms;
|
||||
};
|
||||
|
||||
//=============================================================================================
|
||||
//maschera
|
||||
|
||||
class TCesp_per_cms_mask: public TAutomask
|
||||
class TCesp_anal_mask: public TAutomask
|
||||
{
|
||||
int _pos_cms, _pos_fase, _pos_cdc, _pos_util, _pos_cop, _pos_fondo;
|
||||
int _pos_cms, _pos_fase, _pos_cdc, _pos_dtiniuse, _pos_dtfinuse, _pos_util;
|
||||
|
||||
protected:
|
||||
int calc_durata_esercizio_cespitizzata(TDate& dtinies, TDate& dtfines);
|
||||
void calc_date_limite(const TString& codcms, TDate& dtini, TDate& dtfine);
|
||||
|
||||
public:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
real TCesp_per_cms_mask::somma_perc() const;
|
||||
real TCesp_anal_mask::somma_perc() const;
|
||||
|
||||
TCesp_per_cms_mask();
|
||||
TCesp_anal_mask();
|
||||
};
|
||||
|
||||
TCesp_per_cms_mask::TCesp_per_cms_mask() : TAutomask ("ce4100a")
|
||||
TCesp_anal_mask::TCesp_anal_mask() : TAutomask ("ce4100a")
|
||||
{
|
||||
//setta le posizioni dei campi dello sheet
|
||||
TSheet_field& sf_righe = sfield(F_RIGHE);
|
||||
_pos_cms = sf_righe.cid2index(S_CODCMS);
|
||||
_pos_fase = sf_righe.cid2index(S_CODFASE);
|
||||
_pos_cdc = sf_righe.cid2index(S_CODCDC);
|
||||
_pos_dtiniuse = sf_righe.cid2index(S_DTINIUSE);
|
||||
_pos_dtfinuse = sf_righe.cid2index(S_DTFINUSE);
|
||||
_pos_util = sf_righe.cid2index(S_PERCUTIL);
|
||||
_pos_cop = sf_righe.cid2index(S_PERCCOPE);
|
||||
_pos_fondo = sf_righe.cid2index(S_FONDO);
|
||||
|
||||
//mette i checktype sui campi dello sheet in base alla configurazione..
|
||||
//..analitica della ditta
|
||||
TConfig& cfg = ca_config();
|
||||
TMask& sf_righe_msk = sf_righe.sheet_mask();
|
||||
|
||||
if (cfg.get_bool("CmsRequired"))
|
||||
{
|
||||
TEdit_field& e_cms = sf_righe_msk.efield(S_CODCMS);
|
||||
e_cms.check_type(CHECK_REQUIRED);
|
||||
}
|
||||
if (cfg.get_bool("CdcRequired"))
|
||||
{
|
||||
TEdit_field& e_cdc = sf_righe_msk.efield(S_CODCDC);
|
||||
e_cdc.check_type(CHECK_REQUIRED);
|
||||
}
|
||||
if (cfg.get_bool("FscRequired"))
|
||||
{
|
||||
TEdit_field& e_fase = sf_righe_msk.efield(S_CODFASE);
|
||||
e_fase.check_type(CHECK_REQUIRED);
|
||||
}
|
||||
}
|
||||
|
||||
real TCesp_per_cms_mask::somma_perc() const
|
||||
real TCesp_anal_mask::somma_perc() const
|
||||
{
|
||||
TSheet_field& ss = sfield(F_RIGHE);
|
||||
real tot_perc;
|
||||
@ -39,14 +76,91 @@ real TCesp_per_cms_mask::somma_perc() const
|
||||
return tot_perc;
|
||||
}
|
||||
|
||||
bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
int TCesp_anal_mask::calc_durata_esercizio_cespitizzata(TDate& dtinies, TDate& dtfines)
|
||||
{
|
||||
const int anno = get_int(F_ESERCIZIO);
|
||||
TEsercizi_contabili esc;
|
||||
esc.code2range(anno, dtinies, dtfines);
|
||||
|
||||
//vita cespite
|
||||
const TString& cespite = get(F_IDCESPITE);
|
||||
const TRectype& rec_cespi = cache().get(LF_CESPI, cespite);
|
||||
const TDate& dtcomp = rec_cespi.get_date(CESPI_DTCOMP);
|
||||
const TDate& dtalien = rec_cespi.get_date(CESPI_DTALIEN);
|
||||
//cespite acquistato durante l'esercizio
|
||||
if (dtcomp.ok() && dtcomp > dtinies)
|
||||
dtinies = dtcomp;
|
||||
//cespite alienato durante l'esercizio
|
||||
if (dtalien.ok() && dtalien < dtfines)
|
||||
dtfines = dtalien;
|
||||
|
||||
//durata "cespitizzata" dell'esercizio
|
||||
const int durata = dtfines - dtinies + 1;
|
||||
return durata;
|
||||
}
|
||||
|
||||
void TCesp_anal_mask::calc_date_limite(const TString& codcms, TDate& dtini, TDate& dtfine)
|
||||
{
|
||||
//date limite coincidenti con date vita cespite nell'esercizio (caso standard, senza commessa)
|
||||
const TDate dtinicesp = get_date(F_INIZIO_CES);
|
||||
const TDate dtfincesp = get_date(F_FINE_CES);
|
||||
//se invece la commessa viene aggiunta, le sue date limite influenzano il limite di uso!
|
||||
if (codcms.full())
|
||||
{
|
||||
const TRectype& rec_cms = cache().get(LF_COMMESSE, codcms);
|
||||
ca_durata_commessa(rec_cms, dtini, dtfine);
|
||||
//se le date di commessa sforano l'esercizio selezionato, vengono ricondotte alle date..
|
||||
//..dell'esercizio stesso
|
||||
if (dtfine.ok() && (dtfine > dtfincesp))
|
||||
dtfine = dtfincesp;
|
||||
|
||||
if ((dtini.ok()) && (dtini < dtinicesp))
|
||||
dtini = dtinicesp;
|
||||
}
|
||||
else
|
||||
{
|
||||
dtfine = dtfincesp;
|
||||
dtini = dtinicesp;
|
||||
}
|
||||
}
|
||||
|
||||
bool TCesp_anal_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
|
||||
//maschera principale
|
||||
//-------------------
|
||||
case F_IDCESPITE:
|
||||
case F_ESERCIZIO:
|
||||
if (e == fe_modify)
|
||||
{
|
||||
//nel caso vengano cambiati il cespite e/o l'esercizio, deve controllare la vita del cespite..
|
||||
//..nell'esercizio
|
||||
TDate dtinies = get_date(F_INIZIO_ES);
|
||||
TDate dtfines = get_date(F_FINE_ES);
|
||||
calc_durata_esercizio_cespitizzata(dtinies, dtfines);
|
||||
set(F_INIZIO_CES, dtinies);
|
||||
set(F_FINE_CES, dtfines);
|
||||
}
|
||||
break;
|
||||
|
||||
case F_RIGHE:
|
||||
if (e == se_notify_add)
|
||||
if (e == se_notify_add) //quando si aggiunge una riga...
|
||||
{
|
||||
TSheet_field& ss = (TSheet_field&)o;
|
||||
|
||||
//propone come date iniziale e finale di uso quelle dell'esercizio selezionato!
|
||||
const int anno = get_int(F_ESERCIZIO);
|
||||
TDate dtinies, dtfines;
|
||||
TEsercizi_contabili esc;
|
||||
esc.code2range(anno, dtinies, dtfines);
|
||||
calc_durata_esercizio_cespitizzata(dtinies, dtfines);
|
||||
TToken_string& new_row = ss.row(jolly);
|
||||
new_row.add(dtinies, _pos_dtiniuse);
|
||||
new_row.add(dtfines, _pos_dtfinuse);
|
||||
|
||||
//mette nel campo %util il valore max possibile al momento
|
||||
real residuo = CENTO - somma_perc();
|
||||
if (residuo > 0)
|
||||
{
|
||||
@ -56,7 +170,7 @@ bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long
|
||||
}
|
||||
if (e == fe_close && (insert_mode() || edit_mode()))
|
||||
{
|
||||
//controllo sulle percentuali totali di un cespite
|
||||
//controllo sulle percentuali totali di un cespite
|
||||
if (somma_perc() != CENTO)
|
||||
return noyes_box("La percentuale complessiva di utilizzo del cespite e' diversa da 100"
|
||||
"\nSi desidera proseguire ugualmente?");
|
||||
@ -66,14 +180,14 @@ bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long
|
||||
TSheet_field& ss = sfield(F_RIGHE);
|
||||
FOR_EACH_SHEET_ROW(ss,i,r)
|
||||
{
|
||||
//controllo di esistenza codici commessa e cdc
|
||||
//controllo di esistenza codici commessa e cdc
|
||||
const TString& cms = r->get(_pos_cms);
|
||||
if (cms.blank())
|
||||
return error_box("Specificare la commessa sulla riga %d", i+1);
|
||||
const TString& cdc = r->get(_pos_cdc);
|
||||
if (cdc.blank())
|
||||
return error_box("Specificare il centro di costo sulla riga %d", i+1);
|
||||
//controllo di duplicazione chiave della riga (cms/fase/cdc)
|
||||
//controllo di duplicazione chiave della riga (cms/fase/cdc)
|
||||
TToken_string row_key;
|
||||
row_key.add(cms);
|
||||
const TString& fase = r->get(_pos_fase);
|
||||
@ -86,16 +200,140 @@ bool TCesp_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
|
||||
//maschera di riga sheet
|
||||
//----------------------
|
||||
//controllo sulle date limite di utilizzo: se c'è la commessa le date lim uso devono ricadere..
|
||||
//..all'interno della vita della commessa, se invece la commessa non c'è le date lim uso devono..
|
||||
//..ricadere all'interno della vita utile del cespite nell'esercizio
|
||||
case S_DTINIUSE:
|
||||
if (e == fe_modify || e == fe_close)
|
||||
{
|
||||
TDate dtini, dtfine;
|
||||
const TString& codcms = get(S_CODCMS);
|
||||
calc_date_limite(codcms, dtini, dtfine);
|
||||
if (o.get() < dtini)
|
||||
return error_box("La data inizio uso non può essere antecedente alla data inizio commessa!");
|
||||
}
|
||||
break;
|
||||
case S_DTFINUSE:
|
||||
if (e == fe_modify || e == fe_close)
|
||||
{
|
||||
TDate dtini, dtfine;
|
||||
const TString& codcms = get(S_CODCMS);
|
||||
calc_date_limite(codcms, dtini, dtfine);
|
||||
if (o.get() > dtfine)
|
||||
return error_box("La data fine uso non può essere successiva alla data fine commessa!");
|
||||
}
|
||||
break;
|
||||
|
||||
//bottoni
|
||||
//-------
|
||||
case DLG_CALCPERC:
|
||||
if (e == fe_button)
|
||||
{
|
||||
//ripartisce in automatico le percentuali di utilizzo analizzando le durate e le compresenze..
|
||||
//..delle commesse sullo sheet nell'anno selezionato, oltre che ovviamente la durata del cespite..
|
||||
//..nell'anno selezionato
|
||||
|
||||
// 1) stabilisce la durata dell'esercizio per il cespite: infatti può essere stato comprato o venduto..
|
||||
//..nel corso dell'esercizio stesso
|
||||
TDate dtini, dtfine;
|
||||
//durata "cespitizzata" dell'esercizio
|
||||
const int durata = calc_durata_esercizio_cespitizzata(dtini, dtfine);
|
||||
|
||||
// 2) chiave generale su cui mettere le quote che non appartengono ad alcuna..
|
||||
//..commessa! La si trova nella configurazione esercizio cespiti (tanto per incasinarci..
|
||||
//..la vita), ovvero tabella CCE
|
||||
const TString& anno = get(F_ESERCIZIO);
|
||||
const TRectype& rec_cce = cache().get("CCE", anno);
|
||||
|
||||
//trova per l'anno sulla maschera quali sono i valori standard;
|
||||
TToken_string key_genspa;
|
||||
key_genspa.add(rec_cce.get("S2"), _pos_cdc);
|
||||
key_genspa.add(rec_cce.get("S3"), _pos_cms);
|
||||
key_genspa.add(rec_cce.get("S4"), _pos_fase);
|
||||
|
||||
//conatore dei giorni cui casca la chiave genspa
|
||||
long giorni_genspa = 0L;
|
||||
|
||||
TSheet_field& sf_righe = sfield(F_RIGHE);
|
||||
TPointer_array giorni_commessa;
|
||||
int riga_genspa = -1;
|
||||
|
||||
// 3) giro su tutti i giorni inclusi tra le date limite in modo da trovare i giorni utili..
|
||||
//..di ciascuna commessa e gli eventuali giorni vuoti da scaricare in genspa
|
||||
for (TDate data = dtini; data <= dtfine; ++data)
|
||||
{
|
||||
bool almeno_una = false;
|
||||
FOR_EACH_SHEET_ROW(sf_righe, r, row)
|
||||
{
|
||||
TToken_string key_riga;
|
||||
key_riga.add(row->get(_pos_cms));
|
||||
key_riga.add(row->get(_pos_fase));
|
||||
key_riga.add(row->get(_pos_cdc));
|
||||
|
||||
//la commessa genspa non va calcolata qui!
|
||||
if (key_riga != key_genspa)
|
||||
{
|
||||
const TDate dt_ini_use = row->get(_pos_dtiniuse);
|
||||
const TDate dt_fin_use = row->get(_pos_dtfinuse);
|
||||
//se la data in esame appartiene allintrvallo date di utilizzo sulla riga
|
||||
if (data >= dt_ini_use && data <= dt_fin_use)
|
||||
{
|
||||
const long giorni = giorni_commessa.get_long(r) + 1;
|
||||
giorni_commessa.add_long(giorni, r);
|
||||
almeno_una = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
riga_genspa = r;
|
||||
} //FOR_EACH_SHEET_ROW...
|
||||
//se la data in questione non appartiene all'intervallo di utilizzo di nessuna riga..
|
||||
//..->la data è scoperta e va a finire nel calderone del genspa
|
||||
if (!almeno_una)
|
||||
giorni_genspa ++;
|
||||
|
||||
} //for(TDate...
|
||||
|
||||
// 4) attenzione alla commesse generica di riempimento (cms_genspa!) se non esiste va aggiunta
|
||||
//se invece la cms_genspa ha già la sua riga -> deve solo aggiornare la %util (lo fa dopo..
|
||||
//..assieme alle commesse normali)
|
||||
if (riga_genspa < 0)
|
||||
{
|
||||
TToken_string& row_genspa = sf_righe.row(-1);
|
||||
row_genspa = key_genspa;
|
||||
//aggiunge la commessa genspa all'array dei giorni_commessa, in modo che venga poi considerata..
|
||||
//..nel riproporzionamento successivo con il distrib
|
||||
riga_genspa = sf_righe.items() - 1;
|
||||
}
|
||||
giorni_commessa.add_long(giorni_genspa, riga_genspa);
|
||||
|
||||
// 5) procede a caricare un distrib con i valori di giorni_commessa
|
||||
TGeneric_distrib tamoil(CENTO, 2);
|
||||
for (int i = 0 ; i < sf_righe.items(); i++)
|
||||
tamoil.add(giorni_commessa.get_long(i));
|
||||
|
||||
// 6) adesso scarica il distrib, mettendo la % di ogni commessa nel campo di %di utilizzo
|
||||
FOR_EACH_SHEET_ROW(sf_righe, gg, linea)
|
||||
linea->add(tamoil.get().string(), _pos_util);
|
||||
|
||||
//..e alla fine vediamo che succede!
|
||||
sf_righe.force_update();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//===============================================================================================
|
||||
//Applicazione
|
||||
class TCesp_per_cms: public TRelation_application
|
||||
class TCesp_anal: public TRelation_application
|
||||
{
|
||||
TCesp_per_cms_mask *_msk; // maschera principale
|
||||
TCesp_anal_mask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
//metodi virtuali obbligatori per gli oggetti TRelation_application
|
||||
@ -112,57 +350,54 @@ protected:
|
||||
virtual TRelation* get_relation() const { return _rel; }
|
||||
|
||||
public:
|
||||
virtual ~TCesp_per_cms() {}
|
||||
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)
|
||||
void TCesp_per_cms::init_query_insert_mode(TMask& m)
|
||||
void TCesp_anal::init_query_insert_mode(TMask& m)
|
||||
{
|
||||
m.enable(-2);
|
||||
m.show(-2);
|
||||
m.hide(-1);
|
||||
}
|
||||
//abilita i campi per ricercare un cespite gia' inserito,attivando i campi del gruppo 1(LF_SALCECMS)
|
||||
void TCesp_per_cms::init_query_mode(TMask& m)
|
||||
void TCesp_anal::init_query_mode(TMask& m)
|
||||
{
|
||||
m.show(-1);
|
||||
m.hide(-2);
|
||||
m.set(F_DESC,"");
|
||||
}
|
||||
|
||||
void TCesp_per_cms::init_insert_mode(TMask& m)
|
||||
void TCesp_anal::init_insert_mode(TMask& m)
|
||||
{
|
||||
m.hide(-1);
|
||||
m.disable(-2);
|
||||
}
|
||||
|
||||
void TCesp_per_cms::init_modify_mode(TMask& m)
|
||||
void TCesp_anal::init_modify_mode(TMask& m)
|
||||
{
|
||||
m.hide(-2);
|
||||
}
|
||||
|
||||
bool TCesp_per_cms::user_create()
|
||||
bool TCesp_anal::user_create()
|
||||
{
|
||||
_rel = new TRelation(LF_SALCECMS);
|
||||
_msk = new TCesp_per_cms_mask;
|
||||
_msk = new TCesp_anal_mask;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool TCesp_per_cms::user_destroy()
|
||||
bool TCesp_anal::user_destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ce4100(int argc, char* argv[])
|
||||
{
|
||||
TCesp_per_cms a;
|
||||
a.run(argc,argv,TR("Distribuzione analitica cespiti"));
|
||||
TCesp_anal a;
|
||||
a.run(argc,argv,TR("Ripartizione analitica cespiti"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
19
ce/ce4100a.h
19
ce/ce4100a.h
@ -1,4 +1,4 @@
|
||||
//definizioni campi per la maschera ce4100a.uml (anagrafica cespiti per cdc/cms/fase)
|
||||
//definizioni campi per la maschera ce4100a.uml (anagrafica cespiti per analitica)
|
||||
#define F_DITTA 201
|
||||
#define F_RAGSOC 202
|
||||
#define F_ESERCIZIO 203
|
||||
@ -9,15 +9,24 @@
|
||||
#define F_IDCESPITE_N 208
|
||||
#define F_DESC_N 209
|
||||
#define F_NRIGA 210
|
||||
#define F_INIZIO_CES 211
|
||||
#define F_FINE_CES 212
|
||||
|
||||
#define F_RIGHE 211
|
||||
#define F_RIGHE 215
|
||||
|
||||
//bottone speciale sulla toolbar
|
||||
#define DLG_CALCPERC 301
|
||||
|
||||
//maschera di riga dello sheet
|
||||
#define S_CODCMS 101
|
||||
#define S_CODFASE 102
|
||||
#define S_CODCDC 103
|
||||
#define S_PERCUTIL 104
|
||||
#define S_PERCCOPE 105
|
||||
#define S_FONDO 106
|
||||
#define S_DTINIUSE 104
|
||||
#define S_DTFINUSE 105
|
||||
#define S_PERCUTIL 106
|
||||
#define S_DTINICMS 107
|
||||
#define S_DTFINCMS 108
|
||||
#define S_DTPRORCMS 109
|
||||
|
||||
#define S_DESCDC 111
|
||||
#define S_DESCMS 112
|
||||
|
103
ce/ce4100a.uml
103
ce/ce4100a.uml
@ -1,12 +1,19 @@
|
||||
#include "ce4100a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
|
||||
BUTTON DLG_CALCPERC 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "~Calcola"
|
||||
PICTURE TOOL_RECALC
|
||||
END
|
||||
|
||||
#include <relapbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Distribuzione analitica cespiti" 0 2 0 0
|
||||
PAGE "Ripartizione analitica cespiti" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
GROUPBOX DLG_NULL 78 6
|
||||
BEGIN
|
||||
PROMPT 0 1 "@bParametri cespite"
|
||||
END
|
||||
@ -82,7 +89,6 @@ BEGIN
|
||||
DISPLAY "Centro di costo@20" CODCDC
|
||||
DISPLAY "Data Acq.@10" LF_CESPI->DTCOMP
|
||||
DISPLAY "Data Ali.@10" LF_CESPI->DTALIEN
|
||||
OUTPUT F_ESERCIZIO CODES
|
||||
OUTPUT F_IDCESPITE IDCESPITE
|
||||
OUTPUT F_IDCESPITE_N IDCESPITE
|
||||
OUTPUT F_DESC LF_CESPI->DESC
|
||||
@ -94,7 +100,7 @@ END
|
||||
|
||||
STRING F_DESC 60 50
|
||||
BEGIN
|
||||
PROMPT 24 4 ""
|
||||
PROMPT 26 4 ""
|
||||
FLAGS "DPG"
|
||||
GROUP 1
|
||||
END
|
||||
@ -125,7 +131,7 @@ END
|
||||
|
||||
STRING F_DESC_N 60 50
|
||||
BEGIN
|
||||
PROMPT 24 4 ""
|
||||
PROMPT 24 6 ""
|
||||
USE LF_CESPI KEY 3
|
||||
INPUT DESC F_DESC_N
|
||||
DISPLAY "Descrizione@50" DESC
|
||||
@ -142,15 +148,35 @@ BEGIN
|
||||
KEY 2 //chiave civetta per provocare l'entrata in modalita' INSERIMENTO in caso di ricerca per descrizione
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 6 ""
|
||||
PROMPT 1 5 "Date limite di uso del cespite nell'esercizio"
|
||||
END
|
||||
|
||||
DATE F_INIZIO_CES
|
||||
BEGIN
|
||||
PROMPT 40 5 "Inizio "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE F_FINE_CES
|
||||
BEGIN
|
||||
PROMPT 61 5 "Fine "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
SPREADSHEET F_RIGHE -1 -1
|
||||
BEGIN
|
||||
PROMPT 1 8 "@bRipartizione cespite"
|
||||
ITEM "Commessa@20"
|
||||
ITEM "Fase@10"
|
||||
ITEM "Centro di costo@20"
|
||||
ITEM "Inizio Uso"
|
||||
ITEM "Fine Uso@10"
|
||||
ITEM "% Utilizzo"
|
||||
ITEM "% Copertura"
|
||||
ITEM "Valore fondo"
|
||||
ITEM "Inizio Cms"
|
||||
ITEM "Fine Cms@10"
|
||||
ITEM "Proroga Cms"
|
||||
USE LF_SALCECMS KEY NRIGA
|
||||
INPUT CODES F_ESERCIZIO
|
||||
INPUT IDCESPITE F_IDCESPITE
|
||||
@ -162,7 +188,7 @@ ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
//maschera di riga dello sheet
|
||||
PAGE "Riga" -1 -1 76 15
|
||||
PAGE "Riga" -1 -1 76 8
|
||||
|
||||
STRING S_CODCMS 20
|
||||
BEGIN
|
||||
@ -173,7 +199,10 @@ BEGIN
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT S_CODCMS CODCMS
|
||||
OUTPUT S_DESCMS DESCRIZ
|
||||
CHECKTYPE REQUIRED
|
||||
OUTPUT S_DTINICMS DATAINIZIO
|
||||
OUTPUT S_DTFINCMS DATAFINE
|
||||
OUTPUT S_DTPRORCMS DATAPROR
|
||||
CHECKTYPE NORMAL
|
||||
FIELD CODCMS
|
||||
FLAGS "U"
|
||||
END
|
||||
@ -190,7 +219,7 @@ END
|
||||
|
||||
STRING S_CODFASE 10
|
||||
BEGIN
|
||||
PROMPT 1 2 "Fase "
|
||||
PROMPT 1 3 "Fase "
|
||||
USE LF_FASI
|
||||
INPUT CODCMSFAS S_CODCMS SELECT
|
||||
INPUT CODFASE S_CODFASE
|
||||
@ -205,26 +234,26 @@ END
|
||||
|
||||
STRING S_DESFASE 50 37
|
||||
BEGIN
|
||||
PROMPT 35 2 ""
|
||||
PROMPT 35 3 ""
|
||||
END
|
||||
|
||||
STRING S_CODCDC 20
|
||||
BEGIN
|
||||
PROMPT 1 3 "C.d.costo "
|
||||
PROMPT 1 4 "C.d.costo "
|
||||
USE LF_CDC
|
||||
INPUT CODCOSTO S_CODCDC
|
||||
DISPLAY "Codice@20" CODCOSTO
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT S_CODCDC CODCOSTO
|
||||
OUTPUT S_DESCDC DESCRIZ
|
||||
CHECKTYPE REQUIRED
|
||||
CHECKTYPE NORMAL
|
||||
FIELD CODCDC
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
STRING S_DESCDC 50 37
|
||||
BEGIN
|
||||
PROMPT 35 3 ""
|
||||
PROMPT 35 4 ""
|
||||
USE LF_CDC KEY 2
|
||||
INPUT DESCRIZ S_DESCDC
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
@ -232,27 +261,51 @@ BEGIN
|
||||
COPY OUTPUT S_CODCDC
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 72 4
|
||||
BEGIN
|
||||
PROMPT 1 5 "Uso cespite"
|
||||
END
|
||||
|
||||
DATE S_DTINIUSE
|
||||
BEGIN
|
||||
PROMPT 2 6 "Inizio "
|
||||
FIELD DTINIUSE
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
DATE S_DTFINUSE
|
||||
BEGIN
|
||||
PROMPT 24 6 "Fine "
|
||||
FIELD DTFINUSE
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER S_PERCUTIL 6 2
|
||||
BEGIN
|
||||
PROMPT 1 4 "% utilizzo "
|
||||
CHECKTYPE REQUIRED
|
||||
PROMPT 2 7 "% uso "
|
||||
FLAGS "U"
|
||||
FIELD PERCUTIL
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
NUMBER S_PERCCOPE 6 2
|
||||
DATE S_DTINICMS
|
||||
BEGIN
|
||||
PROMPT 1 5 "% copertura "
|
||||
FLAGS "U"
|
||||
FIELD PERCCOPE
|
||||
PROMPT 1 2 "Inizio "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
CURRENCY S_FONDO 18
|
||||
DATE S_DTFINCMS
|
||||
BEGIN
|
||||
PROMPT 1 6 "Valore fondo "
|
||||
FIELD FONDO
|
||||
PROMPT 22 2 "Fine "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
DATE S_DTPRORCMS
|
||||
BEGIN
|
||||
PROMPT 44 2 "Proroga "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "bottombar" 0 0 0 2
|
||||
|
26
ce/celib.cpp
26
ce/celib.cpp
@ -443,12 +443,14 @@ real ceca_perc_util(const TString& cespite, const int anno,
|
||||
{
|
||||
//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);
|
||||
//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))
|
||||
@ -458,13 +460,18 @@ real ceca_perc_util(const TString& cespite, const int anno,
|
||||
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;
|
||||
|
||||
//Adesso si controlla la durata di ogni commessa (alla quale il cespite ha partecipato) durante
|
||||
//l'esercizio delezionato
|
||||
//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);
|
||||
@ -478,7 +485,16 @@ real ceca_perc_util(const TString& cespite, const int anno,
|
||||
{
|
||||
//
|
||||
for (int i = 1; i <= salcecms.last_row(); i++)
|
||||
perc = ceca_calc_perc_util_cesp(salcecms[i], dtini, dtfine);
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
return perc;
|
||||
}
|
||||
|
@ -24,3 +24,11 @@
|
||||
#define F_AMMCIV2008 132
|
||||
#define F_AMMGES2008 133
|
||||
#define F_AMMAUT2008 134
|
||||
|
||||
//campi pagina Analitica
|
||||
#define F_CODCDC 201
|
||||
#define F_DESCDC 202
|
||||
#define F_CODCMS 203
|
||||
#define F_DESCMS 204
|
||||
#define F_CODFASE 205
|
||||
#define F_DESFASE 206
|
105
ce/cetbcce.uml
105
ce/cetbcce.uml
@ -171,4 +171,109 @@ BEGIN
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Analitica" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 76 5
|
||||
BEGIN
|
||||
PROMPT 1 1 "@bCdC - Commessa - Fase standard per ripartizione fondi"
|
||||
END
|
||||
|
||||
STRING F_CODCDC 20
|
||||
BEGIN
|
||||
PROMPT 2 2 "C.d.costo "
|
||||
USE LF_CDC
|
||||
INPUT CODCOSTO F_CODCDC
|
||||
DISPLAY "Codice@20" CODCOSTO
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT F_CODCDC CODCOSTO
|
||||
OUTPUT F_DESCDC DESCRIZ
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "U"
|
||||
FIELD S2
|
||||
END
|
||||
|
||||
STRING F_DESCDC 50 39
|
||||
BEGIN
|
||||
PROMPT 35 2 ""
|
||||
USE LF_CDC KEY 2
|
||||
INPUT DESCRIZ F_DESCDC
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
DISPLAY "Codice@20" CODCOSTO
|
||||
COPY OUTPUT F_CODCDC
|
||||
END
|
||||
|
||||
STRING F_CODCMS 20
|
||||
BEGIN
|
||||
PROMPT 2 3 "Commessa "
|
||||
USE LF_COMMESSE
|
||||
INPUT CODCMS F_CODCMS
|
||||
DISPLAY "Codice@20" CODCMS
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT F_CODCMS CODCMS
|
||||
OUTPUT F_DESCMS DESCRIZ
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "U"
|
||||
FIELD S3
|
||||
END
|
||||
|
||||
STRING F_DESCMS 50 39
|
||||
BEGIN
|
||||
PROMPT 35 3 ""
|
||||
USE LF_COMMESSE KEY 2
|
||||
INPUT DESCRIZ F_DESCMS
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
DISPLAY "Codice@20" CODCMS
|
||||
COPY OUTPUT F_CODCMS
|
||||
END
|
||||
|
||||
STRING F_CODFASE 10
|
||||
BEGIN
|
||||
PROMPT 2 4 "Fase "
|
||||
USE LF_FASI
|
||||
INPUT CODCMSFAS F_CODCMS SELECT
|
||||
INPUT CODFASE F_CODFASE
|
||||
DISPLAY "Fase@10" CODFASE
|
||||
DISPLAY "Descrizione@50" DESCRIZ
|
||||
OUTPUT F_CODFASE CODFASE
|
||||
OUTPUT F_DESFASE DESCRIZ
|
||||
CHECKTYPE NORMAL
|
||||
FLAGS "U"
|
||||
FIELD S4
|
||||
END
|
||||
|
||||
STRING F_DESFASE 50 39
|
||||
BEGIN
|
||||
PROMPT 35 4 ""
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 76 7
|
||||
BEGIN
|
||||
PROMPT 1 6 "@bIstruzioni"
|
||||
GROUP 1
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 7 "_ Per ogni esercizio cespiti vanno indicati il CdC, la Commessa e la Fase standard per le"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 8 " eventuali ripartizioni delle quote ammortamento del cespite tra i vari CdC e Commesse;"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 9 " su questi CdC/Commessa/Fase standard finiranno le quote non specificatamente assegnate"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 2 10 " agli altri CdC/commesse/Fasi."
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
@ -1,3 +1,3 @@
|
||||
145
|
||||
0
|
||||
$salcecms|0|0|73|0|Cespiti per analitica|||
|
||||
$salcecms|0|0|89|0|Cespiti per analitica|||
|
||||
|
@ -1,5 +1,5 @@
|
||||
145
|
||||
7
|
||||
9
|
||||
IDCESPITE|1|10|0|Codice cespite
|
||||
CODES|2|4|0|Codice esercizio
|
||||
NRIGA|2|3|0|N. riga
|
||||
@ -7,6 +7,8 @@ CODCDC|1|20|0|Codice centro di costo
|
||||
CODCMS|1|20|0|Codice commessa
|
||||
CODFASE|1|10|0|Codice fase
|
||||
PERCUTIL|4|6|2|Percentuale di utilizzo
|
||||
DTINIUSE|5|8|0|Data inizio utilizzo cespite
|
||||
DTFINUSE|5|8|0|Data fine utilizzo cespite
|
||||
2
|
||||
IDCESPITE+CODES+NRIGA|
|
||||
CODES+IDCESPITE+NRIGA|
|
||||
|
Loading…
x
Reference in New Issue
Block a user