diff --git a/ba/bacnv.cpp b/ba/bacnv.cpp index a016db6a4..ce9e4e117 100755 --- a/ba/bacnv.cpp +++ b/ba/bacnv.cpp @@ -20,7 +20,7 @@ #include -#define usage "Errore - uso : bacnv [1|2|3|4|5|6|7] ditta" +#define usage "Errore - uso : bacnv [1|2|3|4|5|6|7|8] ditta" /////////////////////////////////////////////////////////////////////////////////////////////////////// // Applicazione di conversione archivi XBase, valida per tutti e 4 i tipi di DLL @@ -163,6 +163,8 @@ public: void convert_codconc(void); void convert_profili(void); void convert_caus_attiv(void); + void rebuild_indexes(void); + void rebuild_dir_indexes(void); TConversione_archivi() : _oldditta(0), _codditta(0), _error(0) {} }; @@ -257,6 +259,12 @@ bool TConversione_archivi::menu(MENU_TAG) convert_caus_attiv(); break; } + case 8: + { + if (_codditta == 0) + rebuild_indexes(); + break; + } } default: break; @@ -768,6 +776,73 @@ void TConversione_archivi::convert_codconc() #endif } +void TConversione_archivi::rebuild_indexes() +{ + do_events(); + begin_wait(); + prefix().set("com"); + rebuild_dir_indexes(); + TSystemisamfile ditte(LF_NDITTE); + ditte.open(); + + for (ditte.first(); !ditte.eof(); ditte.next()) + { + const long codditta = ditte.get_long("CODDITTA"); + const TRecnotype rec = ditte.recno(); + + if (prefix().exist(codditta)) + { + ditte.close(); + set_firm(codditta); + rebuild_dir_indexes(); + ditte.open(); + } + ditte.readat(rec); + } + ditte.close(); + end_wait(); +} + +void TConversione_archivi::rebuild_dir_indexes() +{ + const TString pref(prefix().name()); + const bool is_com = prefix().is_com(); + TDir d; + + d.get(LF_DIR); + const int items = (int)d.eod(); + TString80 s("Ricostruzione indici "); + + if (is_com) s << "comuni"; + else s << " della ditta " << atol (pref); + + TProgind p(items ? items : 1, s, TRUE, TRUE, 70); + + p.setstatus(1); + + for (int i = 2; i <= items; i++) + { + p.addstatus(1); + if (d.len() > 0) + { + d.get(i, _nolock, _nordir, _sysdirop); + bool to_create = (is_com ? d.is_com() : d.is_firm()); + + if (to_create) + { + d.get(i); + TFilename s(d.name()); + s.ext("dbf"); + if (fexist(s)) + { + TSystemisamfile f(i); + f.packindex(); + } + } + } + } +} + /////////////////////////////////////////////////////////// // Programma di conversione archivi speciale /////////////////////////////////////////////////////////// @@ -776,7 +851,7 @@ int main(int argc,char** argv) { const int r = (argc > 1) ? atoi(argv[1]) : 0; - if (r < 0 || r > 7) + if (r < 0 || r > 8) { error_box(usage); return 100;