Patch level : 2.2
Files correlati : ca3.exe Ricompilazione Demo : [ ] Commento : Ottimizzato calcolo saldi dei conti analitici introducendo la chiave per conto (2) sul file saldana git-svn-id: svn://10.65.10.50/trunk@13341 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
c62c3fd8d4
commit
ea6b6dc09f
@ -503,7 +503,6 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
|||||||
const char tipomov = movana.get_char(MOVANA_TIPOMOV);
|
const char tipomov = movana.get_char(MOVANA_TIPOMOV);
|
||||||
if (tipomov <= ' ' || tipomov == 'T')
|
if (tipomov <= ' ' || tipomov == 'T')
|
||||||
{
|
{
|
||||||
|
|
||||||
//serve un documento da cui ricavare i parametri di stampa
|
//serve un documento da cui ricavare i parametri di stampa
|
||||||
TDocumento* newdoc = (TDocumento*)doc;
|
TDocumento* newdoc = (TDocumento*)doc;
|
||||||
bool should_delete = false;
|
bool should_delete = false;
|
||||||
@ -513,8 +512,8 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
|||||||
newdoc = new TDocumento('D', movana.get_int(MOVANA_DANNO), dacodnum, movana.get_long(MOVANA_DNDOC));
|
newdoc = new TDocumento('D', movana.get_int(MOVANA_DANNO), dacodnum, movana.get_long(MOVANA_DNDOC));
|
||||||
should_delete = true; //settato true per cancellare il doc al termine del metodo(sennò addio memoria!)
|
should_delete = true; //settato true per cancellare il doc al termine del metodo(sennò addio memoria!)
|
||||||
}
|
}
|
||||||
const bool dadoc = newdoc != NULL;
|
|
||||||
|
|
||||||
|
const bool dadoc = newdoc != NULL;
|
||||||
//i movimenti possono essere normali o generati da documento...
|
//i movimenti possono essere normali o generati da documento...
|
||||||
if (dadoc) //movimento generato da documento
|
if (dadoc) //movimento generato da documento
|
||||||
{
|
{
|
||||||
@ -681,7 +680,6 @@ F=IMF*/
|
|||||||
//scanning delle righe dei movimenti di analitica
|
//scanning delle righe dei movimenti di analitica
|
||||||
void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana()
|
void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana()
|
||||||
{
|
{
|
||||||
|
|
||||||
TRelation rel_rmovana(LF_RMOVANA);
|
TRelation rel_rmovana(LF_RMOVANA);
|
||||||
rel_rmovana.add(LF_MOVANA, "NUMREG==NUMREG"); //aggiunge le testate x avere tipi mov e descr
|
rel_rmovana.add(LF_MOVANA, "NUMREG==NUMREG"); //aggiunge le testate x avere tipi mov e descr
|
||||||
|
|
||||||
@ -728,19 +726,20 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana()
|
|||||||
}
|
}
|
||||||
|
|
||||||
TCursor cur_rmovana(&rel_rmovana, filtro, 2, &da_rmovana, &a_rmovana);
|
TCursor cur_rmovana(&rel_rmovana, filtro, 2, &da_rmovana, &a_rmovana);
|
||||||
const long rmovana_items = cur_rmovana.items();
|
const TRecnotype rmovana_items = cur_rmovana.items();
|
||||||
cur_rmovana.freeze();
|
|
||||||
|
|
||||||
//scorre le righe movimenti di analitica che soddisfano il filtro
|
//scorre le righe movimenti di analitica che soddisfano il filtro
|
||||||
//il join a movana serve nel caso necessitino dati di testata per la riga in questione
|
//il join a movana serve nel caso necessitino dati di testata per la riga in questione
|
||||||
if (rmovana_items > 0)
|
if (rmovana_items > 0)
|
||||||
{
|
{
|
||||||
|
cur_rmovana.freeze();
|
||||||
const TRectype& rmovana = cur_rmovana.curr();
|
const TRectype& rmovana = cur_rmovana.curr();
|
||||||
const TRectype& movana = rel_rmovana.curr(LF_MOVANA);
|
const TRectype& movana = rel_rmovana.curr(LF_MOVANA);
|
||||||
TProgind pi(rmovana_items, "Scansione righe movimenti...");
|
TProgind pi(rmovana_items, "Scansione righe movimenti...", true, true);
|
||||||
for (cur_rmovana = 0; cur_rmovana.pos() < rmovana_items; ++cur_rmovana)
|
for (cur_rmovana = 0; cur_rmovana.pos() < rmovana_items; ++cur_rmovana)
|
||||||
{
|
{
|
||||||
pi.addstatus(1);
|
pi.addstatus(1);
|
||||||
|
if (pi.iscancelled())
|
||||||
|
break;
|
||||||
scrive_riga(rmovana, movana, NULL);
|
scrive_riga(rmovana, movana, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -840,15 +839,13 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
|
|||||||
|
|
||||||
//il filtro è completo;può eseguire la scansione
|
//il filtro è completo;può eseguire la scansione
|
||||||
TCursor cur_rdoc(&rel_rdoc, "", 3, &dardoc, &ardoc);
|
TCursor cur_rdoc(&rel_rdoc, "", 3, &dardoc, &ardoc);
|
||||||
|
|
||||||
cur_rdoc.setfilter(filtro, update);
|
cur_rdoc.setfilter(filtro, update);
|
||||||
|
|
||||||
const long rdoc_items = cur_rdoc.items();
|
const TRecnotype rdoc_items = cur_rdoc.items();
|
||||||
cur_rdoc.freeze();
|
|
||||||
|
|
||||||
if (rdoc_items > 0)
|
if (rdoc_items > 0)
|
||||||
{
|
{
|
||||||
TProgind pi(rdoc_items, "Scansione righe documenti...");
|
cur_rdoc.freeze();
|
||||||
|
TProgind pi(rdoc_items, "Scansione righe documenti...", true, true);
|
||||||
|
|
||||||
//memorizza l'ultimo doc per evitare doppioni in caso di doc con più righe (rielaborerebbe..
|
//memorizza l'ultimo doc per evitare doppioni in caso di doc con più righe (rielaborerebbe..
|
||||||
//..lo stesso documento tante volte quante sono le sue righe!)
|
//..lo stesso documento tante volte quante sono le sue righe!)
|
||||||
@ -858,6 +855,9 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
|
|||||||
for (cur_rdoc = 0; cur_rdoc.pos() < rdoc_items; ++cur_rdoc)
|
for (cur_rdoc = 0; cur_rdoc.pos() < rdoc_items; ++cur_rdoc)
|
||||||
{
|
{
|
||||||
pi.addstatus(1);
|
pi.addstatus(1);
|
||||||
|
if (pi.iscancelled())
|
||||||
|
break;
|
||||||
|
|
||||||
const TRectype& curr_doc = cur_rdoc.curr(LF_DOC);
|
const TRectype& curr_doc = cur_rdoc.curr(LF_DOC);
|
||||||
//controlla se il documento cui appartiene la rigadoc e' stato contabilizzato;
|
//controlla se il documento cui appartiene la rigadoc e' stato contabilizzato;
|
||||||
//se e' stato contabilizzato lo salta in quanto la riga documento apparira' attraverso le righe
|
//se e' stato contabilizzato lo salta in quanto la riga documento apparira' attraverso le righe
|
||||||
@ -1094,7 +1094,7 @@ void TPrint_rendiconto_ca::main_loop()
|
|||||||
FOR_EACH_SHEET_ROW(sheet, r, row) //per ogni cdc/cms che appare nello sheet di pag.1 della msk..
|
FOR_EACH_SHEET_ROW(sheet, r, row) //per ogni cdc/cms che appare nello sheet di pag.1 della msk..
|
||||||
{
|
{
|
||||||
rep.set_filter(*_mask, r); //..chiama il metodone globale che crea e compila il file..
|
rep.set_filter(*_mask, r); //..chiama il metodone globale che crea e compila il file..
|
||||||
//..temporaneo i cui dati riempiranno il report
|
//..temporaneo i cui dati riempiranno il report
|
||||||
book.add(rep); //aggiunge il report relativo alla cdc/cms corrente al book
|
book.add(rep); //aggiunge il report relativo alla cdc/cms corrente al book
|
||||||
}
|
}
|
||||||
|
|
||||||
|
103
ca/calib02.cpp
103
ca/calib02.cpp
@ -338,9 +338,9 @@ size_t TAnal_report::get_usr_words(TString_array& words) const
|
|||||||
void TAnal_report::msg_format(int logicnum, TVariant_stack& stack)
|
void TAnal_report::msg_format(int logicnum, TVariant_stack& stack)
|
||||||
{
|
{
|
||||||
const TString& str_in = curr_field()->get().as_string();
|
const TString& str_in = curr_field()->get().as_string();
|
||||||
if (str_in.not_empty())
|
if (!str_in.blank())
|
||||||
{
|
{
|
||||||
TString80 separator = " ";
|
TString8 separator = " ";
|
||||||
if (stack.items() > 0)
|
if (stack.items() > 0)
|
||||||
separator = stack.pop().as_string();
|
separator = stack.pop().as_string();
|
||||||
if (separator.not_empty())
|
if (separator.not_empty())
|
||||||
@ -354,20 +354,20 @@ void TAnal_report::msg_format(int logicnum, TVariant_stack& stack)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TAnal_report::msg_format_costo (TVariant_stack& stack)
|
void TAnal_report::msg_format_costo(TVariant_stack& stack)
|
||||||
{ msg_format(LF_CDC, stack); }
|
{ msg_format(LF_CDC, stack); }
|
||||||
|
|
||||||
void TAnal_report::msg_format_commessa(TVariant_stack& stack)
|
void TAnal_report::msg_format_commessa(TVariant_stack& stack)
|
||||||
{ msg_format(LF_COMMESSE, stack); }
|
{ msg_format(LF_COMMESSE, stack); }
|
||||||
|
|
||||||
void TAnal_report::msg_format_fase (TVariant_stack& stack)
|
void TAnal_report::msg_format_fase(TVariant_stack& stack)
|
||||||
{ msg_format(LF_FASI, stack); }
|
{ msg_format(LF_FASI, stack); }
|
||||||
|
|
||||||
void TAnal_report::msg_format_conto (TVariant_stack& stack)
|
void TAnal_report::msg_format_conto(TVariant_stack& stack)
|
||||||
{
|
{
|
||||||
// Cerca di determinare se si usa il piano contabile o analitico
|
// Cerca di determinare se si usa il piano contabile o analitico
|
||||||
const TString& conto = curr_field()->get().as_string();
|
const TString& conto = curr_field()->get().as_string();
|
||||||
if (conto.len() == 12)
|
if (conto.len() == 12 && real::is_natural(conto))
|
||||||
msg_format(LF_PCON, stack);
|
msg_format(LF_PCON, stack);
|
||||||
else
|
else
|
||||||
msg_format(LF_PCONANA, stack);
|
msg_format(LF_PCONANA, stack);
|
||||||
@ -375,8 +375,10 @@ void TAnal_report::msg_format_conto (TVariant_stack& stack)
|
|||||||
|
|
||||||
void TAnal_report::msg_format_commessa_costo(TVariant_stack& stack)
|
void TAnal_report::msg_format_commessa_costo(TVariant_stack& stack)
|
||||||
{
|
{
|
||||||
const TMultilevel_code_info& main_info = ca_multilevel_code_info(LF_FASI);
|
const TMultilevel_code_info& fas_info = ca_multilevel_code_info(LF_FASI);
|
||||||
msg_format(main_info.parent(), stack);
|
const int pa = fas_info.parent();
|
||||||
|
if (pa > 0)
|
||||||
|
msg_format(pa, stack);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TAnal_report::execute_usr_word(unsigned int opcode, TVariant_stack& stack)
|
bool TAnal_report::execute_usr_word(unsigned int opcode, TVariant_stack& stack)
|
||||||
@ -631,8 +633,6 @@ public:
|
|||||||
bool TSaldi_cache::int_saldo_annuale(const TAnal_bill& b, int da_anno, int ad_anno, word tipo,
|
bool TSaldi_cache::int_saldo_annuale(const TAnal_bill& b, int da_anno, int ad_anno, word tipo,
|
||||||
TImporto& dare, TImporto& avere) const
|
TImporto& dare, TImporto& avere) const
|
||||||
{
|
{
|
||||||
CHECKD(ad_anno > 0, "Anno saldo finale errato: ", ad_anno);
|
|
||||||
|
|
||||||
bool movim = false;
|
bool movim = false;
|
||||||
TString query, select;
|
TString query, select;
|
||||||
|
|
||||||
@ -648,28 +648,32 @@ bool TSaldi_cache::int_saldo_annuale(const TAnal_bill& b, int da_anno, int ad_an
|
|||||||
if (select.not_empty()) select << "&&";
|
if (select.not_empty()) select << "&&";
|
||||||
select << "(FASE=='" << b.fase() << "')";
|
select << "(FASE=='" << b.fase() << "')";
|
||||||
}
|
}
|
||||||
if (b.conto().not_empty())
|
|
||||||
{
|
|
||||||
if (select.not_empty()) select << "&&";
|
|
||||||
select << "(CONTO[1," << b.conto().len() << "]=='" << b.conto() << "')";
|
|
||||||
}
|
|
||||||
|
|
||||||
query << "USE SALDANA";
|
|
||||||
if (select.not_empty())
|
|
||||||
query << " SELECT " << select;
|
|
||||||
if (da_anno > 0)
|
if (da_anno > 0)
|
||||||
{
|
{
|
||||||
query << "\nFROM ANNO=" << da_anno;
|
if (select.not_empty()) select << "&&";
|
||||||
if (b.conto().not_empty())
|
select << "(ANNO>=" << da_anno << ")";
|
||||||
query << " CONTO=" << b.conto();
|
}
|
||||||
query << '\n';
|
if (ad_anno > 0)
|
||||||
|
{
|
||||||
|
if (select.not_empty()) select << "&&";
|
||||||
|
select << "(ANNO<=" << ad_anno << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
query << "\nTO ANNO=" << ad_anno;
|
query << "USE SALDANA KEY 2";
|
||||||
if (b.conto().not_empty())
|
if (select.not_empty())
|
||||||
query << " CONTO=" << b.conto();
|
query << " SELECT " << select;
|
||||||
query << '\n';
|
|
||||||
|
|
||||||
|
if (b.conto().not_empty())
|
||||||
|
{
|
||||||
|
query << "\nFROM CONTO=" << b.conto();
|
||||||
|
if (da_anno > 0)
|
||||||
|
query << " ANNO=" << da_anno;
|
||||||
|
query << "\nTO CONTO=" << b.conto();
|
||||||
|
if (ad_anno > 0)
|
||||||
|
query << " ANNO=" << ad_anno;
|
||||||
|
query << '\n';
|
||||||
|
}
|
||||||
|
|
||||||
TISAM_recordset saldini(query);
|
TISAM_recordset saldini(query);
|
||||||
|
|
||||||
for (TRecnotype i = 0; saldini.move_to(i); i++)
|
for (TRecnotype i = 0; saldini.move_to(i); i++)
|
||||||
@ -708,7 +712,7 @@ bool TSaldi_cache::saldo_annuale(const TAnal_bill& b, int da_anno, int ad_anno,
|
|||||||
TImporto& dare, TImporto& avere)
|
TImporto& dare, TImporto& avere)
|
||||||
{
|
{
|
||||||
bool movim = false;
|
bool movim = false;
|
||||||
if (ad_anno > 0)
|
if (ad_anno >= 0)
|
||||||
{
|
{
|
||||||
if (tipo & _saldanal_riclassify)
|
if (tipo & _saldanal_riclassify)
|
||||||
{
|
{
|
||||||
@ -849,29 +853,38 @@ bool TSaldi_cache::saldi(const TAnal_bill& bill,
|
|||||||
const TDate& dal, const TDate& al, word tipo,
|
const TDate& dal, const TDate& al, word tipo,
|
||||||
TSaldanal& s)
|
TSaldanal& s)
|
||||||
{
|
{
|
||||||
// Calcolo i saldi fino all'anno scorso.
|
if (dal.ok() || al.ok())
|
||||||
// In assemza di data iniziale mi torna 0
|
|
||||||
const int anno_prec = _esc.date2prevesc(dal);
|
|
||||||
if (anno_prec > 0)
|
|
||||||
{
|
{
|
||||||
TImporto dare, avere;
|
// Calcolo i saldi fino all'anno scorso.
|
||||||
saldo_annuale(bill, 0, anno_prec, tipo, dare, avere);
|
// In assemza di data iniziale mi torna 0
|
||||||
s._ini = dare;
|
const int anno_prec = _esc.date2prevesc(dal);
|
||||||
s._ini += avere;
|
if (anno_prec > 0)
|
||||||
}
|
{
|
||||||
|
TImporto dare, avere;
|
||||||
|
saldo_annuale(bill, 0, anno_prec, tipo, dare, avere);
|
||||||
|
s._ini = dare;
|
||||||
|
s._ini += avere;
|
||||||
|
}
|
||||||
|
|
||||||
if (tipo & _saldanal_ultima_imm)
|
if ((tipo & _saldanal_ultima_imm)!=0)
|
||||||
{
|
{
|
||||||
// Calcolo i saldi di quest'anno
|
// Calcolo i saldi di quest'anno
|
||||||
// In assemza di data iniziale somma tutti gli anni (fino al 9999)
|
// In assemza di data iniziale somma tutti gli anni (fino al 9999)
|
||||||
const int anno_ini = _esc.date2esc(dal);
|
const int anno_ini = _esc.date2esc(dal);
|
||||||
const int anno_fin = anno_ini > 0 ? anno_ini : 9999;
|
const int anno_fin = anno_ini > 0 ? anno_ini : 0;
|
||||||
s._movimentato = saldo_annuale(bill, anno_ini, anno_fin, tipo, s._dare, s._avere);
|
s._movimentato = saldo_annuale(bill, anno_ini, anno_fin, tipo, s._dare, s._avere);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
saldo_movimenti(bill, dal, al, tipo, s);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
saldo_movimenti(bill, dal, al, tipo, s);
|
// Se non viene specificata nessuna data voglio il saldo all'ultima immissione
|
||||||
|
s._movimentato = saldo_annuale(bill, 0, 0, tipo, s._dare, s._avere);
|
||||||
}
|
}
|
||||||
|
|
||||||
s._ini.normalize();
|
s._ini.normalize();
|
||||||
s._fin = s._ini;
|
s._fin = s._ini;
|
||||||
s._fin += s._dare;
|
s._fin += s._dare;
|
||||||
|
@ -11,5 +11,6 @@ SEZIONEP|7|1|0|Sezione (Preventivo)
|
|||||||
SALDOP|4|18|3|Saldo (Preventivo)
|
SALDOP|4|18|3|Saldo (Preventivo)
|
||||||
SEZIONEV|7|1|0|Sezione (Variazione preventivo)
|
SEZIONEV|7|1|0|Sezione (Variazione preventivo)
|
||||||
SALDOV|4|18|3|Saldo (Variazione preventivo)
|
SALDOV|4|18|3|Saldo (Variazione preventivo)
|
||||||
1
|
2
|
||||||
ANNO+CONTO+COSTO+COMMESSA+FASE|
|
ANNO+CONTO+COSTO+COMMESSA+FASE|
|
||||||
|
CONTO+ANNO+COSTO+COMMESSA+FASE|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user