#include #include #include #include class TTabelle_770 : public TTable_application { protected: virtual int read(TMask& m); virtual int write(const TMask& m); virtual int rewrite(const TMask& m); virtual bool remove(); public: bool is_ENT() const { return get_tabname() == "%ENT"; } TSheet_field* sheet_ENT() const; void write_rewrite_ENT() const; }; TSheet_field* TTabelle_770::sheet_ENT() const { if (is_ENT()) { TMask& m = curr_mask(); for (int i = m.fields()-1; i > 0; i--) { TMask_field& f = m.fld(i); if (f.is_sheet()) return (TSheet_field*)&f; } } return NULL; } int TTabelle_770::read(TMask& m) { const int err = TTable_application::read(m); TSheet_field* se = sheet_ENT(); if (err == NOERR && se != NULL) { const TString& ent = m.get_key_field(1, true)->get(); se->destroy(); TLocalisamfile mr(LF_MULTIREL); TISAM_recordset nditte("USE NDITTE"); for (bool go = nditte.move_first(); go; go = nditte.move_next()) { TToken_string& r = se->row(-1); const long n = nditte.get(NDT_CODDITTA).as_int(); TString8 cod; cod.format("%05ld", n); r = cod; r.add(nditte.get(NDT_RAGSOC).as_string()); mr.put("COD", "77ENT"); mr.put("FIRST", ent); mr.put("SECOND", cod); if (mr.read() == NOERR) r.add(mr.get("DATA")); } se->force_update(); } return err; } void TTabelle_770::write_rewrite_ENT() const { TSheet_field& s = *sheet_ENT(); const TString& ent = s.mask().get_key_field(1, true)->get(); TLocalisamfile mr(LF_MULTIREL); TString8 cod; FOR_EACH_SHEET_ROW(s, r, row) { mr.zero(); mr.put("COD", "77ENT"); mr.put("FIRST", ent); cod.format("%05ld", row->get_long(0)); mr.put("SECOND", cod); const TFixed_string data = row->get(2); if (data.full()) { mr.put("DATA", data); mr.rewrite_write(); } else mr.remove(); } } int TTabelle_770::write(const TMask& m) { const int err = TTable_application::write(m); if (err == NOERR && is_ENT()) write_rewrite_ENT(); return err; } int TTabelle_770::rewrite(const TMask& m) { const int err = TTable_application::rewrite(m); if (err == NOERR && is_ENT()) write_rewrite_ENT(); return err; } bool TTabelle_770::remove() { const bool done = TTable_application::remove(); if (done && is_ENT()) { TSheet_field& s = *sheet_ENT(); FOR_EACH_SHEET_ROW(s, r, row) row->add(" ", 2); write_rewrite_ENT(); } return done; } int TableManager(int argc, char* argv[]) { TTabelle_770 a; a.run(argc, argv, TR("Tabella 770")); return 0; }