From 14ea969dc6a57b51a204c4ffcf0675073891e48a Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 12 Jan 2010 16:25:56 +0000 Subject: [PATCH] Patch level : 10.0 Files correlati : lv2.exe lv2700a.rep lv2700a.msk Ricompilazione Demo : [ ] Commento : Corretta stampa riepilogo bolle git-svn-id: svn://10.65.10.50/trunk@19910 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv2700.cpp | 212 ++++++++++++++++++++++++------------------------- lv/lv2700a.rep | 10 +-- lv/lv2700a.uml | 61 +++++++------- 3 files changed, 139 insertions(+), 144 deletions(-) diff --git a/lv/lv2700.cpp b/lv/lv2700.cpp index a4c2f3c52..a1cae68c0 100755 --- a/lv/lv2700.cpp +++ b/lv/lv2700.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -18,20 +19,20 @@ struct TStruttura: public TObject TString _articolo; TString _descr; TDate _dataDoc; - int _numeroDoc; + long _numeroDoc; long _qta; - TStruttura():_cliente(0),_articolo(""),_descr(""),_dataDoc(""),_numeroDoc(0),_qta(0) {} - TStruttura(long cliente, TString articolo, TString descr, + TStruttura():_cliente(0),_numeroDoc(0),_qta(0) {} + TStruttura(long cliente, const TString& articolo, const TString& descr, TDate dataDoc, int numeroDoc, long qta):_cliente(cliente),_articolo(articolo),_descr(descr),_dataDoc(dataDoc),_numeroDoc(numeroDoc),_qta(qta) {} }; struct TStrutturaData: public TObject { TDate _dataDoc; - int _numeroDoc; - int _cliente; + long _numeroDoc; + long _cliente; int _posizione; - TStrutturaData():_cliente(0),_dataDoc(""),_numeroDoc(0),_posizione(0) {} + TStrutturaData():_cliente(0),_numeroDoc(0),_posizione(0) {} TStrutturaData(int posizione, int cliente, TDate dataDoc, int numeroDoc):_posizione(posizione), _dataDoc(dataDoc),_numeroDoc(numeroDoc) {} }; @@ -50,12 +51,13 @@ bool TRiepBolle_mask::on_field_event(TOperable_field& o, TField_event e, long jo switch (o.dlg()) { case F_DATA_DA: - if (e == fe_init) - { - TDate oggi(TODAY); - oggi.set_day(1); - o.set (oggi.string()); - } + if (e == fe_init && o.empty()) + { + TDate oggi(TODAY); + oggi.set_day(1); + o.set(oggi.string()); + } + break; default: break; } return true; @@ -72,10 +74,10 @@ class TRiepBolle_app: public TSkeleton_application protected: virtual void main_loop(); void elabora(const TMask& mask) const; - TString getQuery(bool isArticolo,const TMask& mask) const; + TString get_query(bool isArticolo,const TMask& mask) const; }; -TString TRiepBolle_app::getQuery(bool isArticolo,const TMask& mask) const +TString TRiepBolle_app::get_query(bool isArticolo,const TMask& mask) const { /* RICHIESTA QUERY: @@ -94,8 +96,7 @@ TString TRiepBolle_app::getQuery(bool isArticolo,const TMask& mask) const //Stringhe x composizione query TString query, select, between, orderBy, join; - //Richiamo parametri della ditta di configurazione - //file Ditta.ini + //Richiamo parametri della ditta di configurazione file Ditta.ini //const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN"); const TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN"); @@ -109,21 +110,19 @@ TString TRiepBolle_app::getQuery(bool isArticolo,const TMask& mask) const select << "(3000@.S2[37,38] ='+1')&&"; } - between << "(BETWEEN(DOC.ZONA,#F_ZONA_FROM,#F_ZONA_FROM))&&(BETWEEN(DOC.DATADOC,#F_DATA_FROM,#F_DATA_TO))&&(BETWEEN(DOC.CODCF,#F_CODCF_FROM,#F_CODCF_TO)))\n"; + between << "(BETWEEN(DOC.ZONA,#F_ZONA_FROM,#F_ZONA_FROM))&&(BETWEEN(DOC.DATADOC,#F_DATA_FROM,#F_DATA_TO))&&(STR(BETWEEN(DOC.CODCF,#F_CODCF_FROM,#F_CODCF_TO))))\n"; if(isArticolo) orderBy << "BY DOC.CODCF CODART DOC.DATADOC NDOC\n"; else orderBy << "BY DOC.CODCF DOC.DATADOC NDOC\n"; - join << "JOIN DOC TO RDOC ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n"; + join << "JOIN DOC TO RDOC ALIAS 1000 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n"; - if(!mask.get_bool(F_CHECK_NO_RESI)){ + if (!mask.get_bool(F_CHECK_NO_RESI)) join << "JOIN &LVCAU TO RDOC ALIAS 2000 INTO CODTAB==CODAGG1\n"; - } - if(mask.get_bool(F_CHECK_FATT)){ + if (mask.get_bool(F_CHECK_FATT)) join << "JOIN %CAU TO &LVCAU ALIAS 3000 INTO CODTAB==S2\n"; - } //from_ << "FROM CODNUM='" << codnum << "'\n"; //to_ << "TO CODNUM='" << codnum << "'"; @@ -136,26 +135,24 @@ TString TRiepBolle_app::getQuery(bool isArticolo,const TMask& mask) const class TRiepilogo: public TArray { public: - void add(int count,long cliente, TString articolo, TString descr, - TDate dataDoc, int numeroDoc, long qta); - TRiepilogo():TArray(9){} + void add(int count,long cliente, const TString& articolo, const TString& descr, + const TDate& dataDoc, long numeroDoc, long qta); }; class TRiepilogoData: public TArray { public: - void add(int posizione,int cliente, TDate dataDoc, int numeroDoc); - TRiepilogoData():TArray(){} + void add(int posizione, long cliente, const TDate& dataDoc, long numeroDoc); }; -void TRiepilogo::add(int count,long cliente, TString articolo, TString descr, - TDate dataDoc, int numeroDoc, long qta) +void TRiepilogo::add(int count,long cliente, const TString& articolo, const TString& descr, + const TDate& dataDoc, long numeroDoc, long qta) { TStruttura* struttura = new TStruttura(cliente,articolo, descr,dataDoc,numeroDoc,qta); TArray::add(struttura,count); } -void TRiepilogoData::add(int posizione,int cliente, TDate dataDoc, int numeroDoc) +void TRiepilogoData::add(int posizione, long cliente, const TDate& dataDoc, long numeroDoc) { TStrutturaData* strutturaData = new TStrutturaData(posizione,cliente, dataDoc,numeroDoc); TArray::add(strutturaData,posizione); @@ -163,88 +160,87 @@ void TRiepilogoData::add(int posizione,int cliente, TDate dataDoc, int numeroDoc void TRiepBolle_app:: elabora(const TMask& mask)const { - TISAM_recordset riep(getQuery(true,mask)); - - //inserire parametri filtri - riep.set_var("#F_DATA_FROM",mask.get_date(F_DATA_DA)); - riep.set_var("#F_DATA_TO",mask.get_date(F_DATA_A)); - riep.set_var("#F_CODCF_FROM",TVariant(mask.get(F_CODCF_DA))); - riep.set_var("#F_CODCF_TO",TVariant(mask.get(F_CODCF_A))); - riep.set_var("#F_ZONA_FROM",TVariant(mask.get(F_ZONA))); - - - TRiepilogo riepilogo; - TRiepilogoData riepilogoData; - TRiepilogoData riepilogoData2; - int count = 1; - - for(bool ok = riep.move_first();ok;ok=riep.move_next()) + TRiepilogo riepilogo; { - TDate dataDoc = riep.get("DOC.DATADOC").as_date(); - long cliente = riep.get("DOC.CODCF").as_int(); - TString articolo = riep.get("CODART").as_string(); - TString descr = riep.get("DESCR").as_string(); - int numeroDoc = riep.get("NDOC").as_int(); - long qta = riep.get("QTA").as_int(); - - riepilogo.add(count,cliente,articolo,descr,dataDoc,numeroDoc,qta); - count++; - } + TISAM_recordset riep(get_query(true,mask)); - - TRiepBolle_report rep; + //inserire parametri filtri + riep.set_var("#F_DATA_FROM",mask.get_date(F_DATA_DA)); + riep.set_var("#F_DATA_TO",mask.get_date(F_DATA_A)); + riep.set_var("#F_CODCF_FROM",mask.get_long(F_CODCF_DA)); + riep.set_var("#F_CODCF_TO",mask.get_long(F_CODCF_A)); + riep.set_var("#F_ZONA_FROM",TVariant(mask.get(F_ZONA))); + + TProgind pi(riep.items(), TR("Estrazione articoli"), true, true); + int count = 1; + for(bool ok = riep.move_first(); ok && pi.addstatus(1); ok=riep.move_next()) + { + const TDate dataDoc = riep.get("DOC.DATADOC").as_date(); + const long cliente = riep.get("DOC.CODCF").as_int(); + const TString articolo = riep.get("CODART").as_string(); + const TString descr = riep.get("DESCR").as_string(); + const long numeroDoc = riep.get("NDOC").as_int(); + const long qta = riep.get("QTA").as_int(); + + riepilogo.add(count,cliente,articolo,descr,dataDoc,numeroDoc,qta); + count++; + } + } + + TRiepBolle_report rep; bool stampa = rep.load("lv2700a"); TRiepBolle_recordset* riep_set = new TRiepBolle_recordset(); rep.set_recordset(riep_set); - int clienteOld = 0; + long clienteOld = 0; TString articoloOld; int contatore = 0; - FOR_EACH_ARRAY_ITEM(riepilogo,c,obj)//scandisce clienti e tiene - //buoni solo quelli valorizzati + TRiepilogoData riepilogoData, riepilogoData2; + + TProgind pi(riepilogo.items(), TR("Estrazione documenti"), true, true); + FOR_EACH_ARRAY_ITEM(riepilogo, c, obj)//scandisce clienti e tiene buoni solo quelli valorizzati { - TStruttura& s = *(TStruttura*) obj; - - if(clienteOld!=s._cliente || - articoloOld!=s._articolo) + if (!pi.addstatus(1)) + break; + + const TStruttura& s = *(TStruttura*)obj; + if (clienteOld!=s._cliente || articoloOld!=s._articolo) { riep_set->new_rec(); - riep_set->set(0,TVariant(long (s._cliente)));//CAMPO DI ROTTURA - riep_set->set(1,TVariant(long (s._cliente))); - riep_set->set(2,TVariant(s._articolo)); - riep_set->set(3,TVariant(s._descr)); + riep_set->set(0, TVariant(s._cliente)); //CAMPO DI ROTTURA + riep_set->set(1, TVariant(s._cliente)); + riep_set->set(2, TVariant(s._articolo)); + riep_set->set(3, TVariant(s._descr)); - contatore=4; - - if(clienteOld!=s._cliente) + contatore = 4; + if (clienteOld != s._cliente) { - //Per ogni cliente creo una struttura di date. è necessario - //per il report. - TISAM_recordset dateDocAll(getQuery(false,mask)); + riepilogoData.destroy(); + riepilogoData2.destroy(); + + //Per ogni cliente creo una struttura di date. è necessario per il report. + TISAM_recordset dateDocAll(get_query(false, mask)); //inserire parametri filtri - dateDocAll.set_var("#F_DATA_FROM",mask.get_date(F_DATA_DA)); - dateDocAll.set_var("#F_DATA_TO",mask.get_date(F_DATA_A)); - dateDocAll.set_var("#F_CODCF_FROM",TVariant(long (s._cliente))); - dateDocAll.set_var("#F_CODCF_TO",TVariant(long (s._cliente))); - dateDocAll.set_var("#F_ZONA_FROM",TVariant(mask.get(F_ZONA))); + dateDocAll.set_var("#F_DATA_FROM", mask.get_date(F_DATA_DA)); + dateDocAll.set_var("#F_DATA_TO", mask.get_date(F_DATA_A)); + dateDocAll.set_var("#F_CODCF_FROM", s._cliente); + dateDocAll.set_var("#F_CODCF_TO", s._cliente); + dateDocAll.set_var("#F_ZONA_FROM", TVariant(mask.get(F_ZONA))); TDate dateOld; - int numeroOld=0; - int cliente=0; - int posizione = 4; + long numeroOld = 0; + long cliente = 0; + int posizione = 4; - for(bool ok = dateDocAll.move_first();ok;ok=dateDocAll.move_next()) + for (bool ok = dateDocAll.move_first(); ok; ok=dateDocAll.move_next()) { TDate dataDocTot = dateDocAll.get("DOC.DATADOC").as_date(); - int numeroDocTot = dateDocAll.get("NDOC").as_int(); - int clientDocTot = dateDocAll.get("DOC.CODCF").as_int(); - - if(dateOld !=dataDocTot || - numeroOld !=numeroDocTot || - cliente!=clientDocTot ) + long numeroDocTot = dateDocAll.get("NDOC").as_int(); + long clientDocTot = dateDocAll.get("DOC.CODCF").as_int(); + if (dateOld != dataDocTot || numeroOld != numeroDocTot || cliente != clientDocTot) { dateOld=dataDocTot; numeroOld=numeroDocTot; @@ -260,7 +256,6 @@ void TRiepBolle_app:: elabora(const TMask& mask)const articoloOld=s._articolo; } - FOR_EACH_ARRAY_ITEM(riepilogoData,f,obj) { TStrutturaData& sD = *(TStrutturaData*) obj; @@ -268,20 +263,19 @@ void TRiepBolle_app:: elabora(const TMask& mask)const //ogni primo record riporto come titolo tutte le date-numero if(contatore==4) { + // Imposta data e numero documento, mentre azzera la qta FOR_EACH_ARRAY_ITEM(riepilogoData2,f,obj) { - TStrutturaData& sD2 = *(TStrutturaData*) obj; int contatore2 = sD2._posizione; - TString tt = sD2._dataDoc; - TString tt2 = tt.sub(0,5); + TString8 ggmm; ggmm.format("%02d-%02d", sD2._dataDoc.day(), sD2._dataDoc.month()); - riep_set->set(contatore2,TVariant(tt2)); + riep_set->set(contatore2, ggmm); // data doc. contatore2++; - riep_set->set(contatore2,TVariant(long (sD2._numeroDoc))); + riep_set->set(contatore2, sD2._numeroDoc); // num. doc. contatore2++; - riep_set->set(contatore2,TVariant(long (0))); + riep_set->set(contatore2, NULL_VARIANT); // qta contatore2++; } } @@ -291,17 +285,17 @@ void TRiepBolle_app:: elabora(const TMask& mask)const { contatore = sD._posizione; - TString tt = s._dataDoc; - TString tt2 = tt.sub(0,5); + TString8 tt2; + tt2.format("%02d-%02d", s._dataDoc.day(), s._dataDoc.month()); - riep_set->set(contatore,TVariant(tt2)); + riep_set->set(contatore, tt2); contatore++; - riep_set->set(contatore,TVariant(long (s._numeroDoc))); + riep_set->set(contatore,s._numeroDoc); contatore++; - riep_set->set(contatore,TVariant(long (s._qta))); + const long qta = riep_set->get(contatore).as_int() + s._qta; + riep_set->set(contatore,qta); contatore++; - TArray* p = (TArray*) obj; int e = p->size(); e=e+1; @@ -312,7 +306,6 @@ void TRiepBolle_app:: elabora(const TMask& mask)const riep_set->set(contatore,TVariant(long (0))); contatore++; } - break; } else @@ -320,14 +313,15 @@ void TRiepBolle_app:: elabora(const TMask& mask)const contatore++; contatore++; riep_set->set(contatore,TVariant(long (0))); - contatore++; - + contatore++; } } } - //Crea file che contiene il recordset - //riep_set->save_as("c:\\riepilogoBolla.txt"); +#ifdef DBG + //Crea file che contiene il recordset per debug + riep_set->save_as("c:/temp/riepilogoBolla.txt"); +#endif if(stampa) { @@ -358,6 +352,6 @@ void TRiepBolle_app::main_loop() int lv2700(int argc, char* argv[]) { TRiepBolle_app app; - app.run(argc, argv, TR("Stampa Riepilogo Bolle di Lavanderia")); + app.run(argc, argv, TR("Riepilogo Bolle di Lavanderia")); return 0; } \ No newline at end of file diff --git a/lv/lv2700a.rep b/lv/lv2700a.rep index 1259fe911..2f84a8b15 100755 --- a/lv/lv2700a.rep +++ b/lv/lv2700a.rep @@ -1,13 +1,13 @@ - Stampa Riepilogo Bolle di Lavanderia + Riepilogo Bolle di Lavanderia
MESSAGE _TODAY - + @@ -26,15 +26,15 @@ B - MESSAGE _ISAMREAD,20,TIPOCF='C'!CODCF=#THIS,RAGSOC + MESSAGE ISAMREAD,20,TIPOCF='C'!CODCF=#THIS,RAGSOC B - MESSAGE _ISAMREAD,20,TIPOCF='C'!CODCF=#THIS,INDCF + MESSAGE ISAMREAD,20,TIPOCF='C'!CODCF=#THIS,INDCF B - MESSAGE _ISAMREAD,20,TIPOCF='C'!CODCF=#THIS,LOCALITACF + MESSAGE ISAMREAD,20,TIPOCF='C'!CODCF=#THIS,LOCALITACF diff --git a/lv/lv2700a.uml b/lv/lv2700a.uml index 947e6e856..b78024f1f 100755 --- a/lv/lv2700a.uml +++ b/lv/lv2700a.uml @@ -6,16 +6,15 @@ ENDPAGE PAGE "Riepilogo Bolle di Lavanderie" -1 -1 40 5 -GROUPBOX DLG_NULL 80 4 +GROUPBOX DLG_NULL 78 4 BEGIN - PROMPT 1 1 "@b Parametri Cliente" + PROMPT 1 1 "@bSelezione clienti" END NUMBER F_CODCF_DA 6 BEGIN PROMPT 2 2 "Da Cliente " FLAGS "U" - KEY 1 USE LF_CLIFO INPUT TIPOCF "C" INPUT CODCF F_CODCF_DA @@ -23,78 +22,75 @@ BEGIN DISPLAY "Ragione Sociale@50" RAGSOC OUTPUT F_CODCF_DA CODCF OUTPUT F_RAGSOC_DA RAGSOC + CHECKTYPE SEARCH FIELD #F_CODCF_FROM END STRING F_RAGSOC_DA 50 BEGIN PROMPT 25 2 "" - KEY 2 USE LF_CLIFO KEY 2 INPUT TIPOCF "C" INPUT RAGSOC F_RAGSOC_DA DISPLAY "Ragione Sociale@50" RAGSOC DISPLAY "Codice" CODCF - OUTPUT F_CODCF_DA CODCF - OUTPUT F_RAGSOC_DA RAGSOC + COPY OUTPUT F_CODCF_DA + CHECKTYPE SEARCH END NUMBER F_CODCF_A 6 BEGIN PROMPT 2 3 "A Cliente " FLAGS "U" - KEY 1 USE LF_CLIFO INPUT TIPOCF "C" INPUT CODCF F_CODCF_A - DISPLAY "Codice" CODCF - DISPLAY "Ragione Sociale@50" RAGSOC + COPY DISPLAY F_CODCF_DA OUTPUT F_CODCF_A CODCF OUTPUT F_RAGSOC_A RAGSOC FIELD #F_CODCF_TO + CHECKTYPE SEARCH END STRING F_RAGSOC_A 50 BEGIN PROMPT 25 3 "" - KEY 2 USE LF_CLIFO KEY 2 INPUT TIPOCF "C" INPUT RAGSOC F_RAGSOC_A - DISPLAY "Ragione Sociale@50" RAGSOC - DISPLAY "Codice" CODCF - OUTPUT F_CODCF_A CODCF - OUTPUT F_RAGSOC_A RAGSOC + COPY DISPLAY F_RAGSOC_DA + COPY OUTPUT F_CODCF_A + CHECKTYPE SEARCH END -GROUPBOX DLG_NULL 80 3 +GROUPBOX DLG_NULL 78 3 BEGIN - PROMPT 1 5 "@b Parametri Data" + PROMPT 1 5 "@bIntervallo date" END DATE F_DATA_DA BEGIN -PROMPT 2 6 "Da Data " -FIELD #F_DATA_FROM + PROMPT 2 6 "Da Data " + FIELD #F_DATA_FROM END DATE F_DATA_A BEGIN -PROMPT 40 6 "A Data " -FLAGS "A" -FIELD #F_DATA_TO -VALITATE DATE_CMP_FUNC >= F_DATA_DA -WARNING "La data finale deve essere successiva a quella iniziale" + PROMPT 40 6 "A Data " + FLAGS "A" + FIELD #F_DATA_TO + VALITATE DATE_CMP_FUNC >= F_DATA_DA + WARNING "La data finale deve essere successiva a quella iniziale" END -GROUPBOX DLG_NULL 80 3 +GROUPBOX DLG_NULL 78 3 BEGIN - PROMPT 1 8 "@b Parametri Zona" + PROMPT 1 8 "@bZona" END STRING F_ZONA 2 BEGIN - PROMPT 2 9 "Codice Zona" + PROMPT 2 9 "Codice Zona " USE ZON INPUT CODTAB F_ZONA DISPLAY "Codice" CODTAB @@ -107,28 +103,33 @@ END STRING F_DESZONA 50 BEGIN - PROMPT 20 9 "" + PROMPT 25 9 "" USE ZON KEY 2 INPUT CODTAB F_ZONA DISPLAY "Codice" CODTAB DISPLAY "Descrizione@50" S0 OUTPUT F_ZONA CODTAB OUTPUT F_DESZONA S0 + CHECKTYPE NORMAL +END + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 11 "@bDettaglio" END BOOLEAN F_CHECK_NO_RESI BEGIN - PROMPT 2 12 "Stampo tutti i righi incluso i resi " + PROMPT 2 12 "Stampare tutti i righi incluso i resi" FIELD #F_CHECK_NO_RESI_TO END BOOLEAN F_CHECK_FATT BEGIN - PROMPT 2 14 "Stampo solo i righi da fatturare " + PROMPT 2 13 "Stampare solo i righi da fatturare" FIELD #F_CHECK_FATT_TO END - ENDPAGE ENDMASK