diff --git a/ve/velib04.cpp b/ve/velib04.cpp index c9fc626e8..51eb3c937 100755 --- a/ve/velib04.cpp +++ b/ve/velib04.cpp @@ -432,7 +432,7 @@ int TElaborazione::read(const char* cod) { int err = NOERR; - *this = cache().get("%ELD", cod); + TRectype::operator=(cache().get("%ELD", cod)); if (empty()) { yesnofatal_box("Codice elaborazione non valido: %s", cod); diff --git a/ve/velib04.h b/ve/velib04.h index b3821bf80..29d3f3ca1 100755 --- a/ve/velib04.h +++ b/ve/velib04.h @@ -168,10 +168,9 @@ public: virtual void tipi_validi(TToken_string& tipi) const {} virtual void stati_validi(TToken_string& stati) const {} - bool doc_uguale(int u) const { return get("S1").mid(u, 1) == "X"; } + bool doc_uguale(int u) const { return get("S1").mid(u, 1) == "X"; } bool riga_uguale(int u) const { return get("S1").mid(40+u, 1) == "X"; } - bool raggruppa_righe() const { return get_bool("B0"); } virtual bool gestione_riferimenti() const { return get_bool("B1"); } virtual bool riferimenti_in_testa() const { return get_bool("B2"); } @@ -476,7 +475,8 @@ protected: error_type write_intra(TDocumento&); error_type write_anal(TDocumento& doc, const TMovimentoPN& mv); error_type write_percip(TDocumento& doc, const TMovimentoPN& movimento); - + TRecnotype kill_righe_percip(TIsam_handle logic, char tipopercip, long codpercip, long nprog) const; + // Aggiorna i saldi void aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save); // Visualizza l'ultimo errore rilevato diff --git a/ve/velib04b.cpp b/ve/velib04b.cpp index 0c571dc9e..3cc19f237 100755 --- a/ve/velib04b.cpp +++ b/ve/velib04b.cpp @@ -3677,6 +3677,28 @@ error_type TContabilizzazione::write_anal(TDocumento& doc, const TMovimentoPN& m return _error; } +TRecnotype TContabilizzazione::kill_righe_percip(TIsam_handle logic, char tipopercip, long codpercip, long nprog) const +{ + CHECKD(logic == LF_RVER || logic == LF_RPAG, "Invalid file number ", logic); + CHECKD(nprog > 0, "Invalid NPROGR ", nprog); + TRelation rel(logic); + TRectype& riga = rel.curr(); + riga.put(VER_CODDITTA, prefix().firm().codice()); + riga.put(VER_TIPOA, tipopercip); + riga.put(VER_CODANAGR, codpercip); + riga.put(VER_NPROG, nprog); + TCursor cur(&rel, "", 1, &riga, &riga); + const TRecnotype tot = cur.items(); + if (tot > 0) + { + cur.freeze(); + for (cur = 0L; cur.pos() < tot; ++cur) + cur.file().remove(); + } + return tot; +} + + error_type TContabilizzazione::write_percip(TDocumento& doc, const TMovimentoPN& movimento) { const char tipopercip = doc.clifor().get_char(CLI_TIPOAPER); @@ -3687,10 +3709,8 @@ error_type TContabilizzazione::write_percip(TDocumento& doc, const TMovimentoPN& TBit_array to_delete; TArray schede; TLocalisamfile schperc(LF_SCPERC); - TLocalisamfile rpag(LF_RPAG); - TLocalisamfile rver(LF_RVER); TLocalisamfile perc(LF_PERC); - const long numreg = movimento.lfile().get_long(MOV_NUMREG); + const long numreg = movimento.curr().get_long(MOV_NUMREG); int numsch = 0; schperc.setkey(3); @@ -3800,7 +3820,7 @@ error_type TContabilizzazione::write_percip(TDocumento& doc, const TMovimentoPN& err = NOERR; for (i = 0; err == NOERR && i < numsch; i++) { - TRectype & rec = (TRectype &) schede[i]; + TRectype& rec = (TRectype&)schede[i]; const char tipo = rec.get_char(SCH_TIPOA); const long codanagr = rec.get_long(SCH_CODANAGR); @@ -3809,66 +3829,35 @@ error_type TContabilizzazione::write_percip(TDocumento& doc, const TMovimentoPN& TToken_string msg(256, '.'); const int nprog = rec.get_int(SCH_NPROG); - msg.format("Sono state eliminate le righe di pagamento e versamento relative alla scheda %c/%ld/%d." - "Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog); err = rec.remove(schperc); - rver.curr().zero(); - rver.put(VER_CODDITTA, prefix().firm().codice()); - rver.put(VER_TIPOA, tipopercip); - rver.put(VER_CODANAGR, codpercip); - rver.put(VER_NPROG, nprog); - - const TRectype rvercmp(rver.curr()); - bool removed = false; - - for (int errver = rver.read(_isgteq); errver == NOERR && rver.curr() == rvercmp; errver = rver.next()) - { - rver.remove(); - } - if (removed) + if (kill_righe_percip(LF_RVER, tipo, codanagr, nprog)) msg.format("Sono state eliminate le righe di versamento relative alla scheda %c/%ld/%d." - "Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog); + "Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog); - rpag.curr().zero(); - rver.put(PAG_CODDITTA, prefix().firm().codice()); - rver.put(PAG_TIPOA, tipopercip); - rver.put(PAG_CODANAGR, codpercip); - rver.put(PAG_NPROG, nprog); + if (kill_righe_percip(LF_RPAG, tipo, codanagr, nprog)) + { + TString m(128); + m.format("Sono state eliminate le righe di pagamento relative alla scheda %c/%ld/%d." + "Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog); + msg.add(m); + } - const TRectype rpagcmp(rpag.curr()); - removed = false; - - for (int errpag = rpag.read(_isgteq); errpag == NOERR && rpag.curr() == rpagcmp; errpag = rpag.next()) - { - removed = true; - rpag.remove(); - } - - if (removed) - { - TString s; - - s.format("Sono state eliminate le righe di pagamento relative alla scheda %c/%ld/%d." - "Dovranno quindi essere ripristinate dell'utente.", tipo, codanagr, nprog); - msg << s; - } - - if (_viswin && msg.full()) - { - TString riga; - FOR_EACH_TOKEN(msg, line) - { - if (*line) - { + if (msg.full()) + { + if (_viswin) + { + TString riga; + FOR_EACH_TOKEN(msg, line) if (*line) + { riga = riga.empty() ? "*** " : " "; riga << line << '.'; _viswin->add_line(riga); - } - } - } - else - message_box(msg); + } + } + else + warning_box(msg); + } } else if (i < orig_numsch)