#include #include #include #include #include "ve5300.h" #include "velib.h" /////////////////////////////////////////////////////////// // TPackdoc mask /////////////////////////////////////////////////////////// class TPackdoc_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TPackdoc_mask() : TAutomask("ve5500a") { open(); } }; bool TPackdoc_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch (o.dlg()) { case F_FROM_NUM: case F_TO_NUM: case F_FROM_FRNDOC: case F_FROM_TONDOC: break; default: break; } return TRUE; } /////////////////////////////////////////////////////////// // Main program /////////////////////////////////////////////////////////// class TPackdoc_app : public TSkeleton_application { protected: public: virtual void main_loop(); }; void TPackdoc_app::main_loop() { open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_MOV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_CLIFO, LF_CFVEN, LF_INDSP, LF_OCCAS, LF_MOVMAG, LF_RMOVMAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, 0); TPackdoc_mask m; while (m.run() == K_ENTER) { TRectype rec_from(LF_DOC); rec_from.put(DOC_ANNO, m.get(F_FROM_ANNO)); rec_from.put(DOC_CODNUM, m.get(F_FROM_NUM)); rec_from.put(DOC_PROVV, m.get(F_FROM_PROVV)); rec_from.put(DOC_NDOC, m.get(F_FROM_FRNDOC)); TRectype rec_to(rec_from); rec_to.put(DOC_NDOC, m.get(F_FROM_TONDOC)); TRelation rel(LF_DOC); TCursor cur(&rel, "", 1, &rec_from, &rec_to); long newdocnum = m.get_long(F_FROM_FRNDOC); const long tot = cur.items(); cur.freeze(); if (newdocnum <= 0L) newdocnum = 1L; if (tot > 0L) { TProgind pi(tot, "Compattamento in corso...", FALSE, TRUE); for (cur = 0; cur.pos() < tot; ++cur) { pi.addstatus(1); TDocumento doc(cur.curr()); const char provv = doc.get_char(DOC_PROVV); const int anno = doc.get_int(DOC_ANNO); const TString16 codnum = doc.get(DOC_CODNUM); const long ndoc = doc.get_long(DOC_NDOC); if (ndoc > newdocnum) { TLocalisamfile rdocfile(LF_RIGHEDOC); rdocfile.setkey(4); rdocfile.put(RDOC_DAPROVV, provv); rdocfile.put(RDOC_DAANNO, anno); rdocfile.put(RDOC_DACODNUM, codnum); rdocfile.put(RDOC_DANDOC, ndoc); TRectype r(rdocfile.curr()); const int err = rdocfile.read(_isgteq); if (rdocfile.curr() != r && (doc.get_long(DOC_NUMREG) == 0) && (doc.get_long(DOC_NUMANT) == 0)) { TDocumento newdoc(doc); newdoc.renum_ndoc(newdocnum); int err = newdoc.write(); if (err == NOERR) { err = doc.remove(); if (err != NOERR) { error_box("Errore n.ro %d,nella cancellazione del\n documento %ld", err, ndoc); break; } } else { error_box("Errore n.ro %d,nella creazione del\n documento %ld da l documento %ld", err, newdocnum, ndoc); break; } } else { message_box("Il Documento %ld e' riferito in un altro documento.\nCompattamento interrotto", ndoc); break; } } newdocnum++; } } } } int ve5500(int argc, char* argv[]) { TPackdoc_app a; a.run(argc, argv, "Compattamento documenti"); return 0; }