diff --git a/or/or1100.cpp b/or/or1100.cpp index 587970611..f945c4480 100755 --- a/or/or1100.cpp +++ b/or/or1100.cpp @@ -54,6 +54,8 @@ class TStampa_ordini : public TSkeleton_application protected: static bool stato_handler(TMask_field& f, KEY k); static bool detail_handler(TMask_field& f, KEY k); + static bool datacons_filter(const TRelation* rel); + virtual bool create(); virtual bool destroy(); virtual void main_loop(); @@ -61,6 +63,8 @@ protected: void filter_for_number(); void filter_for_clifo_agent(); void filter_for_articolo(); + void show_body_field(short id, bool on); // Attiva un campo del body (sole se esiste!) + public: TStampa_ordini() {}; virtual ~TStampa_ordini() {}; @@ -176,6 +180,27 @@ void TStampa_ordini::set_totvaluta_items() } } +bool TStampa_ordini::datacons_filter(const TRelation* rel) +{ + const TRectype& doc = rel->curr(LF_DOC); + TRectype rdoc(LF_RIGHEDOC); + rdoc.put(RDOC_PROVV, doc.get(DOC_PROVV)); + rdoc.put(RDOC_ANNO, doc.get(DOC_ANNO)); + rdoc.put(RDOC_CODNUM, doc.get(DOC_CODNUM)); + rdoc.put(RDOC_NDOC, doc.get(DOC_NDOC)); + TRecord_array righe(LF_RIGHEDOC, RDOC_NRIGA); + righe.read(rdoc); + const TDate fc = app()._from_cons; + const TDate tc = app()._to_cons; + for (int r = righe.rows(); r > 0; r--) + { + const TDate datacons = righe.row(r).get(RDOC_DATACONS); + if (datacons >= fc && datacons <= tc) + return TRUE; + } + return FALSE; +} + void TStampa_ordini::filter_for_number() { CHECK(_frm, "Form non valido"); @@ -187,7 +212,6 @@ void TStampa_ordini::filter_for_number() TRectype f(LF_DOC), t(LF_DOC); TString filter_expr,s, lev_str, mag_str; - filter_expr << "(TIPOCF==\"" << _tipocf << "\")"; if (_order == num_doc) { f.put(DOC_PROVV, _provv); @@ -201,10 +225,10 @@ void TStampa_ordini::filter_for_number() { f.put(DOC_DATADOC, _from_date); t.put(DOC_DATADOC, _to_date); - filter_expr << " && (PROVV==\"" << _provv << "\")"; + filter_expr << "&&(PROVV==\"" << _provv << "\")"; if (_anno != 0) - filter_expr << " && (ANNO==\"" << _anno << "\")"; - filter_expr << " && (CODNUM==\"" << _codnum << "\")"; + filter_expr << "&&(ANNO==\"" << _anno << "\")"; + filter_expr << "&&(CODNUM==\"" << _codnum << "\")"; } cur->setregion(f,t); @@ -226,7 +250,7 @@ void TStampa_ordini::filter_for_number() s << lev_str << "|"; if (mag_str.not_empty()) s << mag_str << "|"; - s << "DATACONS"; + s << RDOC_DATACONS; TSortedfile *rdoc = new TSortedfile(LF_RIGHEDOC,NULL,s,"",1); cur->relation()->replace(rdoc,1,"CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC"); @@ -242,10 +266,10 @@ void TStampa_ordini::filter_for_number() } if (_TEA_ord == 'E') - filter_expr << " && (DOCEVASO==\"X\")"; + filter_expr << "&&(DOCEVASO==\"X\")"; else if (_TEA_ord == 'A') - filter_expr << " && (DOCEVASO!=\"X\")"; + filter_expr << "&&(DOCEVASO!=\"X\")"; if (!_detail_rows) { @@ -266,8 +290,15 @@ void TStampa_ordini::filter_for_number() filter_expr << s; } } - + + if (filter_expr.starts_with("&&")) + filter_expr.ltrim(2); cur->setfilter(filter_expr); + + // Filtro aggiuntivo per eliminare testate di documenti in cui tutte + // le righe hanno data di consegna fuori range + if (_detail_rows && _detail_doc) + cur->set_filterfunction(datacons_filter); if (_detail_rows) { @@ -424,6 +455,13 @@ void TStampa_ordini::filter_for_number() ssec.printsection().find_field(BODY_COL_12 + id).show(_opz_giacenza); } +void TStampa_ordini::show_body_field(short id, bool on) +{ + TForm_item* i = _frm->exist_field('B', odd_page, id); + if (i != NULL) + i->enable(on); +} + void TStampa_ordini::filter_for_clifo_agent() { CHECK(_frm, "Form non valido"); @@ -716,11 +754,11 @@ void TStampa_ordini::filter_for_clifo_agent() } } // Abilitazione intestazioni di colonna - _frm->find_field('B', odd_page, BODY_COL_5).show(_opz_valore); - _frm->find_field('B', odd_page, BODY_COL_6).show(_opz_valore); - _frm->find_field('B', odd_page, BODY_COL_10).show(_opz_prezzo); - _frm->find_field('B', odd_page, BODY_COL_11).show(_opz_residuo); - _frm->find_field('B', odd_page, BODY_COL_12).show(_opz_giacenza); + show_body_field(BODY_COL_5, _opz_valore); + show_body_field(BODY_COL_6, _opz_valore); + show_body_field(BODY_COL_10, _opz_prezzo); + show_body_field(BODY_COL_11, _opz_residuo); + show_body_field(BODY_COL_12, _opz_giacenza); set_totvaluta_items(); } @@ -744,7 +782,7 @@ void TStampa_ordini::filter_for_articolo() s << lev_str << "|"; if (mag_str.not_empty()) s << mag_str << "|"; - s << "ANNO|NDOC|DATACONS"; // MODIFICARO DA CRISTINA AGGIUNTO ANNO + NDOC + s << "ANNO|NDOC|DATACONS"; // MODIFICATO DA CRISTINA AGGIUNTO ANNO + NDOC cur->change_order(s); // Setta l'ordine @@ -879,11 +917,11 @@ void TStampa_ordini::filter_for_articolo() _frm->find_field('B',odd_page,id).enable(); // Abilitazione intestazioni di colonna - _frm->find_field('B', odd_page, BODY_COL_5).show(_opz_valore); - _frm->find_field('B', odd_page, BODY_COL_6).show(_opz_valore); - _frm->find_field('B', odd_page, BODY_COL_10).show(_opz_prezzo); - _frm->find_field('B', odd_page, BODY_COL_11).show(_opz_residuo); - _frm->find_field('B', odd_page, BODY_COL_12).show(_opz_giacenza); + show_body_field(BODY_COL_5,_opz_valore); + show_body_field(BODY_COL_6,_opz_valore); + show_body_field(BODY_COL_10,_opz_prezzo); + show_body_field(BODY_COL_11,_opz_residuo); + show_body_field(BODY_COL_12,_opz_giacenza); // Abilitazione intestazioni di riga TForm_subsection& asec = (TForm_subsection&)_frm->find_field('B', odd_page, "ARTMAIN"); // Sottosezione padre diff --git a/or/or1100a.uml b/or/or1100a.uml index 47d9ba9ad..3a6d0bb05 100755 --- a/or/or1100a.uml +++ b/or/or1100a.uml @@ -129,7 +129,7 @@ BEGIN PROMPT 3 8 "Tipo C/F " ITEM "C|Clienti" ITEM "F|Fornitori" - GROUP GR_CLIFO + GROUP GR_TUTTI GR_CLIFO END NUMBER F_CFFROM 6 diff --git a/or/or1100b.frm b/or/or1100b.frm index 02922cbd0..3b0d28813 100755 --- a/or/or1100b.frm +++ b/or/or1100b.frm @@ -54,7 +54,7 @@ END //HEADER SECTION BODY ODD 4 COLUMNWISE -NUMBER 1 10 +NUMERO 1 10 BEGIN SPECIAL STRINGA INTESTAZIONE "Codice" "Codice" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" @@ -66,7 +66,7 @@ BEGIN PICTURE "########" END -STRING 2 40 +STRINGA 2 40 BEGIN SPECIAL STRINGA INTESTAZIONE "Descrizione" "Descrizione" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" @@ -166,14 +166,14 @@ END // Raggruppamento righe documenti per lo stesso cli/fo SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+LF_DOC->OCFPI - NUMBER 101 10 + NUMERO 101 10 BEGIN PROMPT 1 1 "" FLAGS "H" MESSAGE RESET,G_TOTALEART@ END - STRING 102 40 2 + STRINGA 102 40 2 BEGIN KEY "Descrizione documento" PROMPT 2 1 "" @@ -181,7 +181,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ FLAGS "D" END - STRING 103 4 + STRINGA 103 4 BEGIN KEY "Codice Valuta" PROMPT 3 1 "" @@ -223,17 +223,17 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ SECTION RIGHEDOC 2 1 1 FILE LF_RIGHEDOC GROUP ANNO+NDOC // changes into CODART grouping FLAGS "D" // Da abilitare solo su dettaglio righe - NUMBER 201 10 + NUMERO 201 10 BEGIN PROMPT 1 1 "" END - STRING 202 40 2 + STRINGA 202 40 2 BEGIN KEY "Descrizione articolo" PROMPT 2 1 "" MESSAGE _STREXPR,"**Art. "+LF_RIGHEDOC->CODART+" "+LF_ANAMAG->DESCR END - STRING 203 4 + STRINGA 203 4 BEGIN KEY "Codice Valuta" PROMPT 3 1 "" @@ -264,7 +264,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ PROMPT 7 1 "" FIELD LF_RIGHEDOC->UMQTA END - NUMBER 208 13 + NUMERO 208 13 BEGIN KEY "Q.ta Ordinata" PROMPT 8 1 "" @@ -272,7 +272,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ PICTURE "#@,@@@" END - NUMBER 209 13 + NUMERO 209 13 BEGIN KEY "Q.ta Evasa" PROMPT 9 1 "" @@ -287,13 +287,13 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ DRIVENBY 203 FLAGS "U" END - NUMBER 211 15 + NUMERO 211 15 BEGIN PROMPT 11 1 "" // Residuo PICTURE "########@,@@@@@" MESSAGE _ORDINE,RESIDUO END - NUMBER 212 15 + NUMERO 212 15 BEGIN PROMPT 12 1 "" // Giacenza attuale PICTURE "########@,@@@@@" @@ -305,19 +305,19 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ SECTION RIGHEART 1 0 0 FILE LF_RIGHEDOC GROUP CODVAL+CODART+DATACONS FLAGS "D" - NUMBER 301 10 + NUMERO 301 10 BEGIN PROMPT 1 1 "" FLAGS "H" END - STRING 302 40 2 + STRINGA 302 40 2 BEGIN KEY "Descrizione" PROMPT 2 1 "" MESSAGE _ORDINE,DESCRIZIONE|COPY,402 FLAGS "H" END - STRING 303 4 + STRINGA 303 4 BEGIN KEY "Codice Valuta" PROMPT 3 1 "" @@ -359,14 +359,14 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ MESSAGE _ORDINE,SELECTUM|COPY,407 FLAGS "H" END - NUMBER 308 13 + NUMERO 308 13 BEGIN KEY "Q.ta Ordinata" PROMPT 8 1 "" MESSAGE _ORDINE,QTA|_ORDINE,CONVUM|ADD,408 FLAGS "H" END - NUMBER 309 13 + NUMERO 309 13 BEGIN KEY "Q.ta Evasa" PROMPT 9 1 "" @@ -381,14 +381,14 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ DRIVENBY 303 FLAGS "HU" END - NUMBER 311 15 + NUMERO 311 15 BEGIN KEY " Residuo" PROMPT 11 1 "" MESSAGE _ORDINE,RESIDUO|_ORDINE,CONVUM|ADD,411 FLAGS "H" END - NUMBER 312 15 + NUMERO 312 15 BEGIN KEY "Giacenza attuale" PROMPT 12 1 "" @@ -398,7 +398,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ END // END SECTION RIGHEART // Totalizers for previous section - NUMBER 401 10 + NUMERO 401 10 BEGIN PROMPT 1 1 "" FLAGS "D" @@ -444,7 +444,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ FLAGS "D" GROUP G_TOTALEART END - NUMBER 408 13 + NUMERO 408 13 BEGIN KEY "Q.ta Ordinata" PROMPT 8 1 "" @@ -452,7 +452,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ FLAGS "D" GROUP G_TOTALEART END - NUMBER 409 13 + NUMERO 409 13 BEGIN KEY "Q.ta Evasa" PROMPT 9 1 "" @@ -468,7 +468,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ FLAGS "DU" GROUP G_TOTALEART END - NUMBER 411 15 + NUMERO 411 15 BEGIN KEY "Residuo" PROMPT 11 1 "" @@ -476,7 +476,7 @@ SECTION DOCUMENTI 2 1 1 FILE LF_RIGHEDOC GROUP LF_CLIFO->TIPOCF+LF_CLIFO->CODCF+ FLAGS "D" GROUP G_TOTALEART END - NUMBER 412 15 + NUMERO 412 15 BEGIN KEY "Giac. attuale" PROMPT 12 1 "" @@ -491,12 +491,12 @@ END // END SECTION DOCUMENTI SECTION TOTVAL1 3 0 1 GROUP FLAGS "D" - NUMBER 51 10 + NUMERO 51 10 BEGIN PROMPT 1 1 "" END - STRING 52 40 + STRINGA 52 40 BEGIN PROMPT 2 1 "" END @@ -530,12 +530,12 @@ END // Fine sezione totale in valuta #1 SECTION TOTVAL2 1 0 1 GROUP FLAGS "D" - NUMBER 61 10 + NUMERO 61 10 BEGIN PROMPT 1 1 "" END - STRING 62 40 + STRINGA 62 40 BEGIN PROMPT 2 1 "" END @@ -569,12 +569,12 @@ END // Fine sezione totale in valuta #2 SECTION TOTVAL3 1 0 1 GROUP FLAGS "D" - NUMBER 71 10 + NUMERO 71 10 BEGIN PROMPT 1 1 "" END - STRING 72 40 + STRINGA 72 40 BEGIN PROMPT 2 1 "" END @@ -607,12 +607,12 @@ END // Fine sezione totale in valuta #3 SECTION TOTVAL4 1 0 1 GROUP FLAGS "D" - NUMBER 81 10 + NUMERO 81 10 BEGIN PROMPT 1 1 "" END - STRING 82 40 + STRINGA 82 40 BEGIN PROMPT 2 1 "" END @@ -645,3 +645,4 @@ END // Fine sezione totale in valuta #4 END // End of Body +END // End of Form diff --git a/or/or1200.cpp b/or/or1200.cpp index fb2591ff3..7cc1d3b33 100755 --- a/or/or1200.cpp +++ b/or/or1200.cpp @@ -120,9 +120,9 @@ void TStampa_dettaglio_articoli::set_date_array() } } + void TStampa_dettaglio_articoli::set_form() { - CHECK(_frm,"Invalid form"); _frm->set_options(_detail_level, _detail_mag, _detail_dep, _giac_eff, _val_comp, &_date_array); @@ -130,9 +130,9 @@ void TStampa_dettaglio_articoli::set_form() TString lev_str, mag_str, s, filter_expr; TSorted_cursor* cur = (TSorted_cursor*)_frm->cursor(); - TDocumento *doc = new TDocumento; // Don't delete it - cur->file().set_curr(doc); - cur->file(LF_RIGHEDOC).set_curr(new TRiga_documento(doc)); +// TDocumento *doc = new TDocumento; // Don't delete it +// cur->file(LF_DOC).set_curr(doc); // File collegato +// cur->file(LF_RIGHEDOC).set_curr(new TRiga_documento(doc)); // File principale if (_detail_level > 0) lev_str.format("LIVELLO[1,%d]",_codgiac->packed_length(_detail_level)); @@ -165,15 +165,17 @@ void TStampa_dettaglio_articoli::set_form() t.put(DOC_CODNUM, _tocodnum); cur->setregion(f,t); // Cursor region -// TDate oggi(TODAY); - // Considera solo i documenti con data consegna compresa tra oggi e la data di osservazione s.format("(ANSI(%d->DATACONS)>=\"%s\")", LF_RIGHEDOC, (const char*)_data_inizio.string(ANSI)); filter_expr << s; - s.format("&& (ANSI(%d->DATACONS)<=\"%s\")", LF_RIGHEDOC, - (const char*)_data_oss.string(ANSI)); - filter_expr << s; + + if (_data_oss.ok()) + { + s.format("&& (ANSI(%d->DATACONS)<=\"%s\")", LF_RIGHEDOC, + (const char*)_data_oss.string(ANSI)); + filter_expr << s; + } // Setta i range per il codice articolo if (_from_art.not_empty()) @@ -239,8 +241,8 @@ void TStampa_dettaglio_articoli::set_form() // Disabilita le colonne in base al numero di periodi da suddividere for (short id = 4+_periods*2; id <= 15; id++) { - _frm->find_field('B',odd_page,id).disable(); - _frm->find_field('B',odd_page,id+50).disable(); + _frm->find_field('B',odd_page,id).disable(); + _frm->find_field('B',odd_page,id+50).disable(); } @@ -267,6 +269,23 @@ void TStampa_dettaglio_articoli::main_loop() _anno = _m->get_int(F_ANNO); _data_inizio = _m->get_date(F_DATE_H); _data_oss = _m->get_date(F_DATAOSS); + if (!_data_oss.ok()) + { + _data_oss = _data_inizio; + _data_oss.set_month(12); + _data_oss.set_day(31); + int anno = _anno; + if (anno <= 0) + { + TEsercizi_contabili ec; + const int codes = ec.last(); + if (codes > 0) + anno = ec[codes].fine().year(); + } + if (anno > _data_oss.year()) + _data_oss.set_year(anno); + } + _from_mag = _m->get(F_MAGFROM); _to_mag = _m->get(F_MAGTO); _from_dep = _m->get(F_DEPFROM); @@ -302,7 +321,17 @@ void TStampa_dettaglio_articoli::main_loop() set_form(); if (_frm->cursor()->items() > 0) + { + TCursor* cur = _frm->cursor(); + TDocumento *doc = new TDocumento; // Don't delete it + cur->file(LF_DOC).set_curr(doc); // File collegato + cur->file(LF_RIGHEDOC).set_curr(new TRiga_documento(doc)); // File principale + _frm->print(); + + cur->file(LF_DOC).set_curr(new TRectype(LF_DOC)); + cur->file(LF_RIGHEDOC).set_curr(new TRectype(LF_RIGHEDOC)); + } // Reset mask _m->reset(); diff --git a/or/or1200a.frm b/or/or1200a.frm index e538ee037..532fe8d8d 100755 --- a/or/or1200a.frm +++ b/or/or1200a.frm @@ -19,7 +19,7 @@ END SECTION HEADER ODD 7 -STRINGA 1 40 1 +STRINGA 1 50 BEGIN KEY "nome ditta" PROMPT 1 1 "Ditta " @@ -29,14 +29,14 @@ END STRINGA 2 10 BEGIN KEY "Data" - PROMPT 106 1 "Data " + PROMPT 100 1 "Data " MESSAGE _TODAY END -NUMERO 3 7 +NUMERO 3 BEGIN KEY "Nr. pagina" - PROMPT 122 1 "Pagina " + PROMPT 122 1 "Pag. " MESSAGE _PAGENO END diff --git a/or/or1200a.uml b/or/or1200a.uml index 8b12569b6..734f38a70 100755 --- a/or/or1200a.uml +++ b/or/or1200a.uml @@ -1,22 +1,22 @@ #include "or1200a.h" -TOOLBAR "" 0 19 0 4 +TOOLBAR "" 0 -3 0 3 BUTTON DLG_PRINT 10 2 BEGIN - PROMPT -12 -1 "" + PROMPT -12 -11 "" END BUTTON DLG_QUIT 10 2 BEGIN - PROMPT -22 -1 "" + PROMPT -22 -11 "" END ENDPAGE PAGE "Disponibilita' articoli" -1 -1 70 16 -GROUPBOX DLG_NULL 40 7 +GROUPBOX DLG_NULL 41 7 BEGIN PROMPT 1 1 "Ordine" END @@ -50,8 +50,8 @@ END DATE F_DATE_H BEGIN - FLAGS "A" PROMTP 2 4 "Data iniziale " + FLAGS "A" CHECKTYPE REQUIRED END @@ -103,7 +103,7 @@ BEGIN ITEM "O|Non evase" END -GROUPBOX DLG_NULL 30 4 +GROUPBOX DLG_NULL 31 4 BEGIN PROMPT 1 10 "Articolo" END @@ -144,7 +144,7 @@ BEGIN PROMPT 36 12 "Valorizza componenti" END -GROUPBOX DLG_NULL 30 4 +GROUPBOX DLG_NULL 31 4 BEGIN PROMPT 1 15 "Magazzino" END diff --git a/or/orlib01.cpp b/or/orlib01.cpp index f96316dae..649fe6ef2 100755 --- a/or/orlib01.cpp +++ b/or/orlib01.cpp @@ -23,8 +23,7 @@ TOrdine_form::~TOrdine_form() const int TOrdine_form::find_period(const TDate& dc) { CHECK(_date_array, "Invalid date array in TOrdine_form"); - const int items = _date_array->items(); - for (int i = items-1; i >= 0; i--) // ciuccialo alla rovescia... ehehe ;) + for (int i = _date_array->last(); i >= 0; i--) // ciuccialo alla rovescia... ehehe ;) { TDate& dt = (TDate&)*_date_array->objptr(i); if (dc > dt) @@ -123,8 +122,8 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s) else if (action == "SELECTUM") { - TString um(rdoc.get(RDOC_UMQTA)); - TString cur_um(cf.find_field("407").get()); + const TString8 um(rdoc.get(RDOC_UMQTA)); + const TString8 cur_um(cf.find_field("407").get()); if (cur_um.empty()) // Se l'unita' di misura non e' ancora stata settata prende quella principale cf.set(um); @@ -132,9 +131,6 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s) if (cur_um != um) // Se c'e' ma e' diversa dalla prec. allora setta l'unita' di misura su quella principale if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR) { - // Converte i totali q.ta evasa e ordinata nella unita' di misura principale - const int index_um = _art_giac->find_um(cur_um); - const real fc = _art_giac->um().row(index_um > 0 ? index_um : 1).get("FC"); TForm_item& qo = cf.find_field("408"); TForm_item& qe = cf.find_field("409"); TForm_item& qr = cf.find_field("411"); @@ -142,9 +138,16 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s) real qtaev(qe.get()); real qtare(qr.get()); - qtaor *= fc; - qtaev *= fc; - qtare *= fc; + // Converte i totali q.ta evasa e ordinata nella unita' di misura principale +// const int index_um = _art_giac->find_um(cur_um); +// const real fc = _art_giac->um().row(index_um > 0 ? index_um : 1).get("FC"); +// qtaor *= fc; +// qtaev *= fc; +// qtare *= fc; + qtaor = _art_giac->convert_to_um(qtaor, "", cur_um, TRUE); + qtaev = _art_giac->convert_to_um(qtaev, "", cur_um, TRUE); + qtare = _art_giac->convert_to_um(qtare, "", cur_um, TRUE); + qo.set(qtaor.string()); qe.set(qtaev.string()); qr.set(qtare.string()); @@ -265,24 +268,24 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s) } // Reperisce fattore di conversione per UM principale, // la quantita residua - real fc = 1.00; // Se non esiste in anagrafica non effettua nessuna conversione - real qtares = rdoc.qtaresidua(); // ZIO PERA! ag völ la riga dal document - //if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR) - fc = _art_giac->um().row(_art_giac->find_um(um)).get_real("FC"); - qtares *= fc; // Convertito in UM principale... + real qtares = rdoc.qtaresidua(); // ZIO PERA! ag völ la riga dal document + qtares = _art_giac->convert_to_um(qtares, "", um, TRUE); qtares *= segno; // mette a posto il segno... // Trova il periodo giusto const int index = find_period(datacons); + if (index >= _totdisp.items()) + _totdisp.add(ZERO, index); // Added by Guy! Should never happen :-) real& rv = (real&) _totdisp[index]; rv += qtares; } else if (command == "PRNUM") // Stampa l'unita' di misura principale { - //if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR) - cf.set(_art_giac->um().row(1).get("UM")); // UM principale - //else - // cf.set("#ERR"); //uhmmm + const TRecord_array& um = _art_giac->um(); + if (um.rows() > 0) // Controlla che ci sia almeno una unita' di misura + cf.set(um.row(1).get("UM")); // UM principale + else + cf.set(""); } else {