diff --git a/lv/lv2400.cpp b/lv/lv2400.cpp index 0fc251196..961f9d209 100755 --- a/lv/lv2400.cpp +++ b/lv/lv2400.cpp @@ -17,23 +17,22 @@ #include "lv2400a.h" ////////////////////////////////////// - //// TGENERA_DOCUMENTI_MASK //// + //// TGENERA_DOCUMENTI_MSK //// ////////////////////////////////////// -//classe TGenera_documenti_mask -class TGenera_documenti_mask : public TAutomask +//classe TGenera_documenti_msk +class TGenera_documenti_msk : public TAutomask { public: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - TGenera_documenti_mask (const char* name) : TAutomask(name) {} + TGenera_documenti_msk (const char* name) : TAutomask(name) {} }; //ON_FIELD_EVENT: questo metodo gestisce i vari eventi che si verificano sui campi della maschera -bool TGenera_documenti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +bool TGenera_documenti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { return true; } - ////////////////////////////////////// //// TGENERA_DOCUMENTI_APP //// ////////////////////////////////////// @@ -41,7 +40,7 @@ bool TGenera_documenti_mask::on_field_event(TOperable_field& o, TField_event e, //classe TGenera_documenti_app class TGenera_documenti_app : public TSkeleton_application { - TGenera_documenti_mask* _msk; + TGenera_documenti_msk* _msk; TAssoc_array _quantita; TAssoc_array _quantita_ritirata; TConfig* _configlv; @@ -60,7 +59,7 @@ private: void cambia_stato(const char ritoant, const TString_array& docarr); void elimina_bolle(const long codcli, const long codind, TString_array& docarr); //Metodi per la scansione dei documenti - int scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant, const TDocumento& docgen); + int scansione_ritiri_anticipi(const long codcli, const TDate& data, const char ritoant, const TDocumento& docgen); void scansione_consegne(const long codcli, const long codind, const TDocumento& docgen); //Metodo per il calcolo delle quantità in bolla void calcolo_quantita(const TDocumento& doc, const char ritoant); @@ -85,7 +84,7 @@ public: bool TGenera_documenti_app::create() { open_files(LF_DOC, LF_RIGHEDOC, 0); - _msk = new TGenera_documenti_mask("lv2400a"); + _msk = new TGenera_documenti_msk("lv2400a"); _ndoc = 0; _configlv = new TConfig(CONFIG_DITTA,"lv"); @@ -121,11 +120,11 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep const TDate datagen(TODAY); //per ogni planning recupero i dati di interesse dal planning - const long codcli = plan.get(LVRCONSPLAN_CODCF).as_int(); - const long codcont = plan.get(LVRCONSPLAN_CODCONT).as_int(); - const TDate dtcons = plan.get(LVRCONSPLAN_DTCONS).as_date(); //che è anche la data documento - const char modpas = plan.get(LVRCONSPLAN_MODPASS).as_string()[0]; - + const long codcli = plan.get(LVRCONSPLAN_CODCF).as_int(); + const long codcont = plan.get(LVRCONSPLAN_CODCONT).as_int(); + const TDate dtcons = plan.get(LVRCONSPLAN_DTCONS).as_date(); //che è anche la data documento + const char modpas = plan.get(LVRCONSPLAN_MODPASS).as_string()[0]; + const int coditi = plan.get(LVRCONSPLAN_CODITI).as_int(); const int anno = dtcons.year(); //preparo la chiave per la tabella contratti @@ -138,23 +137,13 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep const long codind = tcont.get_long(LVCONDV_CODINDSP); //codice dell'indirizzo di spedizione const int tplis = tcont.get_int(LVCONDV_TIPOLIS); //tipo listino const bool prinbo = tcont.get_bool(LVCONDV_STPRZBOL); //prezzo in bolla - - //elimina eventuali documenti di consegna che sono ancora in stato iniziale - //...e riporta in stato iniziale i documenti di ritiro e di anticipo che concorrono - //...a calcolare le quantità da riportare sulla bolla - - /*TString_array docarr; //array che conterrà i riferimenti ai documenti da cancellare - elimina_bolle(codcli, codind, docarr); - cambia_stato('R', docarr); - cambia_stato('A', docarr);*/ - + //variabili che conterranno i parametri dei documenti che devo generare... //...settati dalla funzione numerazione_ddt() TString4 codnum; TString4 tpdoc; TString4 statoi; TString4 statof; - //se non trovo quale documento generare, evito il resto dell'elaborazione if (!numerazione_ddt(codnum, tpdoc, statoi, statof)) return NOERR; @@ -168,41 +157,26 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep TISAM_recordset bolle(query2); bolle.move_last(); _ndoc = bolle.get(DOC_NDOC).as_int(); - } + } //creo il documento corretto riempiendo i campi che già conosco TDocumento doc('D', anno, codnum, ++_ndoc); - doc.put(DOC_TIPODOC, tpdoc); + doc.put(DOC_TIPODOC, tpdoc); + doc.put(DOC_DATADOC, dtcons); + doc.put(DOC_TIPOCF, 'C'); + doc.put(DOC_CODCF, codcli); + doc.put(DOC_CODCONT, codcont); + doc.put("DATAGEN", datagen); //data generazione del documento + doc.put("DATAPRCO", dtcons); //data prevista consegna + doc.put("CODITI", coditi); //codice itinerario - //calcola tutte le quantità riportate sui documenti di ritiro, sui documenti di anticipo e sulle bolle di consegna - //...eventualmente modificate a mano - int numerodoc = scansione_ritiri_anticipi(codcli, codind, 'R', doc); - //scansione_ritiri_anticipi(codcli, codind,'A', doc); - //scansione_consegne(codcli, codind, doc); + //calcola tutte le quantità riportate sui documenti di ritiro, sui documenti di anticipo + int numerodoc = scansione_ritiri_anticipi(codcli, dtcons, 'R', doc); + scansione_ritiri_anticipi(codcli, dtcons, 'A', doc); int err = 1; if(numerodoc > 0) { - //se non trovo quale documento generare, evito il resto dell'elaborazione - if (!numerazione_ddt(codnum, tpdoc, statoi, statof)) - return NOERR; - - doc.put(DOC_STATO, statoi); - doc.put(DOC_TIPODOC, tpdoc); - doc.put(DOC_DATADOC, dtcons); - doc.put(DOC_TIPOCF, 'C'); - doc.put(DOC_CODCF, codcli); - doc.put(DOC_CODCONT, codcont); - - //per evitare che ci metta uno zero - if (codind > 0) - doc.put(DOC_CODINDSP, codind); - - doc.put("DATAGEN", datagen); - doc.put("DATAPRCO", dtcons); - - const long ndoc = doc.get_long(DOC_NDOC); - FOR_EACH_ASSOC_OBJECT(_quantita,h,codart,obj) { //preparo la chiave per la tabella righe contratti @@ -214,7 +188,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep const TDate dadata = (TDate)rcont.get(LVRCONDV_INDTTMP); const TDate adata = (TDate)rcont.get(LVRCONDV_FIDTTMP); - if (dadata.ok() && dtcons == adata) + if (dadata.ok() && dtcons >= adata) crea_riga(codart, modpas, tplis, true, prinbo, doc, rep); else crea_riga(codart, modpas, tplis, false, prinbo, doc, rep); @@ -231,7 +205,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep TLocalisamfile& f = plan.cursor()->file(); f.put(LVRCONSPLAN_ANNO, anno); f.put(LVRCONSPLAN_CODNUM, codnum); - f.put(LVRCONSPLAN_NDOC, ndoc); + f.put(LVRCONSPLAN_NDOC, _ndoc); f.rewrite(); } } @@ -501,12 +475,11 @@ bool TGenera_documenti_app::numerazione_ddt(TString& codnum, TString& tpdoc, TSt default: break; } - //instanzio una cache sulla tabella dei tipi documento (cerco lo stato iniziale) const TString& s2 = cache().get("%TIP",tpdoc,"S2"); statoi = s2.left(1); statof = s2.mid(1,1); - + return codnum.full() && tpdoc.full(); } @@ -515,19 +488,23 @@ bool TGenera_documenti_app::numerazione_drit(const int cod, TString& codnum, TSt { codnum = _configlv->get("NUM_RIT", NULL, cod); tpdoc = _configlv->get("TIPODOC_RIT", NULL, cod); + + codnum = _configlv->get("NUM_RIT", NULL, cod); + tpdoc = _configlv->get("TIPODOC_RIT", NULL, cod); + //instanzio una cache sulla tabella tipi documento (cerco lo stato iniziale) const TString& s2 = cache().get("%TIP",tpdoc,"S2"); statoi = s2.left(1); statof = s2.mid(1,1); - return codnum.full() && tpdoc.full(); } //NUMERAZIONE_DANT: questa funzione cerca quali sono i codnum e i tpdoc dei documenti di anticipo bool TGenera_documenti_app::numerazione_dant(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const { - codnum = _configlv->get("NUM_ANT",NULL,cod); - tpdoc = _configlv->get("TIPODOC_ANT",NULL,cod); + codnum = _configlv->get("NUM_ANT", NULL, cod); + tpdoc = _configlv->get("TIPODOC_ANT", NULL, cod); + //instanzio una cache sulla tabella delle righe contratti (cerco lo stato iniziale) const TString& s2 = cache().get("%TIP",tpdoc,"S2"); statoi = s2.left(1); @@ -536,130 +513,23 @@ bool TGenera_documenti_app::numerazione_dant(const int cod, TString& codnum, TSt return codnum.full() && tpdoc.full(); } - ////////////////////////////////////////////////////////////// - //// Metodi per l'eliminazione dei documenti //// - ////////////////////////////////////////////////////////////// - -//CAMBIA_STATO: questa funzione cerca tutte le bolle di ritiro e anticipo relative a un certo cliente... -//in un certo intervallo di date, e gli cambia stato -void TGenera_documenti_app::cambia_stato(const char ritoant, const TString_array& docarr) -{ - //per ogni paragrafo scritto in ditta.ini... - //recupero numerazione, tipo documento e stato tramite la funzione apposita - for (int i = 0; ; i++) - { - TString4 codnum; - TString4 tpdoc; - TString4 statoi; - TString4 statof; - bool err; - - //distinguo se sto scandendo i documenti di ritiro o i documenti di anticipo - switch (ritoant) - { - case 'R': - err = numerazione_drit(i, codnum, tpdoc, statoi, statof); - break; - case 'A': - err = numerazione_dant(i, codnum, tpdoc, statoi, statof); - break; - default: - break; - } - - //se non trovo la numerazione richiesta, interrompo il ciclo - if (!err) - break; - - FOR_EACH_ARRAY_ROW(docarr, r, row); - { - TToken_string(row); - - TString str; - str << "USE DOC\n" - << "FROM PROVV=" << row.get(0) << " ANNO=" << row.get(1) << " CODNUM=" << row.get(2) << " NDOC=" << row.get(3) << "\n" - << "TO PROVV=" << row.get(0) << " ANNO=" << row.get(1) << " CODNUM=" << row.get(2) << " NDOC=" << row.get(3); - TISAM_recordset docritiro (str); - - if (!docritiro.empty()) - { - TDocumento doc(docritiro.cursor()->curr()); //instanzio il documento - doc.put(DOC_STATO, statoi); - } - } - } -} - -//ELIMINA_BOLLE: questa funzione cerca tutte le bolle di consegna relative a un certo cliente ancora... -//nello stato iniziale in un certo intervallo di date e le elimina -void TGenera_documenti_app::elimina_bolle(const long codcli, const long codind, TString_array& docarr) -{ - //recupero dalla maschera i campi di interesse - const TDate adatabolla = _msk->get_date(F_DTCONS); - const long aanno = adatabolla.year(); - - TDate dadatabolla = adatabolla; dadatabolla.set_month(adatabolla.month() - 2); - const long daanno = dadatabolla.year(); - - - //recupero numerazione, tipo documento e stato tramite la funzione apposita - TString4 codnum; - TString4 tpdoc; - TString4 statoi; - TString4 statof; - - //se non trovo la numerazione richiesta, interrompo la funzione - if (!numerazione_ddt(codnum, tpdoc, statoi, statof)) - return; - - //instanzio un recordset che contiene tutti i documenti di interesse - TString query; - query << "USE DOC " - << "SELECT (TIPOCF=\"C\")&&(CODCF=" << codcli - << ")&&(TIPODOC=\"" << tpdoc << "\")&&(STATO=\"" << statoi <<"\")&&(DATADOC>=" << dadatabolla << ")\n" - << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n" - << "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n"; - - TISAM_recordset bolle(query); - - //per ogni documento che trovo, aggiorno la quantità e gli cambio stato - for (bool ok = bolle.move_first(); ok; ok = bolle.move_next()) - { - TDocumento doc(bolle.cursor()->curr()); //instanzio il documento - - //salvo la chiave del documento che sto cancellando - TToken_string key; - key.add(doc.get(DOC_PROVV)); - key.add(doc.get(DOC_ANNO)); - key.add(doc.get(DOC_CODNUM)); - key.add(doc.get(DOC_NDOC)); - docarr.add(key); - - doc.remove(); //stato di bloccato - } - return; -} - ////////////////////////////////////////////////////////////// //// Metodi per la scansione dei documenti //// ////////////////////////////////////////////////////////////// //SCANSIONE_RITIRI_ANTICIPI: questa funzione cerca tutte le bolle di ritiro relative a un certo cliente non ancora evase... //e, dopo l'elaborazione, gli cambia stato -int TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const long codind, const char ritoant, const TDocumento& docgen) +int TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const TDate& data, const char ritoant, const TDocumento& docgen) { - //recupero dalla maschera i campi di interesse - const TDate adatabolla = _msk->get_date(F_DTCONS); - const long aanno = adatabolla.year(); - - TDate dadatabolla = adatabolla; dadatabolla.addmonth(-2); - const long daanno = dadatabolla.year(); + const long aanno = data.year(); + TDate dadata = data; dadata.addmonth(-1); + const long daanno = dadata.year(); TString4 codnum; TString4 tpdoc; TString4 statoi; TString4 statof; - bool err; + bool err = NOERR; //distinguo se sto scandendo i documenti di ritiro o i documenti di anticipo switch (ritoant) { @@ -673,83 +543,39 @@ int TGenera_documenti_app::scansione_ritiri_anticipi(const long codcli, const lo break; } + if (!err) + return err; + //instanzio un recordset che contiene tutti i documenti di interesse TString query; query << "USE DOC " << "SELECT (TIPOCF=\"C\")&&(CODCF=" << codcli << ")&&" - << "(ANSI(G1:DATAPRCO)=#ADATA)&&" + << "(ANSI(G1:DATAPRCO)<=#ADATA)&&" << "(STATO=\"" << statoi <<"\")\n" - << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n" + << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n" << "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n"; //instanzio un recordset che contiene tutti i documenti di interesse - TISAM_recordset docritiri(query); - docritiri.set_var("#ADATA", adatabolla); - + TISAM_recordset docritiri(query); + docritiri.set_var("#ADATA", data); + //per ogni documento che trovo, aggiorno la quantità, e poi cambio stato al documento for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next()) { TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento calcolo_quantita(doc, ritoant); - doc.put(DOC_STATO,statof); //stato di elaborato, preso dallo sheet + doc.put(DOC_STATO,statof); //stato di elaborato //salvo i riferimenti del documento che sto andando a generare doc.put("PROVVDG", docgen.get(DOC_PROVV)); doc.put("ANNODG", docgen.get(DOC_ANNO)); doc.put("CODNUMDG", docgen.get(DOC_CODNUM)); doc.put("NDCODG", docgen.get(DOC_NDOC)); - doc.rewrite(); - + doc.rewrite(); } return docritiri.items(); } -//SCANSIONE_CONSEGNE: questa funzione cerca tutte le bolle di consegna relative a un certo cliente ancora... -//nello stato iniziale in un certo intervallo di date -void TGenera_documenti_app::scansione_consegne(const long codcli, const long codind, const TDocumento& docgen) -{ - //recupero dalla maschera i campi di interesse - const TDate adatabolla = _msk->get_date(F_DTCONS); - const long aanno = adatabolla.year(); - - TDate dadatabolla = adatabolla; dadatabolla.set_month(adatabolla.month() - 2); - const long daanno = dadatabolla.year(); - - //recupero numerazione, tipo documento e stato tramite la funzione apposita - TString4 codnum; - TString4 tpdoc; - TString4 statoi; - TString4 statof; - - //se non trovo la numerazione richiesta, interrompo la funzione - if (!numerazione_ddt(codnum, tpdoc, statoi, statof)) - return; - - //instanzio un recordset che contiene tutti i documenti di interesse - TString query; - query << "USE DOC " - << "SELECT (TIPOCF=\"C\")&&(CODCF=" << codcli - << ")&&(TIPODOC=\"" << tpdoc << "\")&&(STATO=\"" << statoi <<"\")\n" - << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n" - << "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n"; - //instanzio un recordset che contiene tutti i documenti di interesse - TISAM_recordset docritiri (query); - - //per ogni documento che trovo, aggiorno la quantità e gli cambio stato - for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next()) - { - TDocumento doc(docritiri.cursor()->curr()); //instanzio il documento - calcolo_quantita(doc,'B'); - doc.put(DOC_STATO,statof); //stato di bloccato - //salvo i riferimenti del documento che sto andando a generare - doc.put("PROVVDG", docgen.get(DOC_PROVV)); - doc.put("ANNODG", docgen.get(DOC_ANNO)); - doc.put("CODNUMDG", docgen.get(DOC_CODNUM)); - doc.put("NDCODG", docgen.get(DOC_NDOC)); - } - return; -} - ////////////////////////////////////////////////////////////// //// Metodo per il calcolo delle quantità in bolla //// ////////////////////////////////////////////////////////////// @@ -799,14 +625,7 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r break; case 'A': *qta -= art.convert_to_um(qtardoc, NULL, rdoc.get(RDOC_UMQTA)); - break; - case 'B': - { - const real qtagg3 = rdoc.get_real(RDOC_QTAGG3); - real modifica = qtardoc - qtagg3; - *qta -= art.convert_to_um(modifica, NULL, rdoc.get(RDOC_UMQTA)); - } - break; + break; default: break; } @@ -833,100 +652,97 @@ void TGenera_documenti_app::aggiorna_conguaglio(TRectype& rcondv, const real arr bool TGenera_documenti_app::transfer() { - //leggo i campi dalla maschera - const TDate adatacons = _msk->get_date(F_DTCONS); - TDate dadatacons = adatacons; - dadatacons.addmonth(-2); + //leggo i dati dalla maschera + const TDate adata = _msk->get_date(F_DTCONS); + + TDate dadata(TODAY); + if (_msk->get_int(F_TPGEN) == 1) + dadata = adata; + else + ++dadata; + + const int daanno = dadata.year(); + const int aanno = adata.year(); + const long coditi = _msk->get_long(F_CODITI); + const long codaut = _msk->get_long(F_CODAUT); + long codcli = _msk->get_long(F_CODCF); - long codaut = _msk->get_long(F_CODAUT); - - int daanno = dadatacons.year(); - int aanno = adatacons.year(); - - TString4 codnum; - TString4 tpdoc; - TString4 statoi; - TString4 statof; -// bool err; TLog_report rep("Articoli non in contratto"); rep.kill_duplicates(true); - numerazione_drit(0, codnum, tpdoc, statoi, statof); - - //instanzio un recordset che contiene tutti i documenti di interesse - TString query_bolle = "USE DOC\nSELECT "; - - if(codcli > 0) - query_bolle << "(TIPOCF=\"C\")&&(CODCF=" << codcli << ")&&"; + //preparo un recordset che contiene tutti planning per cui voglio creare i documenti relativi + TString4 codnum; + TString4 tpdoc; + TString4 statoi; + TString4 statof; + numerazione_drit(0, codnum, tpdoc, statoi, statof); - if(_msk->get_int(F_TPGEN) == 1) - query_bolle << "(ANSI(G1:DATAPRCO)=#ADATA)&&"; - else - query_bolle << "(ANSI(G1:DATAPRCO)<=#ADATA)&&"; - - query_bolle << "(STATO=\"" << statoi << "\")\n"; - - query_bolle << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n"; - query_bolle << "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n"; - - TISAM_recordset docritiri(query_bolle); - docritiri.set_var("#ADATA", adatacons); - - TProgind pi(docritiri.items(), TR("Generazione documenti in corso..."), true, true); - - for (bool ok = docritiri.move_first(); ok; ok = docritiri.move_next()) + for (dadata; dadata <= adata; ++dadata) { - if (!pi.addstatus(1)) - break; + //per ogni data cerco i documenti e per ogni documento cerco i dati del passaggio + TString query; + query << "USE DOC " + << "SELECT (ANSI(G1:DATAPRCO)<=#ADATA)&&" + << "(STATO=\"" << statoi <<"\")\n" + << "FROM PROVV=\"D\" ANNO=" << daanno << " CODNUM=\"" << codnum << "\"\n" + << "TO PROVV=\"D\" ANNO=" << aanno << " CODNUM=\"" << codnum << "\"\n"; - codcli = docritiri.get(DOC_CODCF).as_int(); - const TDate data = docritiri.get("G1:DATAPRCO").as_date(); - - //preparo un recordset che contiene tutti planning per cui voglio creare i documenti relativi - TString query = "USE LVRCONSPLAN KEY 2"; - - if (coditi || codcli || codaut) - { - query << " SELECT "; - if (codcli > 0) - query << "(CODCF=" << codcli << ')'; - if (coditi > 0) - { - if (codcli > 0) - query << "&&"; - query << "(CODITI=" << coditi << ')'; - } - if (codaut > 0) - { - if (codcli > 0 || coditi > 0) - query << "&&"; - query << "(CODAUT=" << codaut << ')'; - } - } - query << "\n"; - - query << "FROM DTCONS=#DATA\n"; - query << "TO DTCONS=#DATA"; - - TISAM_recordset plan(query); - plan.set_var("#DATA", data); + TISAM_recordset docritiri(query); + docritiri.set_var("#ADATA", adata); - if (plan.move_first()) + TProgind pi(docritiri.items(), TR("Generazione documenti in corso..."), true, true); + + for(bool ok = docritiri.move_first(); ok; ok = docritiri.move_next()) { - _quantita.destroy(); - _quantita_ritirata.destroy(); - crea_documento(plan, rep); + if (!pi.addstatus(1)) + break; + + if (_msk->field(F_CODCF).empty()) + codcli = docritiri.get(DOC_CODCF).as_int(); + + //instanzio un recordset che contiene tutti i documenti di interesse + TString query = "USE LVRCONSPLAN KEY 2"; + query << " SELECT (CODCF=" << codcli << ")"; + + if (coditi || codaut) + { + if (coditi > 0) + query << "&&(CODITI=" << coditi << ")"; + + if (codaut > 0) + query << "&&(CODAUT=" << codaut << ")"; + } + + query << "\nFROM DTCONS=#DADATA\n"; + query << "TO DTCONS=#ADATA"; + + TISAM_recordset plan(query); + plan.set_var("#DADATA", dadata); + plan.set_var("#ADATA", dadata); + + if (plan.move_first()) + { + _quantita.destroy(); + _quantita_ritirata.destroy(); + crea_documento(plan, rep); + } } } - TReport_book buc; - buc.add(rep); - if (buc.pages() > 0) - buc.preview(); + if (adata < TODAY) + warning_box(TR("Non è stato possibile generare documenti con data prevista consegna nel passato")); else - message_box(TR("Generazione terminata")); + { + TReport_book buc; + buc.add(rep); + if (buc.pages() > 0) + buc.preview(); + else + message_box(TR("Generazione terminata")); + } + return true; } void TGenera_documenti_app::main_loop() diff --git a/lv/lv2600.cpp b/lv/lv2600.cpp index 0e11c024e..0a243cdc3 100755 --- a/lv/lv2600.cpp +++ b/lv/lv2600.cpp @@ -291,8 +291,6 @@ void TAcquisizione_lavanderie_app::elabora_file(const TString& file, TLog_report bool found = false; TDocumento& doc = ca.doc(datadoc,codcf); - - int cazzone = doc.rows(); //se sto elaborando un nuovo file, ma i documenti che sto importando esistono già, chiedi cosa devo fare if (doc.rows() > 0 && nuovo_cliente)