Correzioni per GF

git-svn-id: svn://10.65.10.50/branches/R_10_00@22739 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-10-26 08:30:22 +00:00
parent 22cbabbf36
commit aaeeb54314
5 changed files with 55 additions and 64 deletions

View File

@ -10,6 +10,5 @@ int main(int argc, char** argv)
case 2: db1300(argc, argv); break; // Implosione case 2: db1300(argc, argv); break; // Implosione
default: db1100(argc, argv); break; // Esplosione default: db1100(argc, argv); break; // Esplosione
} }
exit(0);
return 0; return 0;
} }

View File

@ -265,8 +265,8 @@ protected:
static void dist_header_handler(TPrinter& p); static void dist_header_handler(TPrinter& p);
static void dist_footer_handler(TPrinter& p); static void dist_footer_handler(TPrinter& p);
virtual bool validate(TForm_item &, TToken_string &); virtual bool validate(TForm_item &, TToken_string &);
void set_explosion_rows(TArray& exp_array); void set_explosion_rows(const TArray& exp_array);
real res2produce_by_father(TRiga_esplosione& re); real res2produce_by_father(const TRiga_esplosione& re) const;
public: public:
void print_explosion_rows(); void print_explosion_rows();
@ -485,17 +485,15 @@ void TArticolo_giacenza_static::calcola_ordinato_documento(TRectype& rec)
{ {
CHECK(rec.num() == LF_DOC, "E' necessario passare un record di LF_DOC"); CHECK(rec.num() == LF_DOC, "E' necessario passare un record di LF_DOC");
TRectype from(LF_RIGHEDOC), to(LF_RIGHEDOC); TRectype from(LF_RIGHEDOC);
from.put(RDOC_CODNUM, rec.get(DOC_CODNUM));
from.put(RDOC_ANNO, rec.get(DOC_ANNO));
from.put(RDOC_PROVV, rec.get(DOC_PROVV));
TString filter; TString filter;
int nkey = 1; int nkey = 1;
from.zero();
from.put(RDOC_CODNUM, rec.get(DOC_CODNUM));
from.put(RDOC_ANNO, rec.get(DOC_ANNO));
from.put(RDOC_PROVV, rec.get(DOC_PROVV));
// Se NDOC non è settato effettua il filtro su tutti i documenti di questa numerazione // Se NDOC non è settato effettua il filtro su tutti i documenti di questa numerazione
const long ndoc = rec.get_long(DOC_NDOC); const long ndoc = rec.get_long(DOC_NDOC);
if (ndoc > 0) if (ndoc > 0)
@ -509,25 +507,21 @@ void TArticolo_giacenza_static::calcola_ordinato_documento(TRectype& rec)
nkey = 2; nkey = 2;
from.put(RDOC_CODART, codice()); from.put(RDOC_CODART, codice());
} }
to = from;
TRelation rdoc(LF_RIGHEDOC); TRelation rdoc(LF_RIGHEDOC);
TCursor cur(&rdoc, filter, nkey, &from, &to); TCursor cur(&rdoc, filter, nkey, &from, &from);
const TRecnotype items = cur.items(); const TRecnotype items = cur.items();
if (items > 0) if (items > 0)
{ {
TWait_cursor hourglass;
cur.freeze(); cur.freeze();
TProgind *pi = NULL;
filter = TR("Calcolo ordinato fornitori in corso. "); filter = TR("Calcolo ordinato fornitori ");
filter << rec.get(DOC_CODNUM); filter << rec.get(DOC_CODNUM);
filter << "/" << codice(); filter << "/" << codice();
if (items > 10) TProgind *pi = items > 32 ? new TProgind(items, filter, FALSE, TRUE) : NULL;
pi = new TProgind(items, filter, FALSE, TRUE);
for (cur = 0L; cur.pos() < items; ++cur) for (cur = 0L; cur.pos() < items; ++cur)
{ {
// Calcola la qta residua // Calcola la qta residua
@ -700,7 +694,7 @@ real& TArticolo_giacenza_static::static_disp(_ParmStruct* p, const char * codmag
const int prev = ese.pred(atoi(annoes)); // Controllo anche l'anno precedente const int prev = ese.pred(atoi(annoes)); // Controllo anche l'anno precedente
if (prev > 0) if (prev > 0)
{ {
TString16 oldannoes; oldannoes.format("%04d", prev); TString4 oldannoes; oldannoes.format("%04d", prev);
const TRecord_array& oldrmag = mag(oldannoes); const TRecord_array& oldrmag = mag(oldannoes);
for (int i = find_mag(oldannoes, codmag, livello); i > 0; for (int i = find_mag(oldannoes, codmag, livello); i > 0;
i = find_mag(oldannoes, codmag, livello, i)) i = find_mag(oldannoes, codmag, livello, i))
@ -803,13 +797,12 @@ void TExplode_distinta_form::dist_footer_handler(TPrinter& pr)
bool TExplode_distinta_form::validate(TForm_item &f, TToken_string &t) bool TExplode_distinta_form::validate(TForm_item &f, TToken_string &t)
{ {
const TString16 subcommand(t.get(0)); // Sub-comandante Marcos const TString16 subcommand(t.get(0)); // Sub-comandante Marcos
if (subcommand != "_DISTINTA") if (subcommand != "_DISTINTA")
return TForm::validate(f, t); return TForm::validate(f, t);
const TString16 code(t.get(1)); // codice del messaggio const TString16 code(t.get(1)); // codice del messaggio
TString256 valore; TString256 valore;
TRiga_esplosione2print& re = (TRiga_esplosione2print&) _exploded_tree[_curr_row]; const TRiga_esplosione2print& re = (const TRiga_esplosione2print&) _exploded_tree[_curr_row];
const char tipo = re.tipo(); const char tipo = re.tipo();
if (code[0] != '_') if (code[0] != '_')
@ -989,7 +982,7 @@ bool TExplode_distinta_form::validate(TForm_item &f, TToken_string &t)
return true; return true;
} }
real TExplode_distinta_form::res2produce_by_father(TRiga_esplosione& re) real TExplode_distinta_form::res2produce_by_father(const TRiga_esplosione& re) const
{ {
real r; real r;
@ -1018,7 +1011,7 @@ real TExplode_distinta_form::res2produce_by_father(TRiga_esplosione& re)
pstr = re.father(fi); pstr = re.father(fi);
} }
TString16 codmag = _distinta.path_depth(pstr) < 1 ? (TString &)_d->mag() : (TString &)_p->_sl_mag; TString8 codmag = _distinta.path_depth(pstr) < 1 ? (TString &)_d->mag() : (TString &)_p->_sl_mag;
if (codmag.blank()) codmag = _d->mag(); if (codmag.blank()) codmag = _d->mag();
TString g; TString g;
@ -1034,18 +1027,14 @@ real TExplode_distinta_form::res2produce_by_father(TRiga_esplosione& re)
return r; return r;
} }
void TExplode_distinta_form::set_explosion_rows(TArray& exp_array) void TExplode_distinta_form::set_explosion_rows(const TArray& exp_array)
{ {
const int rows = exp_array.items(); TString noexplode_path("*****");
real r;
TString k;
TString noexplode_path("*****");
const bool dettagliata = _p->_advanced_val; const bool dettagliata = _p->_advanced_val;
const int rows = exp_array.items();
for (int i = 0; i < rows; i++) for (int i = 0; i < rows; i++)
{ {
TRiga_esplosione& re = (TRiga_esplosione&) exp_array[i]; const TRiga_esplosione& re = (const TRiga_esplosione&) exp_array[i];
const char tipo = re.tipo(); const char tipo = re.tipo();
const bool is_head = i == DIST_HEAD; const bool is_head = i == DIST_HEAD;
@ -1056,7 +1045,7 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
// Il livello di giacenza lo si prende dall'articolo distinta da esplodere // Il livello di giacenza lo si prende dall'articolo distinta da esplodere
// oppure dalla riga esplosione se non stiamo stampando la testata della distinta // oppure dalla riga esplosione se non stiamo stampando la testata della distinta
// il cod. esercizio e' calc. come sempre // il cod. esercizio e' calc. come sempre
TString codmag = is_head ? _d->mag() : re.mat_base() ? (const TString&)_p->_mb_mag : (const TString&)_p->_sl_mag; TString8 codmag = is_head ? _d->mag() : re.mat_base() ? (const TString&)_p->_mb_mag : (const TString&)_p->_sl_mag;
if (codmag.blank()) codmag = _d->mag(); if (codmag.blank()) codmag = _d->mag();
const TString& liv = is_head ? _d->liv() : re.giacenza(); const TString& liv = is_head ? _d->liv() : re.giacenza();
@ -1064,15 +1053,19 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
if (dettagliata && re.path().starts_with(noexplode_path)) if (dettagliata && re.path().starts_with(noexplode_path))
continue; continue;
else
if (_p->_fabbisogno && _p->_explosion == scalare) if (re.articolo() == "00.73.00.0010")
r = re.last_qta() * res2produce_by_father(re); // In UM locale... int cazzone = 1;
else
r = re.val() * res2produce_by_father(re); // In UM locale... real r = res2produce_by_father(re);
if (_p->_fabbisogno && _p->_explosion == scalare)
r *= re.last_qta(); // In UM locale...
else
r *= re.val(); // In UM locale...
if (dettagliata && tipo == 'A') if (dettagliata && tipo == 'A')
{ {
TArticolo_giacenza & art = TExplode_distinta_form::cache_articoli().art(re.articolo()); TArticolo_giacenza& art = TExplode_distinta_form::cache_articoli().art(re.articolo());
const valtype art_tipo = (valtype)art.get_int(ANAMAG_VALDIST); const valtype art_tipo = (valtype)art.get_int(ANAMAG_VALDIST);
if (art_tipo > no_val) if (art_tipo > no_val)
@ -1083,7 +1076,7 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
} }
} }
if (r == ZERO) if (r.is_zero())
{ {
if (_p->_fabbisogno) // Calcolo disponibilita' if (_p->_fabbisogno) // Calcolo disponibilita'
{ {
@ -1104,10 +1097,8 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
for (pos = _exploded_tree.items()-1; pos>=0; pos--) for (pos = _exploded_tree.items()-1; pos>=0; pos--)
{ {
r2p = (TRiga_esplosione2print *)_exploded_tree.objptr(pos); r2p = (TRiga_esplosione2print *)_exploded_tree.objptr(pos);
if (re.articolo() == r2p->articolo() && if (re.articolo() == r2p->articolo() && re.um() == r2p->um() &&
re.um() == r2p->um() && (re.giacenza() == r2p->giacenza()) && codmag == r2p->mag())
(re.giacenza() == r2p->giacenza()) &&
codmag == r2p->mag())
break; break;
} }
} }
@ -1117,7 +1108,7 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
r2p = new TRiga_esplosione2print(re, codmag); r2p = new TRiga_esplosione2print(re, codmag);
_exploded_tree.add(r2p,pos); _exploded_tree.add(r2p,pos);
} }
r2p->set_fabbisogno(r + r2p->fabbisogno()); r2p->set_fabbisogno(r + r2p->fabbisogno());
if (_p->_fabbisogno) // Calcolo disponibilita' if (_p->_fabbisogno) // Calcolo disponibilita'
@ -1152,8 +1143,8 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
} else { } else {
// Disponibilita, qta da ordinare e residuo vengono calcolati solo per le righe Articolo // Disponibilita, qta da ordinare e residuo vengono calcolati solo per le righe Articolo
real zero_ref(_p->_liv_attenzione == 'S' ? aaa.get_scmin(_p->_anno_es, codmag, liv) : ZERO); const real min_ref = _p->_liv_attenzione == 'S' ? aaa.get_scmin(_p->_anno_es, codmag, liv) : ZERO;
zero_ref = aaa.convert_to_um(zero_ref, re.um()); const real zero_ref = aaa.convert_to_um(min_ref, re.um());
real qta2order,disponib; real qta2order,disponib;
if (is_new) if (is_new)
@ -1176,11 +1167,13 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
else else
disponib -= r; disponib -= r;
if (disponib > zero_ref) if (disponib > zero_ref && r > ZERO) // Aggiunto r>0 il 28-09-2012 per GF
{ {
disponib -= zero_ref; disponib -= zero_ref;
qta2order = ZERO; qta2order = ZERO;
} else { }
else
{
qta2order = zero_ref - disponib; qta2order = zero_ref - disponib;
disponib = ZERO; disponib = ZERO;
} }
@ -1212,7 +1205,7 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
// Il valore lo calcola per qualsiasi tipo riga // Il valore lo calcola per qualsiasi tipo riga
if (_p->_valorization > no_val) if (_p->_valorization > no_val)
{ {
k = re.path(); // I nodi sono cachati con tutto il path in modo da essere univoci const TString k = re.path(); // I nodi sono cachati con tutto il path in modo da essere univoci
if (_valori.objptr(k) == NULL) if (_valori.objptr(k) == NULL)
r2p->set_unitary_value(ZERO); r2p->set_unitary_value(ZERO);
@ -1254,7 +1247,7 @@ void TExplode_distinta_form::explode_and_print()
if (!_distinta.set_root(_d->cod(), _d->um(), 1.0, _d->liv())) if (!_distinta.set_root(_d->cod(), _d->um(), 1.0, _d->liv()))
return; return;
TWait_cursor clepsy; TWait_cursor clepsy;
// Inizializza lo sfondo delle pagine normali se no col piffero che stampa la fincatura... // Inizializza lo sfondo delle pagine normali se no col piffero che stampa la fincatura...
@ -1262,11 +1255,7 @@ void TExplode_distinta_form::explode_and_print()
_distinta.restart(); _distinta.restart();
if (_distinta.goto_root()) if (_distinta.goto_root())
{ {
TArray explosion_array; // Reset delle righe in caso di dist separate o cambio periodo
TPrintrow p;
TString16 fi;
// Reset delle righe in caso di dist separate o cambio periodo
if (_p->_separate_dist if (_p->_separate_dist
|| (_p->_separate_giac && _d->cod() != __current_art) || (_p->_separate_giac && _d->cod() != __current_art)
|| (__current_period.ok() && _d->data_per() > __current_period)) || (__current_period.ok() && _d->data_per() > __current_period))
@ -1275,18 +1264,20 @@ void TExplode_distinta_form::explode_and_print()
__current_art = _d->cod(); __current_art = _d->cod();
__current_period = _d->data_per(); __current_period = _d->data_per();
TString16 fi;
if (_p->_vis_art) fi << 'A'; if (_p->_vis_art) fi << 'A';
if (_p->_vis_lav) fi << 'L'; if (_p->_vis_lav) fi << 'L';
if (_p->_vis_vir) fi << 'V'; if (_p->_vis_vir) fi << 'V';
if (_p->_vis_gho) fi << 'G'; if (_p->_vis_gho) fi << 'G';
TArray explosion_array;
_distinta.curr_code((TCodice_articolo& )_d->cod()); _distinta.curr_code((TCodice_articolo& )_d->cod());
_distinta.explode(explosion_array, _p->_explosion == mat_base, _p->_group_by, _distinta.explode(explosion_array, _p->_explosion == mat_base, _p->_group_by,
_p->_det_lev, fi, _p->_ordering); _p->_det_lev, fi, _p->_ordering);
// Dopo l'esplosione mette in testa all'array la riga di definizione della Distinta stessa: // Dopo l'esplosione mette in testa all'array la riga di definizione della Distinta stessa:
// codice + UM + Fabbisogno (sostanzialmente si tratta di un TRiga_esplosione) // codice + UM + Fabbisogno (sostanzialmente si tratta di un TRiga_esplosione)
explosion_array.insert(_d->head_obj(), 0); explosion_array.insert(_d->head_obj(), 0);
// Effettua la valorizzazione scorrendo i nodi... // Effettua la valorizzazione scorrendo i nodi...
if (_p->_valorization > no_val) if (_p->_valorization > no_val)
@ -1503,7 +1494,7 @@ bool TEsplosione_distinta_app::sheet_notify(TSheet_field& s, int r, KEY key)
{ {
if (key==(K_CTRL+K_INS)) if (key==(K_CTRL+K_INS))
{ {
TDate d(TODAY); const TDate d(TODAY);
TToken_string& t = s.row(r); TToken_string& t = s.row(r);
t.add(d.string(),s.cid2index(F_DATACONS)); t.add(d.string(),s.cid2index(F_DATACONS));
} }
@ -1517,7 +1508,7 @@ const int TEsplosione_distinta_app::date2period(const TDate& d)
for (i = 0; i<items; i++) for (i = 0; i<items; i++)
{ {
const TDate& limit = (TDate&)_date_array[i]; const TDate& limit = (const TDate&)_date_array[i];
if (d <= limit) if (d <= limit)
break; break;
} }
@ -1591,7 +1582,7 @@ bool TEsplosione_distinta_app::create()
open_files(LF_DOC, LF_RIGHEDOC, LF_INDSP, LF_CFVEN, LF_MAG, LF_STOMAG, LF_CODCORR, 0); open_files(LF_DOC, LF_RIGHEDOC, LF_INDSP, LF_CFVEN, LF_MAG, LF_STOMAG, LF_CODCORR, 0);
_mask = new TMask("db1100a"); _mask = new TMask("db1100a");
TSheet_field& sa = (TSheet_field&) _mask->field(F_SHEETART); TSheet_field& sa = _mask->sfield(F_SHEETART);
sa.sheet_mask().set_handler(F_QTA, check_articoli); sa.sheet_mask().set_handler(F_QTA, check_articoli);
sa.set_notify(sheet_notify); sa.set_notify(sheet_notify);
_mask->set(F_ARTICOLI, "X"); _mask->set(F_ARTICOLI, "X");

View File

@ -548,7 +548,7 @@ BEGIN
ITEM "Lin." ITEM "Lin."
ITEM "Mag." ITEM "Mag."
ITEM "Dep." ITEM "Dep."
ITEM "UM@3" ITEM "UM"
ITEM "Qta@12" ITEM "Qta@12"
ITEM "Descrizione@50" ITEM "Descrizione@50"
ITEM "Data cons.@12" ITEM "Data cons.@12"
@ -573,6 +573,7 @@ BEGIN
CHECKTYPE NORMAL CHECKTYPE NORMAL
MESSAGE EMPTY CLEAR,F_LIV1|CLEAR,F_LIV2|CLEAR,F_LIV3|CLEAR,F_LIV4 MESSAGE EMPTY CLEAR,F_LIV1|CLEAR,F_LIV2|CLEAR,F_LIV3|CLEAR,F_LIV4
MESSAGE ENABLE, F_LIV1 MESSAGE ENABLE, F_LIV1
ADD RUN DB0 -0
FLAGS "U" FLAGS "U"
END END

View File

@ -1861,7 +1861,7 @@ void TRiga_esplosione::init(const TDistinta_tree& tree, bool vis_ghost, const TR
_rdist = NULL; _rdist = NULL;
} }
const char * TRiga_esplosione::father(const char * types) const char * TRiga_esplosione::father(const char * types) const
{ {
TString & _tmp_path = get_tmp_string(); TString & _tmp_path = get_tmp_string();

View File

@ -422,7 +422,7 @@ public:
void set_path(const char* p) { _path = p;} void set_path(const char* p) { _path = p;}
void set_giacenza(const char* g) { _giac = g; } void set_giacenza(const char* g) { _giac = g; }
// cerca un padre o nonno di uno dei tipi passati // cerca un padre o nonno di uno dei tipi passati
const char* father(const char* types = NULL); const char* father(const char* types = NULL) const;
const real& last_qta() const { return _last_qta; } const real& last_qta() const { return _last_qta; }
const real& curr_qta() const { return _curr_qta; } const real& curr_qta() const { return _curr_qta; }
const TRectype* rdist_rec() const { return _rdist;} const TRectype* rdist_rec() const { return _rdist;}