Files correlati : Ricompilazione Demo : [ ] Commento : Rportata la versione 3.2 patch 1314 git-svn-id: svn://10.65.10.50/trunk@18269 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			463 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			463 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | |
| #include <automask.h>
 | |
| #include <execp.h>
 | |
| #include <progind.h>
 | |
| #include <recset.h>
 | |
| #include <relation.h>
 | |
| #include <reprint.h>
 | |
| 
 | |
| #include "mg3.h"
 | |
| #include "mg3600.h"
 | |
| #include "rmovmag.h"
 | |
| 
 | |
| ////////////////////////////////////////////////////////
 | |
| //	MASCHERA
 | |
| ////////////////////////////////////////////////////////
 | |
| class TStampa_etich_art_mask : public TAutomask
 | |
| {
 | |
| protected:
 | |
|   bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
| 
 | |
| public:
 | |
|   TStampa_etich_art_mask();
 | |
|   virtual ~TStampa_etich_art_mask() {}
 | |
| };
 | |
| 
 | |
| 
 | |
| bool TStampa_etich_art_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| { 
 | |
|   bool ok = true;
 | |
| /*  switch (o.dlg())
 | |
|   {
 | |
|   case :
 | |
|     {
 | |
| 
 | |
|     }
 | |
|     break;
 | |
|   default: break;
 | |
|   }*/
 | |
|   return ok;
 | |
| }
 | |
| 
 | |
| 
 | |
| TStampa_etich_art_mask::TStampa_etich_art_mask()
 | |
| 								:TAutomask("mg3600")
 | |
| {}
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////////
 | |
| //	RECORDSET
 | |
| ///////////////////////////////////////////////////////////////
 | |
| 
 | |
| class TStampa_etich_art_recordset : public TISAM_recordset
 | |
| {
 | |
| 	int _ncopie;
 | |
| 	TRecnotype _current_row;
 | |
| 
 | |
| public:
 | |
|   virtual bool move_to(TRecnotype pos);
 | |
|   virtual TRecnotype items() const;
 | |
|   virtual TRecnotype current_row() const;
 | |
| 	void set_filter(const TStampa_etich_art_mask& msk);
 | |
| 
 | |
|   TStampa_etich_art_recordset(const TString& sql) : TISAM_recordset(sql), _ncopie(1), _current_row(0L) { }
 | |
| };
 | |
| 
 | |
| //metodo per caricare i valori nel recordset dalla maschera...fighissimo!!
 | |
| void TStampa_etich_art_recordset::set_filter(const TStampa_etich_art_mask& msk)
 | |
| {
 | |
| 		TVariant var;
 | |
| 
 | |
| 		//carica TUTTI i valori nel recordset dalla maschera
 | |
|     const int items=msk.fields();
 | |
|     for (short i=0; i<items; i++)
 | |
|     {
 | |
|       const TMask_field &f=msk.fld(i);
 | |
|       const TFieldref* fld=f.field();
 | |
| 
 | |
|       if (fld != NULL)
 | |
|       {
 | |
|         TString80 fldname=fld->name();
 | |
|         //aggiungo "#" all'inizio della stringa dove manca
 | |
|         if (!fldname.starts_with("#"))
 | |
|           fldname.insert("#");
 | |
|         var=f.get();
 | |
|         set_var(fldname,var);
 | |
|       }
 | |
|     }
 | |
| 
 | |
| 		_ncopie = msk.get_int(F_QTA);
 | |
| }
 | |
| 
 | |
| TRecnotype TStampa_etich_art_recordset::items() const
 | |
| {
 | |
| 	return _ncopie * TISAM_recordset::items();
 | |
| }
 | |
| 
 | |
| TRecnotype TStampa_etich_art_recordset::current_row() const
 | |
| {
 | |
| 	return _current_row;
 | |
| }
 | |
| 
 | |
| bool TStampa_etich_art_recordset::move_to(TRecnotype pos)
 | |
| {
 | |
| 	_current_row = pos;
 | |
| 	const bool valid = _current_row < items();
 | |
| 
 | |
| 	if (_ncopie > 1)
 | |
| 	{
 | |
| 		if (pos >= items())
 | |
| 			return false;
 | |
| 		pos /= _ncopie;
 | |
| 	}
 | |
| 	if (valid)
 | |
| 		TISAM_recordset::move_to(pos);
 | |
| 	else
 | |
| 	_current_row = 0L;
 | |
| 	return valid;
 | |
| }
 | |
| 
 | |
| //////////
 | |
