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_button(f),
_relation(r), _cursor(new TCursor (r, "", key)),
_filter(filter), _secondary(FALSE)
_filter(filter), _secondary(FALSE),
_custom_filter_handler(NULL)
{}
// Certified 100%
TBrowse::TBrowse(TEdit_field* f, TCursor* c)
: 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();
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();
selected = s.selected();
}
@ -2751,6 +2754,13 @@ KEY TBrowse::run()
return k;
}
void TBrowse::set_cursor(TCursor * c)
{
if (_cursor != NULL)
delete _cursor;
_cursor = c ;
}
bool TBrowse::check(CheckTime t)
{
bool passed = TRUE;

View File

@ -918,6 +918,8 @@ class TBrowse : public TBrowse_button
TToken_string _out_id;
// @cmember:(INTERNAL) Campi di output sul file
TToken_string _out_fn;
// @cmember:(INTERNAL) handler di filtro custom
CONTROL_HANDLER _custom_filter_handler;
// @access Protected Member
protected:
@ -988,6 +990,12 @@ public:
void set_filter(const char * 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
bool check(CheckTime = RUNNING_CHECK);
// @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,
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,
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();
@ -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
e = &add_string(c.dlg(), 0, p, 1, y++, csize, flags, sz);
// 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;
case CLASS_ZOOM_FIELD:
{
e = &add_string(c.dlg(), 0, p, 1, y++, 32000, flags, 50);
// 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;
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)
int _sel;
CONTROL_HANDLER _custom_filter_handler;
// long _select_row;
// @access Protected Member
@ -247,7 +249,6 @@ protected:
void create_key_selector(TToken_string& ca);
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 last_browse_field_handler(TMask_field& f, KEY k);
@ -255,8 +256,12 @@ protected:
// @access Public Member
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
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
virtual ~TBrowse_sheet()
{}

View File

@ -401,6 +401,7 @@ class TTipo_riga_documento : public TRectype // velib02
int _search_years;
int _max_rows_art;
bool _no_desc;
bool _extended_desc_search;
TToken_string _search_active_docs;
TToken_string _fields_to_update;
TToken_string _field_list;
@ -439,6 +440,7 @@ public:
const TToken_string& search_nums() const { return _search_nums;}
const int max_rows_art() const { return _max_rows_art;}
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& fields_to_update() { return _fields_to_update;}
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);
_no_desc = profile.get_bool("NODESC");
_formule = profile.get("CAMPICALC");
_extended_desc_search = profile.get_bool("EXTDESCSRC");
const TString& calcoli = profile.get("CALCOLI");
if (calcoli == "*")

View File

@ -1154,6 +1154,26 @@ bool TDocumento_mask::new_mask(int numriga) const
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)
{
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);
const int pos = m->id2pos(FR_CODART);
int pos = m->id2pos(FR_CODART);
if (pos >= 0)
{
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_CAUS, causmag_handler);

View File

@ -1663,7 +1663,11 @@ bool codart_handler(TMask_field& f, KEY key )
const TString& descest = anamag.get("DESCRAGG");
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())
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 )
{
if (key == K_TAB && f.focusdirty() && f.mask().is_running())
if (key == K_TAB && f.focusdirty())
{
const TString& s = f.get();
if (s.find('\n') < 0)
TMask& row_mask = f.mask( );
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();
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;
}
@ -2805,53 +2823,50 @@ bool gen_livelli_handler(TMask_field& f, KEY key )
const TRectype & anamag = cache().get(LF_ANAMAG, codart);
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);
if (name.starts_with("PROG"))
{
TTable mat(format("VE%1d", livello + 1));
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);
if (mat.read(_isequal) != NOERR)
{
mat.zero();
mat.put("CODTAB", code);
mat.write();
}
const int prog = mat.get_int("I0") + 1;
mat.put("I0", prog);
mat.rewrite();
TString s; s << prog; s.lpad(chars, '0');
code << s;
mat.write();
}
const int prog = mat.get_int("I0") + 1;
mat.put("I0", prog);
mat.rewrite();
TString s; s << prog; s.lpad(chars, '0');
code << s;
}
else
if (name.starts_with("33."))
{
TFieldref fld(name.after("33."), LF_DOC);
code << fld.read(d);
}
else
if (name.starts_with("33."))
if (name.starts_with("34."))
{
TFieldref fld(name.after("33."), LF_DOC);
code << fld.read(d);
TFieldref fld(name.after("34."), LF_RIGHEDOC);
code << fld.read(r);
}
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);
}
}
}