From 211728c14bab0f91aac37d4ca3cc5f086d30fdf7 Mon Sep 17 00:00:00 2001 From: luca Date: Wed, 7 Oct 2009 10:28:12 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@19397 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/ve2700.cpp | 99 ++++++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 44 deletions(-) diff --git a/ve/ve2700.cpp b/ve/ve2700.cpp index 0ba589f01..eca347f85 100755 --- a/ve/ve2700.cpp +++ b/ve/ve2700.cpp @@ -183,7 +183,7 @@ int TAggiorna_listini_edit_mask::find_codart(TSheet_field& sf, const TString& co for (int i = 1; i < sf.items(); i += 2) { const char* art = sf.cell(i, codart_pos); - TString4 um = sf.cell(i, codum_pos); + TString4 um = sf.cell(i - 1, codum_pos); um.trim(); if (codart == art && codum == um) return i - 1; @@ -212,64 +212,75 @@ void TAggiorna_listini_edit_mask::fill_multilistini_sheet() //..viene aggiunta al padre medesimo (i padri devono sapere tutto dei figli, sennò che genitori sono?) //se invece la riga appartiene al padre e non a uno o più figli questi ultimi saranno lasciati nella.. //..loro ignoranza di tale riga (un padre qualche vantaggio dovrà pur averlo, no?) - TString query; - query << "USE RCONDV\n"; - query << "SELECT (TIPORIGA=\"A\")&&(ANAMAG.GRMERC=#GRMERC)&&(((CATVEN=#FATHCATVEN)&&(COD=#FATHCOD))"; - //giro su tutti i figli nello sheet dei figli + + TToken_string keys_listini(140, ';'); + TToken_string key; + + key.add(get(F_FATHCATVEN)); + key.add(get(F_FATHCODLIS)); + key.trim(); + keys_listini.add(key); + TSheet_field& sf_figli = sfield(F_LISTINI_FIGLI); - TToken_string keys_figli(140, ';'); + FOR_EACH_SHEET_ROW(sf_figli, r, riga) { - TToken_string key; + key.cut(0); key.add(riga->get(0)); key.add(riga->get(1)); key.trim(); - keys_figli.add(key); - //prosegue la select - query << "||((CATVEN=\"" << key.get(0) << "\")&&(COD=\"" << key.get(1) << "\"))"; + keys_listini.add(key); } - query << ")\n"; - query << "JOIN ANAMAG INTO CODART==CODRIGA\n"; - query << "FROM TIPO=L\n"; - query << "TO TIPO=L\n"; - - TISAM_recordset recset_rows(query); - TString8 grmerc; - grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC)); - recset_rows.set_var("#GRMERC", grmerc); - recset_rows.set_var("#FATHCATVEN", get(F_FATHCATVEN)); - recset_rows.set_var("#FATHCOD", get(F_FATHCODLIS)); - const long recset_rows_items = recset_rows.items(); - TProgind pi(recset_rows_items, TR("Creazione righe listini..."), true, true); + TProgind pi(keys_listini.items(), TR("Creazione righe listini..."), true, true); TSheet_field& sf_multilistini = sfield(F_MULTILISTINI); + sf_multilistini.destroy(); + const int prezzo_pos = sf_multilistini.cid2index(F_PREZZO); - //per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga) - for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next()) + FOR_EACH_TOKEN(keys_listini, tok) { if (!pi.addstatus(1)) break; - //dati riga corrente - const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string(); - const TString& um = recset_rows.get(RCONDV_UM).as_string(); - const real prezzo = recset_rows.get(RCONDV_PREZZO).as_real(); - //cerca se esiste o se deve aggiungerla: la find_codart restituisce il numero della riga alta.. - //..(descrizione/um) del codart in questione (che starà la riga sotto, ovvero riga_alta+1) - const int riga_alta = find_codart(sf_multilistini, codart, um); + key = tok; + TString query; + query << "USE RCONDV\n"; + query << "SELECT ANAMAG.GRMERC=#GRMERC\n"; + //giro su tutti i figli nello sheet dei figli + query << "JOIN ANAMAG INTO CODART==CODRIGA\n"; + query << "FROM TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n"; + query << "TO TIPO=L CATVEN=#CATVEN COD=#COD TIPORIGA=A\n"; - TToken_string riga_key; - riga_key.add(recset_rows.get(RCONDV_CATVEN).as_string()); - riga_key.add(recset_rows.get(RCONDV_COD).as_string()); - riga_key.trim(); - //mette il prezzo al posto giusto (padre e figlio) - const int pos = keys_figli.get_pos(riga_key); - if (pos < 0) - sf_multilistini.row(riga_alta + 1).add(prezzo.string(), prezzo_pos); - else - sf_multilistini.row(riga_alta).add(prezzo.string(), prezzo_pos + 1 + pos); - } + TISAM_recordset recset_rows(query); + TString8 grmerc; + grmerc.format("%-3s%-2s", (const char*)get(F_GRMERC),(const char*)get(F_SOTGRMERC)); + recset_rows.set_var("#GRMERC", grmerc); + recset_rows.set_var("#CATVEN", key.get(0)); + recset_rows.set_var("#COD", key.get(1)); + const long recset_rows_items = recset_rows.items(); + + //posizione dell'attuale prezzo + const int pos = keys_listini.get_pos(key); + + //per ogni riga del recordset va ad aggiornare lo sheet sulla maschera (aggiunge la riga) + for (bool ok = recset_rows.move_first(); ok; ok = recset_rows.move_next()) + { + //dati riga corrente + const TString& codart = recset_rows.get(RCONDV_CODRIGA).as_string(); + const TString& um = recset_rows.get(RCONDV_UM).as_string(); + const real prezzo = recset_rows.get(RCONDV_PREZZO).as_real(); + //cerca se esiste o se deve aggiungerla: la find_codart restituisce il numero della riga alta.. + //..(descrizione/um) del codart in questione (che starà la riga sotto, ovvero riga_alta+1) + const int riga_alta = find_codart(sf_multilistini, codart, um); + + //mette il prezzo al posto giusto (padre e figlio) + if (pos <= 0) + sf_multilistini.row(riga_alta + 1).add(prezzo.string(), prezzo_pos); + else + sf_multilistini.row(riga_alta).add(prezzo.string(), prezzo_pos + pos); + } //for(bool ok.. + } //FOR_EACH_TOKEN.. //aggiorna i prezzi nuovi dei listini figli update_sons_prices(); @@ -291,7 +302,7 @@ void TAggiorna_listini_edit_mask::update_sons_prices() const int son_prezzo_pos = fath_prezzo_pos + 1 + r; FOR_EACH_SHEET_ROW(sf_listini, i, riga) if (riga->get_char(0) > ' ') //è come dire checked (ignoranti!) { - const real old_son_prezzo = sf_listini.cell(r - 1, son_prezzo_pos); + const real old_son_prezzo = sf_listini.cell(i - 1, son_prezzo_pos); if (old_son_prezzo > ZERO) { const real fath_prezzo = riga->get(fath_prezzo_pos);