Patch level : 2.1 104

Files correlati     : ve0.exe
Ricompilazione Demo : [ ]
Commento            :
Aggiungere nella mashera di ricerca la ditta la ragione sociale del cliente con ricerca risistemare le colonne nella ricerca per cliente e riferimento (aggiungere totale documento)


git-svn-id: svn://10.65.10.50/trunk@12287 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2004-09-03 13:47:38 +00:00
parent 8a50f74505
commit dd1d626095
2 changed files with 187 additions and 58 deletions

View File

@ -2025,7 +2025,7 @@ void TSystemisamfile::makelc(TRectype& rec)
int TSystemisamfile::update( int TSystemisamfile::update(
const TTrec& newrec, // @parm Nuovo tracciato record con cui aggiornare il file const TTrec& newrec, // @parm Nuovo tracciato record con cui aggiornare il file
bool vis) // @parm Indica se visualizzare lo stato dell'operazione bool interactive) // @parm Indica se riportare i campi personalizzati (!interactive
{ {
CHECK(newrec.len() != 0, "Can't update file with empty field info"); CHECK(newrec.len() != 0, "Can't update file with empty field info");
@ -2081,7 +2081,7 @@ int TSystemisamfile::update(
for (int j = 0; j < oldfields; j++) for (int j = 0; j < oldfields; j++)
{ {
def = oldrec.fielddef(j); def = oldrec.fielddef(j);
if (def.get(0)[0] == '_') if (!interactive && (def.get(0)[0] == '_'))
{ {
if (newrec.field(def) == FIELDERR) if (newrec.field(def) == FIELDERR)
{ {
@ -2092,6 +2092,8 @@ int TSystemisamfile::update(
(const char *) def.get(0))) (const char *) def.get(0)))
return NOERR; return NOERR;
} }
} }
} }
if (wfields < newfields) if (wfields < newfields)
@ -3597,7 +3599,17 @@ bool TRectype::edit(int logicnum, const char* alternate_key_fields, const char*
void TRecfield::set(int from, int to) void TRecfield::set(int from, int to)
{ {
const RecDes* rd = _rec->rec_des(); const RecDes* rd = _rec->rec_des();
_subfield = strchr(_name, ':');
if (_subfield != NULL)
{
*_subfield = '\0';
_subfield++;
strcat(_subfield, "=");
}
const int nf = findfld(rd, _name); const int nf = findfld(rd, _name);
if (nf == FIELDERR) if (nf == FIELDERR)
{ {
NFCHECK("File n. %d unknown field %s", _rec->num(), _name); NFCHECK("File n. %d unknown field %s", _rec->num(), _name);
@ -3613,16 +3625,30 @@ void TRecfield::set(int from, int to)
NFCHECK("Invalid Start %d", from); NFCHECK("Invalid Start %d", from);
from = 0; from = 0;
} }
_p = _rec->string() + rd->Fd[nf].RecOff + from; _p = _rec->string() + rd->Fd[nf].RecOff;
_dec = rd->Fd[nf].Dec; _dec = rd->Fd[nf].Dec;
_type = (TFieldtypes)rd->Fd[nf].TypeF; _type = (TFieldtypes)rd->Fd[nf].TypeF;
if (to >= 0) if (_subfield == NULL)
{ {
CHECK(from <= to && to <= rd->Fd[nf].Len, "Invalid Range"); _p += from;
_len = to - from + 1; if (to >= 0)
} {
else CHECK(from <= to && to <= rd->Fd[nf].Len, "Invalid Range");
_len = rd->Fd[nf].Len - from; _len = to - from + 1;
}
else
_len = rd->Fd[nf].Len - from;
}
else
{
CHECK(_type == _memofld, "You can use Subfields only with Memo");
_from = from;
_to = to;
if (_type == _memofld)
_len = 0;
else
_len = rd->Fd[nf].Len;
}
} }
} }
@ -3633,11 +3659,44 @@ TRecfield::TRecfield(TRectype& rec, const char* name, int from, int to)
set(from, to); set(from, to);
} }
void TRecfield::put_subfield(const char* s)
{
const TString& str = _rec->get(_name);
int p = str.find(_subfield);
if (p == 0 || (p > 0 && str[p - 1] < ' '))
{
p += strlen(_subfield);
int e = str.find('\n', p);
if (_to > 0 && p + _to < e)
e = p + _to;
p += _from;
if (p < e)
{
TString val(s);
if (_to > 0)
{
val.left(e - p + 1);
val.rpad(e - p + 1);
}
TString out = str.left(p);
out << val << str.mid(e); // ? e + 1
_rec->put(_name, out);
}
}
}
int TRecfield::operator =(int i) int TRecfield::operator =(int i)
{ {
char buff[32]; char buff[32];
sprintf(buff, "%d", i); sprintf(buff, "%d", i);
__putfieldbuff( _len, _dec, _type, buff, _p); if (_subfield == NULL)
__putfieldbuff( _len, _dec, _type, buff, _p);
else
put_subfield(buff);
_rec->setempty(FALSE); _rec->setempty(FALSE);
return i; return i;
} }
@ -3647,7 +3706,10 @@ long TRecfield::operator =(long l)
{ {
char buff[32]; char buff[32];
sprintf(buff, "%ld", l); sprintf(buff, "%ld", l);
__putfieldbuff( _len, _dec, _type, buff, _p); if (_subfield == NULL)
__putfieldbuff( _len, _dec, _type, buff, _p);
else
put_subfield(buff);
_rec->setempty(FALSE); _rec->setempty(FALSE);
return l; return l;
} }
@ -3656,7 +3718,10 @@ const real& TRecfield::operator =(const real& r)
{ {
char buff[80]; char buff[80];
strcpy(buff, r.string()); strcpy(buff, r.string());
__putfieldbuff( _len, _dec, _type, buff, _p); if (_subfield == NULL)
__putfieldbuff( _len, _dec, _type, buff, _p);
else
put_subfield(buff);
_rec->setempty(FALSE); _rec->setempty(FALSE);
return r; return r;
} }
@ -3665,17 +3730,25 @@ const TDate& TRecfield::operator =(const TDate& d)
{ {
char buff[16]; char buff[16];
strcpy(buff, (const char*)d); strcpy(buff, (const char*)d);
__putfieldbuff( _len, _dec, _type, buff, _p); if (_subfield == NULL)
__putfieldbuff( _len, _dec, _type, buff, _p);
else
put_subfield(buff);
_rec->setempty(FALSE); _rec->setempty(FALSE);
return d; return d;
} }
const char* TRecfield::operator =(const char* s) const char* TRecfield::operator =(const char* s)
{ {
if (_type == _memofld) if (_subfield == NULL)
_rec->put(_name, s); {
else if (_type == _memofld)
__putfieldbuff( _len, _dec, _type, s, _p); _rec->put(_name, s);
else
__putfieldbuff( _len, _dec, _type, s, _p);
}
else
put_subfield(s);
_rec->setempty(FALSE); _rec->setempty(FALSE);
return s; return s;
} }
@ -3697,17 +3770,42 @@ void TRecfield::setptr(TRecnotype r)
if (n) *wp += 128; if (n) *wp += 128;
} }
void TRecfield::get_subfield(char* s) const
{
const TString& str = _rec->get(_name);
int p = str.find(_subfield);
if (p == 0 || (p > 0 && str[p - 1] < ' '))
{
p += strlen(_subfield);
int e = str.find('\n', p);
if (_to > 0 && p + _to < e)
e = p + _to;
p += _from;
if (p < e)
strcpy(s, str.sub(p, e));
else *s = '\0';
}
else *s = '\0';
}
TRecfield::operator int() const TRecfield::operator int() const
{ {
char tmp[32]; char tmp[32];
if (_type == _intfld || _type == _intzerofld || _type == _longfld || _type == _longzerofld) if (_subfield == NULL)
{ {
strncpy(tmp, _p, _len); if (_type == _intfld || _type == _intzerofld || _type == _longfld || _type == _longzerofld)
tmp[_len] = '\0'; {
} strncpy(tmp, _p, _len);
else tmp[_len] = '\0';
__getfieldbuff( _len, _type, _p, tmp); }
else
__getfieldbuff( _len, _type, _p, tmp);
}
else
get_subfield(tmp);
return atoi(tmp); return atoi(tmp);
} }
@ -3715,13 +3813,19 @@ TRecfield::operator int() const
TRecfield::operator long() const TRecfield::operator long() const
{ {
char tmp[32]; char tmp[32];
if (_type == _longfld || _type == _longzerofld || _type == _intfld || _type == _intzerofld)
{ if (_subfield == NULL)
strncpy(tmp, _p, _len); {
tmp[_len] = '\0'; if (_type == _longfld || _type == _longzerofld || _type == _intfld || _type == _intzerofld)
} {
else strncpy(tmp, _p, _len);
__getfieldbuff( _len, _type, _p, tmp); tmp[_len] = '\0';
}
else
__getfieldbuff( _len, _type, _p, tmp);
}
else
get_subfield(tmp);
return atol(tmp); return atol(tmp);
} }
@ -3730,13 +3834,20 @@ TRecfield::operator long() const
TRecfield::operator const real() const TRecfield::operator const real() const
{ {
char tmp[32]; char tmp[32];
if (_type == _realfld)
{ if (_subfield == NULL)
strncpy(tmp, _p, _len); {
tmp[_len] = '\0'; if (_type == _realfld)
} {
else strncpy(tmp, _p, _len);
__getfieldbuff( _len, _type, _p, tmp); tmp[_len] = '\0';
}
else
__getfieldbuff( _len, _type, _p, tmp);
}
else
get_subfield(tmp);
real r(tmp); real r(tmp);
return r; return r;
} }
@ -3745,25 +3856,39 @@ TRecfield::operator const real() const
TRecfield::operator TDate() const TRecfield::operator TDate() const
{ {
char tmp[16]; char tmp[16];
if (_type == _datefld)
{ if (_subfield == NULL)
strncpy(tmp, _p, 8); {
tmp[8] = '\0'; if (_type == _datefld)
return TDate(atol(tmp)); {
} strncpy(tmp, _p, 8);
__getfieldbuff(_len, _type, _p, tmp); tmp[8] = '\0';
return TDate(atol(tmp));
}
__getfieldbuff(_len, _type, _p, tmp);
}
else
get_subfield(tmp);
return TDate(tmp); return TDate(tmp);
} }
TRecfield::operator const char*() const TRecfield::operator const char*() const
{ {
if (_type == _memofld)
return _rec->get(_name);
TString& tmp = get_tmp_string(_len); TString& tmp = get_tmp_string(_len);
__getfieldbuff(_len, _type, _p, tmp.get_buffer());
return tmp; if (_subfield == NULL)
{
if (_type == _memofld)
return _rec->get(_name);
else
__getfieldbuff(_len, _type, _p, tmp.get_buffer());
}
else
get_subfield((char *) (const char *)tmp);
return tmp;
} }
@ -3778,4 +3903,4 @@ TRecnotype TRecfield::ptr() const
while(wp-- > (unsigned char*) _p) while(wp-- > (unsigned char*) _p)
r = (r << 8) + *wp; r = (r << 8) + *wp;
return n ? -r : r; return n ? -r : r;
} }

