Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/branches/R_10_00@22121 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			192 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | ||
| #include <automask.h>
 | ||
| #include <defmask.h>
 | ||
| #include <progind.h>
 | ||
| #include <relation.h>
 | ||
| #include <textset.h>
 | ||
| 
 | ||
| #include <rdoc.h>
 | ||
| 
 | ||
| #include "ps1002.h"
 | ||
| #include "ps1002300a.h"
 | ||
| 
 | ||
| /////////////////////////////////////
 | ||
| //  Maschera
 | ||
| ////////////////////////////////////
 | ||
| class TRileva_produzione_msk : public TAutomask
 | ||
| {
 | ||
| protected:
 | ||
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | ||
| 
 | ||
| public:
 | ||
|   bool elabora();
 | ||
|   TRileva_produzione_msk();
 | ||
| };
 | ||
| 
 | ||
| 
 | ||
| bool TRileva_produzione_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | ||
| { 
 | ||
| 	switch (o.dlg())
 | ||
| 	{
 | ||
|   case DLG_ELABORA:
 | ||
|     if (e == fe_button)
 | ||
|     {
 | ||
|       elabora();
 | ||
|       return true;
 | ||
|     }
 | ||
|     break;
 | ||
|   case F_DADATA:
 | ||
|   case F_ADATA:
 | ||
|     if (e == fe_close)
 | ||
|     {
 | ||
|       const TDate dadata = o.get();
 | ||
|     }
 | ||
|     break;
 | ||
|   default: break;
 | ||
|   }
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| bool TRileva_produzione_msk::elabora()
 | ||
| {
 | ||
|   TString query;
 | ||
|   query << "USE RDOC KEY 4";
 | ||
|   query << "\nSELECT (DOC.CODNUM=#CODNUM)&&(BETWEEN(DOC.DATADOC,#DADATA,#ADATA))&&((CODCMS!=\"\")||(FASCMS!=\"\"))";
 | ||
|   query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC";
 | ||
|   query << "\nFROM DAPROVV=D DAANNO=#ANNO DACODNUM=BEM";
 | ||
|   query << "\nTO DAPROVV=D DAANNO=#ANNO DACODNUM=BEM";
 | ||
| 
 | ||
|   TISAM_recordset recset(query);
 | ||
|   recset.set_var("#CODNUM", get(F_CODNUM));
 | ||
|   recset.set_var("#DADATA", get_date(F_DADATA));
 | ||
|   recset.set_var("#ADATA", get_date(F_ADATA));
 | ||
|   const long anno = get_date(F_DADATA).year();
 | ||
|   recset.set_var("#ANNO", anno);
 | ||
| 
 | ||
|   const long items = recset.items();
 | ||
| 
 | ||
|   const TDate dataprod = get_date(F_DATAPROD);
 | ||
|   TProgind pi(items, TR("Scansione righe documento in corso..."), true, true);
 | ||
|   TRectype& bolla_rec = recset.cursor()->curr();  //record corrente del recordset
 | ||
|   TLocalisamfile rdoc(LF_RIGHEDOC);   //file delle righe documento con le BEM da aggiornare
 | ||
| 
 | ||
|   for (bool ok = recset.move_first(); ok; ok = recset.move_next())
 | ||
|   {
 | ||
|     if (!pi.addstatus(1))
 | ||
|       break;
 | ||
| 
 | ||
|     //prende la quantita' dalla riga della bolla
 | ||
|     const real bolla_qta = bolla_rec.get_real(RDOC_QTA);
 | ||
|     if (bolla_qta > ZERO)
 | ||
|     {
 | ||
| #ifdef DBG
 | ||
|       const TString& bolla_codnum = bolla_rec.get(RDOC_CODNUM);
 | ||
|       const int bolla_anno = bolla_rec.get_int(RDOC_ANNO);
 | ||
|       const long bolla_ndoc = bolla_rec.get_long(RDOC_NDOC);
 | ||
|       const int bolla_nriga = bolla_rec.get_int(RDOC_NRIGA);
 | ||
| #endif
 | ||
|       //campi che servono per raccatare la riga della BEM
 | ||
|       const TString& bem_codnum = bolla_rec.get(RDOC_DACODNUM);
 | ||
|       const long bem_anno = bolla_rec.get_int(RDOC_DAANNO);
 | ||
|       const long bem_ndoc = bolla_rec.get_long(RDOC_DANDOC);
 | ||
|       const long bem_idriga = bolla_rec.get_int(RDOC_DAIDRIGA);
 | ||
|       //servono anche lavorazione e colore (almeno uno dei due c'e' in base alla query)
 | ||
|       const TString& bolla_lav = bolla_rec.get(RDOC_CODCMS);
 | ||
|       const TString& bolla_col = bolla_rec.get(RDOC_FASCMS);
 | ||
| 
 | ||
|       //adesso prende la riga documento della BEM e aggiorna i valori se deve
 | ||
|       //e' costretto ad usare una query e non una read() perche' IDRIGA non appartiene alle chiavi di RDOC
 | ||
|       TString bem_query;
 | ||
|       bem_query << "USE RDOC";
 | ||
|       bem_query << "\nSELECT (IDRIGA=#IDRIGA)";
 | ||
|       bem_query << "\nFROM CODNUM=BEM ANNO=#ANNO PROVV=D NDOC=#NDOC";
 | ||
|       bem_query << "\nTO CODNUM=BEM ANNO=#ANNO PROVV=D NDOC=#NDOC";
 | ||
| 
 | ||
|       TISAM_recordset bem_recset(bem_query);
 | ||
| 
 | ||
|       bem_recset.set_var("#IDRIGA", bem_idriga);
 | ||
|       bem_recset.set_var("#ANNO", bem_anno);
 | ||
|       bem_recset.set_var("#NDOC", bem_ndoc);
 | ||
| 
 | ||
|       const long bem_items = bem_recset.items();
 | ||
|       if (bem_items > 1)
 | ||
|         return error_box("C'e' piu' di una riga della BEM %ld con IDRIGA = %ld", bem_ndoc, bem_idriga);
 | ||
| 
 | ||
|       /*TRectype& bem_rec = rdoc.curr();
 | ||
|       const TString& bem_codnum = bolla_rec.get(RDOC_DACODNUM); //se non fosse BEM sarebbe un errore!!!
 | ||
|       bem_rec.put(RDOC_CODNUM, bem_codnum);
 | ||
|       const int bem_anno = bolla_rec.get_int(RDOC_DAANNO);
 | ||
|       bem_rec.put(RDOC_ANNO, bem_anno);
 | ||
|       bem_rec.put(RDOC_PROVV, 'D');
 | ||
|       const long bem_ndoc = bolla_rec.get_long(RDOC_DANDOC);
 | ||
|       bem_rec.put(RDOC_NDOC, bem_ndoc);
 | ||
|       //occhio alla riga, raga! DAIDRIGA sulla rigabolla deve essere uguale a IDRIGA sulla rigabem, NON a NRIGA che <20> aleatorio!
 | ||
|       const int bem_idriga = bolla_rec.get_int(RDOC_DAIDRIGA);
 | ||
|       bem_rec.put(RDOC_IDRIGA, bem_idriga);*/
 | ||
| 
 | ||
|       //if (bem_rec.read(rdoc) == NOERR)
 | ||
|       //{
 | ||
|       TRectype& bem_rec = bem_recset.cursor()->curr();
 | ||
|       const real bem_old_lav_qta = bem_rec.get_real(RDOC_QTAGG2);
 | ||
|       const real bem_old_col_qta = bem_rec.get_real(RDOC_QTAGG1);
 | ||
| 
 | ||
|       //solo le BEM a quantita' lavorazione e/o colore nulle possono essere aggiornate (senno' ci verrebbe del casino)
 | ||
|       if (bolla_lav.full() && bem_old_lav_qta == ZERO) //lavorazione
 | ||
|       {
 | ||
|         bem_rec.put(RDOC_CODCMS, bolla_lav);
 | ||
|         bem_rec.put(RDOC_QTAGG2, bolla_qta);
 | ||
|         bem_rec.put(RDOC_CODAGG2, dataprod);
 | ||
|       }
 | ||
|       if (bolla_col.full() && bem_old_col_qta == ZERO) //colore
 | ||
|       {
 | ||
|         bem_rec.put(RDOC_FASCMS, bolla_col);
 | ||
|         bem_rec.put(RDOC_QTAGG1, bolla_qta);
 | ||
|         bem_rec.put(RDOC_DATACONS, dataprod);
 | ||
|       }
 | ||
|       const int err = bem_rec.rewrite(rdoc);
 | ||
|       if (err != NOERR)
 | ||
|         return false;
 | ||
| 
 | ||
|       //} //if(bem_rec.read(rdoc)...
 | ||
| 
 | ||
|     } // if (bolla_qta > ZERO)...
 | ||
|   } //for (bool ok = recset.move_first()...
 | ||
| 
 | ||
|   return true;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| TRileva_produzione_msk::TRileva_produzione_msk() 
 | ||
|                        : TAutomask ("ps1002300a")
 | ||
| {}
 | ||
| 
 | ||
| 
 | ||
| /////////////////////////////////////
 | ||
| //  Applicazione
 | ||
| ////////////////////////////////////
 | ||
| class TRileva_produzione : public TSkeleton_application
 | ||
| {
 | ||
| protected:
 | ||
| 	virtual bool check_autorization() const { return false; }
 | ||
|   virtual const char* extra_modules() const { return "ve"; }
 | ||
|   virtual void main_loop();
 | ||
|   virtual bool create();
 | ||
| };
 | ||
| 
 | ||
| void TRileva_produzione::main_loop()
 | ||
| {
 | ||
|   TRileva_produzione_msk mask;
 | ||
|   mask.run();
 | ||
| }
 | ||
| 
 | ||
| bool TRileva_produzione::create()
 | ||
| {  
 | ||
|   return TSkeleton_application::create();
 | ||
| }
 | ||
| 
 | ||
| int ps1002300 (int argc, char* argv[])
 | ||
| {
 | ||
|   TRileva_produzione main_app;
 | ||
|   main_app.run(argc, argv, TR("Rileva produzione da bolle"));
 | ||
|   return true;
 | ||
| } |