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
This commit is contained in:
luca 2011-05-12 08:50:57 +00:00
parent af8c6eb1fe
commit 4f46730350

View File

@ -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);