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:
parent
2226dedf14
commit
4c02d14038
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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()
|
||||||
{}
|
{}
|
||||||
|
@ -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;}
|
||||||
|
@ -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 == "*")
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user