Patch level : 12.0 988
Files correlati : mg1.exe Commento : Corretta ricostruzione saldi nel caso di un record di magazzino che non esisteva
This commit is contained in:
parent
4269035bf9
commit
ec5546c047
@ -9,7 +9,7 @@
|
|||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
|
|
||||||
#include "mglib.h"
|
#include "mglib.h"
|
||||||
#include "../cg/cglib01.h"
|
#include "../cg/cglib.h"
|
||||||
#include "../ve/veconf.h"
|
#include "../ve/veconf.h"
|
||||||
|
|
||||||
#include "anamag.h"
|
#include "anamag.h"
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include "clifogiac.h"
|
#include "clifogiac.h"
|
||||||
#include <cfven.h>
|
#include <cfven.h>
|
||||||
|
|
||||||
#include "../cg/cglib01.h"
|
#include "../cg/cglib.h"
|
||||||
#include "../db/dblib.h"
|
#include "../db/dblib.h"
|
||||||
|
|
||||||
void update_balance(TRectype& rec, const char* fieldname, const real& val, const int sgn)
|
void update_balance(TRectype& rec, const char* fieldname, const real& val, const int sgn)
|
||||||
@ -570,7 +570,7 @@ bool TMov_mag::add_autorows() const
|
|||||||
if (codmag.not_empty())
|
if (codmag.not_empty())
|
||||||
linea_auto->put(RMOVMAG_CODMAG, codmag);
|
linea_auto->put(RMOVMAG_CODMAG, codmag);
|
||||||
const char * prezzo = prezzo_rauto(r);
|
const char * prezzo = prezzo_rauto(r);
|
||||||
if (prezzo != NULL)
|
if (prezzo != nullptr)
|
||||||
linea_auto->put(RMOVMAG_PREZZO, prezzo);
|
linea_auto->put(RMOVMAG_PREZZO, prezzo);
|
||||||
linea_auto->put(RMOVMAG_NRIG, r+1);
|
linea_auto->put(RMOVMAG_NRIG, r+1);
|
||||||
linea_auto->put(RMOVMAG_TIPORIGA, (char) riga_automatica);
|
linea_auto->put(RMOVMAG_TIPORIGA, (char) riga_automatica);
|
||||||
@ -759,7 +759,7 @@ void TMov_mag::add_saldi(const bool plus)
|
|||||||
TToken_string & key_mag = TSaldo_mag::key(*this, rec);
|
TToken_string & key_mag = TSaldo_mag::key(*this, rec);
|
||||||
TSaldo_mag * s_mag = (TSaldo_mag*)(__cache_saldi ? __saldi_mag.objptr(key_mag) : _saldi_mag.objptr(key_mag));
|
TSaldo_mag * s_mag = (TSaldo_mag*)(__cache_saldi ? __saldi_mag.objptr(key_mag) : _saldi_mag.objptr(key_mag));
|
||||||
|
|
||||||
if (s_mag == NULL)
|
if (s_mag == nullptr)
|
||||||
{
|
{
|
||||||
s_mag = new TSaldo_mag(*this, rec);
|
s_mag = new TSaldo_mag(*this, rec);
|
||||||
if (__cache_saldi)
|
if (__cache_saldi)
|
||||||
@ -772,7 +772,7 @@ void TMov_mag::add_saldi(const bool plus)
|
|||||||
const TCausale_magazzino& caus = causale(i);
|
const TCausale_magazzino& caus = causale(i);
|
||||||
TArticolo & art = articolo(i);
|
TArticolo & art = articolo(i);
|
||||||
|
|
||||||
quant =art.convert_to_um(quant, NULL, rec.get(RMOVMAG_UM));
|
quant =art.convert_to_um(quant, EMPTY_STRING, rec.get(RMOVMAG_UM));
|
||||||
|
|
||||||
real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
||||||
|
|
||||||
@ -783,7 +783,7 @@ void TMov_mag::add_saldi(const bool plus)
|
|||||||
TToken_string & key_clifo = TSaldo_mag_clifo::key(*this, rec);
|
TToken_string & key_clifo = TSaldo_mag_clifo::key(*this, rec);
|
||||||
TSaldo_mag_clifo * s_clifo = (TSaldo_mag_clifo*)(__cache_saldi ? __saldi_mag_clifo.objptr(key_clifo) : _saldi_mag_clifo.objptr(key_clifo));
|
TSaldo_mag_clifo * s_clifo = (TSaldo_mag_clifo*)(__cache_saldi ? __saldi_mag_clifo.objptr(key_clifo) : _saldi_mag_clifo.objptr(key_clifo));
|
||||||
|
|
||||||
if (s_clifo == NULL)
|
if (s_clifo == nullptr)
|
||||||
{
|
{
|
||||||
s_clifo = new TSaldo_mag_clifo(*this, rec);
|
s_clifo = new TSaldo_mag_clifo(*this, rec);
|
||||||
if (__cache_saldi)
|
if (__cache_saldi)
|
||||||
@ -838,7 +838,7 @@ bool TMov_mag::update_balances(bool lock)
|
|||||||
|
|
||||||
const TRectype& rec = b[i];
|
const TRectype& rec = b[i];
|
||||||
TArticolo& art = articolo(i);
|
TArticolo& art = articolo(i);
|
||||||
const real prezzo = art.convert_to_um(rec.get_real(RMOVMAG_PREZZO), NULL, rec.get(RMOVMAG_UM), false);
|
const real prezzo = art.convert_to_um(rec.get_real(RMOVMAG_PREZZO), EMPTY_STRING, rec.get(RMOVMAG_UM), false);
|
||||||
const long numreg = get_long(MOVMAG_NUMREG);
|
const long numreg = get_long(MOVMAG_NUMREG);
|
||||||
|
|
||||||
art.set_nuovo(false);
|
art.set_nuovo(false);
|
||||||
@ -913,7 +913,7 @@ bool TMov_mag::update_balances(bool lock)
|
|||||||
TProgress_monitor pi(keys_clifo.items(), msg, false);
|
TProgress_monitor pi(keys_clifo.items(), msg, false);
|
||||||
|
|
||||||
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
|
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
|
||||||
curr_key != NULL; curr_key = (TToken_string*)keys_clifo.succ_item())
|
curr_key != nullptr; curr_key = (TToken_string*)keys_clifo.succ_item())
|
||||||
{
|
{
|
||||||
TSaldo_mag_clifo & saldo=(TSaldo_mag_clifo &)_saldi_mag_clifo[*curr_key];
|
TSaldo_mag_clifo & saldo=(TSaldo_mag_clifo &)_saldi_mag_clifo[*curr_key];
|
||||||
const TCodice_articolo& codart = saldo.codart();
|
const TCodice_articolo& codart = saldo.codart();
|
||||||
@ -963,7 +963,7 @@ void TMov_mag::update_balances(TRectype& magrec, int numrig, bool plus)
|
|||||||
TArticolo& art = articolo(numrig);
|
TArticolo& art = articolo(numrig);
|
||||||
|
|
||||||
real quant = rec.get_real(RMOVMAG_QUANT);
|
real quant = rec.get_real(RMOVMAG_QUANT);
|
||||||
quant = art.convert_to_um(quant, NULL, rec.get(RMOVMAG_UM));
|
quant = art.convert_to_um(quant, EMPTY_STRING, rec.get(RMOVMAG_UM));
|
||||||
|
|
||||||
const real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
const real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
||||||
|
|
||||||
@ -979,7 +979,7 @@ void TMov_mag::update_balances_clifo(TRectype& cliforec, int numrig, bool plus)
|
|||||||
const TCausale_magazzino& caus = cached_causale_magazzino(saldo.codcaus());
|
const TCausale_magazzino& caus = cached_causale_magazzino(saldo.codcaus());
|
||||||
TArticolo & art = articolo(numrig);
|
TArticolo & art = articolo(numrig);
|
||||||
|
|
||||||
quant = art.convert_to_um(quant, NULL, rec.get(RMOVMAG_UM));
|
quant = art.convert_to_um(quant, EMPTY_STRING, rec.get(RMOVMAG_UM));
|
||||||
|
|
||||||
real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
|
||||||
|
|
||||||
@ -1155,12 +1155,13 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
const char* catven, const char* codlis)
|
const char* catven, const char* codlis)
|
||||||
{
|
{
|
||||||
TSystemisamfile a(LF_MOVMAG);
|
TSystemisamfile a(LF_MOVMAG);
|
||||||
|
|
||||||
if (a.open(_excllock) != NOERR)
|
if (a.open(_excllock) != NOERR)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const TEsercizi_contabili& esc = esercizi();
|
const TEsercizi_contabili& esc = esercizi();
|
||||||
|
|
||||||
TBalance_params p;
|
TBalance_params p;
|
||||||
|
|
||||||
p.codes = codes;
|
p.codes = codes;
|
||||||
p.codesprec = esc.pred(codes);
|
p.codesprec = esc.pred(codes);
|
||||||
p.closed = p.codesprec <= 0 || esc[p.codesprec].chiusura_mag().ok();
|
p.closed = p.codesprec <= 0 || esc[p.codesprec].chiusura_mag().ok();
|
||||||
@ -1170,6 +1171,7 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
p.tipov = tipo_valorizz;
|
p.tipov = tipo_valorizz;
|
||||||
|
|
||||||
TString msg;
|
TString msg;
|
||||||
|
|
||||||
{
|
{
|
||||||
// azzera tutte giacenze (ciclo sulle giacenze)
|
// azzera tutte giacenze (ciclo sulle giacenze)
|
||||||
TRelation anamag_rel(LF_ANAMAG);
|
TRelation anamag_rel(LF_ANAMAG);
|
||||||
@ -1195,21 +1197,6 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
c.scan(rel_reset_newclifogiac, (void*)&p, msg);
|
c.scan(rel_reset_newclifogiac, (void*)&p, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compattamento giacenze dopo cancellazione
|
|
||||||
{
|
|
||||||
//prefix().close_closeable_isamfiles(); // Altrimenti segnala -69 durante la pack
|
|
||||||
// TSystemisamfile mag(LF_MAG);
|
|
||||||
// mag.pack(true, true);
|
|
||||||
|
|
||||||
/* Mi da sempre errore di compattamento
|
|
||||||
if (p.codesprec > 0)
|
|
||||||
{
|
|
||||||
TSystemisamfile clifogiac(LF_CLIFOGIAC);
|
|
||||||
clifogiac.pack(true, true);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
// ricostruisce i saldi (ciclo sui movimenti)
|
// ricostruisce i saldi (ciclo sui movimenti)
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
{
|
{
|
||||||
@ -1230,7 +1217,7 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
if (__cache_saldi && __saldi_mag.items() > 0)
|
if (__cache_saldi && __saldi_mag.items() > 0)
|
||||||
{
|
{
|
||||||
TFast_isamfile mag(LF_MAG);
|
TFast_isamfile mag(LF_MAG);
|
||||||
TRectype& magcurr = mag.curr();
|
TRectype& mag_curr = mag.curr();
|
||||||
TString_array keys_mag;
|
TString_array keys_mag;
|
||||||
|
|
||||||
mag.setkey(2);
|
mag.setkey(2);
|
||||||
@ -1244,22 +1231,33 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
{
|
{
|
||||||
const TSaldo_mag& saldo = (const TSaldo_mag&)__saldi_mag[*curr_key];
|
const TSaldo_mag& saldo = (const TSaldo_mag&)__saldi_mag[*curr_key];
|
||||||
const TCodice_articolo& codart = saldo.codart();
|
const TCodice_articolo& codart = saldo.codart();
|
||||||
TArticolo_giacenza& art = cached_article_balances(codart);
|
|
||||||
|
|
||||||
saldo.putkey(magcurr);
|
saldo.putkey(mag_curr);
|
||||||
|
|
||||||
if (magcurr.read(mag, _isequal) != NOERR)
|
int readerr = mag_curr.read(mag, _isequal);
|
||||||
|
|
||||||
|
if (readerr != NOERR)
|
||||||
{
|
{
|
||||||
TRecord_array& sld = art.mag(saldo.codes());
|
mag.setkey(1);
|
||||||
const int nriga = sld.rows() + 1;
|
saldo.putkey(mag_curr);
|
||||||
|
mag_curr.put(MAG_NRIGA, 999);
|
||||||
|
if (mag.read(_isgteq) == NOERR)
|
||||||
|
mag.prev();
|
||||||
|
|
||||||
saldo.putkey(magcurr);
|
int nriga = 1;
|
||||||
magcurr.put(MAG_NRIGA, nriga);
|
|
||||||
sld.add_row(magcurr);
|
if (mag_curr.get_int(MAG_ANNOES) == saldo.codes() &&
|
||||||
int err = mag.write();
|
mag_curr.get(MAG_CODART) == saldo.codart())
|
||||||
CHECKD(err == NOERR, "Errore di write:", err);
|
nriga = mag_curr.get_int(MAG_NRIGA) + 1;
|
||||||
|
saldo.putkey(mag_curr);
|
||||||
|
mag_curr.put(MAG_NRIGA, nriga);
|
||||||
|
|
||||||
|
const int err = mag.write();
|
||||||
|
|
||||||
|
CHECKD(err == NOERR, "Mag : Errore di write:", err);
|
||||||
|
mag.setkey(2);
|
||||||
}
|
}
|
||||||
saldo.update_record(magcurr);
|
saldo.update_record(mag_curr);
|
||||||
if (mag.rewrite() != NOERR)
|
if (mag.rewrite() != NOERR)
|
||||||
ok = false;
|
ok = false;
|
||||||
pi.add_status();
|
pi.add_status();
|
||||||
@ -1280,11 +1278,10 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
TProgress_monitor pi(keys_clifo.items(), msg, false);
|
TProgress_monitor pi(keys_clifo.items(), msg, false);
|
||||||
|
|
||||||
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
|
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
|
||||||
curr_key != NULL; curr_key = (TToken_string*)keys_clifo.succ_item())
|
curr_key != nullptr; curr_key = (TToken_string*)keys_clifo.succ_item())
|
||||||
{
|
{
|
||||||
TSaldo_mag_clifo & saldo = (TSaldo_mag_clifo &)__saldi_mag_clifo[*curr_key];
|
TSaldo_mag_clifo & saldo = (TSaldo_mag_clifo &)__saldi_mag_clifo[*curr_key];
|
||||||
const TCodice_articolo& codart = saldo.codart();
|
const TCodice_articolo& codart = saldo.codart();
|
||||||
TArticolo_giacenza & art = cached_article_balances(codart);
|
|
||||||
|
|
||||||
saldo.putkey(clifomag_curr);
|
saldo.putkey(clifomag_curr);
|
||||||
if (clifomag.read(_isequal) != NOERR)
|
if (clifomag.read(_isequal) != NOERR)
|
||||||
@ -1295,18 +1292,22 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
|
|||||||
clifomag_curr.put(CLIFOGIAC_NRIGA, 999);
|
clifomag_curr.put(CLIFOGIAC_NRIGA, 999);
|
||||||
if (clifomag.read(_isgteq) == NOERR)
|
if (clifomag.read(_isgteq) == NOERR)
|
||||||
clifomag.prev();
|
clifomag.prev();
|
||||||
|
|
||||||
saldo.putkey(clifomag_curr);
|
saldo.putkey(clifomag_curr);
|
||||||
|
|
||||||
int nriga = 1;
|
int nriga = 1;
|
||||||
|
|
||||||
if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() &&
|
if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() &&
|
||||||
clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() &&
|
clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() &&
|
||||||
clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() &&
|
clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() &&
|
||||||
clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart() &&
|
clifomag_curr.get(CLIFOGIAC_INDSPED) == saldo.codindsp() &&
|
||||||
clifomag_curr.get(CLIFOGIAC_LIVELLO) == saldo.livello())
|
clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart())
|
||||||
nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1;
|
nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1;
|
||||||
clifomag_curr.put(CLIFOGIAC_NRIGA, nriga);
|
clifomag_curr.put(CLIFOGIAC_NRIGA, nriga);
|
||||||
clifomag.write();
|
|
||||||
|
const int err = clifomag.write();
|
||||||
|
|
||||||
|
CHECKD(err == NOERR, "Clifomag : Errore di write:", err);
|
||||||
clifomag.setkey(2);
|
clifomag.setkey(2);
|
||||||
}
|
}
|
||||||
saldo.update_record(clifomag_curr);
|
saldo.update_record(clifomag_curr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user