| 
 | |
| class TStampa_etich_mov_recordset : public TISAM_recordset
 | |
| {
 | |
| 	TPointer_array _index;
 | |
| 	TRecnotype _current_row;
 | |
| 
 | |
| public:
 | |
|   virtual bool move_to(TRecnotype pos);
 | |
|   virtual TRecnotype items() const;
 | |
|   virtual TRecnotype current_row() const;
 | |
| 	void set_filter(const TStampa_etich_art_mask& msk);
 | |
| 	TPointer_array & index() { return _index; }
 | |
|   virtual void requery();
 | |
| 
 | |
| 
 | |
|   TStampa_etich_mov_recordset(const TString& sql) : TISAM_recordset(sql), _current_row(0L) { }
 | |
| };
 | |
| 
 | |
| //metodo per caricare i valori nel recordset dalla maschera...fighissimo!!
 | |
| void TStampa_etich_mov_recordset::set_filter(const TStampa_etich_art_mask& msk)
 | |
| {
 | |
| 		TVariant var;
 | |
| 
 | |
| 		const int items=msk.fields();
 | |
|     for (short i=0; i<items; i++)
 | |
|     {
 | |
|       const TMask_field &f=msk.fld(i);
 | |
|       const TFieldref* fld=f.field();
 | |
| 
 | |
|       if (fld != NULL)
 | |
|       {
 | |
|         TString80 fldname=fld->name();
 | |
|         if (!fldname.starts_with("#"))
 | |
|           fldname.insert("#");
 | |
|         var=f.get();
 | |
|         set_var(fldname,var);
 | |
|       }
 | |
|     }
 | |
|      
 | |
|     TCursor * c = cursor();
 | |
| 		requery();
 | |
| }
 | |
| 
 | |
| TRecnotype TStampa_etich_mov_recordset::items() const
 | |
| {
 | |
| 	return _index.items();
 | |
| }
 | |
| 
 | |
| TRecnotype TStampa_etich_mov_recordset::current_row() const
 | |
| {
 | |
| 	return _current_row;
 | |
| }
 | |
| 
 | |
| bool TStampa_etich_mov_recordset::move_to(TRecnotype pos)
 | |
| {
 | |
| 	_current_row = pos;
 | |
| 	const bool valid = _current_row < items();
 | |
| 
 | |
| 	if (valid)
 | |
| 		TISAM_recordset::move_to(_index.get_long(pos) - 1);
 | |
| 	else
 | |
| 		_current_row = 0L;
 | |
| 	return valid;
 | |
| }
 | |
| 
 | |
| bool build_index(const TRelation& rel, void* pJolly)
 | |
