From 4f46730350f5e84cafb2d170ec4d727481cdbdee Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 12 May 2011 08:50:57 +0000 Subject: [PATCH] Patch level :10.0 Files correlati : Ricompilazione Demo : [ ] Commento : cambiato il modo di fare la query sui documenti! adesso usa una custom_filter anziche una SELECT nella query; questo perche' la select era diventata piu' lunga di 256 caratteri in quanto le commesse di supporto si erano moltiplicate come i pani e i pesci! git-svn-id: svn://10.65.10.50/branches/R_10_00@22095 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ps/ps1001300.cpp | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/ps/ps1001300.cpp b/ps/ps1001300.cpp index 1a1eccc49..a0d4487f6 100755 --- a/ps/ps1001300.cpp +++ b/ps/ps1001300.cpp @@ -105,6 +105,42 @@ static int compare_by_fase(TSheet_field & s, int r1, int r2) return cmp; } + +/////////////////////////////////////////////////////////// +// Recordset +/////////////////////////////////////////////////////////// +static TToken_string _commesse_supporto; + +class TCommesse_supporto_recordset : public TISAM_recordset +{ + static bool cms_supp_filter(const TRelation* rel); + +protected: + virtual void set_custom_filter(TCursor& cursor) const; + +public: + TCommesse_supporto_recordset(const TString& query, const TToken_string& lista_cms_supp); +}; + +bool TCommesse_supporto_recordset::cms_supp_filter(const TRelation* rel) +{ + const TString& curr_codcms = rel->curr().get(RDOC_CODCMS); + return _commesse_supporto.get_pos(curr_codcms) >= 0; +} + +void TCommesse_supporto_recordset::set_custom_filter(TCursor& cursor) const +{ + if (!_commesse_supporto.empty_items()) + cursor.set_filterfunction(cms_supp_filter); +} + + +TCommesse_supporto_recordset::TCommesse_supporto_recordset(const TString& query, const TToken_string& lista_cms_supp) + :TISAM_recordset(query) +{ + _commesse_supporto = lista_cms_supp; +} + /////////////////////////////////////////////////////////// // TAutomask /////////////////////////////////////////////////////////// @@ -1227,17 +1263,14 @@ void TVariazione_budget_mask::calcola_impegnato(const TString& cms, const bool i //cerca tutte le righe documento che soddisfano i numerosi parametri TString query; query << "USE RDOC"; - query << "\nSELECT ("; - //query << "\nSELECT (RIGAEVASA!=\"X\")&&("; originale con solo righe inevase - FOR_EACH_TOKEN(_cms_supporto, codcms) - query << "(CODCMS==\"" << codcms << "\")||"; - query.rtrim(2); - query << ')'; query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC"; //le testate servono per controllo tipo (vedi sotto) query << "\nFROM CODNUM=#CODNUM ANNO=#DAANNO"; query << "\nTO CODNUM=#CODNUM ANNO=#AANNO"; - TISAM_recordset recset(query); + //usando il magico TCommesse_supporto_recordset vengono scartate tutte le righedoc che non hanno commessa corretta,.. + //..ovvero le commesse che non appartengono alla lista _cms_supporto + TCommesse_supporto_recordset recset(query, _cms_supporto); + recset.set_var("#CODNUM", codnum); recset.set_var("#DAANNO", (long)da_anno); recset.set_var("#AANNO", (long)a_anno);