#include #include #include 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; }