diff --git a/ca/ca1100.alx b/ca/ca1100.alx
index 5ccdfefa0..3a570544a 100755
--- a/ca/ca1100.alx
+++ b/ca/ca1100.alx
@@ -16,6 +16,10 @@
CA_FORMAT_CONTO
;
+: MESSAGE_FORMAT_CONTO_DESCR ( -- )
+ CA_FORMAT_CONTO_DESCR
+;
+
: MESSAGE_FORMAT_CMSCDC ( -- )
\ da implementare
CA_FORMAT_CMSCDC
diff --git a/ca/ca1600.cpp b/ca/ca1600.cpp
index 486650e6f..5623429a7 100755
--- a/ca/ca1600.cpp
+++ b/ca/ca1600.cpp
@@ -142,10 +142,13 @@ void TPrint_cms::main_loop()
TString codcms;
for (short codcms_id = F_DACMS; m.id2pos(codcms_id) > 0; codcms_id++)
codcms << m.get(codcms_id);
- query << "/n" << "FROM CODCMS='" << codcms << "'";
+ if (codcms.full()) //non c'e' bisogno di query.full() x' c'e' gia la USE
+ query << "/n" << "FROM CODCMS='" << codcms << "'";
+
for (short codcms_id = F_ACMS; m.id2pos(codcms_id) > 0; codcms_id++)
codcms << m.get(codcms_id);
- query << "/n" << "TO CODCMS='" << codcms << "'";
+ if (codcms.full())
+ query << "/n" << "TO CODCMS='" << codcms << "'";
//cabia la query al report
rep.set_recordset(query);
diff --git a/ca/ca2300.cpp b/ca/ca2300.cpp
index 7e48d01fd..2f8e76e03 100755
--- a/ca/ca2300.cpp
+++ b/ca/ca2300.cpp
@@ -43,7 +43,7 @@ public:
public:
void set_annoes(int anno) { _annoes = anno; }
- TAnal_mov_ric(long numreg = 0) : TAnal_mov(numreg) {}
+ TAnal_mov_ric(long numreg = 0) : TAnal_mov(numreg), _annoes(0) {}
};
int TAnal_mov_ric::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
@@ -104,7 +104,23 @@ bool TRic_saldi_app::destroy()
bool TRic_saldi_app::remove_saldo(const TRelation& rel, void* pJolly)
{
- ((TRelation &)rel).remove();
+ const int anno = *(int*)pJolly;
+ TRectype& rec = rel.curr();
+ const int curr_anno = rec.get_int(SALDANA_ANNO);
+ //azzeratore dei saldi anno corrente
+ if (curr_anno == anno)
+ ((TRelation &)rel).remove();
+ else //azzeratore dei preventivi/variazioni di altri anni
+ {
+ const real saldop = rec.get_real(SALDANA_SALDOP);
+ const real saldov = rec.get_real(SALDANA_SALDOV);
+ if (!saldop.is_zero() || !saldov.is_zero())
+ {
+ rec.zero(SALDANA_SALDOP);
+ rec.zero(SALDANA_SALDOV);
+ ((TRelation&)rel).rewrite();
+ }
+ }
return true;
}
@@ -112,21 +128,34 @@ void TRic_saldi_app::main_loop()
{
while (_mask->run() == K_ENTER)
{
+ //Il ricalcolo saldi e' diviso in 2 fasi:
+ //1 Azzeramento e ricalcolo dei saldi dei movimenti di tipo normale o temporaneo per il solo anno selezionato
+ //2 Azzeramento e ricalcolo dei saldi dei movimenti di tipo preventivo o variazione per TUTTI gli esercizi..
+ //..questo perche' i movimenti P e T possono essere "spalmati" su piu' anni
+
+ //AZZERAMENTO dei saldi normali e temporanei dell'anno selezionato, preventivi e variazione di tutti..
+ //..gli esercizi che trova
const int anno = _mask->get_int(F_ANNO);
TRelation rel_saldi(LF_SALDANA);
- TRectype rec_saldi(rel_saldi.curr());
- rec_saldi.put(SALDANA_ANNO, anno);
- TCursor cur_saldi(&rel_saldi, "", 1, &rec_saldi, &rec_saldi);
+ TCursor cur_saldi(&rel_saldi);
const long items_saldi = cur_saldi.items();
- if (items_saldi > 0)
- cur_saldi.scan(remove_saldo, this, "Azzeramento saldi...");
+ cur_saldi.scan(remove_saldo, (void*)&anno, "Azzeramento saldi...");
+ //FASE 1
+ //ricostruzione dei saldi normali e temporanei dell'anno selezionato
+ TEsercizi_contabili esc;
+ const TDate datainies = esc[anno].inizio();
+ const TDate datafines = esc[anno].fine();
TRelation rel_movana(LF_MOVANA);
- TString filter; filter.format("ANNOES==%04d", anno);
+ TRectype darec(LF_MOVANA), arec(LF_MOVANA);
+ darec.put(MOVANA_DATACOMP, datainies);
+ arec.put(MOVANA_DATACOMP, datafines);
+
+ TString filter = "(TIPOMOV=='')||(TIPOMOV=='T')";
- TCursor cur_movana(&rel_movana, filter, 1);
+ TCursor cur_movana(&rel_movana, filter, 2, &darec, &arec);
const long items = cur_movana.items();
//usa la scan dei TCursor,quindi niente progind e for,x' gia' nel metodo
if (items > 0)
@@ -134,26 +163,21 @@ void TRic_saldi_app::main_loop()
TAnal_mov_ric* amr = new TAnal_mov_ric;
amr->set_annoes(anno);
rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!!
- cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi...");
+ cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi consuntivi e temporanei...");
rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!!
}
+ //FASE 2
//ricostruzione saldi di preventivo spammati su piu' anni
- TEsercizi_contabili esc;
- const TDate datainies = esc[anno].inizio();
- filter.format("((TIPOMOV='P')||(TIPOMOV='V'))&&(NUM(ANSI(DATAFCOMP))>=%ld)", datainies.date2ansi());
-
- TRectype beginning(LF_MOVANA), ending(LF_MOVANA);
- ending.put(MOVANA_ANNOES, anno - 1);
- cur_movana.setregion(beginning, ending);
- cur_movana.setfilter(filter, true);
- const long preventivi_items = cur_movana.items();
+ filter = "(TIPOMOV='P')||(TIPOMOV='V')";
+ TCursor cur_movana_prev(&rel_movana, filter);
+ const long preventivi_items = cur_movana_prev.items();
if (preventivi_items > 0)
{
TAnal_mov_ric* amr = new TAnal_mov_ric;
- amr->set_annoes(anno);
+ amr->set_annoes(0);
rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!!
- cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi preventivi precedenti...");
+ cur_movana_prev.scan(elabora_movimento, this, "Ricostruzione saldi preventivi...");
rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!!
}
}
diff --git a/ca/ca3700a.rep b/ca/ca3700a.rep
index 26cf7c291..8ca4ff4dd 100755
--- a/ca/ca3700a.rep
+++ b/ca/ca3700a.rep
@@ -157,7 +157,8 @@ MESSAGE RESET,F2.900
- MESSAGE ISAMREAD,PCONANA,CODCONTO=CONTO,DESCR
+ CONTO
+ CA_FORMAT_CONTO_DESCR
diff --git a/ca/ca3800.uml b/ca/ca3800.uml
index 71d340494..595bb3d3c 100755
--- a/ca/ca3800.uml
+++ b/ca/ca3800.uml
@@ -16,7 +16,7 @@ END
ENDPAGE
TOOLBAR "" 0 -2 0 2
-
+
STRING DLG_PROFILE 50
BEGIN
PROMPT 9 -11 "Profilo "
@@ -118,17 +118,25 @@ BEGIN
OUTPUT F_CDC CODCOSTO
END
-RADIOBUTTON F_TIPOSTIMA 1 35
-BEGIN
- PROMPT 41 7 "Tipo di stima"
- ITEM "T|Tempo"
- ITEM "C|Costi consuntivi\Ricavi preventivi"
- ITEM "R|Costi consuntivi\Ricavi consuntivi"
-END
-
BOOLEAN F_VITAINTERA
BEGIN
- PROMPT 41 12 "Includere esercizi successivi (vita intera)"
+ PROMPT 1 11 "Includere esercizi successivi (vita intera)"
+END
+
+RADIOBUTTON F_TIPOSTIMA 1 42
+BEGIN
+ PROMPT 34 9 "Tipo di stima"
+ ITEM "T|Costi preventivi\Ricavi preventivi (Tempo)"
+ MESSAGE SHOW,F_TIPODETR|ENABLE,F_TIPODETR
+ ITEM "C|Costi consuntivi\Ricavi preventivi"
+ MESSAGE CLEAR,F_TIPODETR|HIDE,F_TIPODETR
+ ITEM "R|Costi consuntivi\Ricavi consuntivi"
+ MESSAGE CLEAR,F_TIPODETR|HIDE,F_TIPODETR
+END
+
+BOOLEAN F_TIPODETR
+BEGIN
+ PROMPT 1 12 "Utilizzare consuntivi per le detrazioni "
END
GROUPBOX F_PRE0 76 5
@@ -139,14 +147,14 @@ END
LISTBOX F_DEPTH 1 20
BEGIN
- PROMPT 1 18 "Profondita' del piano dei conti da considerare "
+ PROMPT 1 19 "Profondita' del piano dei conti da considerare "
ITEM "1|Gruppo"
ITEM "2|Conto"
END
STRING F_REPORT 256 64
BEGIN
- PROMPT 1 19 "Report "
+ PROMPT 1 20 "Report "
FLAGS "B"
END
diff --git a/ca/ca3800a.rep b/ca/ca3800a.rep
index 1171a60b7..6cad0c710 100755
--- a/ca/ca3800a.rep
+++ b/ca/ca3800a.rep
@@ -40,29 +40,61 @@
-
+
-
+
ANNO
-
+
-
+
TIPOSTIMA
-
+
-
+
-
+
+
+ TIPODETR
+
+
+
+
+
+
+
+
+
+
+ VITAINTERA
+
+
+
+
+
+
+ FASESPEC
+
+
+
+
+
+
+ CDCSPEC
+
+
+
+
+
DEPTH
@@ -70,27 +102,6 @@
-
-
-
-
-
- VITAINTERA
-
-
-
-
-
-
- FASESPEC
-
-
-
-
-
-
- CDCSPEC
-
@@ -101,8 +112,8 @@
-
-
+
+
@@ -240,8 +251,8 @@ THEN
-
-
+
+
@@ -265,7 +276,7 @@ MESSAGE RESET,169
-
+
H3.101
diff --git a/ca/ca3800b.rep b/ca/ca3800b.rep
index 127247938..02cb2e79a 100755
--- a/ca/ca3800b.rep
+++ b/ca/ca3800b.rep
@@ -34,25 +34,36 @@
-
+
-
+
TIPOSTIMA
-
+
-
+
-
+
+
+ TIPODETR
+
+
+
+
+
+
+
+
+
DEPTH
@@ -60,10 +71,10 @@
-
+
-
+
VITAINTERA
@@ -76,7 +87,7 @@
FASESPEC
MESSAGE COPY,F1.2
-
+
ANNO
@@ -89,8 +100,8 @@
-
-
+
+
@@ -189,8 +200,8 @@ THEN
-
-
+
+
diff --git a/ca/ca3800c.rep b/ca/ca3800c.rep
index 63dc7e11b..2e68d761f 100755
--- a/ca/ca3800c.rep
+++ b/ca/ca3800c.rep
@@ -34,25 +34,36 @@
-
+
-
+
TIPOSTIMA
-
+
-
+
-
+
+
+ TIPODETR
+
+
+
+
+
+
+
+
+
DEPTH
@@ -60,10 +71,10 @@
-
+
-
+
VITAINTERA
@@ -76,7 +87,7 @@
CDCSPEC
MESSAGE COPY,F1.2
-
+
ANNO
@@ -89,8 +100,8 @@
-
-
+
+
@@ -191,8 +202,8 @@ THEN
-
-
+
+
diff --git a/ca/ca3883.cpp b/ca/ca3883.cpp
index 01eb393d4..6009eb04a 100755
--- a/ca/ca3883.cpp
+++ b/ca/ca3883.cpp
@@ -255,7 +255,7 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, const TStr
//campo modello
rep_sect.find_field(model_id)->set_column(x0);
- }
+ } //if(fld_fase!=NULL..
}
else //campi non del body
{
@@ -276,10 +276,10 @@ void TCRPA_report::offset_and_fill_columns(TReport_section& rep_sect, const TStr
brock.activate(champ->active());
brock.set_column(champ->get_rect().left());
}
- }
- }
- }
- }
+ } //if(id>0..
+ } //for(int i=0;...
+ } //else di if(rep_sect.type()=='B'...
+ } //if(!show_fasi||!show_cdc...
TReport_field& rep_field = *rep_sect.find_field(model_id);
@@ -480,8 +480,8 @@ static int righe_compare(const TObject** o1, const TObject** o2)
}
else
{
- const int z1 = c1.starts_with("DETR_");
- const int z2 = c2.starts_with("DETR_");
+ const int z1 = c1.starts_with("detr_");
+ const int z2 = c2.starts_with("detr_");
if (z1 || z2)
cmp = z1 - z2;
}
@@ -516,58 +516,85 @@ void TPrint_saldana_recordset::parse_bill(const TString& bill, TString& conto) c
}
int TPrint_saldana_recordset::estrai_saldi(const TRecordset& saldana, const int indbil,
- TImporto& saldo, TImporto& saldop) const
+ TImporto& saldo, TImporto& saldop, const bool cms_detraz) const
{
int flag = 0;
+ saldo.reset();
+ saldop.reset();
+
//stampa bilancio di commessa ca3800 (_tipo=8)
if (_tipo == 8)
{
- if (_tipostima == 'R') //stampa adolfica nuova con ricavi consuntivi (spezzabili per fase)
+
+ switch (_tipostima)
{
- const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0],
- saldana.get(SALDANA_SALDO).as_real());
- saldo.reset();
- saldop.reset();
- if (!imp_saldo.is_zero())
+ case 'R': //CostiConsuntivi RicaviConsuntivi (Cc/Rc)
{
- if (indbil == 3) //colonna costi
+ const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0],
+ saldana.get(SALDANA_SALDO).as_real());
+ if (!imp_saldo.is_zero())
{
- saldo = imp_saldo;
- flag = 1;
- }
- else //indbil == 4; colonna ricavi
- {
- saldop = imp_saldo;
- flag = 2;
+ if (indbil == 3) //indbil=3 costi
+ {
+ saldo = imp_saldo;
+ flag = 1;
+ }
+ else //indbil=4 ricavi
+ {
+ saldop = imp_saldo;
+ flag = 2;
+ }
}
}
- }
- else //programma originale con ricavi di budget totalizzati ad inizio commessa
- {
- if (_tipostima == 'C' && indbil == 3)
- {
- const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0],
- saldana.get(SALDANA_SALDO).as_real());
- saldo = imp_saldo;
- flag |= saldo.is_zero() ? 0 : 1;
- }
- else
- saldo.reset();
+ break;
- if (_tipostima == 'T' || (_tipostima == 'C' && indbil == 4)) //stima Tempo o (Costi e indbil=ricavo)
- {
- const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0],
+ case 'C': //CostiConsuntivi RicaviPreventivi (Cc/Rp)
+ {
+ if (indbil == 3) //costi
+ {
+ const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0],
+ saldana.get(SALDANA_SALDO).as_real());
+ saldo = imp_saldo;
+ flag |= saldo.is_zero() ? 0 : 1;
+ }
+ else //indbil=4 ricavi
+ {
+ const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0],
+ saldana.get(SALDANA_SALDOP).as_real());
+ const TImporto imp_saldov(saldana.get(SALDANA_SEZIONEV).as_string()[0],
+ saldana.get(SALDANA_SALDOV).as_real());
+ saldop = imp_saldop;
+ saldop += imp_saldov;
+ flag |= saldop.is_zero() ? 0 : 2;
+ }
+ }
+ break;
+
+ case 'T': //CostiPreventivi RicaviPreventivi (Cc/Rp) = Tempo
+ //nel caso stia calcolando le detrazioni di anni precedenti (cms_detraz) e si sia scelto di farlo..
+ //..usando i consuntivi (Adolf rikiesten)...
+ if (cms_detraz && _tipodetr)
+ {
+ const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0],
+ saldana.get(SALDANA_SALDO).as_real());
+ saldo = imp_saldo;
+ flag |= saldo.is_zero() ? 0 : 1;
+ }
+ else //in tutti gli altri casi vanno bene i preventivi
+ {
+ const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0],
saldana.get(SALDANA_SALDOP).as_real());
const TImporto imp_saldov(saldana.get(SALDANA_SEZIONEV).as_string()[0],
saldana.get(SALDANA_SALDOV).as_real());
saldop = imp_saldop;
saldop += imp_saldov;
flag |= saldop.is_zero() ? 0 : 2;
- }
- else
- saldop.reset();
- }
- }
+ }
+ break;
+
+ } //switch (_tipostima)...
+
+ } //if(_tipo=8...
// stampa stima ricavi ca3900 (_tipo=9)
else
{
@@ -642,8 +669,8 @@ TAssoc_array& TPrint_saldana_recordset::get_row(TAssoc_array& cms, const char* c
}
//for ca3800 only!
-void TPrint_saldana_recordset::aggiorna_importo(TAssoc_array& riga_array,
- const TString& livello, const int indbil, const TRecordset& saldana, const bool inverti) const
+void TPrint_saldana_recordset::aggiorna_importo(TAssoc_array& riga_array, const TString& livello,
+ const int indbil, const TRecordset& saldana, const bool inverti, const bool cms_detraz) const
{
TString* str_imp = (TString*)riga_array.objptr(livello);
if (str_imp == NULL)
@@ -659,7 +686,7 @@ void TPrint_saldana_recordset::aggiorna_importo(TAssoc_array& riga_array,
//ci sono tutti i tipi di saldo, ma solo quelli che rientrano nei parametri iniziali..
//..verranno considerati (_tipostima,indbil)
TImporto imp_saldo, imp_saldop;
- estrai_saldi(saldana, indbil, imp_saldo, imp_saldop);
+ estrai_saldi(saldana, indbil, imp_saldo, imp_saldop, cms_detraz);
if (inverti) // Devo sottrarre l'importo = gli scambio la sezione
{
@@ -751,7 +778,7 @@ void TPrint_saldana_recordset::aggiorna_importi(TAssoc_array& riga_array,
TImporto imp_saldo, imp_saldop;
- estrai_saldi(saldana, indbil, imp_saldo, imp_saldop);
+ estrai_saldi(saldana, indbil, imp_saldo, imp_saldop, false);
//saldi normali:Maturato
if (!imp_saldo.is_zero())
@@ -793,27 +820,35 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query)
const TString& codconto = saldana.get(SALDANA_CONTO).as_string();
//trova l'indicatore di bilancio
TString80 conto_anale;
+
const int indbil = _indicatori.get_indbil(codconto, conto_anale);
//solo i Costi(3) ed i Ricavi(4) devono essere considerati per la stampa
if (indbil == 3 || indbil == 4)
{
+ //estrae i dati di commessa e le date relative;le date servono successivamente per stabilire...
+ //..le sezioni in cui compariranno le commesse nella stampa
+ const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string();
+ const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
+ const TDate dataini = rec_commesse.get(COMMESSE_DATAINIZIO);
+
+ //per la data fine deve tener conto di eventuali proroghe..
+ TDate datafine;
+ if (rec_commesse.get_bool(COMMESSE_PROROGA) && rec_commesse.get(COMMESSE_DATAPROR).ok())
+ datafine = rec_commesse.get(COMMESSE_DATAPROR);
+ else
+ datafine = rec_commesse.get(COMMESSE_DATAFINE);
+
+ //gruppo e conto servono solo per il caso _tipo=8 ma vanno dichiarati e ricavati..
+ //..qui in modo che siano a disposizione delle commesse del cazzo poco sotto
+ const char* gruppo = indbil == 3 ? "COSTI" : "RICAVI";
+ TString80 conto;
+ parse_bill(conto_anale, conto);
+
TImporto saldo, saldop;
- const int flag = estrai_saldi(saldana, indbil, saldo, saldop);
- if (flag != 0)
+ const int flag = estrai_saldi(saldana, indbil, saldo, saldop, false);
+ //se ci sono saldi/saldop != 0...
+// if (flag != 0)
{
- const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string();
- const TString& fase = saldana.get(SALDANA_FASE).as_string();
- const TString& cdc = saldana.get(SALDANA_COSTO).as_string();
-
- const TRectype& rec_commesse = cache().get(LF_COMMESSE, codcms);
-
- const TDate dataini = rec_commesse.get(COMMESSE_DATAINIZIO);
- //per la data fine deve tener conto di eventuali proroghe..
- TDate datafine;
- if (rec_commesse.get_bool(COMMESSE_PROROGA) && rec_commesse.get(COMMESSE_DATAPROR).ok())
- datafine = rec_commesse.get(COMMESSE_DATAPROR);
- else
- datafine = rec_commesse.get(COMMESSE_DATAFINE);
//e' inutile considerare le commesse terminate prima dell'esercizio selezionato..
//..cioe' nel passato oppure che iniziano nel futuro!
if (datafine >= datainiesc && dataini <= datafinesc)
@@ -827,6 +862,9 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query)
if (dataini >= datainiesc)
indice++;
+ //ci sono filtri o raggruppamenti per fase o centro di costo?
+ const TString& fase = saldana.get(SALDANA_FASE).as_string();
+ const TString& cdc = saldana.get(SALDANA_COSTO).as_string();
TString80 chiave = codcms;
//selezione fasi solo su bilancio commessa (_tipo=8)
if (_tipo == 8 && (_tipostampa >= 1 && _tipostampa <= 3))
@@ -851,16 +889,12 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query)
//riempie le righe degli array da mandare poi in stampa
//dapprima le righe normali..
- //gruppo e conto servono solo per il caso _tipo=8 ma vanno dichiarati e ricavati..
- //..qui in modo che siano a disposizione delle commesse del cazzo poco sotto
- const char* gruppo = indbil == 3 ? "COSTI" : "RICAVI";
- TString80 conto;
- parse_bill(conto_anale, conto);
//bilancio di commessa ca3800 (_tipo=8)
if (_tipo == 8)
{
TAssoc_array& riga_array = get_row(cms[indice], chiave, indice, codcms, fase, cdc,
rec_commesse.get(COMMESSE_DESCRIZ));
+
//aggiunge gli importi e normalizza
aggiorna_importo(riga_array, gruppo, indbil, saldana);
aggiorna_importo(riga_array, conto, indbil, saldana);
@@ -879,33 +913,41 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query)
aggiorna_importi(riga_array, indbil, saldana);
}
- //..poi le righe speciali,che esistono solo se la commessa e' iniziata prima dell'anno
- //selezionato,quindi se l'indice e' 0 o 2
- if (indice %2 == 0)
- {
- //aggiorna il record speciale con la somma dei saldi con anno anteriore a quello..
- //..selezionato sulla maschera (CRPA request)
- const int anno = saldana.get(SALDANA_ANNO).as_int();
- if (anno < _anno)
- {
- TString16 cazzo_cod; cazzo_cod.format("DETR_%04d", _anno - 1);
- TString cazzo_descr = "DETRAZIONE PER COMPETENZA ";
- cazzo_descr << (_anno - 1);
- TAssoc_array& riga_array = get_row(cms[indice], CMS_DEL_CAZZO, indice, cazzo_cod,
- EMPTY_STRING, EMPTY_STRING, cazzo_descr);
- if (_tipo == 8)
- {
- aggiorna_importo(riga_array, gruppo, indbil, saldana, true);
- aggiorna_importo(riga_array, conto, indbil, saldana, true);
- }
- else
- {
- aggiorna_importi(riga_array, indbil, saldana, true);
- }
- }
- } //if(indice...
+
} //if (datafine >= datainiesc &&...
- } //if (saldop != ZERO..
+ } //if (flag!=0..
+
+ //RIGHE COMMESSA SPECIALE: esistono solo se la commessa e' iniziata prima dell'anno
+ //selezionato e se ha a che fare con quello in corso,quindi l'indice e' 0 o 2
+ if (datafine >= datainiesc && dataini < datainiesc)
+ {
+ //indice e' il parametro che stabilisce in quale sezione del report viene stampata la commessa
+ //se la commessa termina prima della fine dell'esercizio selezionato -> indice 0, altrimenti..
+ //..indice 2
+ const int indice = datafine <= datafinesc ? 0 : 2;
+ //aggiorna il record speciale con la somma dei saldi con anno anteriore a quello..
+ //..selezionato sulla maschera (CRPA request)
+ const int anno = saldana.get(SALDANA_ANNO).as_int();
+ if (anno < _anno)
+ {
+ TString16 cazzo_cod; cazzo_cod.format("detr_al_%04d", _anno - 1);
+ TString cazzo_descr = "DETRAZIONE PER COMPETENZA FINO AL ";
+ cazzo_descr << (_anno - 1);
+ TAssoc_array& riga_array = get_row(cms[indice], CMS_DEL_CAZZO, indice, cazzo_cod,
+ EMPTY_STRING, EMPTY_STRING, cazzo_descr);
+ if (_tipo == 8)
+ {
+ //cms_detr con tipo detrazione a consuntivo o preventivo in base al valore di _tipodetr
+ aggiorna_importo(riga_array, gruppo, indbil, saldana, true, _tipodetr);
+ aggiorna_importo(riga_array, conto, indbil, saldana, true, _tipodetr);
+ }
+ else
+ {
+ aggiorna_importi(riga_array, indbil, saldana, true);
+ }
+ } //if(anno<_anno...
+ } //if(dataini registrazione movimento analitico -> save_for_true = true -> salva!
+ //se invece trova un anno e' in fase ricostruzione saldi! Deve fare delle considerazioni..
+ if (annoes != 0)
+ {
+ if (annoes > 0) //se annoes e' positivo -> sono saldi normali -> salva!
+ save_for_true = anno == annoes;
+ else //se annoes e' negativo -> sono preventivi futuri -> salva solo se abs(anno)>annoes (senno' non sei nel futuro!)
+ save_for_true = anno > -annoes;
+ }
+ if (!save_for_true) //se non deve salvare davvero il saldo -> continua
continue;
-
+
saldi.put(SALDANA_ANNO, anno);
saldi.put(SALDANA_COSTO, key.get(2));
saldi.put(SALDANA_COMMESSA, key.get(3));
@@ -1402,8 +1412,10 @@ bool TAnal_mov::save_saldi(const int annoes)
int err = saldi.read(_isequal, _testandlock);
if (err != NOERR)
{
- TEsercizi_contabili esc;
- if (esc.exist(anno))
+//Richiesta specifica del nostro Fuhrer! I saldi appartenenti ad esercizi futuri NON ancora aperti vanno..
+//..comunque registrati!!!
+// TEsercizi_contabili esc;
+// if (esc.exist(anno))
{
saldi.zero();
saldi.put(SALDANA_ANNO, anno);
@@ -1413,8 +1425,8 @@ bool TAnal_mov::save_saldi(const int annoes)
saldi.put(SALDANA_CONTO, key.get(5));
err = saldi.write();
}
- else
- continue; // NON devo dare errori fuorvianti causa saldi nel futuro che ci saranno ma non vanno scritti
+// else
+// continue; // NON devo dare errori fuorvianti causa saldi nel futuro che ci saranno ma non vanno scritti
}
if (err == NOERR)
diff --git a/ca/calib02.cpp b/ca/calib02.cpp
index 517211657..19c72eb07 100755
--- a/ca/calib02.cpp
+++ b/ca/calib02.cpp
@@ -320,8 +320,9 @@ size_t TAnal_report::get_usr_words(TString_array& words) const
"CA_FORMAT_COSTO",
"CA_FORMAT_COMMESSA",
"CA_FORMAT_FASE",
- "CA_FORMAT_CONTO",
- "CA_FORMAT_CMSCDC",
+ "CA_FORMAT_CONTO",
+ "CA_FORMAT_CMSCDC",
+ "CA_FORMAT_CONTO_DESCR",
NULL
};
@@ -371,6 +372,27 @@ void TAnal_report::msg_format_conto(TVariant_stack& stack)
msg_format(LF_PCONANA, stack);
}
+void TAnal_report::msg_format_conto_descr(TVariant_stack& stack)
+{
+ // Cerca di determinare se si usa il piano contabile o analitico
+ TString conto_descr;
+ TToken_string chiave;
+ const TString& conto = curr_field()->get().as_string();
+ if (conto.len() == 12 && real::is_natural(conto))
+ {
+ chiave.add(conto.mid(0,3));
+ chiave.add(conto.mid(3,3));
+ chiave.add(conto.mid(6,6));
+ conto_descr = cache().get(LF_PCON, chiave, PCN_DESCR);
+ }
+ else
+ {
+ conto_descr = cache().get(LF_PCONANA, conto, PCONANA_DESCR);
+ }
+
+ curr_field()->set(conto_descr);
+}
+
void TAnal_report::msg_format_commessa_costo(TVariant_stack& stack)
{
const TMultilevel_code_info& fas_info = ca_multilevel_code_info(LF_FASI);
@@ -392,6 +414,7 @@ bool TAnal_report::execute_usr_word(unsigned int opcode, TVariant_stack& stack)
case 2 : msg_format_fase(stack); break;
case 3 : msg_format_conto(stack); break;
case 4 : msg_format_commessa_costo(stack); break;
+ case 5 : msg_format_conto_descr(stack); break;
default: ok = false; break;
}
}
diff --git a/ca/calib02.h b/ca/calib02.h
index b6e2af81e..448f947bf 100755
--- a/ca/calib02.h
+++ b/ca/calib02.h
@@ -132,6 +132,7 @@ protected: // protected is safer
virtual void msg_format_fase (TVariant_stack& stack);
virtual void msg_format_conto (TVariant_stack& stack);
virtual void msg_format_commessa_costo(TVariant_stack& stack);
+ virtual void msg_format_conto_descr (TVariant_stack& stack);
public: // meglio pubic?
};