Aggiunto operatore di lock su TDistinta e corretta la rewrite().
git-svn-id: svn://10.65.10.50/trunk@4474 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
be4fc7cac3
commit
fef25407a3
@ -5,27 +5,40 @@
|
|||||||
///////////////////////////////////////////////////
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
// costruttore distinta utilizzando il record passato
|
// costruttore distinta utilizzando il record passato
|
||||||
TDistinta::TDistinta(const TRectype& rec)
|
TDistinta::TDistinta(const TRectype& rec, word lockop)
|
||||||
{
|
{
|
||||||
read(rec);
|
read(rec,lockop);
|
||||||
}
|
}
|
||||||
|
|
||||||
// costruisce la distinta del tipo e numero passati
|
// costruisce la distinta del tipo e numero passati
|
||||||
TDistinta::TDistinta(const char tipo, const long numero)
|
TDistinta::TDistinta(const char tipo, const long numero, word lockop)
|
||||||
{
|
{
|
||||||
read(tipo,numero);
|
read(tipo,numero,lockop);
|
||||||
|
}
|
||||||
|
|
||||||
|
TDistinta::~TDistinta()
|
||||||
|
{
|
||||||
|
TLocalisamfile f(LF_EFFETTI);
|
||||||
|
if (_righe_dist.items() > 0) // Se ha letto elementi sblocca eventualmente la prima riga
|
||||||
|
f.read((TRectype&)_righe_dist[0], _isequal,_unlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
// permette di leggere la distinta del tipo e numero passati
|
// permette di leggere la distinta del tipo e numero passati
|
||||||
int TDistinta::read(const char tipo, const long numero)
|
int TDistinta::read(const char tipo, const long numero, word lockop)
|
||||||
{
|
{
|
||||||
int err = NOERR;
|
int err = NOERR;
|
||||||
CHECK(tipo!='\0' && numero > 0,"Can't read distinta from NULL elements");
|
CHECK(tipo!='\0' && numero > 0,"Can't read distinta from NULL elements");
|
||||||
TLocalisamfile f(LF_EFFETTI);
|
TLocalisamfile f(LF_EFFETTI);
|
||||||
|
if (_righe_dist.items() > 0) // Se ha letto una distinta precedente, sblocca la prima riga
|
||||||
|
{
|
||||||
|
f.read((TRectype&)_righe_dist[0],_isequal,_unlock);
|
||||||
|
_righe_dist.destroy(); // Rimuove tutte le righe precedenti
|
||||||
|
}
|
||||||
for (int i=0; err == NOERR ; i++)
|
for (int i=0; err == NOERR ; i++)
|
||||||
{
|
{
|
||||||
TEffetto* effetto = new TEffetto;
|
TEffetto* effetto = new TEffetto;
|
||||||
err = effetto->read(f, tipo, numero, i+1);//legge un effetto per chiave 4
|
word lock = (i == 0 && lockop == _lock) ? _lock : _nolock; // Lock solo sulla prima riga
|
||||||
|
err = effetto->read(f, tipo, numero, i+1, lock);//legge un effetto per chiave 4
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
_righe_dist.add(effetto);
|
_righe_dist.add(effetto);
|
||||||
}
|
}
|
||||||
@ -37,12 +50,12 @@ int TDistinta::read(const char tipo, const long numero)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// permette di leggere la distinta dal record passato
|
// permette di leggere la distinta dal record passato
|
||||||
int TDistinta::read(const TRectype& rec)
|
int TDistinta::read(const TRectype& rec, word lockop)
|
||||||
{
|
{
|
||||||
CHECK(rec.num() == LF_EFFETTI,"Can't read distinta from a different record type");
|
CHECK(rec.num() == LF_EFFETTI,"Can't read distinta from a different record type");
|
||||||
const char tipo = rec.get_char(EFF_TIPODIST);
|
const char tipo = rec.get_char(EFF_TIPODIST);
|
||||||
const long numero = rec.get_long(EFF_NDIST);
|
const long numero = rec.get_long(EFF_NDIST);
|
||||||
return read(tipo,numero);//legge la distinta
|
return read(tipo,numero,lockop);//legge la distinta
|
||||||
}
|
}
|
||||||
|
|
||||||
// scrive la distinta
|
// scrive la distinta
|
||||||
@ -56,13 +69,16 @@ int TDistinta::write(bool force, TToken_string* dati_dist)
|
|||||||
{
|
{
|
||||||
TEffetto& effetto = (TEffetto&)_righe_dist[i];
|
TEffetto& effetto = (TEffetto&)_righe_dist[i];
|
||||||
// token string che contiene i dati da registrare sull'effetto
|
// token string che contiene i dati da registrare sull'effetto
|
||||||
dati_dist->restart();
|
if (dati_dist)
|
||||||
effetto.put(EFF_TIPODIST, dati_dist->get());
|
{
|
||||||
effetto.put(EFF_NDIST, dati_dist->get_long());
|
dati_dist->restart();
|
||||||
effetto.put(EFF_DATADIST, dati_dist->get());
|
effetto.put(EFF_TIPODIST, dati_dist->get());
|
||||||
effetto.put(EFF_CODABIP, dati_dist->get_long());
|
effetto.put(EFF_NDIST, dati_dist->get_long());
|
||||||
effetto.put(EFF_CODCABP, dati_dist->get_long());
|
effetto.put(EFF_DATADIST, dati_dist->get());
|
||||||
effetto.put(EFF_NRIGADIST, i+1);
|
effetto.put(EFF_CODABIP, dati_dist->get_long());
|
||||||
|
effetto.put(EFF_CODCABP, dati_dist->get_long());
|
||||||
|
effetto.put(EFF_NRIGADIST, i+1);
|
||||||
|
}
|
||||||
//riscrivo l'effetto con i dati della distinta a cui appartiene
|
//riscrivo l'effetto con i dati della distinta a cui appartiene
|
||||||
err = effetto.rewrite(f);
|
err = effetto.rewrite(f);
|
||||||
}
|
}
|
||||||
|
18
ef/ef0301.h
18
ef/ef0301.h
@ -21,13 +21,13 @@ public:
|
|||||||
//elimina tutti gli effetti nella distinta (appartenti all'array)
|
//elimina tutti gli effetti nella distinta (appartenti all'array)
|
||||||
int reset(){ return _righe_dist.destroy() == NOERR; }
|
int reset(){ return _righe_dist.destroy() == NOERR; }
|
||||||
//legge la distinta del tipo e numero passati
|
//legge la distinta del tipo e numero passati
|
||||||
int read(const char tipo, const long numero);
|
int read(const char tipo, const long numero, word lock_op = _nolock);
|
||||||
//legge il record passato
|
//legge il record passato
|
||||||
int read(const TRectype& rec);
|
int read(const TRectype& rec, word lock_op = _nolock);
|
||||||
//scrive la distinta utilizzando la rewrite degli effetti
|
//scrive la distinta utilizzando la rewrite degli effetti
|
||||||
int write(bool force = FALSE, TToken_string* dati_dist = NULL);
|
int write(bool force = FALSE, TToken_string* dati_dist = NULL);
|
||||||
//riscrive la distinta
|
//riscrive la distinta
|
||||||
int rewrite(TToken_string* dati_dist){ return write(TRUE, dati_dist); }
|
int rewrite(TToken_string* dati_dist = NULL){ return write(TRUE, dati_dist); }
|
||||||
//rimuove la distinta del tipo e numero passati
|
//rimuove la distinta del tipo e numero passati
|
||||||
int remove(char tipodist, long ndist);
|
int remove(char tipodist, long ndist);
|
||||||
//restituisce il tipo di distinta
|
//restituisce il tipo di distinta
|
||||||
@ -37,11 +37,11 @@ public:
|
|||||||
//restituisce il codice valuta della distinta
|
//restituisce il codice valuta della distinta
|
||||||
const TString& codval() const { return ((TRectype&)_righe_dist[0]).get(EFF_CODVAL); }
|
const TString& codval() const { return ((TRectype&)_righe_dist[0]).get(EFF_CODVAL); }
|
||||||
//restituisce la data distinta della distinta
|
//restituisce la data distinta della distinta
|
||||||
const TDate& data_dist() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATADIST); }
|
TDate data_dist() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATADIST); }
|
||||||
//restituisce la data cambio della distinta
|
//restituisce la data cambio della distinta
|
||||||
const TDate& data_cam() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATACAMBIO); }
|
TDate data_cam() const { return ((TRectype&)_righe_dist[0]).get_date(EFF_DATACAMBIO); }
|
||||||
//restituisce il cambio delle distinta
|
//restituisce il cambio delle distinta
|
||||||
const real& cambio() const { return ((TRectype&)_righe_dist[0]).get_real(EFF_CAMBIO); }
|
real cambio() const { return ((TRectype&)_righe_dist[0]).get_real(EFF_CAMBIO); }
|
||||||
//restituisce il codice abi di presentazione effetti
|
//restituisce il codice abi di presentazione effetti
|
||||||
const TString& abip()const { return ((TRectype&)_righe_dist[0]).get(EFF_CODABIP); }
|
const TString& abip()const { return ((TRectype&)_righe_dist[0]).get(EFF_CODABIP); }
|
||||||
//restituisce il codice cab di presentazione effetti
|
//restituisce il codice cab di presentazione effetti
|
||||||
@ -51,11 +51,11 @@ public:
|
|||||||
//costruttore di default
|
//costruttore di default
|
||||||
TDistinta() {};
|
TDistinta() {};
|
||||||
//costruttore distinta del tipo e numero passato
|
//costruttore distinta del tipo e numero passato
|
||||||
TDistinta(const char tipo, const long numero);
|
TDistinta(const char tipo, const long numero, word lockop = _nolock);
|
||||||
//costruttore distinta utilizzando il record passato
|
//costruttore distinta utilizzando il record passato
|
||||||
TDistinta(const TRectype& rec);
|
TDistinta(const TRectype& rec, word lockop = _nolock);
|
||||||
//distruttore di default
|
//distruttore di default
|
||||||
virtual ~TDistinta() {}
|
virtual ~TDistinta();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif//__EF0301_H
|
#endif//__EF0301_H
|
Loading…
x
Reference in New Issue
Block a user