Patch level : 2.2

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@13215 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-06-23 15:32:55 +00:00
parent fac6e9127f
commit 3b54bda04d
7 changed files with 71 additions and 61 deletions

View File

@ -248,7 +248,8 @@ protected:
public: public:
void set_range(const TDate& dal, const TDate& al); void set_range(const TDate& dal, const TDate& al);
const TSaldanal& saldo(const char* conto, const char* costo, const TSaldanal& saldo(const char* conto, const char* costo,
const char* commessa, const char* fase, char tipo); const char* commessa, const char* fase, word tipi);
TSaldi_cache() : TCache(3883) { }
}; };
TObject* TSaldi_cache::key2obj(const char* key) TObject* TSaldi_cache::key2obj(const char* key)
@ -272,14 +273,14 @@ TObject* TSaldi_cache::key2obj(const char* key)
} }
const TSaldanal& TSaldi_cache::saldo(const char* conto, const char* costo, const TSaldanal& TSaldi_cache::saldo(const char* conto, const char* costo,
const char* commessa, const char* fase, char tipo) const char* commessa, const char* fase, word tipi)
{ {
TToken_string key; TToken_string key;
key.add(conto, 0); key.add(conto, 0);
key.add(costo, 1); key.add(costo, 1);
key.add(commessa, 2); key.add(commessa, 2);
key.add(fase, 3); key.add(fase, 3);
key.add(tipo, 4); key.add(tipi, 4);
return *(const TSaldanal*)objptr(key); return *(const TSaldanal*)objptr(key);
} }
@ -301,8 +302,9 @@ TSaldi_cache _saldi;
class TPiano_conti_recordset : public TISAM_recordset class TPiano_conti_recordset : public TISAM_recordset
{ {
char _tipo; word _tipimov;
TString _da_conto, _a_conto; TString _da_conto, _a_conto;
int _contolen;
TString _codcms, _codfas, _codcosto; TString _codcms, _codfas, _codcosto;
TDate _dal, _al; TDate _dal, _al;
bool _movimentati, _nonnulli; bool _movimentati, _nonnulli;
@ -325,31 +327,36 @@ const TVariant& TPiano_conti_recordset::get(const char* column_name) const
if (strncmp(column_name, "SALDO:", 6) == 0) if (strncmp(column_name, "SALDO:", 6) == 0)
{ {
const TString& conto = get(PCONANA_CODCONTO).as_string(); const TString& conto = get(PCONANA_CODCONTO).as_string();
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipo);
const char* sub_field = column_name+6; const char* sub_field = column_name+6;
TVariant& var = get_tmp_var(); TVariant& var = get_tmp_var();
if (strcmp(sub_field, "INI_DARE") == 0) if (strcmp(sub_field, "INI_DARE") == 0)
{ {
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov);
var = s._ini.sezione() == 'D' ? s._ini.valore() : ZERO; var = s._ini.sezione() == 'D' ? s._ini.valore() : ZERO;
} else } else
if (strcmp(sub_field, "INI_AVERE") == 0) if (strcmp(sub_field, "INI_AVERE") == 0)
{ {
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov);
var = s._ini.sezione() == 'A' ? s._ini.valore() : ZERO; var = s._ini.sezione() == 'A' ? s._ini.valore() : ZERO;
} else } else
if (strcmp(sub_field, "MOV_DARE") == 0) if (strcmp(sub_field, "MOV_DARE") == 0)
{ {
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov);
var = s._dare.valore(); var = s._dare.valore();
} else } else
if (strcmp(sub_field, "MOV_AVERE") == 0) if (strcmp(sub_field, "MOV_AVERE") == 0)
{ {
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov);
var = s._avere.valore(); var = s._avere.valore();
} else } else
if (strcmp(sub_field, "FIN_DARE") == 0) if (strcmp(sub_field, "FIN_DARE") == 0)
{ {
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov);
var = s._fin.sezione() == 'D' ? s._fin.valore() : ZERO; var = s._fin.sezione() == 'D' ? s._fin.valore() : ZERO;
} else } else
if (strcmp(sub_field, "FIN_AVERE") == 0) if (strcmp(sub_field, "FIN_AVERE") == 0)
{ {
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov);
var = s._fin.sezione() == 'A' ? s._fin.valore() : ZERO; var = s._fin.sezione() == 'A' ? s._fin.valore() : ZERO;
} }
return var; return var;
@ -377,10 +384,13 @@ const TVariant& TPiano_conti_recordset::get(const char* column_name) const
bool TPiano_conti_recordset::valid_record(const TRelation& rel) const bool TPiano_conti_recordset::valid_record(const TRelation& rel) const
{ {
const TString& conto = rel.curr().get(PCONANA_CODCONTO);
if (conto.len() < _contolen)
return false;
if (_movimentati || _nonnulli) if (_movimentati || _nonnulli)
{ {
const TString& conto = rel.curr().get(PCONANA_CODCONTO); const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipimov);
const TSaldanal& s = _saldi.saldo(conto, _codcosto, _codcms, _codfas, _tipo);
if (_movimentati && !s._movimentato) if (_movimentati && !s._movimentato)
return false; return false;
if (_nonnulli && s._ini.is_zero() && s._dare.is_zero() && s._avere.is_zero()) if (_nonnulli && s._ini.is_zero() && s._dare.is_zero() && s._avere.is_zero())
@ -403,20 +413,17 @@ void TPiano_conti_recordset::set_custom_filter(TCursor& cursor) const
arec.zero(); arec.put(PCONANA_CODCONTO, _a_conto); arec.zero(); arec.put(PCONANA_CODCONTO, _a_conto);
cursor.setregion(darec, arec); cursor.setregion(darec, arec);
TString filter;
int len = 0;
const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA);
for (int l = info.levels()-1; l >= 0; l--)
len += info.len(l);
filter << "NUM(LEN(CODCONTO)==" << len << ")";
cursor.setfilter(filter);
_current_recset = this; _current_recset = this;
cursor.set_filterfunction(pianoconti_filter); cursor.set_filterfunction(pianoconti_filter);
} }
void TPiano_conti_recordset::set_filter(const TMask& m, int r) void TPiano_conti_recordset::set_filter(const TMask& m, int r)
{ {
_contolen = 0;
const TMultilevel_code_info& info = ca_multilevel_code_info(LF_PCONANA);
for (int l = info.levels()-1; l >= 0; l--)
_contolen += info.len(l);
for (int i = 0; m.id2pos(F_PDC1_INI+i) > 0; i++) for (int i = 0; m.id2pos(F_PDC1_INI+i) > 0; i++)
{ {
_da_conto << m.get(F_PDC1_INI+i); _da_conto << m.get(F_PDC1_INI+i);
@ -427,7 +434,7 @@ void TPiano_conti_recordset::set_filter(const TMask& m, int r)
_al = m.get(F_DATAA); _al = m.get(F_DATAA);
_saldi.set_range(_dal, _al); _saldi.set_range(_dal, _al);
_tipo = m.get(F_TIPOMOV)[0]; _tipimov = m.get(F_TIPOSTAMPA)[0] == 'C' ? 1 : 6;
_movimentati = m.get_int(F_STAMPAV) == 1; _movimentati = m.get_int(F_STAMPAV) == 1;
_nonnulli = m.get_int(F_STAMPAV) == 2; _nonnulli = m.get_int(F_STAMPAV) == 2;

View File

@ -13,8 +13,7 @@
#define F_STAMPAV 311 #define F_STAMPAV 311
#define F_DATADA 312 #define F_DATADA 312
#define F_DATAA 313 #define F_DATAA 313
#define F_TIPOMOV 314 #define F_TIPOSTAMPA 314
#define F_TIPOSTAMPA 315
//campi generati dal pdc //campi generati dal pdc
#define F_PDC1_INI 316 #define F_PDC1_INI 316

View File

@ -74,8 +74,8 @@ END
LIST F_TIPOSTAMPA 11 LIST F_TIPOSTAMPA 11
BEGIN BEGIN
PROMPT 12 4 "" PROMPT 12 4 ""
ITEM "P|Preventivo"
ITEM "C|Consuntivo" ITEM "C|Consuntivo"
ITEM "P|Preventivo"
ITEM "R|Raffronto" ITEM "R|Raffronto"
END END
@ -105,17 +105,9 @@ BEGIN
GROUP 5 GROUP 5
END END
LIST F_TIPOMOV 1 25
BEGIN
PROMPT 2 8 "Tipo movimento "
ITEM " |Normale"
ITEM "P|Preventivo"
ITEM "V|Variazione preventivo"
END
LIST F_STAMPAV 20 LIST F_STAMPAV 20
BEGIN BEGIN
PROMPT 2 9 "Selezione conti " PROMPT 2 8 "Selezione conti "
ITEM "1|Movimentati" ITEM "1|Movimentati"
ITEM "2|Con saldo non nullo" ITEM "2|Con saldo non nullo"
ITEM "3|Tutti" ITEM "3|Tutti"
@ -124,13 +116,13 @@ END
BOOLEAN F_CODICI BOOLEAN F_CODICI
BEGIN BEGIN
PROMPT 42 9 "Non stampare codici conti " PROMPT 42 8 "Non stampare codici conti "
GROUP 4 GROUP 4
END END
STRING F_REPORT 256 66 STRING F_REPORT 256 66
BEGIN BEGIN
PROMPT 2 10 "Report " PROMPT 2 9 "Report "
FLAGS "B" FLAGS "B"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END

View File

@ -139,7 +139,7 @@ bool TAnal_report::execute_usr_word(unsigned int opcode, TVariant_stack& stack)
TImporto TAnal_balance::saldo_fine_anno(const char* conto, const char* costo, TImporto TAnal_balance::saldo_fine_anno(const char* conto, const char* costo,
const char* commessa, const char* fase, const char* commessa, const char* fase,
int anno, char tipo) const int anno, word tipo) const
{ {
TImporto saldo; TImporto saldo;
@ -163,27 +163,31 @@ TImporto TAnal_balance::saldo_fine_anno(const char* conto, const char* costo,
query << "USE SALDANA"; query << "USE SALDANA";
if (select.not_empty()) if (select.not_empty())
query << "SELECT " << select; query << "SELECT " << select;
query << "\nFROM CONTO=#CONTO" query << "\nFROM CONTO=" << conto << '\n';
<< "\nTO CONTO=#CONTO ANNO=#ANNO"; query << "\nTO CONTO=" << conto << " ANNO=" << anno << '\n';
TString4 strtipo; strtipo << tipo;
TISAM_recordset saldini(query); TISAM_recordset saldini(query);
saldini.set_var("#CONTO", TVariant(conto));
saldini.set_var("#ANNO", TVariant(long(anno)));
TString8 sezname = SALDANA_SEZIONE;
TString8 salname = SALDANA_SALDO;
if (tipo == 'P' || tipo == 'V')
{
sezname << tipo;
salname << tipo;
}
for (int i = 0; i < saldini.items(); i++) for (int i = 0; i < saldini.items(); i++)
{ {
const char sez = saldini.get(sezname).as_string()[0]; if (tipo & 1)
const real imp = saldini.get(salname).as_real(); {
saldo += TImporto(sez, imp); const char sez = saldini.get(SALDANA_SEZIONE).as_string()[0];
const real imp = saldini.get(SALDANA_SALDO).as_real();
saldo += TImporto(sez, imp);
}
if (tipo & 2)
{
const char sez = saldini.get(SALDANA_SEZIONEP).as_string()[0];
const real imp = saldini.get(SALDANA_SALDOP).as_real();
saldo += TImporto(sez, imp);
}
if (tipo & 4)
{
const char sez = saldini.get(SALDANA_SEZIONEV).as_string()[0];
const real imp = saldini.get(SALDANA_SALDOV).as_real();
saldo += TImporto(sez, imp);
}
} }
saldo.normalize(); saldo.normalize();
} }
@ -193,13 +197,9 @@ TImporto TAnal_balance::saldo_fine_anno(const char* conto, const char* costo,
bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo, bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo,
const char* commessa, const char* fase, const char* commessa, const char* fase,
const TDate& dal, const TDate& al, char tipo, const TDate& dal, const TDate& al, word tipo,
TImporto& ini, TImporto& dare, TImporto& avere) const TImporto& ini, TImporto& dare, TImporto& avere) const
{ {
TString4 strtipo;
if (tipo > ' ')
strtipo << tipo;
TDate dataini; TDate dataini;
if (dal.ok()) if (dal.ok())
{ {
@ -210,8 +210,7 @@ bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo,
} }
TString query; TString query;
query << "USE RMOVANA KEY 2\n" query << "USE RMOVANA KEY 2\n";
<< "SELECT (107.TIPOMOV=\"" << strtipo << "\")";
if (dataini.ok()) if (dataini.ok())
query << "&&(ANSI(107.DATACOMP)>=" << dataini.date2ansi() << ")"; query << "&&(ANSI(107.DATACOMP)>=" << dataini.date2ansi() << ")";
if (al.ok()) if (al.ok())
@ -241,6 +240,17 @@ bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo,
{ {
rmovana.move_to(i); rmovana.move_to(i);
const char tipomov = rmovana.get("107.TIPOMOV").as_string()[0];
int ntipomov = 0;
if (tipomov == 'P')
ntipomov = 2; else
if (tipomov == 'V')
ntipomov = 4;
else
ntipomov = 1;
if ((ntipomov & tipo) == 0)
continue;
const TDate data = rmovana.get("107.DATACOMP").as_date(); const TDate data = rmovana.get("107.DATACOMP").as_date();
const TImporto imp(rmovana.get(RMOVANA_SEZIONE).as_string()[0], const TImporto imp(rmovana.get(RMOVANA_SEZIONE).as_string()[0],
rmovana.get(RMOVANA_IMPORTO).as_real()); rmovana.get(RMOVANA_IMPORTO).as_real());
@ -264,7 +274,7 @@ bool TAnal_balance::saldo_movimenti(const char* conto, const char* costo,
bool TAnal_balance::saldi(const char* conto, const char* costo, bool TAnal_balance::saldi(const char* conto, const char* costo,
const char* commessa, const char* fase, const char* commessa, const char* fase,
const TDate& dal, const TDate& al, char tipo, const TDate& dal, const TDate& al, word tipo,
TImporto& ini, TImporto& dare, TImporto& avere) const TImporto& ini, TImporto& dare, TImporto& avere) const
{ {
TEsercizi_contabili esc; TEsercizi_contabili esc;

View File

@ -33,19 +33,21 @@ public: // meglio pubic?
// TAnal_balance // TAnal_balance
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Tipi di saldo: 1 = Normale; 2 = Preventivo; 4 = Variazione preventivo
class TAnal_balance : public TObject class TAnal_balance : public TObject
{ {
public: public:
TImporto saldo_fine_anno(const char* conto, const char* costo, TImporto saldo_fine_anno(const char* conto, const char* costo,
const char* commessa, const char* fase, const char* commessa, const char* fase,
int annofin, char tipo) const; int annofin, word tipo) const;
bool saldo_movimenti(const char* conto, const char* costo, bool saldo_movimenti(const char* conto, const char* costo,
const char* commessa, const char* fase, const char* commessa, const char* fase,
const TDate& dal, const TDate& al, char tipo, const TDate& dal, const TDate& al, word tipo,
TImporto& ini, TImporto& dare, TImporto& avere) const; TImporto& ini, TImporto& dare, TImporto& avere) const;
bool saldi(const char* conto, const char* costo, bool saldi(const char* conto, const char* costo,
const char* commessa, const char* fase, const char* commessa, const char* fase,
const TDate& dal, const TDate& al, char tipo, const TDate& dal, const TDate& al, word tipo,
TImporto& ini, TImporto& dare, TImporto& avere) const; TImporto& ini, TImporto& dare, TImporto& avere) const;
}; };

View File

@ -19,5 +19,5 @@ SEZIONE|1|1|0|Sezione del totale documento
BLOCCATO|8|1|0|Movimento bloccato BLOCCATO|8|1|0|Movimento bloccato
3 3
NUMREG| NUMREG|
DATAREG+NUMREG|X DATACOMP+NUMREG|X
NUMREGCG|X NUMREGCG|X

View File

@ -4,7 +4,7 @@ ANNOES|9|4|0|Anno di Esercizio
NUMREG|3|7|0|Numero di Registrazione NUMREG|3|7|0|Numero di Registrazione
NUMRIG|2|3|0|Numero riga NUMRIG|2|3|0|Numero riga
SEZIONE|1|1|0|Sezione SEZIONE|1|1|0|Sezione
DATAREG|5|8|0|Data di registrazione DATACOMP|5|8|0|Data di competenza
CODCCOSTO|1|20|0|Codice centro di costo CODCCOSTO|1|20|0|Codice centro di costo
CODCMS|1|20|0|Codice commessa CODCMS|1|20|0|Codice commessa
CODFASE|1|10|0|Codice fase CODFASE|1|10|0|Codice fase
@ -18,4 +18,4 @@ CODFASEORI|1|10|0|Codice fase originario
CODCONTORI|1|20|0|Codice conto originario CODCONTORI|1|20|0|Codice conto originario
2 2
NUMREG+NUMRIG| NUMREG+NUMRIG|
CODCONTO+DATAREG+NUMREG+NUMRIG|X CODCONTO+DATACOMP+NUMREG+NUMRIG|X