Corretti errori intermittenti di PG ??
Corretta registrazione occasionali Aggiunta localita agli occasionali git-svn-id: svn://10.65.10.50/trunk@5051 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4d1fcd3624
commit
b799632efa
@ -450,7 +450,7 @@ TMask* TMotore_application::get_mask( int mode )
|
||||
app( ).tipocf( tipocf[ 0 ] );
|
||||
if (msk1 == NULL)
|
||||
{
|
||||
msk1 = new TDocumento_mask(_doc->tipo().mask_name(), _doc); // prof
|
||||
msk1 = new TDocumento_mask(_doc->tipo().mask_name(), _doc, _rel); // prof
|
||||
_doc_masks.add(tipodoc, msk1);
|
||||
_sheet = &( TSheet_field& )msk1->field( F_SHEET );
|
||||
sheet( ).set_notify( ss_handler );
|
||||
@ -643,6 +643,7 @@ const char* TMotore_application::get_next_key( )
|
||||
int TMotore_application::read( TMask& m )
|
||||
{
|
||||
m.autoload(*_rel);
|
||||
*_doc = (TDocumento &) _rel->curr();
|
||||
_codnum = m.get(F_CODNUM);
|
||||
_tipodoc = m.get(F_TIPODOC);
|
||||
((TDocumento_mask &)m).cli2mask(app().doc().clifor(), app().doc().occas(), *(app()._config_ditta));
|
||||
@ -669,12 +670,11 @@ int TMotore_application::write( const TMask& m ) // C 90
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
TDocumento & doc = (TDocumento &) _rel->curr();
|
||||
|
||||
doc = *_doc;
|
||||
m.field(F_STATO).set( _pro->get( "STATOFINALE", "INSERIMENTO" ) );
|
||||
TRelation_application::write(m);
|
||||
// m.autosave(*_rel);
|
||||
// err = _doc->write( );
|
||||
// if (err == NOERR)
|
||||
// _rel->read(); // per posizionare correttamente la relazione
|
||||
}
|
||||
|
||||
return err;
|
||||
@ -687,7 +687,12 @@ int TMotore_application::rewrite( const TMask& m ) // C 90
|
||||
int err = esegui_procedura(OP_MODIFICA);
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
TDocumento & doc = (TDocumento &) _rel->curr();
|
||||
|
||||
doc = *_doc;
|
||||
TRelation_application::rewrite(m);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -698,7 +703,6 @@ bool TMotore_application::remove( void ) // C 80
|
||||
return TRUE;
|
||||
int err = esegui_procedura(OP_CANCELLA);
|
||||
return TRelation_application::remove();
|
||||
// return _doc->remove() == NOERR;
|
||||
}
|
||||
|
||||
void TMotore_application::open_files(int logicnum, ...)
|
||||
@ -732,12 +736,12 @@ bool TMotore_application::user_create( )
|
||||
open_files(LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, LF_TAB, LF_TABCOM, LF_CLIFO,
|
||||
LF_CFVEN, LF_INDSP, LF_OCCAS, LF_MOVMAG, LF_RMOVMAG, 0);
|
||||
_doc = new TDocumento;
|
||||
_rel->lfile().set_curr(_doc);
|
||||
_doc->set_relation(_rel);
|
||||
_rel->lfile().set_curr(new TDocumento);
|
||||
_cod_num = NULL;
|
||||
|
||||
_condv = new TCond_vendita(&doc().clifor(), _config_ditta);
|
||||
_doc->set_condv(_condv);
|
||||
((TDocumento &) _rel->curr()).set_condv(_condv);
|
||||
|
||||
_msk = new TMask("ve0100a");
|
||||
set_search_field(F_NDOC);
|
||||
@ -773,6 +777,7 @@ bool TMotore_application::user_destroy( )
|
||||
delete _cod_num;
|
||||
|
||||
// Distruggo la relazione
|
||||
delete _doc;
|
||||
delete _rel;
|
||||
delete _condv;
|
||||
|
||||
|
29
ve/velib.h
29
ve/velib.h
@ -321,8 +321,8 @@ public:
|
||||
bool is_omaggio() const { return tipo().tipo() == 'O';}
|
||||
bool is_descrizione() const { return tipo().tipo() == 'D';}
|
||||
bool is_articolo() const;
|
||||
bool is_checked() const { return get_bool("CHECKED");}
|
||||
void checked(bool on = TRUE) { put("CHECKED", (bool)on); }
|
||||
bool is_checked() const { return get_bool(RDOC_CHECKED);}
|
||||
void checked(bool on = TRUE) { put(RDOC_CHECKED, (bool)on); }
|
||||
void unchecked() { checked(FALSE); }
|
||||
// @cmember Assegna il documento corrente
|
||||
void set_doc(TDocumento * doc) { _doc = doc; }
|
||||
@ -345,8 +345,10 @@ public:
|
||||
bool sola_descrizione() const;
|
||||
void forza_sola_descrizione();
|
||||
|
||||
virtual TRectype& operator =(const TRectype& r);
|
||||
virtual TRectype& operator =(const char* r);
|
||||
virtual TRiga_documento & copy(const TRiga_documento & r);
|
||||
virtual TRiga_documento & operator =(const TRiga_documento & r) { return copy(r);}
|
||||
virtual TRectype & operator =(const TRectype & r);
|
||||
virtual TRectype & operator =(const char * r);
|
||||
|
||||
bool raggruppabile(const TRiga_documento& r, TToken_string& campi) const;
|
||||
TRiga_documento& operator +=(const TRiga_documento& r);
|
||||
@ -362,7 +364,9 @@ public:
|
||||
|
||||
real quantita() const { return get_real(RDOC_QTA); }
|
||||
|
||||
|
||||
TRiga_documento(TDocumento* doc, const char* tipo = NULL);
|
||||
TRiga_documento(const TRiga_documento & row);
|
||||
TRiga_documento(const TRiga_documento& rec, TDocumento* doc,
|
||||
const char* tipo = NULL);
|
||||
virtual ~TRiga_documento() {}
|
||||
@ -381,7 +385,6 @@ class TDocumento : public TAuto_variable_rectype // velib03
|
||||
TRecord_array _rows; // Array di TRectype per le righe documenti di vendita.
|
||||
bool _nuovo;
|
||||
|
||||
TRelation * _rel;
|
||||
TCond_vendita * _condv;
|
||||
TCli_for _cli_for;
|
||||
TOccasionale _occas;
|
||||
@ -397,6 +400,7 @@ protected:
|
||||
void set_riga_sconto();
|
||||
void set_riga_esenzione();
|
||||
int write_rewrite(TBaseisamfile & f, bool re) const;
|
||||
TObject* dup() const { return new TDocumento(*this); }
|
||||
|
||||
public:
|
||||
void dirty_fields();
|
||||
@ -406,11 +410,10 @@ public:
|
||||
TCond_vendita & condv() const {CHECK(_condv, "Condizioni di vendita nulle"); return *_condv;}
|
||||
TCli_for & clifor() const;
|
||||
TOccasionale & occas() const;
|
||||
TRelation & get_relation() const {CHECK(_rel, "Relazione nulla"); return *_rel;}
|
||||
void set_condv(TCond_vendita * condv) { _condv = condv; }
|
||||
void set_relation(TRelation * rel) { _rel = rel; }
|
||||
|
||||
virtual TDocumento & operator =(const TDocumento & d);
|
||||
virtual TDocumento & copy(const TDocumento & d);
|
||||
virtual TDocumento & operator =(const TDocumento & d) {return copy(d);}
|
||||
virtual TRectype & operator =(const TRectype & r);
|
||||
virtual TRectype & operator =(const char * r);
|
||||
virtual void zero(const char * fieldname);
|
||||
@ -490,8 +493,8 @@ public:
|
||||
bool is_bolla() const { return tipo_valido() && tipo().is_bolla(); }
|
||||
bool is_ordine() const { return tipo_valido() && tipo().is_ordine(); }
|
||||
|
||||
|
||||
TDocumento ();
|
||||
TDocumento (const TDocumento & d);
|
||||
TDocumento(char provv, int anno, const char* codnum, long numdoc,
|
||||
TCond_vendita * condv = NULL, TRelation * rel = NULL);
|
||||
TDocumento(const TRectype& doc, TCond_vendita * condv = NULL,
|
||||
@ -504,6 +507,7 @@ class TDocumento_mask : public TVariable_mask // velib06
|
||||
int _progs_page; // pagina in cui cominciano i progressivi
|
||||
int _last_prog; // numero dell'ultimo progressivo
|
||||
TDocumento * _doc; // documento
|
||||
TRelation * _rel;
|
||||
|
||||
protected:
|
||||
virtual void next_page(int p);
|
||||
@ -513,13 +517,12 @@ protected:
|
||||
public:
|
||||
virtual bool on_key(KEY key);
|
||||
TDocumento & doc() const {CHECK(_doc, "Documento nullo"); return *_doc;}
|
||||
TCond_vendita & condv() const {CHECK(_doc, "Documento nullo"); return _doc->condv();}
|
||||
TRelation & get_relation() const {CHECK(_doc, "Documento nullo"); return _doc->get_relation();}
|
||||
TCond_vendita & condv() const { return doc().condv();}
|
||||
void cli2mask( TCli_for & c, TOccasionale & o, TConfig & ditta);
|
||||
void occ2mask(TOccasionale & o);
|
||||
|
||||
TDocumento_mask(const char* name, TDocumento * _doc, int num = 0, int max = MAX_PAGES);
|
||||
virtual ~TDocumento_mask() { }
|
||||
TDocumento_mask(const char* name, TDocumento * _doc, TRelation * rel, int num = 0, int max = MAX_PAGES);
|
||||
virtual ~TDocumento_mask() {}
|
||||
};
|
||||
|
||||
class TLista_documenti : public TObject // velib04
|
||||
|
@ -31,6 +31,22 @@
|
||||
#include "sconti.h"
|
||||
#endif
|
||||
|
||||
#ifndef __ANAMAG_H
|
||||
#include "../mg/anamag.h"
|
||||
#endif
|
||||
|
||||
#ifndef __CODCORR_H
|
||||
#include "../mg/codcorr.h"
|
||||
#endif
|
||||
|
||||
#ifndef __DESLIN_H
|
||||
#include "../mg/deslin.h"
|
||||
#endif
|
||||
|
||||
#ifndef __UMART_H
|
||||
#include "../mg/umart.h"
|
||||
#endif
|
||||
|
||||
TSpesa_prest::TSpesa_prest(const char* codice, char tipo)
|
||||
: TRectype(LF_TAB)
|
||||
{
|
||||
@ -183,24 +199,24 @@ bool data_hndl( TMask_field& field, KEY key )
|
||||
const TDate datadoc(m.get(F_DATADOC));
|
||||
|
||||
doc.curr() = m.doc().head();
|
||||
const TString16 codnum(doc.get("CODNUM"));
|
||||
const int anno = doc.get_int("ANNO");
|
||||
const char tipo_num = doc.get_char("PROVV");
|
||||
const TString16 codnum(doc.get(DOC_CODNUM));
|
||||
const int anno = doc.get_int(DOC_ANNO);
|
||||
const char tipo_num = doc.get_char(DOC_PROVV);
|
||||
|
||||
if (doc.read(_isgreat) == NOERR &&
|
||||
codnum == doc.get("CODNUM") &&
|
||||
anno == doc.get_int("ANNO") &&
|
||||
tipo_num == doc.get_char("PROVV") &&
|
||||
datadoc > doc.get_date("DATADOC"))
|
||||
codnum == doc.get(DOC_CODNUM) &&
|
||||
anno == doc.get_int(DOC_ANNO) &&
|
||||
tipo_num == doc.get_char(DOC_PROVV) &&
|
||||
datadoc > doc.get_date(DOC_DATADOC))
|
||||
return field.error_box("Data documento superiore alla data del documento successivo");
|
||||
|
||||
doc.curr() = m.doc().head();
|
||||
doc.read();
|
||||
if (doc.prev() == NOERR &&
|
||||
codnum == doc.get("CODNUM") &&
|
||||
anno == doc.get_int("ANNO") &&
|
||||
tipo_num == doc.get_char("PROVV") &&
|
||||
datadoc < doc.get_date("DATADOC"))
|
||||
codnum == doc.get(DOC_CODNUM) &&
|
||||
anno == doc.get_int(DOC_ANNO) &&
|
||||
tipo_num == doc.get_char(DOC_PROVV) &&
|
||||
datadoc < doc.get_date(DOC_DATADOC))
|
||||
return field.error_box("Data documento inferiore alla data del documento precedente");
|
||||
}
|
||||
return TRUE;
|
||||
@ -267,7 +283,7 @@ bool codart_handler( TMask_field& f, KEY key )
|
||||
condv.set_umart(umart);
|
||||
TString80 codart(f.get());
|
||||
anamag.setkey(1);
|
||||
anamag.put("CODART", codart);
|
||||
anamag.put(ANAMAG_CODART, codart);
|
||||
bool found = anamag.read() == NOERR;
|
||||
if (found)
|
||||
row_mask.set(FR_CODARTMAG, codart, TRUE);
|
||||
@ -276,12 +292,12 @@ bool codart_handler( TMask_field& f, KEY key )
|
||||
TLocalisamfile codalt(LF_CODCORR);
|
||||
|
||||
codalt.setkey(2);
|
||||
codalt.put("CODARTALT", codart);
|
||||
codalt.put(CODCORR_CODARTALT, codart);
|
||||
if (codalt.read() == NOERR)
|
||||
{
|
||||
codart = codalt.get("CODART");
|
||||
codart = codalt.get(CODCORR_CODART);
|
||||
anamag.zero();
|
||||
anamag.put("CODART", codart);
|
||||
anamag.put(ANAMAG_CODART, codart);
|
||||
found = anamag.read() == NOERR;
|
||||
if (found)
|
||||
row_mask.set(FR_CODARTMAG, codart, TRUE);
|
||||
@ -301,20 +317,20 @@ bool codart_handler( TMask_field& f, KEY key )
|
||||
TLocalisamfile deslin(LF_DESLIN);
|
||||
|
||||
deslin.setkey(2);
|
||||
deslin.put("CODART", codart);
|
||||
deslin.put("CODLIN", lingua);
|
||||
deslin.put(DESLIN_CODART, codart);
|
||||
deslin.put(DESLIN_CODLIN, lingua);
|
||||
if (deslin.read() == NOERR)
|
||||
desc = deslin.get("DESCR");
|
||||
desc = deslin.get(DESLIN_DESCR);
|
||||
}
|
||||
row_mask.set(FR_DESCR, desc);
|
||||
|
||||
umart.setkey(1);
|
||||
umart.zero();
|
||||
umart.put("CODART", codart);
|
||||
if (umart.read(_isgteq) == NOERR && codart == umart.get("CODART"))
|
||||
umart.put(UMART_CODART, codart);
|
||||
if (umart.read(_isgteq) == NOERR && codart == umart.get(UMART_CODART))
|
||||
{
|
||||
curr_um = umart.get("UM");
|
||||
curr_fc = umart.get_real("FC");
|
||||
curr_um = umart.get(UMART_UM);
|
||||
curr_fc = umart.get_real(UMART_FC);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -396,13 +412,13 @@ bool umart_handler( TMask_field& f, KEY key )
|
||||
if (um.not_empty() && curr_um.not_empty() && um != curr_um)
|
||||
{
|
||||
umart.setkey(2);
|
||||
umart.put("CODART", row_mask.get(FR_CODART));
|
||||
umart.put("UM", um);
|
||||
umart.put(UMART_CODART, row_mask.get(FR_CODARTMAG));
|
||||
umart.put(UMART_UM, um);
|
||||
if (umart.read() == NOERR)
|
||||
{
|
||||
real qta(row_mask.get_real(FR_QTA));
|
||||
qta *= curr_fc;
|
||||
fc = umart.get_real("FC");
|
||||
fc = umart.get_real(UMART_FC);
|
||||
qta /= fc;
|
||||
row_mask.set(FR_QTA, qta);
|
||||
}
|
||||
@ -425,10 +441,10 @@ bool descr_handler( TMask_field& f, KEY key )
|
||||
|
||||
anamag.zero();
|
||||
anamag.setkey(2);
|
||||
anamag.put("DESCR", ((TZoom_field &) f).get_first_line());
|
||||
anamag.put(ANAMAG_DESCR, ((TZoom_field &) f).get_first_line());
|
||||
if (anamag.read() == NOERR)
|
||||
{
|
||||
f.mask().set(FR_CODART, anamag.get("CODART"));
|
||||
f.mask().set(FR_CODART, anamag.get(ANAMAG_CODART));
|
||||
f.mask().field(FR_CODART).set_dirty();
|
||||
f.mask().check_field(FR_CODART);
|
||||
}
|
||||
@ -840,7 +856,7 @@ void TExpr_documento::evaluate_user_func(int index, int nparms, TEval_stack & st
|
||||
|
||||
if (_row)
|
||||
{
|
||||
val = _row->importo(TRUE, FALSE, ndec) * _row->get_real("PERCPROV") / 100.0;
|
||||
val = _row->importo(TRUE, FALSE, ndec) * _row->get_real(RDOC_PERCPROV) / 100.0;
|
||||
val.round(ndec);
|
||||
}
|
||||
else
|
||||
|
@ -186,6 +186,13 @@ TRiga_documento::TRiga_documento(TDocumento* doc, const char * tipo)
|
||||
set_tipo(tipo);
|
||||
}
|
||||
|
||||
TRiga_documento::TRiga_documento(const TRiga_documento & row)
|
||||
: TAuto_variable_rectype(LF_RIGHEDOC), _doc(NULL), _iva_calc(FALSE)
|
||||
|
||||
{
|
||||
copy(row);
|
||||
}
|
||||
|
||||
TRiga_documento::TRiga_documento(const TRiga_documento& rec, TDocumento* doc,
|
||||
const char * tipo)
|
||||
: TAuto_variable_rectype(rec), _doc(doc), _iva_calc(FALSE)
|
||||
@ -285,6 +292,13 @@ void TRiga_documento::forza_sola_descrizione()
|
||||
}
|
||||
}
|
||||
|
||||
TRiga_documento & TRiga_documento::copy(const TRiga_documento & r)
|
||||
{
|
||||
operator=((TRectype &)r);
|
||||
_doc = r._doc;
|
||||
return *this;
|
||||
}
|
||||
|
||||
TRectype & TRiga_documento::operator =(const TRectype & r)
|
||||
{
|
||||
TRectype::operator=(r);
|
||||
|
@ -198,7 +198,7 @@ TAssoc_array TDocumento::_tipi;
|
||||
|
||||
TDocumento::TDocumento()
|
||||
: TAuto_variable_rectype(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA"), _nuovo(TRUE),
|
||||
_condv(NULL), _rel(NULL), _sconto(NULL), _esenzione(NULL)
|
||||
_condv(NULL), _sconto(NULL), _esenzione(NULL)
|
||||
{
|
||||
_tipocf = new TRecfield(*this, "TIPOCF");
|
||||
_codcf = new TRecfield(*this, "CODCF");
|
||||
@ -207,10 +207,17 @@ TDocumento::TDocumento()
|
||||
for (int i = 3 ; i >= 0; i--) _liv_len[i] = 0;
|
||||
}
|
||||
|
||||
TDocumento::TDocumento(const TDocumento & d)
|
||||
: TAuto_variable_rectype(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA"), _nuovo(TRUE),
|
||||
_condv(NULL), _sconto(NULL), _esenzione(NULL)
|
||||
{
|
||||
copy(d);
|
||||
}
|
||||
|
||||
TDocumento::TDocumento(char provv, int anno, const char* codnum, long numdoc,
|
||||
TCond_vendita * condv, TRelation * rel)
|
||||
: TAuto_variable_rectype(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA"), _nuovo(TRUE),
|
||||
_condv(condv), _rel(rel), _sconto(NULL), _esenzione(NULL)
|
||||
_condv(condv), _sconto(NULL), _esenzione(NULL)
|
||||
{
|
||||
_tipocf = new TRecfield(*this, "TIPOCF");
|
||||
_codcf = new TRecfield(*this, "CODCF");
|
||||
@ -232,7 +239,7 @@ TDocumento::TDocumento(char provv, int anno, const char* codnum, long numdoc,
|
||||
|
||||
TDocumento::TDocumento(const TRectype& rec, TCond_vendita * condv, TRelation * rel)
|
||||
: TAuto_variable_rectype(LF_DOC), _rows(LF_RIGHEDOC, "NRIGA"), _nuovo(FALSE),
|
||||
_condv(condv), _rel(rel), _sconto(NULL), _esenzione(NULL)
|
||||
_condv(condv), _sconto(NULL), _esenzione(NULL)
|
||||
{
|
||||
_tipocf = new TRecfield(*this, "TIPOCF");
|
||||
_codcf = new TRecfield(*this, "CODCF");
|
||||
@ -1207,16 +1214,22 @@ TOccasionale & TDocumento::occas() const
|
||||
return (TOccasionale &) _occas;
|
||||
}
|
||||
|
||||
TDocumento & TDocumento::operator =(const TDocumento & d)
|
||||
TDocumento & TDocumento::copy(const TDocumento & d)
|
||||
{
|
||||
zero();
|
||||
operator=((TRectype &)d);
|
||||
_rows = d._rows;
|
||||
for (int i = physical_rows(); i > 0; i--)
|
||||
{
|
||||
TRiga_documento & r = row(i);
|
||||
r.set_doc(this);
|
||||
}
|
||||
for (i = 0; i < 3; i++)
|
||||
_liv_len[i] = d._liv_len[i];
|
||||
set_riga_sconto();
|
||||
if (is_fattura())
|
||||
set_riga_esenzione();
|
||||
set_relation(d._rel);
|
||||
set_condv(d._condv);
|
||||
_nuovo = d._nuovo;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -29,10 +29,10 @@
|
||||
#include "sconti.h"
|
||||
#endif
|
||||
|
||||
TDocumento_mask::TDocumento_mask(const char* name, TDocumento * doc, int num,
|
||||
int max)
|
||||
TDocumento_mask::TDocumento_mask(const char* name, TDocumento * doc, TRelation * rel,
|
||||
int num, int max)
|
||||
: TVariable_mask(name, num, max), _progs_page(-1), _last_prog(-1),
|
||||
_doc(doc)
|
||||
_doc(doc), _rel(rel)
|
||||
{
|
||||
const int pos = id2pos(BASE_PIEDE + 1);
|
||||
|
||||
@ -51,13 +51,17 @@ void TDocumento_mask::next_page(int p)
|
||||
if (curr_page() == _progs_page)
|
||||
{
|
||||
begin_wait();
|
||||
autosave(get_relation());
|
||||
TDocumento & curr_doc = doc();
|
||||
TDocumento & rel_doc = (TDocumento &) _rel->curr();
|
||||
|
||||
rel_doc = curr_doc;
|
||||
autosave(*_rel);
|
||||
for (int i = _last_prog; i > 0; i--)
|
||||
{
|
||||
const short id = BASE_PIEDE + i;
|
||||
const TString16 name(field(id).field()->name());
|
||||
|
||||
set(id , doc().get(name));
|
||||
set(id , rel_doc.get(name));
|
||||
}
|
||||
end_wait();
|
||||
}
|
||||
@ -314,7 +318,7 @@ void TDocumento_mask::spese2mask(TCli_for & c)
|
||||
if (s.not_empty())
|
||||
spese.add(s);
|
||||
}
|
||||
autosave(get_relation());
|
||||
autosave(*_rel);
|
||||
doc().put("SPESEUPD", FALSE);
|
||||
doc().update_spese_aut(spese, FALSE, &sh);
|
||||
sh.force_update();
|
||||
|
Loading…
x
Reference in New Issue
Block a user