From 82ed71694b7fa868bb25321f30f2bf28b2a79b63 Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Fri, 19 Feb 2021 02:04:41 +0100 Subject: [PATCH] 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 --- src/ve/velib02.cpp | 45 +++++++++++++++++++++++++-------------------- src/ve/velib03.cpp | 42 +++++++++++++++++++++++------------------- 2 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/ve/velib02.cpp b/src/ve/velib02.cpp index 1d1d0d9de..934445545 100755 --- a/src/ve/velib02.cpp +++ b/src/ve/velib02.cpp @@ -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; } } diff --git a/src/ve/velib03.cpp b/src/ve/velib03.cpp index a3587b60d..49c5ff5b6 100755 --- a/src/ve/velib03.cpp +++ b/src/ve/velib03.cpp @@ -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;