71 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
 | 
						|
#include <rectypes.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <tabutil.h>
 | 
						|
 | 
						|
int numerazione_definitiva(TLocalisamfile& doc)
 | 
						|
{
 | 
						|
  if (doc.curr().get("PROVV") == "D")
 | 
						|
    return NOERR;
 | 
						|
 | 
						|
  int err = NOERR;            // istanzia la variabile per il codice d'errore
 | 
						|
  TRectype doc_rec(doc.curr());
 | 
						|
  TRectype rec(doc.curr());   // record campione
 | 
						|
  
 | 
						|
  rec.zero();
 | 
						|
  rec.put("CODNUM", doc.get("CODNUM"));
 | 
						|
  rec.put("ANNO", doc.get("ANNO"));
 | 
						|
  rec.put("PROVV", "D");
 | 
						|
 | 
						|
  TRectype cmp_rec(rec);   // record campione
 | 
						|
  
 | 
						|
  rec.put( "NDOC", 9999999L );
 | 
						|
      
 | 
						|
  bool unlock = FALSE;
 | 
						|
  
 | 
						|
  if (doc.read(rec, _isgreat) == NOERR) 
 | 
						|
  { 
 | 
						|
     doc.prev(_lock);  // blocca il record corrente del file documenti
 | 
						|
     unlock = TRUE;
 | 
						|
  }
 | 
						|
  
 | 
						|
  long numdoc = ((doc.curr() == cmp_rec) ? doc.get_long( "NDOC" ) : 0) + 1;
 | 
						|
  cmp_rec = doc.curr();
 | 
						|
               
 | 
						|
  TRectype newrec_doc(doc_rec); // istanzia un nuovo record su quello corrente
 | 
						|
  TRectype rec_rdoc(LF_RIGHEDOC);   // istanzia il record delle righe per effettuare la lettura
 | 
						|
 | 
						|
  newrec_doc.put("NDOC", numdoc); // scrive il nuovo numero di documento nel nuovo record
 | 
						|
  newrec_doc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione
 | 
						|
  while ((err = doc.write(newrec_doc)) == _isreinsert)
 | 
						|
  { 
 | 
						|
    numdoc++;
 | 
						|
    newrec_doc.put("NDOC", numdoc);
 | 
						|
  }                                
 | 
						|
  if (err != NOERR)
 | 
						|
    return err;
 | 
						|
  if (unlock)
 | 
						|
    doc.read(cmp_rec, _isequal, _unlock);
 | 
						|
 | 
						|
  rec_rdoc.put("CODNUM",doc_rec.get("CODNUM")); // compone la chiave per le righe
 | 
						|
  rec_rdoc.put("ANNO",doc_rec.get("ANNO"));
 | 
						|
  rec_rdoc.put("NDOC", doc_rec.get("NDOC"));
 | 
						|
  rec_rdoc.put("PROVV","P");
 | 
						|
  TRecord_array arr_rdoc(LF_RIGHEDOC, "NRIGA"); // istanzia il record array per le righe
 | 
						|
  arr_rdoc.read(rec_rdoc);
 | 
						|
 | 
						|
  TRecord_array newarr_rdoc(arr_rdoc); // crea una copia del record array per tenere le nuove righe
 | 
						|
      
 | 
						|
  for (int i=1; i<=newarr_rdoc.last_row(); i++)
 | 
						|
  { // ciclo sui record delle righe
 | 
						|
    TRectype &newrec_rdoc= newarr_rdoc.row(i, FALSE); // prende il record della riga corrente
 | 
						|
        
 | 
						|
    newrec_rdoc.put("NDOC", numdoc); // scrive il nuovo numero di documento
 | 
						|
    newrec_rdoc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione
 | 
						|
  }
 | 
						|
  if ((err = newarr_rdoc.write()) == NOERR &&  // scrive le righe con la nuova numerazione
 | 
						|
      (err = arr_rdoc.remove()) == NOERR)     // rimuove le vecchie righe
 | 
						|
    doc.remove(doc_rec);                      // cancella il vecchio record della testata
 | 
						|
  return err;
 | 
						|
}
 |