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:
parent
9e8bad6ed9
commit
749cdab39c
126
ca/ca2300.cpp
126
ca/ca2300.cpp
@ -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!!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +1,2 @@
|
|||||||
#define F_ANNO 101
|
#define F_ANNO 101
|
||||||
|
#define F_FIRST_ANNO 102
|
||||||
|
@ -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
|
||||||
|
@ -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" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user