Patch level : 10.0 486

Files correlati     : ve0.exe
Ricompilazione Demo : [ ]
Commento

Ricerca avanzata sulla sescrizione articoli (cerca anche nella desrcizione estesa)

Nell' ini profilo riga documento bisogna impostare :

EXTDESCSRC = X


git-svn-id: svn://10.65.10.50/trunk@19512 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-10-26 15:51:02 +00:00
parent 2226dedf14
commit 4c02d14038
8 changed files with 135 additions and 51 deletions

View File

@ -2014,14 +2014,16 @@ bool TList_sheet::check(CheckTime t)
TBrowse::TBrowse(TEdit_field* f, TRelation* r, int key, const char* filter) TBrowse::TBrowse(TEdit_field* f, TRelation* r, int key, const char* filter)
: TBrowse_button(f), : TBrowse_button(f),
_relation(r), _cursor(new TCursor (r, "", key)), _relation(r), _cursor(new TCursor (r, "", key)),
_filter(filter), _secondary(FALSE) _filter(filter), _secondary(FALSE),
_custom_filter_handler(NULL)
{} {}
// Certified 100% // Certified 100%
TBrowse::TBrowse(TEdit_field* f, TCursor* c) TBrowse::TBrowse(TEdit_field* f, TCursor* c)
: TBrowse_button(f), : TBrowse_button(f),
_relation(NULL), _cursor(c), _secondary(FALSE) _relation(NULL), _cursor(c), _secondary(FALSE),
_custom_filter_handler(NULL)
{} {}
@ -2703,7 +2705,8 @@ KEY TBrowse::run()
end_wait(); end_wait();
TBrowse_sheet s(_cursor, _items, caption, _head, buttons, field(), siblings); TBrowse_sheet s(_cursor, _items, caption, _head, buttons, field(), siblings, _custom_filter_handler);
k = s.run(); k = s.run();
selected = s.selected(); selected = s.selected();
} }
@ -2751,6 +2754,13 @@ KEY TBrowse::run()
return k; return k;
} }
void TBrowse::set_cursor(TCursor * c)
{
if (_cursor != NULL)
delete _cursor;
_cursor = c ;
}
bool TBrowse::check(CheckTime t) bool TBrowse::check(CheckTime t)
{ {
bool passed = TRUE; bool passed = TRUE;

View File

@ -918,6 +918,8 @@ class TBrowse : public TBrowse_button
TToken_string _out_id; TToken_string _out_id;
// @cmember:(INTERNAL) Campi di output sul file // @cmember:(INTERNAL) Campi di output sul file
TToken_string _out_fn; TToken_string _out_fn;
// @cmember:(INTERNAL) handler di filtro custom
CONTROL_HANDLER _custom_filter_handler;
// @access Protected Member // @access Protected Member
protected: protected:
@ -988,6 +990,12 @@ public:
void set_filter(const char * filter) void set_filter(const char * filter)
{ _filter = filter;} { _filter = filter;}
// @cmember Cambia il cursore della browse
void set_cursor(TCursor * c);
// @cmember Cambia il filtro della browse
void set_custom_filter_handler(CONTROL_HANDLER custom_filter_handler) { _custom_filter_handler = custom_filter_handler;}
// @cmember Controlla la validita' del campo // @cmember Controlla la validita' del campo
bool check(CheckTime = RUNNING_CHECK); bool check(CheckTime = RUNNING_CHECK);
// @cmember Controlla se il campo puo' essere vuoto // @cmember Controlla se il campo puo' essere vuoto

View File

@ -1818,10 +1818,12 @@ void TBrowse_sheet::update_key_selector(int sel)
TBrowse_sheet::TBrowse_sheet(TCursor* cursor, const char* fields, TBrowse_sheet::TBrowse_sheet(TCursor* cursor, const char* fields,
const char* title, const char* head, byte buttons, const char* title, const char* head, byte buttons,
TEdit_field& f, TToken_string& sibling) TEdit_field& f, TToken_string& sibling, CONTROL_HANDLER custom_filter_handler)
: TCursor_sheet(cursor, fields, title, head, buttons, : TCursor_sheet(cursor, fields, title, head, buttons,
f.browse() ? f.browse()->input_fields()+1 : 1), f.browse() ? f.browse()->input_fields()+1 : 1),
_field(f), _sel(0), _original_filter(cursor->filter()) _field(f), _sel(0), _original_filter(cursor->filter()),
_custom_filter_handler(custom_filter_handler)
{ {
const bool normal = f.browse() != NULL && sibling.full(); const bool normal = f.browse() != NULL && sibling.full();
@ -1909,14 +1911,14 @@ TBrowse_sheet::TBrowse_sheet(TCursor* cursor, const char* fields,
const int sz = csize > 50 ? 50 : csize; // Dimensione del campo di ricerca const int sz = csize > 50 ? 50 : csize; // Dimensione del campo di ricerca
e = &add_string(c.dlg(), 0, p, 1, y++, csize, flags, sz); e = &add_string(c.dlg(), 0, p, 1, y++, csize, flags, sz);
// Aggiunge campo con le icone di filtraggio // Aggiunge campo con le icone di filtraggio
add_checkbutton(c.dlg()+500, 0, "", sz+p.len()+ 2, y-1, 2, 1, "", 10112, 10113).set_handler(filter_handler); add_checkbutton(c.dlg()+500, 0, "", sz+p.len()+ 2, y-1, 2, 1, "", 10112, 10113).set_handler(_custom_filter_handler != NULL ? _custom_filter_handler : filter_handler);
} }
break; break;
case CLASS_ZOOM_FIELD: case CLASS_ZOOM_FIELD:
{ {
e = &add_string(c.dlg(), 0, p, 1, y++, 32000, flags, 50); e = &add_string(c.dlg(), 0, p, 1, y++, 32000, flags, 50);
// Aggiunge campo con le icone di filtraggio // Aggiunge campo con le icone di filtraggio
add_checkbutton(c.dlg()+500, 0, "", 52 + p.len(), y-1, 2, 1, "", 10112, 10113).set_handler(filter_handler); add_checkbutton(c.dlg()+500, 0, "", 52 + p.len(), y-1, 2, 1, "", 10112, 10113).set_handler(_custom_filter_handler != NULL ? _custom_filter_handler : filter_handler);
} }
break; break;
case CLASS_REAL_FIELD: case CLASS_REAL_FIELD:

View File

@ -232,7 +232,9 @@ class TBrowse_sheet : public TCursor_sheet
// @cmember:(INTERNAL) Campo di ricerca attuale (Tag button selezionato) // @cmember:(INTERNAL) Campo di ricerca attuale (Tag button selezionato)
int _sel; int _sel;
CONTROL_HANDLER _custom_filter_handler;
// long _select_row; // long _select_row;
// @access Protected Member // @access Protected Member
@ -247,7 +249,6 @@ protected:
void create_key_selector(TToken_string& ca); void create_key_selector(TToken_string& ca);
void update_key_selector(int sel); void update_key_selector(int sel);
void add_custom_filter(const char* regexp);
static bool browse_field_handler(TMask_field& f, KEY k); static bool browse_field_handler(TMask_field& f, KEY k);
static bool last_browse_field_handler(TMask_field& f, KEY k); static bool last_browse_field_handler(TMask_field& f, KEY k);
@ -255,8 +256,12 @@ protected:
// @access Public Member // @access Public Member
public: public:
void add_custom_filter(const char* regexp);
void set_custom_filter_handler(CONTROL_HANDLER custom_filter_handler) { _custom_filter_handler = custom_filter_handler;}
// @cmember Costruttore // @cmember Costruttore
TBrowse_sheet(TCursor* cursor, const char* fields, const char* title, const char* head, byte buttons, TEdit_field& f, TToken_string& siblings); TBrowse_sheet(TCursor* cursor, const char* fields, const char* title, const char* head, byte buttons, TEdit_field& f, TToken_string& siblings,CONTROL_HANDLER custom_filter_handler = NULL);
// @cmember Distruttore // @cmember Distruttore
virtual ~TBrowse_sheet() virtual ~TBrowse_sheet()
{} {}

View File

@ -401,6 +401,7 @@ class TTipo_riga_documento : public TRectype // velib02
int _search_years; int _search_years;
int _max_rows_art; int _max_rows_art;
bool _no_desc; bool _no_desc;
bool _extended_desc_search;
TToken_string _search_active_docs; TToken_string _search_active_docs;
TToken_string _fields_to_update; TToken_string _fields_to_update;
TToken_string _field_list; TToken_string _field_list;
@ -439,6 +440,7 @@ public:
const TToken_string& search_nums() const { return _search_nums;} const TToken_string& search_nums() const { return _search_nums;}
const int max_rows_art() const { return _max_rows_art;} const int max_rows_art() const { return _max_rows_art;}
bool no_desc() const { return _no_desc;} bool no_desc() const { return _no_desc;}
bool extended_desc_search() const { return _extended_desc_search;}
TToken_string& search_active_docs() { return _search_active_docs;} TToken_string& search_active_docs() { return _search_active_docs;}
TToken_string& fields_to_update() { return _fields_to_update;} TToken_string& fields_to_update() { return _fields_to_update;}
TToken_string& field_list() { return _field_list;} TToken_string& field_list() { return _field_list;}

View File

@ -75,6 +75,7 @@ void TTipo_riga_documento::read_formule()
_select_clifo = profile.get_bool("SELCLIFO", NULL, -1, true); _select_clifo = profile.get_bool("SELCLIFO", NULL, -1, true);
_no_desc = profile.get_bool("NODESC"); _no_desc = profile.get_bool("NODESC");
_formule = profile.get("CAMPICALC"); _formule = profile.get("CAMPICALC");
_extended_desc_search = profile.get_bool("EXTDESCSRC");
const TString& calcoli = profile.get("CALCOLI"); const TString& calcoli = profile.get("CALCOLI");
if (calcoli == "*") if (calcoli == "*")

View File

@ -1154,6 +1154,26 @@ bool TDocumento_mask::new_mask(int numriga) const
return _maskriga.objptr(name) == NULL; return _maskriga.objptr(name) == NULL;
} }
static bool descr_filter_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TString expr;
if (!f.get().empty()) // Filtro attivato!
{
const short id = f.dlg()-500;
TString e = f.mask().get(id); // Espressione regolare
e.strip("\"'"); // Tolgo caratteri che potrebbero dare problemi
if (!e.blank())
expr << "(DESCR+DESCRAGG)" << "?=\"" << e << '"';
if (expr.empty())
f.reset();
}
((TBrowse_sheet&) f.mask()).add_custom_filter(expr);
}
return true;
}
TVariable_mask* TDocumento_mask::riga_mask(int numriga) TVariable_mask* TDocumento_mask::riga_mask(int numriga)
{ {
const TRiga_documento& riga = doc()[numriga + 1]; const TRiga_documento& riga = doc()[numriga + 1];
@ -1177,7 +1197,7 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
m->lfield(FR_TIPORIGA).replace_items(codes, values); m->lfield(FR_TIPORIGA).replace_items(codes, values);
const int pos = m->id2pos(FR_CODART); int pos = m->id2pos(FR_CODART);
if (pos >= 0) if (pos >= 0)
{ {
const TMask_field & f = m->fld(pos); const TMask_field & f = m->fld(pos);
@ -1222,6 +1242,27 @@ TVariable_mask* TDocumento_mask::riga_mask(int numriga)
} }
} }
} }
if (tiporiga.extended_desc_search())
{
pos = m->id2pos(FR_DESCRART);
if (pos >= 0)
{
const TMask_field & f = m->fld(pos);
if (f.is_edit())
{
TBrowse * browse = ((TEdit_field &) f).browse();
if (browse )
{
TRelation * r = new TRelation(LF_ANAMAG);
TSorted_cursor * c = new TSorted_cursor(r,ANAMAG_DESCR "|" ANAMAG_DESCRAGG, "", 2);
browse->set_cursor(c);
browse->set_custom_filter_handler(descr_filter_handler);
}
}
}
}
m->set_handler(FR_QTAEVASA, qta_evasa_handler); m->set_handler(FR_QTAEVASA, qta_evasa_handler);
m->set_handler(FR_CAUS, causmag_handler); m->set_handler(FR_CAUS, causmag_handler);

