126 lines
2.8 KiB
C++
126 lines
2.8 KiB
C++
#include <tabapp.h>
|
|
#include <recset.h>
|
|
#include <msksheet.h>
|
|
|
|
#include <nditte.h>
|
|
|
|
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;
|
|
} |