diff --git a/ca/ca3700.cpp b/ca/ca3700.cpp index 47b591dd4..ffd097e73 100755 --- a/ca/ca3700.cpp +++ b/ca/ca3700.cpp @@ -503,7 +503,6 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const const char tipomov = movana.get_char(MOVANA_TIPOMOV); if (tipomov <= ' ' || tipomov == 'T') { - //serve un documento da cui ricavare i parametri di stampa TDocumento* newdoc = (TDocumento*)doc; 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)); 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... if (dadoc) //movimento generato da documento { @@ -681,7 +680,6 @@ F=IMF*/ //scanning delle righe dei movimenti di analitica void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana() { - TRelation rel_rmovana(LF_RMOVANA); 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); - const long rmovana_items = cur_rmovana.items(); - cur_rmovana.freeze(); - + const TRecnotype rmovana_items = cur_rmovana.items(); //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 if (rmovana_items > 0) { + cur_rmovana.freeze(); const TRectype& rmovana = cur_rmovana.curr(); 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) { pi.addstatus(1); + if (pi.iscancelled()) + break; 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 TCursor cur_rdoc(&rel_rdoc, "", 3, &dardoc, &ardoc); - cur_rdoc.setfilter(filtro, update); - const long rdoc_items = cur_rdoc.items(); - cur_rdoc.freeze(); - + const TRecnotype rdoc_items = cur_rdoc.items(); 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.. //..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) { pi.addstatus(1); + if (pi.iscancelled()) + break; + const TRectype& curr_doc = cur_rdoc.curr(LF_DOC); //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 @@ -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.. { 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 } diff --git a/ca/calib02.cpp b/ca/calib02.cpp index 7d2ee3636..c141e3adf 100755 --- a/ca/calib02.cpp +++ b/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) { 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) separator = stack.pop().as_string(); 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); } void TAnal_report::msg_format_commessa(TVariant_stack& 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); } -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 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); else 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) { - const TMultilevel_code_info& main_info = ca_multilevel_code_info(LF_FASI); - msg_format(main_info.parent(), stack); + const TMultilevel_code_info& fas_info = ca_multilevel_code_info(LF_FASI); + 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) @@ -631,8 +633,6 @@ public: bool TSaldi_cache::int_saldo_annuale(const TAnal_bill& b, int da_anno, int ad_anno, word tipo, TImporto& dare, TImporto& avere) const { - CHECKD(ad_anno > 0, "Anno saldo finale errato: ", ad_anno); - bool movim = false; 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 << "&&"; 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) { - query << "\nFROM ANNO=" << da_anno; - if (b.conto().not_empty()) - query << " CONTO=" << b.conto(); - query << '\n'; + if (select.not_empty()) select << "&&"; + select << "(ANNO>=" << da_anno << ")"; + } + if (ad_anno > 0) + { + if (select.not_empty()) select << "&&"; + select << "(ANNO<=" << ad_anno << ")"; } - query << "\nTO ANNO=" << ad_anno; - if (b.conto().not_empty()) - query << " CONTO=" << b.conto(); - query << '\n'; + query << "USE SALDANA KEY 2"; + if (select.not_empty()) + query << " SELECT " << select; + 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); 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) { bool movim = false; - if (ad_anno > 0) + if (ad_anno >= 0) { if (tipo & _saldanal_riclassify) { @@ -849,29 +853,38 @@ bool TSaldi_cache::saldi(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipo, TSaldanal& s) { - // Calcolo i saldi fino all'anno scorso. - // In assemza di data iniziale mi torna 0 - const int anno_prec = _esc.date2prevesc(dal); - if (anno_prec > 0) + if (dal.ok() || al.ok()) { - TImporto dare, avere; - saldo_annuale(bill, 0, anno_prec, tipo, dare, avere); - s._ini = dare; - s._ini += avere; - } + // Calcolo i saldi fino all'anno scorso. + // In assemza di data iniziale mi torna 0 + const int anno_prec = _esc.date2prevesc(dal); + 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) - { - // Calcolo i saldi di quest'anno - // In assemza di data iniziale somma tutti gli anni (fino al 9999) - const int anno_ini = _esc.date2esc(dal); - const int anno_fin = anno_ini > 0 ? anno_ini : 9999; - s._movimentato = saldo_annuale(bill, anno_ini, anno_fin, tipo, s._dare, s._avere); + if ((tipo & _saldanal_ultima_imm)!=0) + { + // Calcolo i saldi di quest'anno + // In assemza di data iniziale somma tutti gli anni (fino al 9999) + const int anno_ini = _esc.date2esc(dal); + const int anno_fin = anno_ini > 0 ? anno_ini : 0; + s._movimentato = saldo_annuale(bill, anno_ini, anno_fin, tipo, s._dare, s._avere); + } + else + { + saldo_movimenti(bill, dal, al, tipo, s); + } } 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._fin = s._ini; s._fin += s._dare; diff --git a/ca/f151.trr b/ca/f151.trr index ae29a37fe..55aa6373a 100755 --- a/ca/f151.trr +++ b/ca/f151.trr @@ -11,5 +11,6 @@ SEZIONEP|7|1|0|Sezione (Preventivo) SALDOP|4|18|3|Saldo (Preventivo) SEZIONEV|7|1|0|Sezione (Variazione preventivo) SALDOV|4|18|3|Saldo (Variazione preventivo) -1 -ANNO+CONTO+COSTO+COMMESSA+FASE| +2 +ANNO+CONTO+COSTO+COMMESSA+FASE| +CONTO+ANNO+COSTO+COMMESSA+FASE|