| {
 | |
| 	TStampa_etich_mov_recordset * r = (TStampa_etich_mov_recordset *) pJolly;
 | |
| 	int ncopie = atoi(rel.curr().get(RMOVMAG_QUANT));
 | |
| 	const TRecnotype pos = r->cursor()->pos();
 | |
| 
 | |
| 	if (ncopie > 0)
 | |
| 		for ( int i = 0; i < ncopie; i++)
 | |
| 			r->index().insert_long(pos + 1);
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| void TStampa_etich_mov_recordset::requery()
 | |
| {
 | |
| 	if (valid_cursor())
 | |
| 	{
 | |
| //		TISAM_recordset::requery();
 | |
| 		TCursor * c = cursor();
 | |
| 
 | |
| 		_index.destroy();
 | |
| 		c->scan(build_index, this);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //////////
 | |
| 
 | |
| class TStampa_etich_giac_recordset : public TISAM_recordset
 | |
| {
 | |
| 	TPointer_array _index;
 | |
| 	TRecnotype _current_row;
 | |
| 
 | |
| public:
 | |
|   virtual bool move_to(TRecnotype pos);
 | |
|   virtual TRecnotype items() const;
 | |
|   virtual TRecnotype current_row() const;
 | |
| 	void set_filter(const TStampa_etich_art_mask& msk);
 | |
| 	TPointer_array & index() { return _index; }
 | |
|   virtual void requery();
 | |
| 
 | |
| 
 | |
|   TStampa_etich_giac_recordset(const TString& sql) : TISAM_recordset(sql), _current_row(0L) { }
 | |
| };
 | |
| 
 | |
| //metodo per caricare i valori nel recordset dalla maschera...fighissimo!!
 | |
| void TStampa_etich_giac_recordset::set_filter(const TStampa_etich_art_mask& msk)
 | |
| {
 | |
| 		TVariant var;
 | |
| 
 | |
| 		const int items=msk.fields();
 | |
|     for (short i=0; i<items; i++)
 | |
|     {
 | |
|       const TMask_field &f=msk.fld(i);
 | |
|       const TFieldref* fld=f.field();
 | |
| 
 | |
|       if (fld != NULL)
 | |
|       {
 | |
|         TString80 fldname=fld->name();
 | |
|         if (!fldname.starts_with("#"))
 | |
|           fldname.insert("#");
 | |
|         var=f.get();
 | |
| 				if (fldname == "#CODDEP")
 | |
| 				{
 | |
| 					TVariant codmag(get_var("#CODMAG"));
 | |
| 
 | |
| 					codmag += var;
 | |
| 					set_var("#CODMAG", codmag);
 | |
| 				}
 | |
| 				else
 | |
| 					set_var(fldname,var);
 | |
|       }
 | |
|     }
 | |
|      
 | |
|     TCursor * c = cursor();
 | |
| 		requery();
 | |
| }
 | |
| 
 | |
| TRecnotype TStampa_etich_giac_recordset::items() const
 | |
| {
 | |
| 	return _index.items();
 | |
| }
 | |
| 
 | |
| TRecnotype TStampa_etich_giac_recordset::current_row() const
 | |
| {
 | |
| 	return _current_row;
 | |
| }
 | |
| 
 | |
| bool TStampa_etich_giac_recordset::move_to(TRecnotype pos)
 | |
| {
 | |
| 	_current_row = pos;
 | |
| 	const bool valid = _current_row < items();
 | |
| 
 | |
| 	if (valid)
 | |
| 		TISAM_recordset::move_to(_index.get_long(pos) - 1);
 | |
| 	else
 | |
| 		_current_row = 0L;
 | |
| 	return valid;
 | |
| }
 | |
| 
 | |
| bool build_index_giac(const TRelation& rel, void* pJolly)
 | |
| {
 | |
| 	TStampa_etich_mov_recordset * r = (TStampa_etich_mov_recordset *) pJolly;
 | |
| 	int ncopie = atoi(rel.curr().get("GIAC"));
 | |
| 	const TRecnotype pos = r->cursor()->pos();
 | |
| 
 | |
| 	if (ncopie > 0)
 | |
| 		for ( int i = 0; i < ncopie; i++)
 | |
| 			r->index().insert_long(pos + 1);
 | |
| 	return true;
 | |
| }
 | |
| 
 | |
| void TStampa_etich_giac_recordset::requery()
 | |
| {
 | |
| 	if (valid_cursor())
 | |
| 	{
 | |
| 		TCursor * c = cursor();
 | |
| 
 | |
| 		_index.destroy();
 | |
| 		c->scan(build_index_giac, this);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| ////////////////////////////////////////////////////////
 | |
| //	REPORT
 | |
| ////////////////////////////////////////////////////////
 | |
| class TStampa_etich_art_rep : public TReport
 | |
| {
 | |
| protected:
 | |
| 	virtual bool get_usr_val(const TString& name, TVariant& var) const;
 | |
|   virtual bool set_recordset(const TString& query);
 | |
| 
 | |
| public:
 | |
| 	void set_filter(const TStampa_etich_art_mask& msk);
 | |
| };
 | |
| 
 | |
| //metodo per il calcolo dei campi da calcolare (ma va'!) nel report
 | |
| bool TStampa_etich_art_rep::get_usr_val(const TString& name, TVariant& var) const
 | |
| {
 | |
| 	return TReport::get_usr_val(name, var);
 | |
| }
 | |
| 
 | |
| bool TStampa_etich_art_rep::set_recordset(const TString& query)
 | |
| {
 | |
|   return TReport::set_recordset(new TStampa_etich_art_recordset(query));
 | |
| }
 | |
| 
 | |
| void TStampa_etich_art_rep::set_filter(const TStampa_etich_art_mask& msk)
 | |
| {
 | |
| 	((TStampa_etich_art_recordset *)recordset())->set_filter(msk);
 | |
| }
 | |
| 
 | |
| ////////////////////////////////////////////////////////
 | |
| 
 | |
| class TStampa_etich_mov_rep : public TReport
 | |
| {
 | |
| protected:
 | |
| 	virtual bool get_usr_val(const TString& name, TVariant& var) const;
 | |
|   virtual bool set_recordset(const TString& query);
 | |
| 
 | |
| public:
 | |
| 	void set_filter(const TStampa_etich_art_mask& msk);
 | |
| };
 | |
| 
 | |
| //metodo per il calcolo dei campi da calcolare (ma va'!) nel report
 | |
| bool TStampa_etich_mov_rep::get_usr_val(const TString& name, TVariant& var) const
 | |
| {
 | |
| 	return TReport::get_usr_val(name, var);
 | |
| }
 | |
| 
 | |
| bool TStampa_etich_mov_rep::set_recordset(const TString& query)
 | |
| {
 | |
|   return TReport::set_recordset(new TStampa_etich_mov_recordset(query));
 | |
| }
 | |
| 
 | |
| void TStampa_etich_mov_rep::set_filter(const TStampa_etich_art_mask& msk)
 | |
| {
 | |
| 	((TStampa_etich_mov_recordset *)recordset())->set_filter(msk);
 | |
| }
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////
 | |
| 
 | |
| class TStampa_etich_giac_rep : public TReport
 | |
| {
 | |
| protected:
 | |
| 	virtual bool get_usr_val(const TString& name, TVariant& var) const;
 | |
|   virtual bool set_recordset(const TString& query);
 | |
| 
 | |
| public:
 | |
| 	void set_filter(const TStampa_etich_art_mask& msk);
 | |
| };
 | |
| 
 | |
| //metodo per il calcolo dei campi da calcolare (ma va'!) nel report
 | |
| bool TStampa_etich_giac_rep::get_usr_val(const TString& name, TVariant& var) const
 | |
| {
 | |
| 	return TReport::get_usr_val(name, var);
 | |
| }
 | |
| 
 | |
| bool TStampa_etich_giac_rep::set_recordset(const TString& query)
 | |
| {
 | |
|   return TReport::set_recordset(new TStampa_etich_giac_recordset(query));
 | |
| }
 | |
| 
 | |
| void TStampa_etich_giac_rep::set_filter(const TStampa_etich_art_mask& msk)
 | |
| {
 | |
| 	((TStampa_etich_giac_recordset *)recordset())->set_filter(msk);
 | |
| }
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////
 | |
| //	APPLICAZIONE
 | |
| ////////////////////////////////////////////////////////
 | |
| class TStampa_etich_art : public TSkeleton_application
 | |
| {
 | |
| protected:
 | |
|   virtual void main_loop();
 | |
| };
 | |
| 
 | |
| 
 | |
| void TStampa_etich_art::main_loop()
 | |
| {
 | |
| 	TStampa_etich_art_mask mask;
 | |
| 	TToken_string vals("",',');
 | |
| 
 | |
| 	vals = main_app().argv(2);
 | |
| 	if (vals.find(',') > 0)
 | |
| 	{
 | |
| 
 | |
| 		FOR_EACH_TOKEN(vals, s)
 | |
| 		{
 | |
| 			TToken_string eq(s, '=');
 | |
| 			const short id = atoi(eq.get());
 | |
| 
 | |
| 			mask.set(id, eq.get());
 | |
| 		}
 | |
| 	}
 | |
|   while (mask.run() == K_ENTER)
 | |
|   {
 | |
| 		//report e book dei report
 | |
| 		TReport_book book;
 | |
| 		if (mask.get(F_TIPOST) == "A")
 | |
| 		{
 | |
| 			TStampa_etich_art_rep rep;
 | |
| 
 | |
| 			rep.load("mg3600a");
 | |
| 			rep.set_filter(mask);
 | |
| 			book.add(rep);
 | |
| 			book.print_or_preview();	//stampa il book dei report
 | |
| 		}
 | |
| 		else
 | |
| 			if (mask.get(F_TIPOST) == "M")
 | |
| 			{
 | |
| 				TStampa_etich_mov_rep rep;
 | |
| 
 | |
| 				rep.load("mg3600b");
 | |
| 				rep.set_filter(mask);
 | |
| 				book.add(rep);
 | |
| 				book.print_or_preview();	//stampa il book dei report
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				TStampa_etich_giac_rep rep;
 | |
| 
 | |
| 				rep.load("mg3600c");
 | |
| 				rep.set_filter(mask);
 | |
| 				book.add(rep);
 | |
| 				book.print_or_preview();	//stampa il book dei report
 | |
| 			}
 | |
| 		
 | |
| 	}
 | |
| }
 | |
| 
 | |
| int mg3600(int argc, char* argv[])
 | |
| {
 | |
|   TStampa_etich_art a;
 | |
|   a.run(argc, argv, TR("Stampa etichette articoli"));
 | |
|   return 0;
 | |
| }
 |