Migliorato calcolo inventario alla data
git-svn-id: svn://10.65.10.50/branches/R_10_00@22799 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d410a1fb99
commit
eeabd564c9
180
mg/mg1300.cpp
180
mg/mg1300.cpp
@ -10,17 +10,22 @@
|
||||
|
||||
#include "mg1300a.h"
|
||||
|
||||
#include "../cg/cglib01.h"
|
||||
#include "../mg/mag.h"
|
||||
#include "../mg/movmag.h"
|
||||
#include "../mg/rmovmag.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TSaldodata_mask
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TSaldodata_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
TSaldodata_mask() : TAutomask("mg1300a") {}
|
||||
TSaldodata_mask();
|
||||
};
|
||||
|
||||
bool TSaldodata_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
@ -37,19 +42,85 @@ bool TSaldodata_mask::on_field_event(TOperable_field& o, TField_event e, long jo
|
||||
<< "\nTO CODTAB=" << codmag;
|
||||
}
|
||||
TISAM_recordset recset(query);
|
||||
TCursor_sheet s(recset.cursor(), "CODTAB[1,5]|CODTAB[6,25]|CODTAB[26,35]|R0|R1|D0", TR("Situazione"),
|
||||
HR("Mag+Dep|Articolo@20|Livello@10|Giacenza@12V|Fisico@12V|Data@10"), 0, 1);
|
||||
|
||||
TToken_string fields = "CODTAB[1,5]|CODTAB[6,25]|CODTAB[26,35]|S7|R0|R1|R2|D0|S6|I0|I1|I2|I3|I4|I5|S0";
|
||||
TToken_string heads = HR("Mag+Dep|Articolo@20|Livello@10|UM|Giacenza@12V|Effettiva@12V|Fisica@12V|Data@10|Gr.Mer.|Gr.A|Cnt.A|Sott.A|Gr.V|Cnt.V|Sott.V|Descrizione@50");
|
||||
|
||||
if (!ini_get_bool(CONFIG_DITTA, "mg", "GESDEPOSITI"))
|
||||
{
|
||||
fields.add("CODTAB[1,3]", 0);
|
||||
heads.add(HR("Mag"), 0);
|
||||
}
|
||||
if (!ini_get_bool(CONFIG_DITTA, "mg", "GESLIVGIAC"))
|
||||
{
|
||||
fields.destroy(2);
|
||||
heads.destroy(2);
|
||||
}
|
||||
|
||||
TCursor_sheet s(recset.cursor(), fields, TR("Situazione"), heads, 0, 1);
|
||||
s.run();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
TSaldodata_mask::TSaldodata_mask() : TAutomask("mg1300a")
|
||||
{
|
||||
const bool lg = ini_get_bool(CONFIG_DITTA, "mg", "GESLIVGIAC");
|
||||
enable(F_USEDEP, lg);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TSaldo_info
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
struct TSaldo_info : public TObject
|
||||
{
|
||||
real _giac;
|
||||
real _giac_eff;
|
||||
TString4 _um;
|
||||
TString8 _grmerc;
|
||||
TString80 _desc;
|
||||
TBill _billa, _billv;
|
||||
};
|
||||
|
||||
class TAssoc_saldi : public TAssoc_array
|
||||
{
|
||||
public:
|
||||
TSaldo_info& info(const char* key);
|
||||
};
|
||||
|
||||
TSaldo_info& TAssoc_saldi::info(const char* key)
|
||||
{
|
||||
TSaldo_info* i = (TSaldo_info*)objptr(key);
|
||||
if (i == NULL)
|
||||
{
|
||||
i = new TSaldo_info;
|
||||
|
||||
TToken_string k(key);
|
||||
const TFixed_string codart = k.get(1);
|
||||
const TArticolo& art = cached_article(codart);
|
||||
i->_desc = art.get(ANAMAG_DESCR);
|
||||
i->_um = art.first_um();
|
||||
i->_grmerc = art.get(ANAMAG_GRMERC);
|
||||
i->_billa.set(art.get_int(ANAMAG_GRUPPOA), art.get_int(ANAMAG_CONTOA), art.get_long(ANAMAG_SOTTOCA));
|
||||
i->_billv.set(art.get_int(ANAMAG_GRUPPOV), art.get_int(ANAMAG_CONTOV), art.get_long(ANAMAG_SOTTOCV));
|
||||
|
||||
add(key, i);
|
||||
}
|
||||
return *i;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TSaldodata_app
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TSaldodata_app : public TSkeleton_application
|
||||
{
|
||||
protected:
|
||||
void reset_saldi(const TDate& data, const TString& codmag);
|
||||
void init_saldi_iniziali(const TDate& data, bool use_dep,const TString& codmag, TAssoc_array& saldi);
|
||||
void update_saldi(const TDate& data, bool use_dep, const TString& codmag, TAssoc_array& saldi);
|
||||
void init_saldi_iniziali(const TDate& data, bool use_dep,const TString& codmag, TAssoc_saldi& saldi);
|
||||
void update_saldi(const TDate& data, bool use_dep, const TString& codmag, TAssoc_saldi& saldi);
|
||||
void rebuild_saldi(const TDate& data, bool use_dep, const TString& codmag);
|
||||
|
||||
public:
|
||||
@ -82,41 +153,46 @@ void TSaldodata_app::reset_saldi(const TDate& data, const TString& codmag)
|
||||
}
|
||||
}
|
||||
|
||||
void TSaldodata_app::init_saldi_iniziali(const TDate& data, bool use_dep, const TString& codmag, TAssoc_array& saldi)
|
||||
void TSaldodata_app::init_saldi_iniziali(const TDate& data, bool use_dep, const TString& codmag, TAssoc_saldi& saldi)
|
||||
{
|
||||
TString limit;
|
||||
limit << " ANNOES=" << (data.year()-1);
|
||||
if (codmag.full())
|
||||
limit << " CODMAG=" << codmag;
|
||||
|
||||
TString query;
|
||||
query << "USE " << LF_MAG << " KEY 2"
|
||||
<< "\nFROM" << limit << "\nTO" << limit;
|
||||
|
||||
TISAM_recordset recset(query);
|
||||
TToken_string key;
|
||||
TProgind pi(recset.items(), TR("Saldi iniziali"));
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
TEsercizi_contabili esc;
|
||||
const TDate chiusura = esc.esercizio(data).chiusura_mag();
|
||||
if (!chiusura.ok())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
const real g = recset.get(MAG_GIAC).as_real();
|
||||
if (!g.is_zero())
|
||||
TString limit;
|
||||
limit << " ANNOES=" << (data.year()-1);
|
||||
if (codmag.full())
|
||||
limit << " CODMAG=" << codmag;
|
||||
|
||||
TString query;
|
||||
query << "USE " << LF_MAG << " KEY 2"
|
||||
<< "\nFROM" << limit << "\nTO" << limit;
|
||||
|
||||
TISAM_recordset recset(query);
|
||||
TToken_string key;
|
||||
TProgind pi(recset.items(), TR("Saldi iniziali"));
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
|
||||
{
|
||||
key = recset.get(MAG_CODMAG).as_string();
|
||||
if (!use_dep) key.cut(3);
|
||||
key.add(recset.get(MAG_CODART).as_string());
|
||||
key.add(recset.get(MAG_LIVELLO).as_string());
|
||||
real* giac = (real*)saldi.objptr(key);
|
||||
if (giac == NULL)
|
||||
saldi.add(key, g);
|
||||
else
|
||||
*giac += g;
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
const real giac = recset.get(MAG_GIAC).as_real();
|
||||
const real cl = recset.get(MAG_INCL).as_real() - recset.get(MAG_ACL).as_real();
|
||||
if (!giac.is_zero() || !cl.is_zero())
|
||||
{
|
||||
key = recset.get(MAG_CODMAG).as_string();
|
||||
if (key.empty()) key.spaces(5);
|
||||
if (!use_dep) key.cut(3);
|
||||
key.add(recset.get(MAG_CODART).as_string());
|
||||
key.add(recset.get(MAG_LIVELLO).as_string());
|
||||
TSaldo_info& info = saldi.info(key);
|
||||
info._giac += giac;
|
||||
info._giac_eff += giac - cl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TSaldodata_app::update_saldi(const TDate& data, bool use_dep, const TString& mag, TAssoc_array& saldi)
|
||||
void TSaldodata_app::update_saldi(const TDate& data, bool use_dep, const TString& mag, TAssoc_saldi& saldi)
|
||||
{
|
||||
TString query;
|
||||
query << "USE MOVMAG KEY 2 SELECT BETWEEN(DATAREG,0," << data.date2ansi() << ')'
|
||||
@ -140,10 +216,13 @@ void TSaldodata_app::update_saldi(const TDate& data, bool use_dep, const TString
|
||||
|
||||
const TString& rcaus = recset.get(RMOVMAG_CODCAUS).as_string();
|
||||
const TCausale_magazzino& caus = cached_causale_magazzino(rcaus.full() ? rcaus : hcaus);
|
||||
const int sgn = caus.sgn(s_giac);
|
||||
if (sgn != 0 && caus.update_qta())
|
||||
const int sgn_giac = caus.sgn(s_giac);
|
||||
const int sgn_icl = caus.sgn(s_incl);
|
||||
const int sgn_acl = caus.sgn(s_acl);
|
||||
if ((sgn_giac != 0 || sgn_icl != 0 || sgn_acl != 0) && caus.update_qta())
|
||||
{
|
||||
TString8 codmag = recset.get(RMOVMAG_CODMAG).as_string();
|
||||
if (codmag.empty()) codmag.spaces(5);
|
||||
if (!use_dep) codmag.cut(3);
|
||||
if (mag.full() && codmag != mag)
|
||||
continue;
|
||||
@ -157,16 +236,11 @@ void TSaldodata_app::update_saldi(const TDate& data, bool use_dep, const TString
|
||||
key.add(codart);
|
||||
key.add(recset.get(RMOVMAG_LIVGIAC).as_string());
|
||||
|
||||
real* giac = (real*)saldi.objptr(key);
|
||||
if (giac == NULL)
|
||||
{
|
||||
giac = new real;
|
||||
saldi.add(key, giac);
|
||||
}
|
||||
if (sgn > 0)
|
||||
*giac += qta;
|
||||
else
|
||||
*giac -= qta;
|
||||
TSaldo_info& info = saldi.info(key);
|
||||
info._giac += qta * sgn_giac;
|
||||
info._giac_eff += qta * sgn_giac;
|
||||
info._giac_eff += qta * sgn_icl;
|
||||
info._giac_eff += qta * sgn_acl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -174,7 +248,7 @@ void TSaldodata_app::update_saldi(const TDate& data, bool use_dep, const TString
|
||||
|
||||
void TSaldodata_app::rebuild_saldi(const TDate& data, bool use_dep, const TString& codmag)
|
||||
{
|
||||
TAssoc_array saldi;
|
||||
TAssoc_saldi saldi;
|
||||
init_saldi_iniziali(data, use_dep, codmag, saldi);
|
||||
update_saldi(data, use_dep, codmag, saldi);
|
||||
|
||||
@ -203,7 +277,19 @@ void TSaldodata_app::rebuild_saldi(const TDate& data, bool use_dep, const TStrin
|
||||
mag.put("CODTAB", codtab);
|
||||
mag.write();
|
||||
}
|
||||
mag.put("R0", *(real*)obj);
|
||||
|
||||
const TSaldo_info& info = *(const TSaldo_info*)obj;
|
||||
mag.put("S0", info._desc);
|
||||
mag.put("R0", info._giac);
|
||||
mag.put("R1", info._giac_eff);
|
||||
mag.put("S6", info._grmerc);
|
||||
mag.put("S7", info._um);
|
||||
mag.put("I0", info._billa.gruppo());
|
||||
mag.put("I1", info._billa.conto());
|
||||
mag.put("I2", info._billa.sottoconto());
|
||||
mag.put("I3", info._billv.gruppo());
|
||||
mag.put("I4", info._billv.conto());
|
||||
mag.put("I5", info._billv.sottoconto());
|
||||
mag.put("D0", data);
|
||||
if (mag.rewrite() != NOERR)
|
||||
{
|
||||
|
@ -1457,15 +1457,16 @@ void TArticolo_giacenza::put_costo_standard(const real& costo)
|
||||
}
|
||||
|
||||
// calcola la giacenza corretta dai campi Conto Lavoro e Produzione
|
||||
real TArticolo_giacenza::giacenza_corretta(const TRectype& rec,bool giac_eff,bool valorizza_componenti) const
|
||||
real TArticolo_giacenza::giacenza_corretta(const TRectype& rec, bool giac_eff, bool valorizza_componenti) const
|
||||
{
|
||||
CHECK(rec.num() == LF_MAG, "Il record passato deve essere di LF_MAG");
|
||||
CHECK(rec.num() == LF_MAG, "Record non su LF_MAG");
|
||||
real giacenza(rec.get_real(MAG_GIAC));
|
||||
if (giac_eff)
|
||||
{
|
||||
giacenza -= rec.get_real(MAG_INCL);
|
||||
giacenza += rec.get_real(MAG_ACL);
|
||||
giacenza += valorizza_componenti ? ZERO : (rec.get_real(MAG_PRODFIN)-rec.get_real(MAG_PRODCOMP));
|
||||
if (!valorizza_componenti)
|
||||
giacenza += rec.get_real(MAG_PRODFIN)-rec.get_real(MAG_PRODCOMP);
|
||||
}
|
||||
return giacenza;
|
||||
}
|
||||
@ -1483,7 +1484,7 @@ real TArticolo_giacenza::giacenza_anno(const char* codmag, const char* livello,
|
||||
{
|
||||
const TRectype& rec = rmag.row(i);
|
||||
if (!rec.get(MAG_CODMAG).empty())
|
||||
giac += rec.get_real("GIAC");
|
||||
giac += rec.get_real(MAG_GIAC);
|
||||
}
|
||||
return giac;
|
||||
}
|
||||
@ -1614,7 +1615,7 @@ void TArticolo_giacenza_data::al(const TDate& data, const char* codmag, const ch
|
||||
const TString& codart = rmovmag.get(RMOVMAG_CODART);
|
||||
if (codart == codice() && datacomp >= inizio && datacomp <= data)
|
||||
{
|
||||
const TString16 codmag = rmovmag.get(RMOVMAG_CODMAG);
|
||||
const TString8 codmag = rmovmag.get(RMOVMAG_CODMAG);
|
||||
const TString16 livello = rmovmag.get(RMOVMAG_LIVGIAC);
|
||||
const long nreg = rmovmag.get_int(RMOVMAG_NUMREG);
|
||||
const int nrig = rmovmag.get_int(RMOVMAG_NRIG);
|
||||
|
@ -835,7 +835,7 @@ void TMov_mag::update_balances_clifo(TRectype & clifomagrec, const TSaldo_mag_cl
|
||||
|
||||
void TMov_mag::update_balances(TRectype& magrec, int numrig, bool plus)
|
||||
{
|
||||
const TRectype & rec = body()[numrig];
|
||||
const TRectype& rec = body()[numrig];
|
||||
TSaldo_mag saldo(*this, rec);
|
||||
const TCausale_magazzino& caus = cached_causale_magazzino(saldo.codcaus());
|
||||
TArticolo& art = articolo(numrig);
|
||||
|
Loading…
x
Reference in New Issue
Block a user