Patch level : 2.2
Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunto riferimento al documento originale sui movimenti provenenienti da documento git-svn-id: svn://10.65.10.50/trunk@13237 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d76774f0bd
commit
7d60fb41e5
226
ca/ca3300.cpp
226
ca/ca3300.cpp
@ -229,188 +229,6 @@ TPrint_bilancio_ca_mask::TPrint_bilancio_ca_mask()
|
||||
create_sheet();
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
// Recordset
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
class TPiano_conti_recordset : public TISAM_recordset
|
||||
{
|
||||
word _tipimov;
|
||||
TString _da_conto, _a_conto;
|
||||
int _contolen;
|
||||
TAnal_bill _bill;
|
||||
TDate _dal, _al;
|
||||
bool _movimentati, _nonnulli;
|
||||
|
||||
protected:
|
||||
bool valid_record(const TRelation& rel) const;
|
||||
static bool pianoconti_filter(const TRelation* rel);
|
||||
|
||||
virtual void set_custom_filter(TCursor& cursor) const;
|
||||
|
||||
public:
|
||||
virtual const TVariant& get(const char* column_name) const;
|
||||
|
||||
void set_filter(const TMask& m, int r);
|
||||
TPiano_conti_recordset(const char* sql);
|
||||
};
|
||||
|
||||
const TVariant& TPiano_conti_recordset::get(const char* column_name) const
|
||||
{
|
||||
if (strncmp(column_name, "SALDO:", 6) == 0)
|
||||
{
|
||||
TString16 sub_field = column_name+6;
|
||||
const char last = sub_field.right(1)[0];
|
||||
int tipimov = 0;
|
||||
switch (last)
|
||||
{
|
||||
case 'C': tipimov = 1; sub_field.rtrim(1); break; // Consuntivo
|
||||
case 'P':
|
||||
case 'V': tipimov = 6; sub_field.rtrim(1); break; // Preventivo o variazaione preventivo
|
||||
default : tipimov = _tipimov; break;
|
||||
}
|
||||
|
||||
((TAnal_bill&)_bill).set_conto(get(PCONANA_CODCONTO).as_string());
|
||||
const TSaldanal& s = ca_saldo(_bill, _dal, _al, tipimov);
|
||||
|
||||
TVariant& var = get_tmp_var();
|
||||
if (strcmp(sub_field, "INI_DARE") == 0)
|
||||
{
|
||||
var = s._ini.sezione() == 'D' ? s._ini.valore() : ZERO;
|
||||
} else
|
||||
if (strcmp(sub_field, "INI_AVERE") == 0)
|
||||
{
|
||||
var = s._ini.sezione() == 'A' ? s._ini.valore() : ZERO;
|
||||
} else
|
||||
if (strcmp(sub_field, "MOV_DARE") == 0)
|
||||
{
|
||||
var = s._dare.valore();
|
||||
} else
|
||||
if (strcmp(sub_field, "MOV_AVERE") == 0)
|
||||
{
|
||||
var = s._avere.valore();
|
||||
} else
|
||||
if (strcmp(sub_field, "FIN_DARE") == 0)
|
||||
{
|
||||
var = s._fin.sezione() == 'D' ? s._fin.valore() : ZERO;
|
||||
} else
|
||||
if (strcmp(sub_field, "FIN_AVERE") == 0)
|
||||
{
|
||||
var = s._fin.sezione() == 'A' ? s._fin.valore() : ZERO;
|
||||
}
|
||||
return var;
|
||||
}
|
||||
if (strcmp(column_name, "#CMSCDC") == 0)
|
||||
{
|
||||
const TMultilevel_code_info& info = ca_multilevel_code_info(LF_FASI);
|
||||
switch (info.parent())
|
||||
{
|
||||
case LF_CDC : column_name = "#COSTO"; break;
|
||||
case LF_COMMESSE: column_name = "#COMMESSA"; break;
|
||||
default : return NULL_VARIANT;
|
||||
}
|
||||
}
|
||||
if (strcmp(column_name, "#COSTO") == 0)
|
||||
{
|
||||
TVariant& var = get_tmp_var();
|
||||
var = _bill.costo();
|
||||
return var;
|
||||
}
|
||||
if (strcmp(column_name, "#COMMESSA") == 0)
|
||||
{
|
||||
TVariant& var = get_tmp_var();
|
||||
var = _bill.commessa();
|
||||
return var;
|
||||
}
|
||||
if (strcmp(column_name, "#FASE") == 0)
|
||||
{
|
||||
TVariant& var = get_tmp_var();
|
||||
var = _bill.fase();
|
||||
return var;
|
||||
}
|
||||
|
||||
return TISAM_recordset::get(column_name);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
((TAnal_bill&)_bill).set_conto(conto);
|
||||
const TSaldanal& s = ca_saldo(_bill, _dal, _al, _tipimov);
|
||||
if (_movimentati && !s._movimentato)
|
||||
return false;
|
||||
if (_nonnulli && s._ini.is_zero() && s._dare.is_zero() && s._avere.is_zero())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static const TPiano_conti_recordset* _current_recset = NULL;
|
||||
|
||||
bool TPiano_conti_recordset::pianoconti_filter(const TRelation* rel)
|
||||
{ return _current_recset->valid_record(*rel); }
|
||||
|
||||
void TPiano_conti_recordset::set_custom_filter(TCursor& cursor) const
|
||||
{
|
||||
TRectype darec = cursor.curr();
|
||||
TRectype arec = darec;
|
||||
|
||||
darec.zero(); darec.put(PCONANA_CODCONTO, _da_conto);
|
||||
arec.zero(); arec.put(PCONANA_CODCONTO, _a_conto);
|
||||
cursor.setregion(darec, arec);
|
||||
|
||||
_current_recset = this;
|
||||
cursor.set_filterfunction(pianoconti_filter);
|
||||
}
|
||||
|
||||
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++)
|
||||
{
|
||||
_da_conto << m.get(F_PDC1_INI+i);
|
||||
_a_conto << m.get(F_PDC1_FIN+i);
|
||||
}
|
||||
|
||||
_dal = m.get(F_DATADA);
|
||||
_al = m.get(F_DATAA);
|
||||
|
||||
switch (m.get(F_TIPOSTAMPA)[0])
|
||||
{
|
||||
case 'C': _tipimov = 1; break; // Consuntivo
|
||||
case 'P': _tipimov = 6; break; // Preventivo e variazioni
|
||||
default : _tipimov = 7; break; // Raffronto
|
||||
}
|
||||
|
||||
_movimentati = m.get_int(F_STAMPAV) == 1;
|
||||
_nonnulli = m.get_int(F_STAMPAV) == 2;
|
||||
|
||||
if (r >= 0)
|
||||
{
|
||||
TSheet_field& sf = m.sfield(F_RIGHE);
|
||||
TMask& sm = sf.sheet_mask();
|
||||
sf.update_mask(r);
|
||||
TRelation rel(LF_RMOVANA);
|
||||
sm.autosave(rel);
|
||||
_bill.get(rel.curr());
|
||||
}
|
||||
else
|
||||
_bill.reset();
|
||||
}
|
||||
|
||||
TPiano_conti_recordset::TPiano_conti_recordset(const char* sql) : TISAM_recordset(sql)
|
||||
{ }
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
// Report
|
||||
////////////////////////////////////////////////////////
|
||||
@ -421,20 +239,50 @@ protected:
|
||||
virtual bool set_recordset(const TString& sql);
|
||||
|
||||
public:
|
||||
void set_recordset(const TMask& msk, int row);
|
||||
void set_filter(const TMask& msk, int row);
|
||||
TReport_bilancio_ca(const char* name);
|
||||
};
|
||||
|
||||
bool TReport_bilancio_ca::set_recordset(const TString& sql)
|
||||
bool TReport_bilancio_ca::set_recordset(const TString& /* sql */)
|
||||
{
|
||||
TPiano_conti_recordset* rset = new TPiano_conti_recordset(sql);
|
||||
TPconana_recordset* rset = new TPconana_recordset();
|
||||
return TReport::set_recordset(rset);
|
||||
}
|
||||
|
||||
void TReport_bilancio_ca::set_recordset(const TMask& msk, int row)
|
||||
void TReport_bilancio_ca::set_filter(const TMask& m, int row)
|
||||
{
|
||||
TPiano_conti_recordset* rset = (TPiano_conti_recordset*)recordset();
|
||||
rset->set_filter(msk, row);
|
||||
TString da_conto, a_conto, costo, commessa, fase;
|
||||
for (int i = 0; m.id2pos(F_PDC1_INI+i) > 0; i++)
|
||||
{
|
||||
da_conto << m.get(F_PDC1_INI+i);
|
||||
a_conto << m.get(F_PDC1_FIN+i);
|
||||
}
|
||||
|
||||
const TDate dal = m.get(F_DATADA);
|
||||
const TDate al = m.get(F_DATAA);
|
||||
|
||||
int tipimov = 0;
|
||||
switch (m.get(F_TIPOSTAMPA)[0])
|
||||
{
|
||||
case 'C': tipimov = 1; break; // Consuntivo
|
||||
case 'P': tipimov = 6; break; // Preventivo e variazioni
|
||||
default : tipimov = 7; break; // Raffronto
|
||||
}
|
||||
|
||||
const bool movimentati = m.get_int(F_STAMPAV) == 1;
|
||||
const bool nonnulli = m.get_int(F_STAMPAV) == 2;
|
||||
|
||||
TSheet_field& sf = m.sfield(F_RIGHE);
|
||||
TMask& sm = sf.sheet_mask();
|
||||
sf.update_mask(row);
|
||||
TRelation rel(LF_RMOVANA);
|
||||
sm.autosave(rel);
|
||||
costo = rel.curr().get(RMOVANA_CODCCOSTO);
|
||||
commessa = rel.curr().get(RMOVANA_CODCMS);
|
||||
fase = rel.curr().get(RMOVANA_CODFASE);
|
||||
|
||||
TPconana_recordset* rset = (TPconana_recordset*)recordset();
|
||||
rset->set_filter(da_conto, a_conto, costo, commessa, fase, dal, al, tipimov, movimentati, nonnulli);
|
||||
}
|
||||
|
||||
TReport_bilancio_ca::TReport_bilancio_ca(const char* name)
|
||||
@ -465,7 +313,7 @@ void TPrint_bilancio_ca::main_loop()
|
||||
const int rows = sf.items();
|
||||
for (int i = 0; i < rows; i++)
|
||||
{
|
||||
rep.set_recordset(mask, i);
|
||||
rep.set_filter(mask, i);
|
||||
book.add(rep);
|
||||
}
|
||||
|
||||
|
140
ca/calib02.cpp
140
ca/calib02.cpp
@ -7,9 +7,149 @@
|
||||
#include "../include/rdoc.h"
|
||||
|
||||
#include "movana.h"
|
||||
#include "pconana.h"
|
||||
#include "rmovana.h"
|
||||
#include "saldana.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TPconana_recordset
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
const TVariant& TPconana_recordset::get(const char* column_name) const
|
||||
{
|
||||
if (strncmp(column_name, "SALDO:", 6) == 0)
|
||||
{
|
||||
TString16 sub_field = column_name+6;
|
||||
const char last = sub_field.right(1)[0];
|
||||
int tipimov = 0;
|
||||
switch (last)
|
||||
{
|
||||
case 'C': tipimov = 1; sub_field.rtrim(1); break; // Consuntivo
|
||||
case 'P':
|
||||
case 'V': tipimov = 6; sub_field.rtrim(1); break; // Preventivo o variazaione preventivo
|
||||
default : tipimov = _tipimov; break;
|
||||
}
|
||||
|
||||
((TAnal_bill&)_bill).set_conto(relation()->curr().get(PCONANA_CODCONTO));
|
||||
const TSaldanal& s = ca_saldo(_bill, _dal, _al, tipimov);
|
||||
|
||||
TVariant& var = get_tmp_var();
|
||||
if (strcmp(sub_field, "INI_DARE") == 0)
|
||||
{
|
||||
var = s._ini.sezione() == 'D' ? s._ini.valore() : ZERO;
|
||||
} else
|
||||
if (strcmp(sub_field, "INI_AVERE") == 0)
|
||||
{
|
||||
var = s._ini.sezione() == 'A' ? s._ini.valore() : ZERO;
|
||||
} else
|
||||
if (strcmp(sub_field, "MOV_DARE") == 0)
|
||||
{
|
||||
var = s._dare.valore();
|
||||
} else
|
||||
if (strcmp(sub_field, "MOV_AVERE") == 0)
|
||||
{
|
||||
var = s._avere.valore();
|
||||
} else
|
||||
if (strcmp(sub_field, "FIN_DARE") == 0)
|
||||
{
|
||||
var = s._fin.sezione() == 'D' ? s._fin.valore() : ZERO;
|
||||
} else
|
||||
if (strcmp(sub_field, "FIN_AVERE") == 0)
|
||||
{
|
||||
var = s._fin.sezione() == 'A' ? s._fin.valore() : ZERO;
|
||||
}
|
||||
return var;
|
||||
}
|
||||
if (strcmp(column_name, "#CMSCDC") == 0)
|
||||
{
|
||||
const TMultilevel_code_info& info = ca_multilevel_code_info(LF_FASI);
|
||||
switch (info.parent())
|
||||
{
|
||||
case LF_CDC : column_name = "#COSTO"; break;
|
||||
case LF_COMMESSE: column_name = "#COMMESSA"; break;
|
||||
default : return NULL_VARIANT;
|
||||
}
|
||||
}
|
||||
if (strcmp(column_name, "#COSTO") == 0)
|
||||
return get_tmp_var() = _bill.costo();
|
||||
if (strcmp(column_name, "#COMMESSA") == 0)
|
||||
return get_tmp_var() = _bill.commessa();
|
||||
if (strcmp(column_name, "#FASE") == 0)
|
||||
return get_tmp_var() = _bill.fase();
|
||||
|
||||
return TISAM_recordset::get(column_name);
|
||||
}
|
||||
|
||||
bool TPconana_recordset::valid_record(const TRelation& rel) const
|
||||
{
|
||||
if (_movimentati || _nonnulli)
|
||||
{
|
||||
const TString& conto = rel.curr().get(PCONANA_CODCONTO);
|
||||
((TAnal_bill&)_bill).set_conto(conto);
|
||||
const TSaldanal& s = ca_saldo(_bill, _dal, _al, _tipimov);
|
||||
if (_movimentati && !s._movimentato)
|
||||
return false;
|
||||
if (_nonnulli && s._ini.is_zero() && s._dare.is_zero() && s._avere.is_zero())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static const TPconana_recordset* _current_recset = NULL;
|
||||
|
||||
bool TPconana_recordset::pianoconti_filter(const TRelation* rel)
|
||||
{ return _current_recset->valid_record(*rel); }
|
||||
|
||||
void TPconana_recordset::set_custom_filter(TCursor& cursor) const
|
||||
{
|
||||
TString filter;
|
||||
filter << "LEN(" << PCONANA_CODCONTO << ")==" << _contolen;
|
||||
cursor.setfilter(filter);
|
||||
|
||||
TRectype darec(LF_PCONANA), arec(LF_PCONANA);
|
||||
darec.put(PCONANA_CODCONTO, _da_conto);
|
||||
arec.put(PCONANA_CODCONTO, _a_conto);
|
||||
cursor.setregion(darec, arec);
|
||||
|
||||
if (_movimentati || _nonnulli)
|
||||
{
|
||||
_current_recset = this;
|
||||
cursor.set_filterfunction(pianoconti_filter);
|
||||
}
|
||||
else
|
||||
cursor.set_filterfunction(NULL);
|
||||
}
|
||||
|
||||
void TPconana_recordset::set_filter(const char* da_conto, const char* a_conto,
|
||||
const char* costo, const char* commessa, const char* fase,
|
||||
const TDate& dal, const TDate& al,
|
||||
word tipimov, bool movimentati, bool nonnulli)
|
||||
{
|
||||
_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);
|
||||
|
||||
_da_conto = da_conto;
|
||||
_a_conto = a_conto;
|
||||
|
||||
_dal = dal;
|
||||
_al = al;
|
||||
|
||||
_tipimov= tipimov;
|
||||
_movimentati = movimentati;
|
||||
_nonnulli = nonnulli;
|
||||
|
||||
_bill.reset();
|
||||
_bill.set_costo(costo);
|
||||
_bill.set_commessa(commessa);
|
||||
_bill.set_fase(fase);
|
||||
}
|
||||
|
||||
TPconana_recordset::TPconana_recordset() : TISAM_recordset("USE PCONANA")
|
||||
{ }
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAnal_report
|
||||
///////////////////////////////////////////////////////////
|
||||
|
78
ca/calib02.h
78
ca/calib02.h
@ -5,30 +5,6 @@
|
||||
#include <report.h>
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAnal_rapport
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TAnal_report : public TReport
|
||||
{
|
||||
unsigned int _first_msg;
|
||||
|
||||
protected: // protected is safer
|
||||
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
||||
virtual size_t get_usr_words(TString_array& words) const;
|
||||
virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack);
|
||||
virtual bool use_mask() { return false;}
|
||||
|
||||
void msg_format(int logicnum, TVariant_stack& stack);
|
||||
void msg_format_costo (TVariant_stack& stack);
|
||||
void msg_format_commessa (TVariant_stack& stack);
|
||||
void msg_format_fase (TVariant_stack& stack);
|
||||
void msg_format_conto (TVariant_stack& stack);
|
||||
void msg_format_commessa_costo(TVariant_stack& stack);
|
||||
|
||||
public: // meglio pubic?
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAnal_bill
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -76,4 +52,58 @@ struct TSaldanal : public TObject
|
||||
|
||||
const TSaldanal& ca_saldo(const TAnal_bill& bill, const TDate& dal, const TDate& al, word tipi = 1);
|
||||
|
||||
////////////////////////////////////////////////////////
|
||||
// TPconana_recordset
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
class TPconana_recordset : public TISAM_recordset
|
||||
{
|
||||
word _tipimov;
|
||||
TString _da_conto, _a_conto;
|
||||
int _contolen;
|
||||
TAnal_bill _bill;
|
||||
TDate _dal, _al;
|
||||
bool _movimentati, _nonnulli;
|
||||
|
||||
protected:
|
||||
bool valid_record(const TRelation& rel) const;
|
||||
static bool pianoconti_filter(const TRelation* rel);
|
||||
|
||||
virtual void set_custom_filter(TCursor& cursor) const;
|
||||
|
||||
public:
|
||||
virtual const TVariant& get(const char* column_name) const;
|
||||
|
||||
void set_filter(const char* da_conto, const char* a_conto,
|
||||
const char* costo, const char* commessa, const char* fase,
|
||||
const TDate& dal, const TDate& al,
|
||||
word tipimov, bool movimentati, bool nonnulli);
|
||||
|
||||
TPconana_recordset();
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAnal_rapport
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TAnal_report : public TReport
|
||||
{
|
||||
unsigned int _first_msg;
|
||||
|
||||
protected: // protected is safer
|
||||
virtual bool get_usr_val(const TString& name, TVariant& var) const;
|
||||
virtual size_t get_usr_words(TString_array& words) const;
|
||||
virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack);
|
||||
virtual bool use_mask() { return false;}
|
||||
|
||||
void msg_format(int logicnum, TVariant_stack& stack);
|
||||
void msg_format_costo (TVariant_stack& stack);
|
||||
void msg_format_commessa (TVariant_stack& stack);
|
||||
void msg_format_fase (TVariant_stack& stack);
|
||||
void msg_format_conto (TVariant_stack& stack);
|
||||
void msg_format_commessa_costo(TVariant_stack& stack);
|
||||
|
||||
public: // meglio pubic?
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1,3 +1,3 @@
|
||||
107
|
||||
0
|
||||
$movana|0|0|152|0|Movimenti di Analitica|||
|
||||
$movana|0|0|168|0|Movimenti di Analitica|||
|
||||
|
@ -1,5 +1,5 @@
|
||||
107
|
||||
17
|
||||
21
|
||||
ANNOES|9|4|0|Codice esercizio
|
||||
NUMREG|3|7|0|Numero di operazione
|
||||
DATAREG|5|8|0|Data operazione
|
||||
@ -17,6 +17,10 @@ CAMBIO|4|15|6|Cambio della valuta
|
||||
TOTDOC|4|18|3|Totale documento
|
||||
SEZIONE|1|1|0|Sezione del totale documento
|
||||
BLOCCATO|8|1|0|Movimento bloccato
|
||||
DPROVV|1|1|0|Documento originale PROVV
|
||||
DANNO|2|4|0|Documento originale ANNO
|
||||
DCODNUM|1|4|0|Documento originale CODNUM
|
||||
DNDOC|3|7|0|Documento originale NDOC
|
||||
3
|
||||
NUMREG|
|
||||
DATACOMP+NUMREG|X
|
||||
|
@ -15,5 +15,9 @@
|
||||
#define MOVANA_SEZIONE "SEZIONE"
|
||||
#define MOVANA_TOTDOC "TOTDOC"
|
||||
#define MOVANA_BLOCCATO "BLOCCATO"
|
||||
#define MOVANA_DPROVV "DPROVV"
|
||||
#define MOVANA_DANNO "DANNO"
|
||||
#define MOVANA_DCODNUM "DCODNUM"
|
||||
#define MOVANA_DNDOC "DNDOC"
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user