Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 766 git-svn-id: svn://10.65.10.50/trunk@14628 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			149 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <progind.h>
 | 
						|
#include <relation.h>
 | 
						|
 | 
						|
#include "ve5300.h"
 | 
						|
#include "velib.h"
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TPackdoc mask
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TPackdoc_mask : public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
 | 
						|
public:
 | 
						|
  TPackdoc_mask() : TAutomask("ve5500a") { open(); }
 | 
						|
};
 | 
						|
 | 
						|
bool TPackdoc_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  switch (o.dlg())
 | 
						|
  {
 | 
						|
  case F_FROM_NUM:
 | 
						|
  case F_TO_NUM:
 | 
						|
  case F_FROM_FRNDOC:
 | 
						|
  case F_FROM_TONDOC:  
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Main program
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TPackdoc_app : public TSkeleton_application
 | 
						|
{ 
 | 
						|
  
 | 
						|
protected:
 | 
						|
 | 
						|
public:
 | 
						|
  virtual void main_loop();
 | 
						|
};
 | 
						|
 | 
						|
void TPackdoc_app::main_loop()
 | 
						|
{
 | 
						|
  open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_MOV,
 | 
						|
             LF_ANAMAG, LF_SCONTI, LF_UMART, LF_CLIFO, LF_CFVEN, LF_INDSP, 
 | 
						|
             LF_OCCAS, LF_MOVMAG, LF_RMOVMAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, 0);
 | 
						|
 | 
						|
  TPackdoc_mask m; 
 | 
						|
  while (m.run() == K_ENTER)
 | 
						|
  {
 | 
						|
    TRectype rec_from(LF_DOC);
 | 
						|
    rec_from.put(DOC_ANNO, m.get(F_FROM_ANNO));
 | 
						|
    rec_from.put(DOC_CODNUM, m.get(F_FROM_NUM));
 | 
						|
    rec_from.put(DOC_PROVV, m.get(F_FROM_PROVV));
 | 
						|
    rec_from.put(DOC_NDOC, m.get(F_FROM_FRNDOC));    
 | 
						|
 | 
						|
    TRectype rec_to(rec_from);
 | 
						|
    rec_to.put(DOC_NDOC, m.get(F_FROM_TONDOC));
 | 
						|
 | 
						|
    TRelation rel(LF_DOC);
 | 
						|
    TCursor cur(&rel, "", 1, &rec_from, &rec_to);
 | 
						|
        
 | 
						|
		long newdocnum = m.get_long(F_FROM_FRNDOC);
 | 
						|
    const long tot = cur.items();
 | 
						|
	  
 | 
						|
		cur.freeze();
 | 
						|
		if (newdocnum <= 0L)
 | 
						|
			newdocnum = 1L;
 | 
						|
		if (tot > 0L)
 | 
						|
    {
 | 
						|
      TProgind pi(tot, "Compattamento in corso...", FALSE, TRUE);
 | 
						|
			for (cur = 0; cur.pos() < tot; ++cur)
 | 
						|
      {
 | 
						|
        pi.addstatus(1);
 | 
						|
 | 
						|
        TDocumento doc(cur.curr());
 | 
						|
				const char provv = doc.get_char(DOC_PROVV);
 | 
						|
        const int anno = doc.get_int(DOC_ANNO);
 | 
						|
        const TString4 codnum = doc.get(DOC_CODNUM); 
 | 
						|
				const long ndoc = doc.get_long(DOC_NDOC);
 | 
						|
 | 
						|
				if (ndoc > newdocnum)
 | 
						|
				{
 | 
						|
					TLocalisamfile rdocfile(LF_RIGHEDOC);
 | 
						|
    
 | 
						|
					rdocfile.setkey(4);
 | 
						|
					rdocfile.put(RDOC_DAPROVV, provv);
 | 
						|
					rdocfile.put(RDOC_DAANNO, anno);
 | 
						|
					rdocfile.put(RDOC_DACODNUM, codnum);
 | 
						|
					rdocfile.put(RDOC_DANDOC, ndoc);
 | 
						|
					TRectype r(rdocfile.curr());
 | 
						|
					const int err = rdocfile.read(_isgteq);
 | 
						|
 | 
						|
					if (rdocfile.curr() != r && (doc.get_long(DOC_NUMREG) == 0) && (doc.get_long(DOC_NUMANT) == 0))
 | 
						|
					{				
 | 
						|
						TDocumento newdoc(doc);
 | 
						|
						newdoc.renum_ndoc(newdocnum);
 | 
						|
						newdoc.zero(DOC_MOVMAG);
 | 
						|
						newdoc.zero(DOC_NUMREG);
 | 
						|
						newdoc.zero(DOC_NUMANT);
 | 
						|
						newdoc.zero(DOC_NUMREGCA);
 | 
						|
 | 
						|
            // Devo azzerare anche il numero di movmag sulle righe per rigenerarlo corretto
 | 
						|
            for (int r = newdoc.physical_rows(); r > 0; r--)
 | 
						|
              newdoc[r].zero(RDOC_MOVMAG);
 | 
						|
 | 
						|
						int err = newdoc.write();
 | 
						|
						if (err == NOERR)
 | 
						|
						{
 | 
						|
							err = doc.remove();
 | 
						|
							if (err != NOERR)
 | 
						|
							{
 | 
						|
								error_box("Errore n.ro %d,nella cancellazione del\n documento %ld", err, ndoc);
 | 
						|
								break;
 | 
						|
							}
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							error_box("Errore n.ro %d,nella creazione del\n documento %ld da l documento %ld", err, newdocnum, ndoc);
 | 
						|
							break;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						message_box("Il Documento %ld e' riferito in un altro documento.\nCompattamento interrotto", ndoc);
 | 
						|
						break;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				newdocnum++;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
int ve5500(int argc, char* argv[])
 | 
						|
{
 | 
						|
  TPackdoc_app a;
 | 
						|
  a.run(argc, argv, "Compattamento documenti");
 | 
						|
  return 0;
 | 
						|
}
 |