Patch level : 12.0 412

Files correlati     : ve2.exe md1.exe ve0.exe ve1.exe ve5.exe ve6.exe

Modificato il modo di aggiornare le giacenze di magazzino:
1) Viene bloccato il record di giacenza singolo.
2) l'aggiornamento dell'anagrafica non scrive più le giacenze, l'aggiornamento si può attivare premendo Shift-F12
3) l'aggiornamento dall'anagrafica di magazzino aggiorna solo i record cambiati di giacenza e di giacenza per cliente.

git-svn-id: svn://10.65.10.50/branches/R_10_00@23901 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
bonazzi 2017-07-02 21:56:07 +00:00
parent a250aef70a
commit 5ed80b3ffb
4 changed files with 982 additions and 844 deletions

View File

@ -25,7 +25,6 @@ class TMask_movmag : public TMask
real proposed_price(const char * codart, real quant,const char * causrig);
int _autorows;
TArray _old_qta;
int _check_giac_neg;
bool _shift_f12;
TMagazzini _magazzini;
@ -155,7 +154,6 @@ TMask_movmag::TMask_movmag(TMov_mag * m_m) : TMask("mg1100")
sm.field(F_DESDEP).enable(gd);
ss.enable_column(ss.cid2index(F_CODDEP),gd);
_autorows = prassid.get_int("AUTOROWS", "mg");
_check_giac_neg = prassid.get_int("CHECK_GIAC", "mg");
if (!prassid.get_bool("MOV_INDSPED", "mg"))
{
hide(F_INDSPED);
@ -360,6 +358,7 @@ bool TMask_movmag::notify_righe(TSheet_field& ss, int r, KEY key)
codcaus = ss.mask().get(F_CODCAUS);
const TCausale_magazzino cau(codcaus);
const int check_giac_neg = cau.get_int("I4");
if (check_giac_neg)
{
real giac = ss.sheet_mask().get_real(F_GIAC);

File diff suppressed because it is too large Load Diff

View File

@ -14,6 +14,7 @@
#include "anamag.h"
#include "mag.h"
#include "clifogiac.h"
#include "movmag.h"
#include "rmovmag.h"
@ -288,6 +289,100 @@ bool TArticolo::lock_and_prompt(word lockop)
return true;
}
bool TArticolo::unlock_giac(TRectype& magrec)
{
bool rv = false;
if (magrec.full())
{
TLocalisamfile mag(LF_MAG);
rv = mag.read(magrec, _isequal,_unlock) == NOERR;
}
return rv;
}
int TArticolo::lock_and_prompt_giac(TRectype& magrec, word lockop)
{
TLocalisamfile f(LF_MAG);
f.setkey(2);
int err = magrec.read(f, _isequal, lockop != _nolock ? _testandlock : _nolock);
if (err != NOERR)
{
TString mess;
if (err == _iskeyerr)
{
mess << TR("Il codice articolo '") << _codice << TR("' non e' valido");
TTimed_skipbox bbox((const char *)mess, 3);
bbox.run();
}
else
if (lockop != _nolock)
{
while (err == _islocked)
{
mess << TR("Il record di giacenza\ndell'articolo '") << _codice << TR(" anno ") << magrec.get_int(MAG_ANNOES) << TR(" magazzino ") << (const char *) magrec.get(MAG_CODMAG) << TR("' e' gia' usato da un altro programma.");
TTimed_skipbox bbox((const char *)mess, 1);
bbox.run();
err = magrec.read(f, _isequal, _testandlock);
}
}
}
return err;
}
bool TArticolo::unlock_giac_cf(TRectype& clifo_magrec)
{
bool rv = false;
if (clifo_magrec.full())
{
TLocalisamfile clifo_mag(LF_CLIFOGIAC);
rv = clifo_mag.read(clifo_magrec, _isequal,_unlock) == NOERR;
}
return rv;
}
int TArticolo::lock_and_prompt_giac_cf(TRectype& clifomagrec, word lockop)
{
TLocalisamfile f(LF_CLIFOGIAC);
f.setkey(2);
int err = clifomagrec.read(f, _isequal, lockop != _nolock ? _testandlock : _nolock);
if (err != NOERR)
{
TString mess;
if (err == _iskeyerr)
{
mess << TR("Il codice articolo '") << _codice << TR("' non e' valido");
TTimed_skipbox bbox((const char *)mess, 3);
bbox.run();
}
else
if (lockop != _nolock)
{
while (err == _islocked)
{
mess << TR("Il record di giacenza\ndell'articolo '") << _codice << TR(" anno ") << clifomagrec.get_int(CLIFOGIAC_ANNOES) << TR(" magazzino ")
<< ((clifomagrec.get(CLIFOGIAC_TIPOCF) == "C") ? TR(" Cliente -") : TR(" Fornitore -"))
<< clifomagrec.get_long(CLIFOGIAC_CODCF) << TR("' e' gia' usato da un altro programma.");
TTimed_skipbox bbox((const char *)mess, 2);
bbox.run();
err = clifomagrec.read(f,_isequal,_testandlock);
}
}
}
return err;
}
int TArticolo::find_um(const char* um, int from) const
{
return find(LF_UMART, UMART_UM, um, from);
@ -402,11 +497,13 @@ protected:
public:
TArticolo& art(const char* key) { return (TArticolo&)query(key); }
void discard_art(const char* key) { TRecord_cache::discard(key); }
TCache_articoli();
virtual ~TCache_articoli() { }
};
HIDDEN TCache_articoli __cache_articoli;
TCache_articoli::TCache_articoli()
: TRecord_cache(LF_ANAMAG, 1)
@ -415,9 +512,13 @@ TCache_articoli::TCache_articoli()
set_items_limit(257); // Numero primo!
}
void refresh_article(const char* codart)
{
__cache_articoli.discard_art(codart);
}
TArticolo& cached_article(const char* codart)
{
HIDDEN TCache_articoli __cache_articoli;
if (codart == NULL)
{
__cache_articoli.destroy();

View File

@ -2,6 +2,7 @@
// oggetto TMov_Mag , multirecord del movimento di magazzino
// funzione di ricostruzione saldi
#include <config.h>
#include <diction.h>
#include <progind.h>
#include <recset.h>
@ -596,22 +597,16 @@ bool TMov_mag::update_balances(bool lock)
const TRecord_array& b = body();
for (int i = b.last_row(); i > 0; i = b.pred_row(i)) if (causale(i).update_ultcos())
{
refresh_articolo(i);
const TRectype& rec = b[i];
TArticolo& art = articolo(i);
const real prezzo = art.convert_to_um(rec.get_real(RMOVMAG_PREZZO), NULL, rec.get(RMOVMAG_UM), false);
const long numreg = get_long(MOVMAG_NUMREG);
art.set_nuovo(false);
if (art.lock_and_prompt(lock ? _testandlock : _nolock))
{
const real prezzo = art.convert_to_um(rec.get_real(RMOVMAG_PREZZO), NULL, rec.get(RMOVMAG_UM), false);
const long numreg = get_long(MOVMAG_NUMREG);
art.update_ultcosti(prezzo,get_date(MOVMAG_DATACOMP), numreg, i);
art.rewrite();
}
else
{
if (lock)
art.unlock();
}
art.update_ultcosti(prezzo,get_date(MOVMAG_DATACOMP), numreg, i);
art.rewrite();
}
if (_saldi_mag.items() > 0)
@ -623,6 +618,7 @@ bool TMov_mag::update_balances(bool lock)
TString_array keys_mag;
_saldi_mag.get_keys(keys_mag);
keys_mag.sort();
int err = NOERR;
TString msg;
msg << TR("Aggiornamento saldi del movimento ") << get(MOVMAG_NUMREG)
@ -636,28 +632,25 @@ bool TMov_mag::update_balances(bool lock)
TArticolo_giacenza& art = cached_article_balances(codart);
const TCausale_magazzino& caus = cached_causale_magazzino(saldo.codcaus());
if (art.lock_and_prompt(lock ? _testandlock : _nolock))
giac_putkey(magcurr, saldo);
err = art.lock_and_prompt_giac(magcurr, lock ? _testandlock : _nolock);
if (err != NOERR)
{
TRecord_array& sld = art.mag(saldo.codes());
const int nriga = sld.rows() + 1;
giac_putkey(magcurr, saldo);
int err = mag.read();
if (err != NOERR)
{
TRecord_array& sld = art.mag(saldo.codes());
const int nriga = sld.rows() + 1;
giac_putkey(magcurr, saldo);
magcurr.put(MAG_NRIGA, nriga);
sld.add_row(magcurr);
err = mag.write();
CHECKD(err == NOERR, "Errore di write:" , err);
}
update_balances(magcurr, saldo, caus);
err = mag.rewrite();
if (err != NOERR)
updated_bal = false;
magcurr.put(MAG_NRIGA, nriga);
sld.add_row(magcurr);
err = mag.write();
CHECKD(err == NOERR, "Errore di write:" , err);
}
update_balances(magcurr, saldo, caus);
err = mag.rewrite();
if (err != NOERR)
updated_bal = false;
if (lock)
art.unlock();
}
if (lock)
art.unlock_giac(magcurr);
pi.add_status();
}
}
@ -672,43 +665,41 @@ bool TMov_mag::update_balances(bool lock)
_saldi_mag_clifo.get_keys(keys_clifo);
keys_clifo.sort();
int err = NOERR;
for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item();
curr_key != NULL; curr_key = (TToken_string*)keys_clifo.succ_item())
{
TSaldo_mag_clifo & saldo=(TSaldo_mag_clifo &)_saldi_mag_clifo[*curr_key];
const TCodice_articolo& codart = saldo.codart();
TArticolo_giacenza & art = cached_article_balances(saldo.codart());
if (art.lock_and_prompt(lock ? _testandlock : _nolock))
TArticolo_giacenza & art = cached_article_balances(codart);
giac_putkey_clifo(clifomag_curr, saldo);
err = art.lock_and_prompt_giac_cf(clifomag_curr, lock ? _testandlock : _nolock);
if (err != NOERR)
{
// non trovato: aggiungo
clifomag.setkey(1);
giac_putkey_clifo(clifomag_curr, saldo);
if (clifomag.read() != NOERR)
{
// non trovato: aggiungo
clifomag.setkey(1);
giac_putkey_clifo(clifomag_curr, saldo);
clifomag_curr.put(CLIFOGIAC_NRIGA, 999);
if (clifomag.read(_isgteq) == NOERR)
clifomag.prev();
int nriga = 1;
if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() &&
clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() &&
clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() &&
clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart() &&
clifomag_curr.get(CLIFOGIAC_LIVELLO ) == saldo.livello())
nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1;
giac_putkey_clifo(clifomag_curr, saldo);
clifomag_curr.put(CLIFOGIAC_NRIGA, nriga);
clifomag.write();
clifomag.setkey(2);
}
update_balances_clifo(clifomag_curr, saldo);
clifomag.rewrite();
clifomag_curr.put(CLIFOGIAC_NRIGA, 999);
if (clifomag.read(_isgteq) == NOERR)
clifomag.prev();
int nriga = 1;
if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() &&
clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() &&
clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() &&
clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart() &&
clifomag_curr.get(CLIFOGIAC_LIVELLO ) == saldo.livello())
nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1;
giac_putkey_clifo(clifomag_curr, saldo);
clifomag_curr.put(CLIFOGIAC_NRIGA, nriga);
clifomag.write();
}
update_balances_clifo(clifomag_curr, saldo);
clifomag.rewrite();
if (lock)
art.unlock();
}
if (lock)
art.unlock_giac_cf(clifomag_curr);
}
}
_saldi_mag.destroy();
@ -929,20 +920,34 @@ void reset_clifogiac(TRectype& rec, const TRectype& oldrec, bool closed)
rec.zero(CLIFOGIAC_ORDC);
rec.zero(CLIFOGIAC_VALORDC);
}
//if (closed) // Gestione che pare insensata
{
rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD));
rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN));
rec.put(CLIFOGIAC_DOTTM, oldrec.get(CLIFOGIAC_DOTTM));
}
/*
else
{
rec.zero(CLIFOGIAC_DOTOD);
rec.zero(CLIFOGIAC_DOTIN);
rec.zero(CLIFOGIAC_DOTTM);
}
*/
const bool preserve_dot = ini_get_bool(CONFIG_DITTA, "lv", "Aggcong") ||
ini_get_bool(CONFIG_DITTA, "mg", "GESMAG");
if (preserve_dot)
{
if (closed)
{
rec.add(CLIFOGIAC_DOTOD, oldrec.get_real(CLIFOGIAC_DOTOD));
rec.add(CLIFOGIAC_DOTIN, oldrec.get_real(CLIFOGIAC_DOTIN));
rec.add(CLIFOGIAC_DOTTM, oldrec.get_real(CLIFOGIAC_DOTTM));
}
}
else
{
if (closed)
{
rec.put(CLIFOGIAC_DOTOD, oldrec.get(CLIFOGIAC_DOTOD));
rec.put(CLIFOGIAC_DOTIN, oldrec.get(CLIFOGIAC_DOTIN));
rec.put(CLIFOGIAC_DOTTM, oldrec.get(CLIFOGIAC_DOTTM));
}
else
{
rec.zero(CLIFOGIAC_DOTOD);
rec.zero(CLIFOGIAC_DOTIN);
rec.zero(CLIFOGIAC_DOTTM);
}
}
}
else
{