From 6bdcff91216bf222188a6e9594ed929631b18eab Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 24 Jun 2014 12:41:36 +0000 Subject: [PATCH] Correzioni per Diana 2000 git-svn-id: svn://10.65.10.50/branches/R_10_00@22960 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv2900.cpp | 150 +++++++++++++++++++++++++++++--------------------- lv/lv3800.cpp | 16 ++---- 2 files changed, 91 insertions(+), 75 deletions(-) diff --git a/lv/lv2900.cpp b/lv/lv2900.cpp index 8b008e88e..4aeb4af7b 100755 --- a/lv/lv2900.cpp +++ b/lv/lv2900.cpp @@ -299,9 +299,6 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo TFilename file = path; file.add(fname); - TAssoc_array documenti; - TAssoc_array movimenti; - TLog_report logrep(""); //a seconda del bottone premuto esegui un metodo diverso @@ -321,6 +318,7 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo case DLG_PACKTCLI: if(e == fe_button) { + TAssoc_array documenti; genera_documenti(file, documenti, logrep); if (documenti.items() > 0) @@ -371,6 +369,7 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo case DLG_PACKTMAG: if(e == fe_button) { + TAssoc_array movimenti; prepara_movimenti(file, movimenti, logrep); if (movimenti.items() > 0) { @@ -379,27 +378,32 @@ bool TConta_pulito_msk::on_field_event(TOperable_field& f,TField_event e,long jo message_box(TR("Generazione dei movimenti di magazzino terminata")); } else + { if (_auto == "A") logrep.log(2, "Non è stato possibile generare nessun movimento di magazzino con i parametri fissati"); else message_box(TR("Non è stato possibile generare nessun movimento di magazzino con i parametri fissati")); + } } break; default: break; } - TReport_book buc; - buc.add(logrep); //genero il file .log che contiene gli errori - if (buc.pages() > 0) + if (logrep.rows() > 0) { - TString str = file.name_only(); - str << ".log"; + TReport_book buc; + buc.add(logrep); + if (buc.pages() > 0) + { + TString str = file.name_only(); + str << ".log"; - TFilename log = file.path(); - log.add(str); + TFilename log = file.path(); + log.add(str); - buc.export_text(log, false); + buc.export_text(log, false); + } } if(_auto == "A") @@ -413,14 +417,15 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep) { if (!file.exist()) { + const char* msg = TR("ATTENZIONE: il file che si desidera importare non esiste!"); if (_auto == "A") - logrep.log(2, "ATTENZIONE: il file che si desidera importare non esiste!"); + logrep.log(2, msg); else - warning_box(TR("ATTENZIONE: il file che si desidera importare non esiste!")); + error_box(msg); return false; } - TLocalisamfile f(LF_PACCHI); + TFast_isamfile f(LF_PACCHI); TScanner s(file); while (s.ok()) { @@ -441,7 +446,7 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep) long codcf = atol(riga.mid(86, 6)); const bool ann = riga.mid(100, 1)[0] == 'S'; - if(ann) + if (ann) { const TDate oggi(TODAY); @@ -480,7 +485,7 @@ bool TConta_pulito_msk::elabora_file(const TFilename& file, TLog_report& logrep) if (umart.empty()) { TString str; - str << "ATTENZIONE: non è stata trovata nessuna unità di misura valida per l'articolo " << codart; + str << TR("ATTENZIONE: non è stata trovata nessuna unità di misura valida per l'articolo ") << codart; if (_auto == "A") logrep.log(2, str); else @@ -507,7 +512,7 @@ void TConta_pulito_msk::sposta_file(const TFilename& file) make_dir(path); TString strname; - strname.format("%06d_%06d_%s", TDate(TODAY).date2ansi(), daytime(), (const char*)fileori.name()); + strname.format("%08d_%06d_%s", TDate(TODAY).date2ansi(), daytime(), (const char*)fileori.name()); TFilename filedest = path; filedest.add(strname); @@ -778,7 +783,7 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m codcf = get_long(F_CODCF); } - //seleziona tutti i record del file pacchi da data a data che non hanno una bolla associata + //seleziona tutti i record del file pacchi da data a data che non abbiano una bolla associata TString query; query << "USE PACCHI KEY 2\n"; query << "SELECT (NDOC=0)&&(CODCF=0)&&(MGNUMREG<0)\n"; @@ -789,10 +794,12 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m selrighe.set_var("#DADATA", dadata); selrighe.set_var("#ADATA", adata); - selrighe.move_first(); + if (!selrighe.move_first()) + return; + TLocalisamfile& pacchi = selrighe.cursor()->file(); - //scorro tutti i pacchi trovato + // scorro tutti i pacchi trovati for (bool ok = selrighe.move_first(); ok; ok = selrighe.move_next()) { TRiga_pacco rp = selrighe.cursor()->curr(); @@ -801,8 +808,8 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m //se il pacco risulta annullato, storno la quantità bool annullato = rp.is_annullato(); - if(annullato) - quantita = - quantita; + if (annullato) + quantita = -quantita; //recupero i dati di interesse dalla riga pacchi @@ -841,71 +848,53 @@ void TConta_pulito_msk::prepara_movimenti(const TFilename& file, TAssoc_array& m rp.rewrite(pacchi); } } - } //GENERA_MOVMAG: metodo che genera i movimenti di magazzino dai pacchi bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti) { - const TCausale_magazzino causale((ini_get_string(CONFIG_DITTA, "lv", "CAUCARMAG"))); + const TCausale_magazzino causale(ini_get_string(CONFIG_DITTA, "lv", "CAUCARMAG")); TString8 magazzino; - magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") << ini_get_string(CONFIG_DITTA, "lv", "CODMAGP"); + magazzino << ini_get_string(CONFIG_DITTA, "lv", "CODMAG") + << ini_get_string(CONFIG_DITTA, "lv", "CODMAGP"); + + TFast_isamfile movi(LF_MOVMAG); //cerco l'ultimo numero di chiave in movmag - TISAM_recordset mov("USE MOVMAG"); long nummov = 0; - if(mov.move_last()) - nummov += mov.get(MOVMAG_NUMREG).as_int(); - - TLocalisamfile movi(LF_MOVMAG); + if (movi.last() == NOERR) + nummov = movi.get_long(MOVMAG_NUMREG); + /* 21-05-2014 Guido ha visto che queste 3 variabili non vengono mai utilizzate //inizializzo le variabili di interesse - TDate dadata(TODAY); dadata.addmonth(-1); dadata.set_day(1); - TDate adata(TODAY); adata.addmonth(); + TDate dadata(TODAY); dadata.addmonth(-1); dadata.set_day(1); + TDate adata(TODAY); adata.addmonth(); long codcf = _codcf; - //se non ho lanciato il programma da linea di comando, leggo i paramtri dalla maschera + //se non ho lanciato il programma da linea di comando, leggo i parametri dalla maschera if (_auto != "A") { dadata = get_date(F_DADATA); adata = get_date(F_ADATA); codcf = get_long(F_CODCF); } + */ //per ogni oggetto salvato in movimenti, creo un movimento di magazzino + const TEsercizi_contabili es; FOR_EACH_ASSOC_OBJECT(movimenti, hobj, ansidate, obj) { - TEsercizi_contabili es; - TDate data = (TDate)ansidate; - int annoes = es.date2esc(data); + const TDate data = ansidate; + const int annoes = es.date2esc(data); TMov_mag movmag(++nummov); movmag.put(MOVMAG_ANNOES, annoes); movmag.put(MOVMAG_DATAREG, data); movmag.put(MOVMAG_CODCAUS, causale.codice()); movmag.put(MOVMAG_DATACOMP, data); - //seleziona tutti i record del file pacchi da data a data che non hanno una bolla associata - //per poter assegnare il riferimento al movimento di magazzino - TString query; - query << "USE PACCHI KEY 2\n"; - query << "SELECT (NDOC=0)&&(CODCF=0)&&(MGNUMREG<0)\n"; - query << "FROM DATA=#DADATA\n"; - query << "TO DATA=#ADATA"; - - TISAM_recordset selrighe(query); - selrighe.set_var("#DADATA", data); - selrighe.set_var("#ADATA", data); - - selrighe.move_first(); - TLocalisamfile& pacchi = selrighe.cursor()->file(); - - //scorro tutti i pacchi trovati - for (bool ok = selrighe.move_first(); ok; ok = selrighe.move_next()) - { - TRiga_pacco rp = selrighe.cursor()->curr(); - rp.set_movmag(nummov); - rp.rewrite(pacchi); - } + // Salva immediatamente testata per bloccare numero di registrazione + while (movmag.write(movi) == _isreinsert) + movmag.renum_mov(++nummov); TAssoc_array& articoli = *(TAssoc_array*)obj; @@ -914,9 +903,7 @@ bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti) { TToken_string k(keyarticoli); //recupero l'unità di misura principale di quest'articolo - TToken_string key; - key.add(k.get(0)); - key.add(1); + TToken_string key; key.add(k.get(0)); key.add(1); const TRectype& umart = cache().get(LF_UMART, key); TString4 um = umart.get(UMART_UM); @@ -930,7 +917,36 @@ bool TConta_pulito_msk::genera_movmag(TAssoc_array& movimenti) rmovmag.put(RMOVMAG_UM, um); rmovmag.put(RMOVMAG_QUANT, quantita); } - movmag.write(movi); + + int err = movmag.rewrite(movi); + if (err == NOERR) + { + //seleziona tutti i record del file pacchi da data a data che non hanno una bolla associata + //per poter assegnare il riferimento al movimento di magazzino + TString query; + query << "USE PACCHI KEY 2\n"; + query << "SELECT (NDOC=0)&&(CODCF=0)&&(MGNUMREG<0)\n"; + query << "FROM DATA=#DADATA\n"; + query << "TO DATA=#ADATA"; + + TISAM_recordset selrighe(query); + selrighe.set_var("#DADATA", data); + selrighe.set_var("#ADATA", data); + + if (selrighe.move_first()) + { + TLocalisamfile& pacchi = selrighe.cursor()->file(); + // scorro tutti i pacchi trovati + for (bool ok = selrighe.move_first(); ok; ok = selrighe.move_next()) + { + TRiga_pacco rp = pacchi.curr(); + rp.set_movmag(nummov); + const int err = rp.rewrite(pacchi); + if (err != NOERR) + return error_box(FR("Errore %d in aggiornamento numero di movimento sul file pacchi"), err); + } + } + } } return true; @@ -958,7 +974,7 @@ TConta_pulito_msk::TConta_pulito_msk():TAutomask("lv2900a") _percli = true; if (tmp.len() > 2) - _codcf = atoi(tmp.sub(2)); + _codcf = atol(tmp.sub(2)); _permag = false; } @@ -1017,6 +1033,12 @@ public: //CREATE: metodo costruttore bool TConta_pulito_app::create() { + if (xvt_vobj_get_attr(NULL_WIN, ATTR_APPL_ALREADY_RUNNING)) + { + xvt_dm_popup_error(TR("L'elaborazione pulito è già in esecuzione!")); + return false; + } + _msk = new TConta_pulito_msk(); //se ho più di un parametro, allora lo sto lanciando da linea di comando, e ne devo tenere conto @@ -1050,7 +1072,7 @@ bool TConta_pulito_app::create() bool TConta_pulito_app::destroy() { delete _msk; - return TApplication::destroy(); + return TSkeleton_application::destroy(); } //TRANSFER: metodo che decide cosa effettivamente far fare al programma a seconda delle indicazioni ricevute diff --git a/lv/lv3800.cpp b/lv/lv3800.cpp index 9d1c02e11..030eddfa9 100755 --- a/lv/lv3800.cpp +++ b/lv/lv3800.cpp @@ -210,7 +210,6 @@ void TInvia_dotazioni_skema::aggiungi_riga(const long codcf, const long codcont) TInvia_dotazioni_skema::TInvia_dotazioni_skema() : TAS400_recordset("AS400(42)") { - /* FILE DOTAZIONE.TXT @@ -218,17 +217,12 @@ Campo Tipo Posizione ----------------------------------------------------- Codice Cliente Alfanumerico 1-20 Codice Articolo Alfanumerico 21-40 - */ - - create_field("CODCF", -1, 20, _alfafld, true); //codice cliente - create_field("CODART", -1, 20, _alfafld, true); //codice cliente + create_field("CODCF", -1, 20, _alfafld, true); // codice cliente + create_field("CODART", -1, 20, _alfafld, true); // codice articolo create_field("ACAPO", -1, 2, _alfafld, true, TVariant("\r\n")); //caratteri di a capo } - - - /////////////////////////// //// TInvcon_skema_msk //// /////////////////////////// @@ -257,7 +251,7 @@ void TInvcon_skema_msk::esporta() const TFilename file_dot = path; file_dot.add("dotazione.txt"); //preparo il recodset che contiene tutti i contratti validi -TString query; + TString query; query << "USE LVCONDV\n" << "SELECT (BETWEEN(DATAIN,\"\",#DATA))&&((NUM(ANSI(DATASC))>=" << datasc.date2ansi() << ")||(DATASC=\"\"))&&(CONTSPOR>0)\n" << "BY CODCF"; @@ -266,7 +260,7 @@ TString query; TISAM_recordset contratti(query); contratti.set_var("#DATA", datasc); - if(contratti.items() > 0) + if (contratti.items() > 0) { TInvia_clienti_skema* recset_clienti = new TInvia_clienti_skema(); TInvia_articoli_skema* recset_articoli = new TInvia_articoli_skema(); @@ -287,7 +281,7 @@ TString query; const long codcf = contratti.get(LVCONDV_CODCF).as_int(); const long codcon = contratti.get(LVCONDV_CODCONT).as_int(); - if(oldcodcf != codcf) + if (oldcodcf != codcf) { presenti.destroy(); oldcodcf = codcf;