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;
 | |
| } |