#include #include #include #include #include "velib.h" #include "ve0100b.h" #include int numerazione_definitiva(TDocumento& doc) { int err = NOERR; if (doc.get_char(DOC_PROVV) == 'D') // Se e' una numerazione definitiva { if (doc.stampabile()) // Controlla se non e' gia' nello stato si stampato in definitiva { doc.stato(doc.tipo().stato_finale_stampa()); // Se e' gia' in definitiva aggiorna solo lo stato err = doc.rewrite(); // Invia la transazione di cambio stato se necessario if (::can_dispatch_transaction(doc)) { TFilename tmpname; tmpname.temp(); { // Parentesi strategiche TConfig ini(tmpname, "Transaction"); ini.set("Action", "MODIFY"); ini.set("Firm", prefix().get_codditta()); ini.set("Mode", "A"); TString8 paradoc; paradoc.format("%d", LF_DOC); ini.set_paragraph(paradoc); ini.set(DOC_PROVV, doc.get(DOC_PROVV)); ini.set(DOC_ANNO, doc.get(DOC_ANNO)); ini.set(DOC_CODNUM, doc.get(DOC_CODNUM)); ini.set(DOC_NDOC, doc.get(DOC_NDOC)); ini.set(DOC_STATO, doc.stato()); } ::dispatch_transaction(doc, tmpname); ::remove(tmpname); } } } else // Se e' una numerazione provvisoria { // Scrive il nuovo documento con lo stato, numero e flag di definitiva TDocumento bak_doc; bak_doc = doc; // Setta il flag di nuovo documento bak_doc.put(DOC_STATO,doc.tipo().stato_finale_stampa()); bak_doc.put(DOC_PROVV,"D"); bak_doc.put(DOC_NDOC,-1L); const int pr = bak_doc.physical_rows(); for (int i=1;i<=pr;i++) bak_doc[i].put(DOC_PROVV,"D"); err = bak_doc.write(); // Esegue automagicamente rinumerazione di testata e righe nel caso di reinsert if (err == NOERR) // Cancella il vecchio documento doc.remove(); } return err; }