Patch level :10.0 374

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :modificato il ricalcolo saldi analitico; adesso, scegliendo un anno, è in grado di stabilire da quale anno partire per il ricalcolo saldi in modo da includere tutti i movimenti che per qualche motivo hanno a che fare con quell'anno


git-svn-id: svn://10.65.10.50/trunk@19113 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2009-07-15 14:40:58 +00:00
parent 9e8bad6ed9
commit 749cdab39c
4 changed files with 83 additions and 62 deletions

View File

@ -1,8 +1,6 @@
#include <applicat.h>
#include <automask.h> #include <automask.h>
#include <progind.h> #include <progind.h>
#include <recarray.h> #include <recset.h>
#include <relation.h>
#include "calib01.h" #include "calib01.h"
#include "ca2.h" #include "ca2.h"
@ -20,13 +18,56 @@
class TRic_saldi_msk : public TAutomask class TRic_saldi_msk : public TAutomask
{ {
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly) { return true; } virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public: public:
TRic_saldi_msk(); TRic_saldi_msk();
virtual ~TRic_saldi_msk(){}; virtual ~TRic_saldi_msk(){};
}; };
bool TRic_saldi_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ANNO:
if (e == fe_init || e == fe_modify)
{
//in base all'esercizio selezionato dall'utonto, questo magico programma cerca quale è il movimento con data..
//..competenza più antica che interessa l'esercizio selezionato (ricordiamo che i movimenti possono avere..
//..durata pluriennale, da istruzioni adolfiche) ed esegue dall'esercizio contenente tale data il ricalcolo..
//..dei saldi (Silvan non sei nessuno!)
const int selected_anno = atoi(o.get());
TEsercizi_contabili esc;
TDate datainiesc, datafinesc;
esc.code2range(selected_anno, datainiesc, datafinesc);
TString query;
query << "USE MOVANA\nSELECT (BETWEEN(DATAFCOMP,#DATAINIESC,0))||(AUTOFCOMP==\"X\")";
TISAM_recordset recset(query);
recset.set_var("#DATAINIESC", datainiesc);
TDate datacomp = datainiesc;
const long recset_items = recset.items();
TProgind pi(recset_items, "Ricerca movimenti che interessano l'esercizio selezionato...", true, true);
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.addstatus(1))
break;
const TDate curr_date = recset.get(MOVANA_DATACOMP).as_date();
if (curr_date < datacomp)
datacomp = curr_date;
}
const int first_anno = esc.date2esc(datacomp);
set(F_FIRST_ANNO, first_anno);
}
break;
default:
break;
}
return true;
}
TRic_saldi_msk::TRic_saldi_msk() :TAutomask ("ca2300a") { } TRic_saldi_msk::TRic_saldi_msk() :TAutomask ("ca2300a") { }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -83,7 +124,7 @@ protected:
virtual bool destroy(); virtual bool destroy();
virtual void main_loop(); virtual void main_loop();
static bool elabora_movimento(const TRelation& rel, void* pJolly) { return true; } static bool elabora_movimento(const TRelation& rel, void* pJolly) { return true; }
static bool remove_saldo(const TRelation& rel, void* pJolly); bool remove_saldi(const int first_anno);
public: public:
TRic_saldi_app() {} TRic_saldi_app() {}
@ -102,24 +143,22 @@ bool TRic_saldi_app::destroy()
return TSkeleton_application::destroy(); return TSkeleton_application::destroy();
} }
bool TRic_saldi_app::remove_saldo(const TRelation& rel, void* pJolly) bool TRic_saldi_app::remove_saldi(const int first_anno)
{ {
const int anno = *(int*)pJolly; //deve azzerare i saldi a partire dal primo anno di interesse
TRectype& rec = rel.curr(); TString query;
const int curr_anno = rec.get_int(SALDANA_ANNO); query << "USE SALDANA\nFROM ANNO=#ANNO";
//azzeratore dei saldi anno corrente
if (curr_anno == anno) TISAM_recordset recset(query);
((TRelation &)rel).remove(); recset.set_var("#ANNO", long(first_anno));
else //azzeratore dei preventivi/variazioni di altri anni const long recset_items = recset.items();
TProgind pi(recset_items, "Azzeramento saldi...", true, true);
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{ {
const real saldop = rec.get_real(SALDANA_SALDOP); if (!pi.addstatus(1))
const real saldov = rec.get_real(SALDANA_SALDOV); break;
if (!saldop.is_zero() || !saldov.is_zero()) recset.cursor()->file().remove();
{
rec.zero(SALDANA_SALDOP);
rec.zero(SALDANA_SALDOV);
((TRelation&)rel).rewrite();
}
} }
return true; return true;
} }
@ -133,51 +172,26 @@ void TRic_saldi_app::main_loop()
//2 Azzeramento e ricalcolo dei saldi dei movimenti di tipo preventivo o variazione per TUTTI gli esercizi.. //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 //..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.. //AZZERAMENTO dei saldi
//..gli esercizi che trova const int first_anno = _mask->get_int(F_FIRST_ANNO);
const int anno = _mask->get_int(F_ANNO); remove_saldi(first_anno);
TRelation rel_saldi(LF_SALDANA);
TCursor cur_saldi(&rel_saldi); //RICOSTRUZIONE saldi (eventualmente spammati su piu' anni)
const long items_saldi = cur_saldi.items();
cur_saldi.scan(remove_saldo, (void*)&anno, "Azzeramento saldi...");
//FASE 1
//ricostruzione dei saldi normali e temporanei dell'anno selezionato
TEsercizi_contabili esc; TEsercizi_contabili esc;
const TDate datainies = esc[anno].inizio(); const TDate datainies = esc[first_anno].inizio();
const TDate datafines = esc[anno].fine();
TRelation rel_movana(LF_MOVANA); TRelation rel_movana(LF_MOVANA);
TRectype darec(LF_MOVANA), arec(LF_MOVANA); TRectype darec(LF_MOVANA);
darec.put(MOVANA_DATACOMP, datainies); darec.put(MOVANA_DATACOMP, datainies);
arec.put(MOVANA_DATACOMP, datafines);
TString filter = "(TIPOMOV=='')||(TIPOMOV=='T')";
TCursor cur_movana(&rel_movana, filter, 2, &darec, &arec); TCursor cur_movana(&rel_movana, "", 2, &darec);
const long items = cur_movana.items(); const long items = cur_movana.items();
//usa la scan dei TCursor,quindi niente progind e for,x' gia' nel metodo
if (items > 0)
{
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 consuntivi e temporanei...");
rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!!
}
//FASE 2 if (items > 0)
//ricostruzione saldi di preventivo spammati su piu' anni
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; TAnal_mov_ric* amr = new TAnal_mov_ric;
amr->set_annoes(0); amr->set_annoes(0);
rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!! rel_movana.lfile().set_curr(amr); //il record principale della rel e' un TMov_anal!!
cur_movana_prev.scan(elabora_movimento, this, "Ricostruzione saldi preventivi..."); cur_movana.scan(elabora_movimento, this, "Ricostruzione saldi...");
rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!! rel_movana.lfile().set_curr(new TRectype(LF_MOVANA)); //il record principale della rel e' un TMov_anal!!
} }
} }

