Patch level : 12.0 1034

Files correlati     : ve0.exe

Commento :

Corretta l'autoevasione ordini

Interno

Da ggiornare anche il programma di esportazione bolle major
Da verificare i casi normali
This commit is contained in:
Alessandro Bonazzi 2021-02-19 02:04:41 +01:00
parent cce0c55a8c
commit 82ed71694b
2 changed files with 48 additions and 39 deletions

View File

@ -435,36 +435,41 @@ void TRiga_documento::update_orders(real qta, TToken_string & tipi, TToken_strin
for (int nrow = d.find_nrow(tiporiga, codart, storno); (qta_da_evadere > ZERO) && nrow > 0; nrow = d.find_nrow(tiporiga, codart, storno, nrow))
{
TRiga_documento & rdoc = d[nrow];
const TToken_string & rdoc_key = rdoc.get_rdoc_key();
if (!rdoc.is_evasa() || storno)
{
TToken_string rdoc_key = rdoc.get_rdoc_key();
real qta_evasa = qta_da_evadere;
bool riga_evasa = false;
if (storno)
{
const real & evaso = rdoc.qtaevasa();
if (qta_evasa > evaso)
if (get(RDOC_ORIGINAL_ROWS).find(rdoc_key) >= 0)
{
qta_evasa = evaso;
to_delete.add(rdoc_key);
}
else
{
const int pos = saved.find(rdoc_key);
const real & evaso = rdoc.qtaevasa();
if (pos >= 0)
if (qta_evasa > evaso)
{
real *q = (real *)saved_qta.objptr(pos);
if (q == nullptr)
evaded_qta.add(q = new real);
*q -= qta_evasa;
qta_evasa = evaso;
to_delete.add(rdoc_key);
}
else
{
const int pos = saved.find(rdoc_key);
if (pos >= 0)
{
real *q = (real *)saved_qta.objptr(pos);
if (q == nullptr)
evaded_qta.add(q = new real);
*q -= qta_evasa;
}
}
rdoc.sub(RDOC_QTAEVASA, qta_evasa);
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
qta_da_evadere -= qta_evasa;
}
rdoc.sub(RDOC_QTAEVASA, qta_evasa);
}
else
{
@ -472,7 +477,7 @@ void TRiga_documento::update_orders(real qta, TToken_string & tipi, TToken_strin
if (residuo <= qta_da_evadere)
{
if (i < ndocs - 1)
if (i < ndocs - 1 || d.find_nrow(tiporiga, codart, storno, nrow) >= 0)
qta_evasa = residuo;
riga_evasa = true;
}
@ -497,9 +502,9 @@ void TRiga_documento::update_orders(real qta, TToken_string & tipi, TToken_strin
evaded_qta.add(q = new real);
*q += qta_evasa;
}
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
qta_da_evadere -= qta_evasa;
}
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
qta_da_evadere -= qta_evasa;
}
}

View File

@ -3672,8 +3672,10 @@ void TDocumento::auto_evasione(const int nrow)
const TString key(k);
const TString4 tiporiga = key.left(2);
real qta_da_evadere = storno ? -qta : qta;
const TString40 codart(key.mid(2));
TString codart = key.mid(2, 28);
const TString original_rdoc_key = key.mid(30);
codart.rtrim();
if (codart.full())
{
const int year = get_date(DOC_DATADOC).year();
@ -3682,7 +3684,6 @@ void TDocumento::auto_evasione(const int nrow)
TLista_documenti docs;
TString_array evaded;
TArray evaded_qta;
TString_array to_delete;
int ndocs = docs.read('D', get_char(DOC_TIPOCF), get_long(DOC_CODCF),
year, tipi, stati, dadata, adata);
@ -3709,23 +3710,25 @@ void TDocumento::auto_evasione(const int nrow)
for (int nrow = d.find_nrow(tiporiga, codart, storno); (qta_da_evadere > ZERO) && nrow > 0; nrow = d.find_nrow(tiporiga, codart, storno, nrow))
{
TRiga_documento & rdoc = d[nrow];
const TToken_string & rdoc_key = rdoc.get_rdoc_key();
if (!rdoc.is_evasa() || storno)
{
TToken_string rdoc_key = rdoc.get_rdoc_key();
real qta_evasa = qta_da_evadere;
bool riga_evasa = false;
if (storno)
{
const real & evaso = rdoc.qtaevasa();
if (qta_evasa > evaso)
if (original_rdoc_key.find(rdoc_key) >= 0)
{
qta_evasa = evaso;
to_delete.add(rdoc_key);
const real & evaso = rdoc.qtaevasa();
if (qta_evasa > evaso)
qta_evasa = evaso;
rdoc.sub(RDOC_QTAEVASA, qta_evasa);
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
qta_da_evadere -= qta_evasa;
}
rdoc.sub(RDOC_QTAEVASA, qta_evasa);
}
else
{
@ -3733,14 +3736,14 @@ void TDocumento::auto_evasione(const int nrow)
if (residuo <= qta_da_evadere)
{
if (i < ndocs - 1)
if (i < ndocs - 1 || d.find_nrow(tiporiga, codart, storno, nrow) >= 0)
qta_evasa = residuo;
riga_evasa = true;
}
rdoc.add(RDOC_QTAEVASA, qta_evasa);
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
qta_da_evadere -= qta_evasa;
}
rdoc.put(RDOC_RIGAEVASA, riga_evasa);
qta_da_evadere -= qta_evasa;
}
}
}
@ -3764,17 +3767,18 @@ void TDocumento::auto_evasione(const int nrow)
if (codart.full())
{
real * qta = (real *)_qta_evasa_auto_changed.objptr(codart);
TString key(rdoc.tipo().codice());
key.rpad(2);
key << codart;
key.rpad(30);
key << rdoc.get(RDOC_ORIGINAL_ROWS);
real * qta = (real *)_qta_evasa_auto_changed.objptr(key);
real qta_da_stornare = (real &)_qta_evasa_auto[nrow];
if (qta == nullptr)
{
TString key = rdoc.tipo().codice();
key.rpad(2);
key << codart;
_qta_evasa_auto_changed.add(key, qta = new real);
}
*qta += qta_da_stornare;
_row_auto_cod_changed.set(nrow, true);
_auto_cod_modify_pend = true;