Aumentata velocità scrittura ordini mrp e risolti problemi di uso concorsuale da parte di più utenti

git-svn-id: svn://10.65.10.50/branches/R_10_00@22864 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2013-05-27 12:06:39 +00:00
parent f5f80e6152
commit 8cac0d0ab6

View File

@ -1755,15 +1755,19 @@ TRisalita_mask::TRisalita_mask(TMRP_line* line, const TDate& fromdate, const TDa
ir ++; ir ++;
} }
has_internal_refs = TRUE; has_internal_refs = TRUE;
} else { }
else
{
add_gross_ref(*line,b); add_gross_ref(*line,b);
} }
} }
} }
} }
if (!has_internal_refs) if (!has_internal_refs)
{
for (int c = F_ARTICOLO; c < F_DOCANNODOC; c++) for (int c = F_ARTICOLO; c < F_DOCANNODOC; c++)
sf.delete_column(c); sf.delete_column(c);
}
add_total_rows(); add_total_rows();
set(F_FABB_LORDO,lordo.string()); set(F_FABB_LORDO,lordo.string());
@ -3199,12 +3203,14 @@ int TMatResPlanning::print_gross_ref(const TMRP_line& line, int bucket)
void TMatResPlanning::save_orders(TAssoc_array& docs) void TMatResPlanning::save_orders(TAssoc_array& docs)
{ {
TLocalisamfile docfile(LF_DOC);
TMatResMask& m = *_mask; TMatResMask& m = *_mask;
FOR_EACH_ASSOC_OBJECT(docs, hash, str, obj) FOR_EACH_ASSOC_OBJECT(docs, hash, str, obj)
{ {
TDocumento& doc = (TDocumento&)*obj; TDocumento& doc = (TDocumento&)*obj;
int err; int err = NOERR;
if (doc.get_long(DOC_NDOC)) if (doc.get_long(DOC_NDOC))
{ {
// riscrittura; elimina righe con qta zero // riscrittura; elimina righe con qta zero
@ -3220,42 +3226,41 @@ void TMatResPlanning::save_orders(TAssoc_array& docs)
nrows = doc.physical_rows(); nrows = doc.physical_rows();
if (nrows > 0) if (nrows > 0)
err = doc.rewrite(); err = doc.rewrite(docfile);
else else
{ {
/*
TDocumento d; TDocumento d;
if (d.read(doc, _isequal, _testandlock) == NOERR) if (d.read(doc, _isequal, _testandlock) == NOERR)
d.remove(); d.remove();
*/
doc.remove(docfile);
} }
} }
else else
{
// generazione // generazione
err = doc.write(); err = doc.write(docfile);
}
if (err != NOERR) if (err != NOERR)
doc.read(); // unlock {
// doc.read(); // unlock
doc.read(docfile, _isequal, _unlock); // 13/05/2013
}
} }
docs.destroy(); docs.destroy();
prefix().close_closeable_isamfiles();
} }
bool TMatResPlanning::ask_save() bool TMatResPlanning::ask_save()
{ {
TMatResMask& m = *_mask; TSheet_field& sf = _mask->sfield(F_ORDINI);
TSheet_field& sf = m.sfield(F_ORDINI);
int tot = 0; int tot = 0;
FOR_EACH_SHEET_ROW(sf, r, row) FOR_EACH_SHEET_ROW(sf, r, row)
{ tot += row->get_char(0) == 'X' ? 1 : 0;
TToken_string& riga = *row; return tot > 0 && yesno_box(FR("Si desiderano elaborare %d righe?"), tot);
if (*riga.get(0) == 'X')
tot++;
}
bool yes = TRUE;
if (tot > 0)
yes = yesno_box(FR("Si desidera elaborare %d righe?"), tot);
return yes;
} }
const TRectype* TMatResPlanning::irefs2rdoc(const TMRP_internalrefs& irefs) const const TRectype* TMatResPlanning::irefs2rdoc(const TMRP_internalrefs& irefs) const
@ -3358,7 +3363,7 @@ bool TMatResPlanning::emit_orders()
int ignore_duedate_lt_docdate = 0; int ignore_duedate_lt_docdate = 0;
if (!ask_save()) if (!ask_save())
return FALSE; return false;
TProgind pi(sf.items(), TR("Generazione ordini"), FALSE, TRUE); TProgind pi(sf.items(), TR("Generazione ordini"), FALSE, TRUE);
@ -3559,12 +3564,12 @@ bool TMatResPlanning::emit_orders()
} }
save_orders(docs); save_orders(docs);
if (sf.items()) if (!sf.empty())
{ {
FOR_EACH_SHEET_ROW_BACK(sf, r, row) FOR_EACH_SHEET_ROW_BACK(sf, r, row)
{ {
if ((*row->get(sf.cid2index(F_SELECTED)) == 'X' && *row->get(sf.cid2index(F_OK))=='X') if ((*row->get(sf.cid2index(F_SELECTED)) == 'X' && *row->get(sf.cid2index(F_OK))=='X') ||
|| real(row->get(sf.cid2index(F_QUANTITA))).is_zero()) real(row->get(sf.cid2index(F_QUANTITA))).is_zero())
{ {
if (m.get_bool(F_ALL_ORDERSCHANGES)) if (m.get_bool(F_ALL_ORDERSCHANGES))
row->add("", sf.cid2index(F_QUANTITA)); row->add("", sf.cid2index(F_QUANTITA));
@ -3574,9 +3579,9 @@ bool TMatResPlanning::emit_orders()
} }
sf.force_update(); sf.force_update();
} }
m.enable(DLG_SAVEREC, sf.items() > 0); m.enable(DLG_SAVEREC, !sf.empty());
return TRUE; return true;
} }
void TMatResPlanning::compute() void TMatResPlanning::compute()