campo-sirio/ve/ve0100b.cpp

72 lines
2.4 KiB
C++
Raw Normal View History

#include <rectypes.h>
#include <relation.h>
#include <recarray.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;
}