View File

@ -1 +1,2 @@
#define F_ANNO 101 #define F_ANNO 101
#define F_FIRST_ANNO 102

View File

@ -20,12 +20,12 @@ END
TEXT DLG_NULL TEXT DLG_NULL
BEGIN BEGIN
PROMPT 3 4 "tempo. Siate certi di voler proseguire." PROMPT 2 4 "tempo. Siate certi di voler proseguire."
END END
NUMBER F_ANNO 4 NUMBER F_ANNO 4
BEGIN BEGIN
PROMPT 3 6 "Codice esercizio " PROMPT 3 6 "Esercizio da ricalcolare "
USE ESC USE ESC
INPUT CODTAB F_ANNO INPUT CODTAB F_ANNO
DISPLAY "Codice Esercizio" CODTAB DISPLAY "Codice Esercizio" CODTAB
@ -34,11 +34,17 @@ BEGIN
OUTPUT F_ANNO CODTAB OUTPUT F_ANNO CODTAB
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
FLAGS "Z" FLAGS "Z"
HELP "Codice esercizio per il quale si desidera il ricalcolo dei saldi" HELP "Codice esercizio dal quale si desidera parta il ricalcolo dei saldi"
WARNING "Il codice esercizio e' obbligatorio" WARNING "Il codice esercizio e' obbligatorio"
ADD RUN cg0 -5 esc ADD RUN cg0 -5 esc
END END
NUMBER F_FIRST_ANNO 4
BEGIN
PROMPT 3 7 "Primo esercizio interessato "
FLAGS "D"
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -313,10 +313,10 @@ MESSAGE RESET,169
</postscript> </postscript>
</field> </field>
</section> </section>
<section type="Foot" level="3" height="2"> <section type="Foot" level="3" height="2.5">
<font italic="1" face="Arial Narrow" bold="1" size="8" /> <font italic="1" face="Arial Narrow" bold="1" size="8" />
<field border="1" x="2" y="0.25" type="Linea" width="169" height="0" pattern="1" /> <field border="1" x="2" y="0.25" type="Linea" width="169" height="0" pattern="1" />
<field x="1" y="0.5" type="Array" width="40" pattern="1"> <field x="1" y="0.5" type="Array" width="25" height="2" pattern="1">
<source>H3.101</source> <source>H3.101</source>
<list> <list>
<li Value="TOTALI Commesse avviate in esercizi precedenti" Code="0" /> <li Value="TOTALI Commesse avviate in esercizi precedenti" Code="0" />