RIscritta funzione
git-svn-id: svn://10.65.10.50/trunk@3373 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d80b7907cb
commit
64e58fb6b9
@ -5,57 +5,66 @@
|
|||||||
|
|
||||||
int numerazione_definitiva(TLocalisamfile& doc)
|
int numerazione_definitiva(TLocalisamfile& doc)
|
||||||
{
|
{
|
||||||
|
if (doc.curr().get("PROVV") == "D")
|
||||||
|
return NOERR;
|
||||||
|
|
||||||
int err = NOERR; // istanzia la variabile per il codice d'errore
|
int err = NOERR; // istanzia la variabile per il codice d'errore
|
||||||
TRectype &rec_doc= doc.curr(); // prende il record corrente dal file delle testate
|
TRectype doc_rec(doc.curr());
|
||||||
TTable tabnum("NUM"); // istanzia la tabella delle numerazioni
|
TRectype rec(doc.curr()); // record campione
|
||||||
|
|
||||||
tabnum.put("CODTAB", rec_doc.get("CODNUM")); // posiziona la tabella
|
rec.zero();
|
||||||
if ((err= tabnum.read(_isequal, _lock))==NOERR)
|
rec.put("CODNUM", doc.get("CODNUM"));
|
||||||
{ // legge la tabella bloccandone il record
|
rec.put("ANNO", doc.get("ANNO"));
|
||||||
long newndoc= tabnum.get_long("I1"); // legge il nuovo numero di documento dalla tabella
|
rec.put("PROVV", "D");
|
||||||
|
|
||||||
tabnum.put("I1", newndoc+1); // aggiorna il nuovo numero di documento nella tabella
|
TRectype cmp_rec(rec); // record campione
|
||||||
doc.read(rec_doc, _isequal, _lock); // blocca il record corrente del file documenti
|
|
||||||
int anno = doc.get_int("ANNO"); // reperisce i primi 2 campi della chiave
|
|
||||||
TString codnum(doc.get("CODNUM"));
|
|
||||||
long ndoc = doc.get_long("NDOC");
|
|
||||||
const bool is_provv = doc.get("PROVV") == "P";
|
|
||||||
|
|
||||||
if (!is_provv)
|
rec.put( "NDOC", 9999999L );
|
||||||
|
|
||||||
|
bool unlock = FALSE;
|
||||||
|
|
||||||
|
if (doc.read(rec, _isgreat) == NOERR)
|
||||||
{
|
{
|
||||||
doc.reread(_unlock);
|
doc.prev(_lock); // blocca il record corrente del file documenti
|
||||||
return NOERR; // Gia' rinumerata
|
unlock = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRectype newrec_doc(rec_doc); // istanzia un nuovo record su quello corrente
|
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
|
TRectype rec_rdoc(LF_RIGHEDOC); // istanzia il record delle righe per effettuare la lettura
|
||||||
|
|
||||||
newrec_doc.put("NDOC", newndoc); // scrive il nuovo numero di documento nel nuovo record
|
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
|
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, _unlock);
|
||||||
|
|
||||||
rec_rdoc.put("CODNUM",codnum); // compone la chiave per le righe
|
rec_rdoc.put("CODNUM",doc_rec.get("CODNUM")); // compone la chiave per le righe
|
||||||
rec_rdoc.put("ANNO",anno);
|
rec_rdoc.put("ANNO",doc_rec.get("ANNO"));
|
||||||
rec_rdoc.put("NDOC", ndoc);
|
rec_rdoc.put("NDOC", doc_rec.get("NDOC"));
|
||||||
rec_rdoc.put("PROVV","P");
|
rec_rdoc.put("PROVV","P");
|
||||||
TRecord_array arr_rdoc(LF_RIGHEDOC, "NRIGA"); // istanzia il record array per le righe
|
TRecord_array arr_rdoc(LF_RIGHEDOC, "NRIGA"); // istanzia il record array per le righe
|
||||||
if ((err= arr_rdoc.read(rec_rdoc))==NOERR)
|
arr_rdoc.read(rec_rdoc);
|
||||||
{ // legge le righe del documento basandosi sul record con la vecchia chiave
|
|
||||||
TRecord_array newarr_rdoc(arr_rdoc); // crea una copia del record array per tenere le nuove righe
|
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++)
|
for (int i=1; i<=newarr_rdoc.last_row(); i++)
|
||||||
{ // ciclo sui record delle righe
|
{ // ciclo sui record delle righe
|
||||||
TRectype &newrec_rdoc= newarr_rdoc.row(i, FALSE); // prende il record della riga corrente
|
TRectype &newrec_rdoc= newarr_rdoc.row(i, FALSE); // prende il record della riga corrente
|
||||||
|
|
||||||
newrec_rdoc.put("NDOC", newndoc); // scrive il nuovo numero di documento
|
newrec_rdoc.put("NDOC", numdoc); // scrive il nuovo numero di documento
|
||||||
newrec_rdoc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione
|
newrec_rdoc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione
|
||||||
}
|
}
|
||||||
newarr_rdoc.write(); // scrive le righe con la nuova numerazione
|
if ((err = newarr_rdoc.write()) == NOERR && // scrive le righe con la nuova numerazione
|
||||||
doc.write(newrec_doc); // scrive il nuovo record della testata
|
(err = arr_rdoc.remove()) == NOERR) // rimuove le vecchie righe
|
||||||
arr_rdoc.remove(); // rimuove le vecchie righe
|
doc.remove(doc_rec); // cancella il vecchio record della testata
|
||||||
doc.remove(rec_doc); // cancella (e sblocca) il vecchio record della testata
|
|
||||||
tabnum.rewrite(); // riscrive il record corrente della tabella...
|
|
||||||
tabnum.read(_isequal, _unlock); // ...e la sblocca
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user