View File

@ -1663,7 +1663,11 @@ bool codart_handler(TMask_field& f, KEY key )
const TString& descest = anamag.get("DESCRAGG"); const TString& descest = anamag.get("DESCRAGG");
if (descest.not_empty()) if (descest.not_empty())
desc << "\n" << descest; {
if (!mask.doc()[current_doc_row].tipo().extended_desc_search())
desc << "\n";
desc << descest;
}
if (!mask.doc()[current_doc_row].tipo().no_desc()) if (!mask.doc()[current_doc_row].tipo().no_desc())
row_mask.set(FR_DESCR, desc); row_mask.set(FR_DESCR, desc);
@ -2018,15 +2022,29 @@ bool um_handler( TMask_field& f, KEY key )
bool descr_handler( TMask_field& f, KEY key ) bool descr_handler( TMask_field& f, KEY key )
{ {
if (key == K_TAB && f.focusdirty() && f.mask().is_running()) if (key == K_TAB && f.focusdirty())
{ {
const TString& s = f.get(); TMask& row_mask = f.mask( );
if (s.find('\n') < 0) TSheet_field& sh = *row_mask.get_sheet();
TDocumento_mask & mask = (TDocumento_mask &)sh.mask();
const TTipo_riga_documento & t = mask.doc()[sh.selected() + 1].tipo();
if (t.extended_desc_search())
{ {
TLocalisamfile& anamag = ((TEdit_field&)f).browse()->cursor()->file(); TLocalisamfile& anamag = ((TEdit_field&)f).browse()->cursor()->file();
if (s == anamag.get(ANAMAG_DESCR)) f.mask().set(FR_CODART, anamag.get(ANAMAG_CODART), 3);
f.mask().set(FR_CODART, anamag.get(ANAMAG_CODART), 3);
} }
else
if (f.mask().is_running())
{
const TString& s = f.get();
if (s.find('\n') < 0)
{
TLocalisamfile& anamag = ((TEdit_field&)f).browse()->cursor()->file();
if (s == anamag.get(ANAMAG_DESCR))
f.mask().set(FR_CODART, anamag.get(ANAMAG_CODART), 3);
}
}
} }
return true; return true;
} }
@ -2805,53 +2823,50 @@ bool gen_livelli_handler(TMask_field& f, KEY key )
const TRectype & anamag = cache().get(LF_ANAMAG, codart); const TRectype & anamag = cache().get(LF_ANAMAG, codart);
const int items = str->items(); const int items = str->items();
if (anamag.get_bool(ANAMAG_ARTPROD)) for (int i = 0; i < items; i++)
{ {
for (int i = 0; i < items; i++) const TString & name = str->get(i);
if (name.starts_with("PROG"))
{ {
const TString & name = str->get(i); TTable mat(format("VE%1d", livello + 1));
if (name.starts_with("PROG")) const int chars = atoi(name.after("PROG"));
{
TTable mat(format("VE%1d", livello + 1));
const int chars = atoi(name.after("PROG"));
mat.put("CODTAB", code);
if (mat.read(_isequal) != NOERR)
{
mat.zero();
mat.put("CODTAB", code); mat.put("CODTAB", code);
if (mat.read(_isequal) != NOERR) mat.write();
{ }
mat.zero(); const int prog = mat.get_int("I0") + 1;
mat.put("CODTAB", code); mat.put("I0", prog);
mat.write(); mat.rewrite();
} TString s; s << prog; s.lpad(chars, '0');
const int prog = mat.get_int("I0") + 1; code << s;
mat.put("I0", prog); }
mat.rewrite(); else
TString s; s << prog; s.lpad(chars, '0'); if (name.starts_with("33."))
code << s; {
TFieldref fld(name.after("33."), LF_DOC);
code << fld.read(d);
} }
else else
if (name.starts_with("33.")) if (name.starts_with("34."))
{ {
TFieldref fld(name.after("33."), LF_DOC); TFieldref fld(name.after("34."), LF_RIGHEDOC);
code << fld.read(d); code << fld.read(r);
} }
else else
if (name.starts_with("34.")) if (name.starts_with("47."))
{ {
TFieldref fld(name.after("34."), LF_RIGHEDOC); TFieldref fld(name.after("47."), LF_ANAMAG);
code << fld.read(r); code << fld.read(anamag);
} }
else
if (name.starts_with("47."))
{
TFieldref fld(name.after("47."), LF_ANAMAG);
code << fld.read(anamag);
}
}
row_mask.set(f.dlg(), code, 0x3);
} }
row_mask.set(f.dlg(), code, 0x3);
} }
} }
} }