View File

@ -596,7 +596,7 @@ public:
// @cmember Calcola lo spazio che il file occuperebbe se venisse esteso a <p eox> // @cmember Calcola lo spazio che il file occuperebbe se venisse esteso a <p eox>
long size(TRecnotype eox); long size(TRecnotype eox);
// @cmember Esegue la conversione del tracciato record del file // @cmember Esegue la conversione del tracciato record del file
int update(const TTrec& newrec, bool vis = TRUE); int update(const TTrec& newrec, bool interactive = FALSE);
// @cmember Esegue sia <mf TSystemisamfile::packfile> e <mf TSystemisamfile::packindex> // @cmember Esegue sia <mf TSystemisamfile::packfile> e <mf TSystemisamfile::packindex>
int pack(bool vis = FALSE, bool ask = TRUE); int pack(bool vis = FALSE, bool ask = TRUE);
@ -762,7 +762,7 @@ class TRecfield : public TObject
// @access:(INTERNAL) Private Member // @access:(INTERNAL) Private Member
{ {
// @cmember:(INTERNAL) Nome del campo // @cmember:(INTERNAL) Nome del campo
char _name[12]; char _name[30];
// @cmember:(INTERNAL) Puntatore a inizio record // @cmember:(INTERNAL) Puntatore a inizio record
TRectype* _rec; TRectype* _rec;
// @cmember:(INTERNAL) Puntatore a inizio campo // @cmember:(INTERNAL) Puntatore a inizio campo
@ -773,9 +773,17 @@ class TRecfield : public TObject
byte _dec; byte _dec;
// @cmember:(INTERNAL) Tipo del campo // @cmember:(INTERNAL) Tipo del campo
TFieldtypes _type; TFieldtypes _type;
// @cmember:(INTERNAL) Sottocampo (Es. G1:TOTDOC)
char * _subfield;
// @cmember:(INTERNAL) Da per i sottocampi (Es. G1:TOTDOC[2,3])
byte _from;
// @cmember:(INTERNAL) A per i sottocampi (Es. G1:TOTDOC[2,3])
byte _to;
// @cmember:(INTERNAL) Setta il campo <p to>-esimo con i valori di <p from>-esimo // @cmember:(INTERNAL) Setta il campo <p to>-esimo con i valori di <p from>-esimo
void set(int from, int to); void set(int from, int to);
void get_subfield(char * s) const;
void put_subfield(const char * s);
// @access Public Member // @access Public Member
public: public:
@ -787,10 +795,8 @@ public:
const TDate& operator =(const TDate& d) ; const TDate& operator =(const TDate& d) ;
// @cmember Operatore di assegnamento per tipo carattere // @cmember Operatore di assegnamento per tipo carattere
const char* operator =(const char* s) ; const char* operator =(const char* s) ;
#ifndef FOXPRO
// @cmember Operatore di assegnamento per tipo real // @cmember Operatore di assegnamento per tipo real
const real& operator =(const real& r) ; const real& operator =(const real& r) ;
#endif
// @cmember Operatore di estrazione per tipo intero // @cmember Operatore di estrazione per tipo intero
operator int() const ; operator int() const ;
@ -800,10 +806,8 @@ public:
operator const char*() const ; operator const char*() const ;
// @cmember Operatore di estrazione per data // @cmember Operatore di estrazione per data
operator TDate() const ; operator TDate() const ;
#ifndef FOXPRO
// @cmember const real | operator const real | | Operatore di estrazione per real // @cmember const real | operator const real | | Operatore di estrazione per real
operator const real() const ; operator const real() const ;
#endif
// @cmember Scrive un campo packed. Sarebbe meglio non usare mai campi packed. // @cmember Scrive un campo packed. Sarebbe meglio non usare mai campi packed.
void setptr(TRecnotype r); void setptr(TRecnotype r);